Handle arrays in schema type

This commit is contained in:
Simon Ser 2022-10-10 19:17:30 +02:00
parent 1bfe91634c
commit b8a10fdb3a
2 changed files with 25 additions and 3 deletions

View file

@ -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{}

View file

@ -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"`