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 {
if schema.Type != "" {
return schema.Type
switch {
case len(schema.Type) == 1:
return schema.Type[0]
case len(schema.Type) > 0:
return ""
}
var v interface{}

View file

@ -17,6 +17,25 @@ const (
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 {
// Core
Schema string `json:"$schema"`
@ -51,7 +70,7 @@ type Schema struct {
PropertyNames *Schema `json:"propertyNames"`
// Validation
Type Type `json:"type"`
Type TypeSet `json:"type"`
Enum []interface{} `json:"enum"`
Const interface{} `json:"const"`