Handle arrays in schema type
This commit is contained in:
parent
1bfe91634c
commit
b8a10fdb3a
2 changed files with 25 additions and 3 deletions
|
@ -52,8 +52,11 @@ func resolveRef(def *jsonschema.Schema, root *jsonschema.Schema) *jsonschema.Sch
|
||||||
}
|
}
|
||||||
|
|
||||||
func schemaType(schema *jsonschema.Schema) jsonschema.Type {
|
func schemaType(schema *jsonschema.Schema) jsonschema.Type {
|
||||||
if schema.Type != "" {
|
switch {
|
||||||
return schema.Type
|
case len(schema.Type) == 1:
|
||||||
|
return schema.Type[0]
|
||||||
|
case len(schema.Type) > 0:
|
||||||
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
var v interface{}
|
var v interface{}
|
||||||
|
|
21
schema.go
21
schema.go
|
@ -17,6 +17,25 @@ const (
|
||||||
TypeInteger Type = "integer"
|
TypeInteger Type = "integer"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type TypeSet []Type
|
||||||
|
|
||||||
|
func (ts *TypeSet) UnmarshalJSON(b []byte) error {
|
||||||
|
if b[0] == '[' {
|
||||||
|
type rawTypeSet TypeSet
|
||||||
|
out := (*rawTypeSet)(ts)
|
||||||
|
return json.Unmarshal(b, out)
|
||||||
|
} else {
|
||||||
|
var t Type
|
||||||
|
err := json.Unmarshal(b, &t)
|
||||||
|
if err != nil {
|
||||||
|
*ts = nil
|
||||||
|
} else {
|
||||||
|
*ts = []Type{t}
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
type Schema struct {
|
type Schema struct {
|
||||||
// Core
|
// Core
|
||||||
Schema string `json:"$schema"`
|
Schema string `json:"$schema"`
|
||||||
|
@ -51,7 +70,7 @@ type Schema struct {
|
||||||
PropertyNames *Schema `json:"propertyNames"`
|
PropertyNames *Schema `json:"propertyNames"`
|
||||||
|
|
||||||
// Validation
|
// Validation
|
||||||
Type Type `json:"type"`
|
Type TypeSet `json:"type"`
|
||||||
Enum []interface{} `json:"enum"`
|
Enum []interface{} `json:"enum"`
|
||||||
Const interface{} `json:"const"`
|
Const interface{} `json:"const"`
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue