2023-03-15 16:00:52 +00:00
|
|
|
// Copyright (c) HashiCorp, Inc.
|
|
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
|
2020-05-27 18:28:00 +00:00
|
|
|
package random
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
)
|
|
|
|
|
|
|
|
type ruleConstructor func(map[string]interface{}) (Rule, error)
|
|
|
|
|
|
|
|
var (
|
|
|
|
// defaultRuleNameMapping is the default mapping of HCL rule names to the appropriate rule constructor.
|
|
|
|
// Add to this map when adding a new Rule type to be recognized in HCL.
|
|
|
|
defaultRuleNameMapping = map[string]ruleConstructor{
|
|
|
|
"charset": ParseCharset,
|
|
|
|
}
|
|
|
|
|
|
|
|
defaultRegistry = Registry{
|
|
|
|
Rules: defaultRuleNameMapping,
|
|
|
|
}
|
|
|
|
)
|
|
|
|
|
|
|
|
// Registry of HCL rule names to rule constructors.
|
|
|
|
type Registry struct {
|
|
|
|
// Rules maps names of rules to a constructor for the rule
|
|
|
|
Rules map[string]ruleConstructor
|
|
|
|
}
|
|
|
|
|
|
|
|
func (r Registry) parseRule(ruleType string, ruleData map[string]interface{}) (rule Rule, err error) {
|
|
|
|
constructor, exists := r.Rules[ruleType]
|
|
|
|
if !exists {
|
|
|
|
return nil, fmt.Errorf("unrecognized rule type %s", ruleType)
|
|
|
|
}
|
|
|
|
|
|
|
|
rule, err = constructor(ruleData)
|
|
|
|
return rule, err
|
|
|
|
}
|