Documentation ¶
Overview ¶
Package jsonschema provides JSON Schema Draft 4 encoding support for schema.Schema. Note that the current implementation is incomlete, and not all FieldValidator types are yet supported. Custom validators are also not supported at the momenet.
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var ( // ErrNotImplemented is returned when the JSON schema encoding logic for a schema.FieldValidator has not (yet) // been implemented. ErrNotImplemented = errors.New("not implemented") )
Functions ¶
This section is empty.
Types ¶
type Encoder ¶
Encoder writes the JSON Schema representation of a schema.Schema to an output stream. Note that only a sub-set of the FieldValidator types in the schema package is supported at the moment. Custom validators are also not yet handled. Attempting to encode a schema containing such fields will result in a ErrNotImplemented error.
Example ¶
package main import ( "bytes" "encoding/json" "fmt" "math" "github.com/rs/rest-layer/schema" "github.com/rs/rest-layer/schema/encoding/jsonschema" ) func main() { s := schema.Schema{ Fields: schema.Fields{ "foo": schema.Field{ Required: true, // NOTE: Min is currently encoded as '0E+00', not '0'. Validator: &schema.Float{Boundaries: &schema.Boundaries{Min: 0, Max: math.Inf(1)}}, }, "bar": schema.Field{ Validator: &schema.Integer{}, }, "baz": schema.Field{ ReadOnly: true, Validator: &schema.String{MaxLen: 42}, }, "foobar": schema.Field{}, }, } b := new(bytes.Buffer) enc := jsonschema.NewEncoder(b) enc.Encode(&s) b2 := new(bytes.Buffer) json.Indent(b2, b.Bytes(), "", "| ") fmt.Println(b2) }
Output: { | "type": "object", | "additionalProperties": false, | "properties": { | | "bar": { | | | "type": "integer" | | }, | | "baz": { | | | "readOnly": true, | | | "type": "string", | | | "maxLength": 42 | | }, | | "foo": { | | | "type": "number", | | | "minimum": 0E+00 | | }, | | "foobar": {} | }, | "required": [ | | "foo" | ] }
func NewEncoder ¶
NewEncoder returns a new JSONSchema Encoder that writes to w.
Click to show internal directories.
Click to hide internal directories.