-
Notifications
You must be signed in to change notification settings - Fork 89
/
examples_test.go
114 lines (110 loc) · 3.08 KB
/
examples_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package jsonschema_test
import (
"encoding/json"
"fmt"
"time"
"github.com/invopop/jsonschema"
)
type SampleUser struct {
ID int `json:"id"`
Name string `json:"name" jsonschema:"title=the name,description=The name of a friend,example=joe,example=lucy,default=alex"`
Friends []int `json:"friends,omitempty" jsonschema_description:"The list of IDs, omitted when empty"`
Tags map[string]any `json:"tags,omitempty" jsonschema_extras:"a=b,foo=bar,foo=bar1"`
BirthDate time.Time `json:"birth_date,omitempty" jsonschema:"oneof_required=date"`
YearOfBirth string `json:"year_of_birth,omitempty" jsonschema:"oneof_required=year"`
Metadata any `json:"metadata,omitempty" jsonschema:"oneof_type=string;array"`
FavColor string `json:"fav_color,omitempty" jsonschema:"enum=red,enum=green,enum=blue"`
}
func ExampleReflect() {
s := jsonschema.Reflect(&SampleUser{})
data, err := json.MarshalIndent(s, "", " ")
if err != nil {
panic(err.Error())
}
fmt.Println(string(data))
// Output:
// {
// "$schema": "https://json-schema.org/draft/2020-12/schema",
// "$id": "https://github.com/invopop/jsonschema_test/sample-user",
// "$ref": "#/$defs/SampleUser",
// "$defs": {
// "SampleUser": {
// "oneOf": [
// {
// "required": [
// "birth_date"
// ],
// "title": "date"
// },
// {
// "required": [
// "year_of_birth"
// ],
// "title": "year"
// }
// ],
// "properties": {
// "id": {
// "type": "integer"
// },
// "name": {
// "type": "string",
// "title": "the name",
// "description": "The name of a friend",
// "default": "alex",
// "examples": [
// "joe",
// "lucy"
// ]
// },
// "friends": {
// "items": {
// "type": "integer"
// },
// "type": "array",
// "description": "The list of IDs, omitted when empty"
// },
// "tags": {
// "type": "object",
// "a": "b",
// "foo": [
// "bar",
// "bar1"
// ]
// },
// "birth_date": {
// "type": "string",
// "format": "date-time"
// },
// "year_of_birth": {
// "type": "string"
// },
// "metadata": {
// "oneOf": [
// {
// "type": "string"
// },
// {
// "type": "array"
// }
// ]
// },
// "fav_color": {
// "type": "string",
// "enum": [
// "red",
// "green",
// "blue"
// ]
// }
// },
// "additionalProperties": false,
// "type": "object",
// "required": [
// "id",
// "name"
// ]
// }
// }
// }
}