// oneOfValues returns a checker that coerces its value // using the supplied checker, then checks that the // resulting value is equal to one of the given values. func oneOfValues(checker schema.Checker, values []interface{}, path []string) (schema.Checker, error) { cvalues := make([]interface{}, len(values)) for i, v := range values { cv, err := checker.Coerce(v, nil) if err != nil { return nil, fmt.Errorf("%sinvalid enumerated value: %v", pathPrefix(path), err) } cvalues[i] = cv } return oneOfValuesC{ vals: cvalues, checker: checker, }, nil }
func assertFieldMap(c *gc.C, sch schema.Checker) { out, err := sch.Coerce(map[string]interface{}{"a": "A", "b": "B"}, aPath) c.Assert(err, gc.IsNil) c.Assert(out, gc.DeepEquals, map[string]interface{}{"a": "A", "b": "B", "c": "C"}) out, err = sch.Coerce(42, aPath) c.Assert(out, gc.IsNil) c.Assert(err, gc.ErrorMatches, "<path>: expected map, got int\\(42\\)") out, err = sch.Coerce(nil, aPath) c.Assert(out, gc.IsNil) c.Assert(err, gc.ErrorMatches, "<path>: expected map, got nothing") out, err = sch.Coerce(map[string]interface{}{"a": "A", "b": "C"}, aPath) c.Assert(out, gc.IsNil) c.Assert(err, gc.ErrorMatches, `<path>\.b: expected "B", got string\("C"\)`) out, err = sch.Coerce(map[string]interface{}{"b": "B"}, aPath) c.Assert(out, gc.IsNil) c.Assert(err, gc.ErrorMatches, `<path>\.a: expected "A", got nothing`) // b is optional out, err = sch.Coerce(map[string]interface{}{"a": "A"}, aPath) c.Assert(err, gc.IsNil) c.Assert(out, gc.DeepEquals, map[string]interface{}{"a": "A", "c": "C"}) // First path entry shouldn't have dots in an error message. out, err = sch.Coerce(map[string]bool{"a": true}, nil) c.Assert(out, gc.IsNil) c.Assert(err, gc.ErrorMatches, `a: expected "A", got bool\(true\)`) }