1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package spec
16
17 import (
18 "encoding/json"
19 "strings"
20
21 "github.com/go-openapi/jsonpointer"
22 "github.com/go-openapi/swag"
23 )
24
25
26 func QueryParam(name string) *Parameter {
27 return &Parameter{ParamProps: ParamProps{Name: name, In: "query"}}
28 }
29
30
31 func HeaderParam(name string) *Parameter {
32 return &Parameter{ParamProps: ParamProps{Name: name, In: "header", Required: true}}
33 }
34
35
36 func PathParam(name string) *Parameter {
37 return &Parameter{ParamProps: ParamProps{Name: name, In: "path", Required: true}}
38 }
39
40
41 func BodyParam(name string, schema *Schema) *Parameter {
42 return &Parameter{ParamProps: ParamProps{Name: name, In: "body", Schema: schema}}
43 }
44
45
46 func FormDataParam(name string) *Parameter {
47 return &Parameter{ParamProps: ParamProps{Name: name, In: "formData"}}
48 }
49
50
51 func FileParam(name string) *Parameter {
52 return &Parameter{ParamProps: ParamProps{Name: name, In: "formData"},
53 SimpleSchema: SimpleSchema{Type: "file"}}
54 }
55
56
57 func SimpleArrayParam(name, tpe, fmt string) *Parameter {
58 return &Parameter{ParamProps: ParamProps{Name: name},
59 SimpleSchema: SimpleSchema{Type: jsonArray, CollectionFormat: "csv",
60 Items: &Items{SimpleSchema: SimpleSchema{Type: tpe, Format: fmt}}}}
61 }
62
63
64 func ParamRef(uri string) *Parameter {
65 p := new(Parameter)
66 p.Ref = MustCreateRef(uri)
67 return p
68 }
69
70
71
72
73
74
75 type ParamProps struct {
76 Description string `json:"description,omitempty"`
77 Name string `json:"name,omitempty"`
78 In string `json:"in,omitempty"`
79 Required bool `json:"required,omitempty"`
80 Schema *Schema `json:"schema,omitempty"`
81 AllowEmptyValue bool `json:"allowEmptyValue,omitempty"`
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 type Parameter struct {
111 Refable
112 CommonValidations
113 SimpleSchema
114 VendorExtensible
115 ParamProps
116 }
117
118
119 func (p Parameter) JSONLookup(token string) (interface{}, error) {
120 if ex, ok := p.Extensions[token]; ok {
121 return &ex, nil
122 }
123 if token == jsonRef {
124 return &p.Ref, nil
125 }
126
127 r, _, err := jsonpointer.GetForToken(p.CommonValidations, token)
128 if err != nil && !strings.HasPrefix(err.Error(), "object has no field") {
129 return nil, err
130 }
131 if r != nil {
132 return r, nil
133 }
134 r, _, err = jsonpointer.GetForToken(p.SimpleSchema, token)
135 if err != nil && !strings.HasPrefix(err.Error(), "object has no field") {
136 return nil, err
137 }
138 if r != nil {
139 return r, nil
140 }
141 r, _, err = jsonpointer.GetForToken(p.ParamProps, token)
142 return r, err
143 }
144
145
146 func (p *Parameter) WithDescription(description string) *Parameter {
147 p.Description = description
148 return p
149 }
150
151
152 func (p *Parameter) Named(name string) *Parameter {
153 p.Name = name
154 return p
155 }
156
157
158 func (p *Parameter) WithLocation(in string) *Parameter {
159 p.In = in
160 return p
161 }
162
163
164 func (p *Parameter) Typed(tpe, format string) *Parameter {
165 p.Type = tpe
166 p.Format = format
167 return p
168 }
169
170
171 func (p *Parameter) CollectionOf(items *Items, format string) *Parameter {
172 p.Type = jsonArray
173 p.Items = items
174 p.CollectionFormat = format
175 return p
176 }
177
178
179 func (p *Parameter) WithDefault(defaultValue interface{}) *Parameter {
180 p.AsOptional()
181 p.Default = defaultValue
182 return p
183 }
184
185
186 func (p *Parameter) AllowsEmptyValues() *Parameter {
187 p.AllowEmptyValue = true
188 return p
189 }
190
191
192 func (p *Parameter) NoEmptyValues() *Parameter {
193 p.AllowEmptyValue = false
194 return p
195 }
196
197
198 func (p *Parameter) AsOptional() *Parameter {
199 p.Required = false
200 return p
201 }
202
203
204 func (p *Parameter) AsRequired() *Parameter {
205 if p.Default != nil {
206 return p
207 }
208 p.Required = true
209 return p
210 }
211
212
213 func (p *Parameter) WithMaxLength(max int64) *Parameter {
214 p.MaxLength = &max
215 return p
216 }
217
218
219 func (p *Parameter) WithMinLength(min int64) *Parameter {
220 p.MinLength = &min
221 return p
222 }
223
224
225 func (p *Parameter) WithPattern(pattern string) *Parameter {
226 p.Pattern = pattern
227 return p
228 }
229
230
231 func (p *Parameter) WithMultipleOf(number float64) *Parameter {
232 p.MultipleOf = &number
233 return p
234 }
235
236
237 func (p *Parameter) WithMaximum(max float64, exclusive bool) *Parameter {
238 p.Maximum = &max
239 p.ExclusiveMaximum = exclusive
240 return p
241 }
242
243
244 func (p *Parameter) WithMinimum(min float64, exclusive bool) *Parameter {
245 p.Minimum = &min
246 p.ExclusiveMinimum = exclusive
247 return p
248 }
249
250
251 func (p *Parameter) WithEnum(values ...interface{}) *Parameter {
252 p.Enum = append([]interface{}{}, values...)
253 return p
254 }
255
256
257 func (p *Parameter) WithMaxItems(size int64) *Parameter {
258 p.MaxItems = &size
259 return p
260 }
261
262
263 func (p *Parameter) WithMinItems(size int64) *Parameter {
264 p.MinItems = &size
265 return p
266 }
267
268
269 func (p *Parameter) UniqueValues() *Parameter {
270 p.UniqueItems = true
271 return p
272 }
273
274
275 func (p *Parameter) AllowDuplicates() *Parameter {
276 p.UniqueItems = false
277 return p
278 }
279
280
281 func (p *Parameter) WithValidations(val CommonValidations) *Parameter {
282 p.SetValidations(SchemaValidations{CommonValidations: val})
283 return p
284 }
285
286
287 func (p *Parameter) UnmarshalJSON(data []byte) error {
288 if err := json.Unmarshal(data, &p.CommonValidations); err != nil {
289 return err
290 }
291 if err := json.Unmarshal(data, &p.Refable); err != nil {
292 return err
293 }
294 if err := json.Unmarshal(data, &p.SimpleSchema); err != nil {
295 return err
296 }
297 if err := json.Unmarshal(data, &p.VendorExtensible); err != nil {
298 return err
299 }
300 return json.Unmarshal(data, &p.ParamProps)
301 }
302
303
304 func (p Parameter) MarshalJSON() ([]byte, error) {
305 b1, err := json.Marshal(p.CommonValidations)
306 if err != nil {
307 return nil, err
308 }
309 b2, err := json.Marshal(p.SimpleSchema)
310 if err != nil {
311 return nil, err
312 }
313 b3, err := json.Marshal(p.Refable)
314 if err != nil {
315 return nil, err
316 }
317 b4, err := json.Marshal(p.VendorExtensible)
318 if err != nil {
319 return nil, err
320 }
321 b5, err := json.Marshal(p.ParamProps)
322 if err != nil {
323 return nil, err
324 }
325 return swag.ConcatJSON(b3, b1, b2, b4, b5), nil
326 }
327
View as plain text