invopop / jsonschema

Generate JSON Schemas from Go types
MIT License
532 stars 87 forks source link

schema.Type should be string or []string #151

Open chancez opened 1 month ago

chancez commented 1 month ago

Types are not only singular, but can be an array of valid types: https://json-schema.org/understanding-json-schema/reference/type

The schema.Type field currently only supports a single type currently, but should also support an array of types if many are provided.

I'd be open to implementing this myself, but wanted feedback before opening a PR.

  1. Since this would be a breaking change, should I do it as a new field/struct tag?
  2. How should it be implemented? I could add a new type:
    type SchemaType struct {
    Type string
    Types []string
    }

Or the existing value could be changed from string to []string, and in the singular case, it would just be a list with a single element. When rendering to JSON it could render it conditionally to a single string or a list, based on how many entries there are.

samlown commented 2 weeks ago

This is a really tricky one to implement in a strictly typed language like Go. A possible solution as you suggest would be to create a new type like type Type []string and provide a set of methods around it for serialization to and from a single string or array, depending on the number of entries...