Documentation
¶
Overview ¶
Package golang generates go types including validations.
Parse a jsonschema.Index into a "main" package including imports, e.g. for saving to a file:
schema := []byte(`...`) idx, err := jsonschema.Parse(schema) if err != nil { panic(err) } src, err := PackageSrc(idx, "main") if err != nil { panic(err) } fmt.Printf("%s", src)
A schema definition named user:
schema := []byte(`{ "definitions": { "user": { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" }, }, "required": ["id"] } }`) idx, err := jsonschema.Parse(schema) if err != nil { panic(err) } src, err := Src(idx, "main") if err != nil { panic(err) }
Results in a User type with a Validate method:
type User struct { ID *string `json:"id,omitempty"` Name *string `json:"name,omitempty"` } func (t *User) Validate() error { if t.ID == nil { return errors.New("invalid user: missing id") } return nil }
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func PackageSrc ¶
func PackageSrc(idx *jsonschema.Index, pack string) ([]byte, error)
Generates go src for a package including imports and package
Example ¶
Generate a complete go package with all types and validations
schema := ` { "definitions": { "user": { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "roles": { "$ref": "#/definitions/roles" } } }, "roles": { "type": "array", "items": { "$ref": "#/definitions/role" } }, "role": { "type": "object", "properties": { "name": { "type": "string" } }, "required": ["name"] } } } ` // parse into index idx, err := jsonschema.Parse([]byte(schema)) if err != nil { panic(err) } // generate package source src, err := PackageSrc(idx, "main") if err != nil { panic(err) } fmt.Printf("%s", src)
Output: package main import ( "errors" ) type Role struct { Name *string `json:"name,omitempty"` } type Roles []Role type User struct { ID *string `json:"id,omitempty"` Name *string `json:"name,omitempty"` Roles *Roles `json:"roles,omitempty"` } func (t *Role) Validate() error { if t.Name == nil { return errors.New("invalid role: missing name") } return nil } func (t *Roles) Validate() error { for _, a := range *t { err := a.Validate() if err != nil { return err } } return nil } func (t *User) Validate() error { err := t.Roles.Validate() if err != nil { return err } return nil } func newString(s string) *string { return &s } func newInt(i int) *int { return &i } func newFloat(f float64) *float64 { return &f } func newBool(b bool) *bool { return &b }
func Src ¶
func Src(idx *jsonschema.Index) ([]byte, error)
Generates go src from an jsonschema.Index without imports and package
Example ¶
Generate source with all types and validations but no imports and package
schema := ` { "definitions": { "user": { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "roles": { "$ref": "#/definitions/roles" } } }, "roles": { "type": "array", "items": { "$ref": "#/definitions/role" } }, "role": { "type": "object", "properties": { "name": { "type": "string" } }, "required": ["name"] } } } ` // parse into index idx, err := jsonschema.Parse([]byte(schema)) if err != nil { panic(err) } // generate source src, err := Src(idx) if err != nil { panic(err) } fmt.Printf("%s", src)
Output: type Role struct { Name *string `json:"name,omitempty"` } type Roles []Role type User struct { ID *string `json:"id,omitempty"` Name *string `json:"name,omitempty"` Roles *Roles `json:"roles,omitempty"` } func (t *Role) Validate() error { if t.Name == nil { return errors.New("invalid role: missing name") } return nil } func (t *Roles) Validate() error { for _, a := range *t { err := a.Validate() if err != nil { return err } } return nil } func (t *User) Validate() error { err := t.Roles.Validate() if err != nil { return err } return nil } func newString(s string) *string { return &s } func newInt(i int) *int { return &i } func newFloat(f float64) *float64 { return &f } func newBool(b bool) *bool { return &b }
Types ¶
This section is empty.
Click to show internal directories.
Click to hide internal directories.