helper/schema: ValidateFunc support for maps

This commit is contained in:
Paul Hinze 2015-10-14 13:44:28 -05:00
parent bfc107f90e
commit 2a179d1065
2 changed files with 14 additions and 3 deletions

View File

@ -540,8 +540,8 @@ func (m schemaMap) InternalValidate(topSchemaMap schemaMap) error {
if v.ValidateFunc != nil { if v.ValidateFunc != nil {
switch v.Type { switch v.Type {
case TypeList, TypeSet, TypeMap: case TypeList, TypeSet:
return fmt.Errorf("ValidateFunc is only supported on primitives.") return fmt.Errorf("ValidateFunc is not yet supported on lists or sets.")
} }
} }
} }
@ -1118,6 +1118,17 @@ func (m schemaMap) validateMap(
} }
} }
if schema.ValidateFunc != nil {
validatableMap := make(map[string]interface{})
for _, raw := range raws {
for k, v := range raw.(map[string]interface{}) {
validatableMap[k] = v
}
}
return schema.ValidateFunc(validatableMap, k)
}
return nil, nil return nil, nil
} }

View File

@ -2903,7 +2903,7 @@ func TestSchemaMap_InternalValidate(t *testing.T) {
{ {
map[string]*Schema{ map[string]*Schema{
"foo": &Schema{ "foo": &Schema{
Type: TypeMap, Type: TypeSet,
Required: true, Required: true,
ValidateFunc: func(v interface{}, k string) (ws []string, es []error) { ValidateFunc: func(v interface{}, k string) (ws []string, es []error) {
return return