Skip to content

support for generating enum types #83

@chrisguiney

Description

@chrisguiney

Given an input like

{
  "$schema" : "http://json-schema.org/draft-04/schema#",
  "title" : "myObject",
  "type" : "object",
  "additionalProperties" : false,
  "properties" : {
    "type" : {
      "type" : "string",
      "enum" : [ "x", "y", "z" ],
      "default" : "x"
    }
}

this would currently get generated like

type MyObject {
    Type string `json:"type"`
}

It'd be really handy to generate a type for the enum, such as:

type MyObjectType string

const (
    MyObjectType_X  MyObjectType = "x"
    MyObjectType_Y = "y"
    MyObjectType_Z = "z"
)

type MyObject {
    Type MyObjectType `json:"type"`
}

Where MyObjectType would have a MarshalJSON/UnmarshalJSON that validated that the value was a valid MyObjectType, and produce an error if it was not.

If there's concerns about backwards compatibility, some additional niceties might be to keep the Type field as a string, but add validation to MarshalJSON/UnmarshalJSON to ensure it's a valid value, and error if it was not.

This is something I can probably dedicate a little bit of time into imlpementing, but I'm not sure what approach would be best in the eyes of the maintainer, or if there are other options I hadn't considered that may be desirable.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions