func (s *S) TestStringMap(c *C) { sch := schema.StringMap(schema.Int()) out, err := sch.Coerce(map[string]interface{}{"a": 1, "b": int8(2)}, aPath) c.Assert(err, IsNil) c.Assert(out, DeepEquals, map[string]interface{}{"a": int64(1), "b": int64(2)}) out, err = sch.Coerce(42, aPath) c.Assert(out, IsNil) c.Assert(err, ErrorMatches, "<path>: expected map, got 42") out, err = sch.Coerce(nil, aPath) c.Assert(out, IsNil) c.Assert(err, ErrorMatches, "<path>: expected map, got nothing") out, err = sch.Coerce(map[int]int{1: 1}, aPath) c.Assert(out, IsNil) c.Assert(err, ErrorMatches, "<path>: expected string, got 1") out, err = sch.Coerce(map[string]bool{"a": true}, aPath) c.Assert(out, IsNil) c.Assert(err, ErrorMatches, `<path>\.a: expected int, got true`) // First path entry shouldn't have dots in an error message. out, err = sch.Coerce(map[string]bool{"a": true}, nil) c.Assert(out, IsNil) c.Assert(err, ErrorMatches, `a: expected int, got true`) }
// limit: // optional: false // // In all input cases, the output is the fully specified interface // representation as seen in the mysql interface description above. func ifaceExpander(limit interface{}) schema.Checker { return ifaceExpC{limit} } type ifaceExpC struct { limit interface{} } var ( stringC = schema.String() mapC = schema.StringMap(schema.Any()) ) func (c ifaceExpC) Coerce(v interface{}, path []string) (newv interface{}, err error) { s, err := stringC.Coerce(v, path) if err == nil { newv = map[string]interface{}{ "interface": s, "limit": c.limit, "optional": false, "scope": string(ScopeGlobal), } return } v, err = mapC.Coerce(v, path)
} } return out, nil } var validTypes = map[string]reflect.Kind{ "string": reflect.String, "int": reflect.Int64, "boolean": reflect.Bool, "float": reflect.Float64, } var optionSchema = schema.FieldMap( schema.Fields{ "type": schema.OneOf(schema.Const("string"), schema.Const("int"), schema.Const("float"), schema.Const("boolean")), "default": schema.OneOf(schema.String(), schema.Int(), schema.Float(), schema.Bool()), "description": schema.String(), }, schema.Defaults{ "default": schema.Omit, "description": schema.Omit, }, ) var configSchema = schema.FieldMap( schema.Fields{ "options": schema.StringMap(optionSchema), }, nil, )