1// Copyright 2017 Google Inc. All Rights Reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//    http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15// THIS FILE IS AUTOMATICALLY GENERATED.
16
17package openapi_v2
18
19import (
20	"fmt"
21	"github.com/googleapis/gnostic/compiler"
22	"gopkg.in/yaml.v2"
23	"regexp"
24	"strings"
25)
26
27// Version returns the package name (and OpenAPI version).
28func Version() string {
29	return "openapi_v2"
30}
31
32// NewAdditionalPropertiesItem creates an object of type AdditionalPropertiesItem if possible, returning an error if not.
33func NewAdditionalPropertiesItem(in interface{}, context *compiler.Context) (*AdditionalPropertiesItem, error) {
34	errors := make([]error, 0)
35	x := &AdditionalPropertiesItem{}
36	matched := false
37	// Schema schema = 1;
38	{
39		m, ok := compiler.UnpackMap(in)
40		if ok {
41			// errors might be ok here, they mean we just don't have the right subtype
42			t, matchingError := NewSchema(m, compiler.NewContext("schema", context))
43			if matchingError == nil {
44				x.Oneof = &AdditionalPropertiesItem_Schema{Schema: t}
45				matched = true
46			} else {
47				errors = append(errors, matchingError)
48			}
49		}
50	}
51	// bool boolean = 2;
52	boolValue, ok := in.(bool)
53	if ok {
54		x.Oneof = &AdditionalPropertiesItem_Boolean{Boolean: boolValue}
55	}
56	if matched {
57		// since the oneof matched one of its possibilities, discard any matching errors
58		errors = make([]error, 0)
59	}
60	return x, compiler.NewErrorGroupOrNil(errors)
61}
62
63// NewAny creates an object of type Any if possible, returning an error if not.
64func NewAny(in interface{}, context *compiler.Context) (*Any, error) {
65	errors := make([]error, 0)
66	x := &Any{}
67	bytes, _ := yaml.Marshal(in)
68	x.Yaml = string(bytes)
69	return x, compiler.NewErrorGroupOrNil(errors)
70}
71
72// NewApiKeySecurity creates an object of type ApiKeySecurity if possible, returning an error if not.
73func NewApiKeySecurity(in interface{}, context *compiler.Context) (*ApiKeySecurity, error) {
74	errors := make([]error, 0)
75	x := &ApiKeySecurity{}
76	m, ok := compiler.UnpackMap(in)
77	if !ok {
78		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
79		errors = append(errors, compiler.NewError(context, message))
80	} else {
81		requiredKeys := []string{"in", "name", "type"}
82		missingKeys := compiler.MissingKeysInMap(m, requiredKeys)
83		if len(missingKeys) > 0 {
84			message := fmt.Sprintf("is missing required %s: %+v", compiler.PluralProperties(len(missingKeys)), strings.Join(missingKeys, ", "))
85			errors = append(errors, compiler.NewError(context, message))
86		}
87		allowedKeys := []string{"description", "in", "name", "type"}
88		allowedPatterns := []*regexp.Regexp{pattern0}
89		invalidKeys := compiler.InvalidKeysInMap(m, allowedKeys, allowedPatterns)
90		if len(invalidKeys) > 0 {
91			message := fmt.Sprintf("has invalid %s: %+v", compiler.PluralProperties(len(invalidKeys)), strings.Join(invalidKeys, ", "))
92			errors = append(errors, compiler.NewError(context, message))
93		}
94		// string type = 1;
95		v1 := compiler.MapValueForKey(m, "type")
96		if v1 != nil {
97			x.Type, ok = v1.(string)
98			if !ok {
99				message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v1, v1)
100				errors = append(errors, compiler.NewError(context, message))
101			}
102			// check for valid enum values
103			// [apiKey]
104			if ok && !compiler.StringArrayContainsValue([]string{"apiKey"}, x.Type) {
105				message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v1, v1)
106				errors = append(errors, compiler.NewError(context, message))
107			}
108		}
109		// string name = 2;
110		v2 := compiler.MapValueForKey(m, "name")
111		if v2 != nil {
112			x.Name, ok = v2.(string)
113			if !ok {
114				message := fmt.Sprintf("has unexpected value for name: %+v (%T)", v2, v2)
115				errors = append(errors, compiler.NewError(context, message))
116			}
117		}
118		// string in = 3;
119		v3 := compiler.MapValueForKey(m, "in")
120		if v3 != nil {
121			x.In, ok = v3.(string)
122			if !ok {
123				message := fmt.Sprintf("has unexpected value for in: %+v (%T)", v3, v3)
124				errors = append(errors, compiler.NewError(context, message))
125			}
126			// check for valid enum values
127			// [header query]
128			if ok && !compiler.StringArrayContainsValue([]string{"header", "query"}, x.In) {
129				message := fmt.Sprintf("has unexpected value for in: %+v (%T)", v3, v3)
130				errors = append(errors, compiler.NewError(context, message))
131			}
132		}
133		// string description = 4;
134		v4 := compiler.MapValueForKey(m, "description")
135		if v4 != nil {
136			x.Description, ok = v4.(string)
137			if !ok {
138				message := fmt.Sprintf("has unexpected value for description: %+v (%T)", v4, v4)
139				errors = append(errors, compiler.NewError(context, message))
140			}
141		}
142		// repeated NamedAny vendor_extension = 5;
143		// MAP: Any ^x-
144		x.VendorExtension = make([]*NamedAny, 0)
145		for _, item := range m {
146			k, ok := compiler.StringValue(item.Key)
147			if ok {
148				v := item.Value
149				if strings.HasPrefix(k, "x-") {
150					pair := &NamedAny{}
151					pair.Name = k
152					result := &Any{}
153					handled, resultFromExt, err := compiler.HandleExtension(context, v, k)
154					if handled {
155						if err != nil {
156							errors = append(errors, err)
157						} else {
158							bytes, _ := yaml.Marshal(v)
159							result.Yaml = string(bytes)
160							result.Value = resultFromExt
161							pair.Value = result
162						}
163					} else {
164						pair.Value, err = NewAny(v, compiler.NewContext(k, context))
165						if err != nil {
166							errors = append(errors, err)
167						}
168					}
169					x.VendorExtension = append(x.VendorExtension, pair)
170				}
171			}
172		}
173	}
174	return x, compiler.NewErrorGroupOrNil(errors)
175}
176
177// NewBasicAuthenticationSecurity creates an object of type BasicAuthenticationSecurity if possible, returning an error if not.
178func NewBasicAuthenticationSecurity(in interface{}, context *compiler.Context) (*BasicAuthenticationSecurity, error) {
179	errors := make([]error, 0)
180	x := &BasicAuthenticationSecurity{}
181	m, ok := compiler.UnpackMap(in)
182	if !ok {
183		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
184		errors = append(errors, compiler.NewError(context, message))
185	} else {
186		requiredKeys := []string{"type"}
187		missingKeys := compiler.MissingKeysInMap(m, requiredKeys)
188		if len(missingKeys) > 0 {
189			message := fmt.Sprintf("is missing required %s: %+v", compiler.PluralProperties(len(missingKeys)), strings.Join(missingKeys, ", "))
190			errors = append(errors, compiler.NewError(context, message))
191		}
192		allowedKeys := []string{"description", "type"}
193		allowedPatterns := []*regexp.Regexp{pattern0}
194		invalidKeys := compiler.InvalidKeysInMap(m, allowedKeys, allowedPatterns)
195		if len(invalidKeys) > 0 {
196			message := fmt.Sprintf("has invalid %s: %+v", compiler.PluralProperties(len(invalidKeys)), strings.Join(invalidKeys, ", "))
197			errors = append(errors, compiler.NewError(context, message))
198		}
199		// string type = 1;
200		v1 := compiler.MapValueForKey(m, "type")
201		if v1 != nil {
202			x.Type, ok = v1.(string)
203			if !ok {
204				message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v1, v1)
205				errors = append(errors, compiler.NewError(context, message))
206			}
207			// check for valid enum values
208			// [basic]
209			if ok && !compiler.StringArrayContainsValue([]string{"basic"}, x.Type) {
210				message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v1, v1)
211				errors = append(errors, compiler.NewError(context, message))
212			}
213		}
214		// string description = 2;
215		v2 := compiler.MapValueForKey(m, "description")
216		if v2 != nil {
217			x.Description, ok = v2.(string)
218			if !ok {
219				message := fmt.Sprintf("has unexpected value for description: %+v (%T)", v2, v2)
220				errors = append(errors, compiler.NewError(context, message))
221			}
222		}
223		// repeated NamedAny vendor_extension = 3;
224		// MAP: Any ^x-
225		x.VendorExtension = make([]*NamedAny, 0)
226		for _, item := range m {
227			k, ok := compiler.StringValue(item.Key)
228			if ok {
229				v := item.Value
230				if strings.HasPrefix(k, "x-") {
231					pair := &NamedAny{}
232					pair.Name = k
233					result := &Any{}
234					handled, resultFromExt, err := compiler.HandleExtension(context, v, k)
235					if handled {
236						if err != nil {
237							errors = append(errors, err)
238						} else {
239							bytes, _ := yaml.Marshal(v)
240							result.Yaml = string(bytes)
241							result.Value = resultFromExt
242							pair.Value = result
243						}
244					} else {
245						pair.Value, err = NewAny(v, compiler.NewContext(k, context))
246						if err != nil {
247							errors = append(errors, err)
248						}
249					}
250					x.VendorExtension = append(x.VendorExtension, pair)
251				}
252			}
253		}
254	}
255	return x, compiler.NewErrorGroupOrNil(errors)
256}
257
258// NewBodyParameter creates an object of type BodyParameter if possible, returning an error if not.
259func NewBodyParameter(in interface{}, context *compiler.Context) (*BodyParameter, error) {
260	errors := make([]error, 0)
261	x := &BodyParameter{}
262	m, ok := compiler.UnpackMap(in)
263	if !ok {
264		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
265		errors = append(errors, compiler.NewError(context, message))
266	} else {
267		requiredKeys := []string{"in", "name", "schema"}
268		missingKeys := compiler.MissingKeysInMap(m, requiredKeys)
269		if len(missingKeys) > 0 {
270			message := fmt.Sprintf("is missing required %s: %+v", compiler.PluralProperties(len(missingKeys)), strings.Join(missingKeys, ", "))
271			errors = append(errors, compiler.NewError(context, message))
272		}
273		allowedKeys := []string{"description", "in", "name", "required", "schema"}
274		allowedPatterns := []*regexp.Regexp{pattern0}
275		invalidKeys := compiler.InvalidKeysInMap(m, allowedKeys, allowedPatterns)
276		if len(invalidKeys) > 0 {
277			message := fmt.Sprintf("has invalid %s: %+v", compiler.PluralProperties(len(invalidKeys)), strings.Join(invalidKeys, ", "))
278			errors = append(errors, compiler.NewError(context, message))
279		}
280		// string description = 1;
281		v1 := compiler.MapValueForKey(m, "description")
282		if v1 != nil {
283			x.Description, ok = v1.(string)
284			if !ok {
285				message := fmt.Sprintf("has unexpected value for description: %+v (%T)", v1, v1)
286				errors = append(errors, compiler.NewError(context, message))
287			}
288		}
289		// string name = 2;
290		v2 := compiler.MapValueForKey(m, "name")
291		if v2 != nil {
292			x.Name, ok = v2.(string)
293			if !ok {
294				message := fmt.Sprintf("has unexpected value for name: %+v (%T)", v2, v2)
295				errors = append(errors, compiler.NewError(context, message))
296			}
297		}
298		// string in = 3;
299		v3 := compiler.MapValueForKey(m, "in")
300		if v3 != nil {
301			x.In, ok = v3.(string)
302			if !ok {
303				message := fmt.Sprintf("has unexpected value for in: %+v (%T)", v3, v3)
304				errors = append(errors, compiler.NewError(context, message))
305			}
306			// check for valid enum values
307			// [body]
308			if ok && !compiler.StringArrayContainsValue([]string{"body"}, x.In) {
309				message := fmt.Sprintf("has unexpected value for in: %+v (%T)", v3, v3)
310				errors = append(errors, compiler.NewError(context, message))
311			}
312		}
313		// bool required = 4;
314		v4 := compiler.MapValueForKey(m, "required")
315		if v4 != nil {
316			x.Required, ok = v4.(bool)
317			if !ok {
318				message := fmt.Sprintf("has unexpected value for required: %+v (%T)", v4, v4)
319				errors = append(errors, compiler.NewError(context, message))
320			}
321		}
322		// Schema schema = 5;
323		v5 := compiler.MapValueForKey(m, "schema")
324		if v5 != nil {
325			var err error
326			x.Schema, err = NewSchema(v5, compiler.NewContext("schema", context))
327			if err != nil {
328				errors = append(errors, err)
329			}
330		}
331		// repeated NamedAny vendor_extension = 6;
332		// MAP: Any ^x-
333		x.VendorExtension = make([]*NamedAny, 0)
334		for _, item := range m {
335			k, ok := compiler.StringValue(item.Key)
336			if ok {
337				v := item.Value
338				if strings.HasPrefix(k, "x-") {
339					pair := &NamedAny{}
340					pair.Name = k
341					result := &Any{}
342					handled, resultFromExt, err := compiler.HandleExtension(context, v, k)
343					if handled {
344						if err != nil {
345							errors = append(errors, err)
346						} else {
347							bytes, _ := yaml.Marshal(v)
348							result.Yaml = string(bytes)
349							result.Value = resultFromExt
350							pair.Value = result
351						}
352					} else {
353						pair.Value, err = NewAny(v, compiler.NewContext(k, context))
354						if err != nil {
355							errors = append(errors, err)
356						}
357					}
358					x.VendorExtension = append(x.VendorExtension, pair)
359				}
360			}
361		}
362	}
363	return x, compiler.NewErrorGroupOrNil(errors)
364}
365
366// NewContact creates an object of type Contact if possible, returning an error if not.
367func NewContact(in interface{}, context *compiler.Context) (*Contact, error) {
368	errors := make([]error, 0)
369	x := &Contact{}
370	m, ok := compiler.UnpackMap(in)
371	if !ok {
372		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
373		errors = append(errors, compiler.NewError(context, message))
374	} else {
375		allowedKeys := []string{"email", "name", "url"}
376		allowedPatterns := []*regexp.Regexp{pattern0}
377		invalidKeys := compiler.InvalidKeysInMap(m, allowedKeys, allowedPatterns)
378		if len(invalidKeys) > 0 {
379			message := fmt.Sprintf("has invalid %s: %+v", compiler.PluralProperties(len(invalidKeys)), strings.Join(invalidKeys, ", "))
380			errors = append(errors, compiler.NewError(context, message))
381		}
382		// string name = 1;
383		v1 := compiler.MapValueForKey(m, "name")
384		if v1 != nil {
385			x.Name, ok = v1.(string)
386			if !ok {
387				message := fmt.Sprintf("has unexpected value for name: %+v (%T)", v1, v1)
388				errors = append(errors, compiler.NewError(context, message))
389			}
390		}
391		// string url = 2;
392		v2 := compiler.MapValueForKey(m, "url")
393		if v2 != nil {
394			x.Url, ok = v2.(string)
395			if !ok {
396				message := fmt.Sprintf("has unexpected value for url: %+v (%T)", v2, v2)
397				errors = append(errors, compiler.NewError(context, message))
398			}
399		}
400		// string email = 3;
401		v3 := compiler.MapValueForKey(m, "email")
402		if v3 != nil {
403			x.Email, ok = v3.(string)
404			if !ok {
405				message := fmt.Sprintf("has unexpected value for email: %+v (%T)", v3, v3)
406				errors = append(errors, compiler.NewError(context, message))
407			}
408		}
409		// repeated NamedAny vendor_extension = 4;
410		// MAP: Any ^x-
411		x.VendorExtension = make([]*NamedAny, 0)
412		for _, item := range m {
413			k, ok := compiler.StringValue(item.Key)
414			if ok {
415				v := item.Value
416				if strings.HasPrefix(k, "x-") {
417					pair := &NamedAny{}
418					pair.Name = k
419					result := &Any{}
420					handled, resultFromExt, err := compiler.HandleExtension(context, v, k)
421					if handled {
422						if err != nil {
423							errors = append(errors, err)
424						} else {
425							bytes, _ := yaml.Marshal(v)
426							result.Yaml = string(bytes)
427							result.Value = resultFromExt
428							pair.Value = result
429						}
430					} else {
431						pair.Value, err = NewAny(v, compiler.NewContext(k, context))
432						if err != nil {
433							errors = append(errors, err)
434						}
435					}
436					x.VendorExtension = append(x.VendorExtension, pair)
437				}
438			}
439		}
440	}
441	return x, compiler.NewErrorGroupOrNil(errors)
442}
443
444// NewDefault creates an object of type Default if possible, returning an error if not.
445func NewDefault(in interface{}, context *compiler.Context) (*Default, error) {
446	errors := make([]error, 0)
447	x := &Default{}
448	m, ok := compiler.UnpackMap(in)
449	if !ok {
450		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
451		errors = append(errors, compiler.NewError(context, message))
452	} else {
453		// repeated NamedAny additional_properties = 1;
454		// MAP: Any
455		x.AdditionalProperties = make([]*NamedAny, 0)
456		for _, item := range m {
457			k, ok := compiler.StringValue(item.Key)
458			if ok {
459				v := item.Value
460				pair := &NamedAny{}
461				pair.Name = k
462				result := &Any{}
463				handled, resultFromExt, err := compiler.HandleExtension(context, v, k)
464				if handled {
465					if err != nil {
466						errors = append(errors, err)
467					} else {
468						bytes, _ := yaml.Marshal(v)
469						result.Yaml = string(bytes)
470						result.Value = resultFromExt
471						pair.Value = result
472					}
473				} else {
474					pair.Value, err = NewAny(v, compiler.NewContext(k, context))
475					if err != nil {
476						errors = append(errors, err)
477					}
478				}
479				x.AdditionalProperties = append(x.AdditionalProperties, pair)
480			}
481		}
482	}
483	return x, compiler.NewErrorGroupOrNil(errors)
484}
485
486// NewDefinitions creates an object of type Definitions if possible, returning an error if not.
487func NewDefinitions(in interface{}, context *compiler.Context) (*Definitions, error) {
488	errors := make([]error, 0)
489	x := &Definitions{}
490	m, ok := compiler.UnpackMap(in)
491	if !ok {
492		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
493		errors = append(errors, compiler.NewError(context, message))
494	} else {
495		// repeated NamedSchema additional_properties = 1;
496		// MAP: Schema
497		x.AdditionalProperties = make([]*NamedSchema, 0)
498		for _, item := range m {
499			k, ok := compiler.StringValue(item.Key)
500			if ok {
501				v := item.Value
502				pair := &NamedSchema{}
503				pair.Name = k
504				var err error
505				pair.Value, err = NewSchema(v, compiler.NewContext(k, context))
506				if err != nil {
507					errors = append(errors, err)
508				}
509				x.AdditionalProperties = append(x.AdditionalProperties, pair)
510			}
511		}
512	}
513	return x, compiler.NewErrorGroupOrNil(errors)
514}
515
516// NewDocument creates an object of type Document if possible, returning an error if not.
517func NewDocument(in interface{}, context *compiler.Context) (*Document, error) {
518	errors := make([]error, 0)
519	x := &Document{}
520	m, ok := compiler.UnpackMap(in)
521	if !ok {
522		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
523		errors = append(errors, compiler.NewError(context, message))
524	} else {
525		requiredKeys := []string{"info", "paths", "swagger"}
526		missingKeys := compiler.MissingKeysInMap(m, requiredKeys)
527		if len(missingKeys) > 0 {
528			message := fmt.Sprintf("is missing required %s: %+v", compiler.PluralProperties(len(missingKeys)), strings.Join(missingKeys, ", "))
529			errors = append(errors, compiler.NewError(context, message))
530		}
531		allowedKeys := []string{"basePath", "consumes", "definitions", "externalDocs", "host", "info", "parameters", "paths", "produces", "responses", "schemes", "security", "securityDefinitions", "swagger", "tags"}
532		allowedPatterns := []*regexp.Regexp{pattern0}
533		invalidKeys := compiler.InvalidKeysInMap(m, allowedKeys, allowedPatterns)
534		if len(invalidKeys) > 0 {
535			message := fmt.Sprintf("has invalid %s: %+v", compiler.PluralProperties(len(invalidKeys)), strings.Join(invalidKeys, ", "))
536			errors = append(errors, compiler.NewError(context, message))
537		}
538		// string swagger = 1;
539		v1 := compiler.MapValueForKey(m, "swagger")
540		if v1 != nil {
541			x.Swagger, ok = v1.(string)
542			if !ok {
543				message := fmt.Sprintf("has unexpected value for swagger: %+v (%T)", v1, v1)
544				errors = append(errors, compiler.NewError(context, message))
545			}
546			// check for valid enum values
547			// [2.0]
548			if ok && !compiler.StringArrayContainsValue([]string{"2.0"}, x.Swagger) {
549				message := fmt.Sprintf("has unexpected value for swagger: %+v (%T)", v1, v1)
550				errors = append(errors, compiler.NewError(context, message))
551			}
552		}
553		// Info info = 2;
554		v2 := compiler.MapValueForKey(m, "info")
555		if v2 != nil {
556			var err error
557			x.Info, err = NewInfo(v2, compiler.NewContext("info", context))
558			if err != nil {
559				errors = append(errors, err)
560			}
561		}
562		// string host = 3;
563		v3 := compiler.MapValueForKey(m, "host")
564		if v3 != nil {
565			x.Host, ok = v3.(string)
566			if !ok {
567				message := fmt.Sprintf("has unexpected value for host: %+v (%T)", v3, v3)
568				errors = append(errors, compiler.NewError(context, message))
569			}
570		}
571		// string base_path = 4;
572		v4 := compiler.MapValueForKey(m, "basePath")
573		if v4 != nil {
574			x.BasePath, ok = v4.(string)
575			if !ok {
576				message := fmt.Sprintf("has unexpected value for basePath: %+v (%T)", v4, v4)
577				errors = append(errors, compiler.NewError(context, message))
578			}
579		}
580		// repeated string schemes = 5;
581		v5 := compiler.MapValueForKey(m, "schemes")
582		if v5 != nil {
583			v, ok := v5.([]interface{})
584			if ok {
585				x.Schemes = compiler.ConvertInterfaceArrayToStringArray(v)
586			} else {
587				message := fmt.Sprintf("has unexpected value for schemes: %+v (%T)", v5, v5)
588				errors = append(errors, compiler.NewError(context, message))
589			}
590			// check for valid enum values
591			// [http https ws wss]
592			if ok && !compiler.StringArrayContainsValues([]string{"http", "https", "ws", "wss"}, x.Schemes) {
593				message := fmt.Sprintf("has unexpected value for schemes: %+v", v5)
594				errors = append(errors, compiler.NewError(context, message))
595			}
596		}
597		// repeated string consumes = 6;
598		v6 := compiler.MapValueForKey(m, "consumes")
599		if v6 != nil {
600			v, ok := v6.([]interface{})
601			if ok {
602				x.Consumes = compiler.ConvertInterfaceArrayToStringArray(v)
603			} else {
604				message := fmt.Sprintf("has unexpected value for consumes: %+v (%T)", v6, v6)
605				errors = append(errors, compiler.NewError(context, message))
606			}
607		}
608		// repeated string produces = 7;
609		v7 := compiler.MapValueForKey(m, "produces")
610		if v7 != nil {
611			v, ok := v7.([]interface{})
612			if ok {
613				x.Produces = compiler.ConvertInterfaceArrayToStringArray(v)
614			} else {
615				message := fmt.Sprintf("has unexpected value for produces: %+v (%T)", v7, v7)
616				errors = append(errors, compiler.NewError(context, message))
617			}
618		}
619		// Paths paths = 8;
620		v8 := compiler.MapValueForKey(m, "paths")
621		if v8 != nil {
622			var err error
623			x.Paths, err = NewPaths(v8, compiler.NewContext("paths", context))
624			if err != nil {
625				errors = append(errors, err)
626			}
627		}
628		// Definitions definitions = 9;
629		v9 := compiler.MapValueForKey(m, "definitions")
630		if v9 != nil {
631			var err error
632			x.Definitions, err = NewDefinitions(v9, compiler.NewContext("definitions", context))
633			if err != nil {
634				errors = append(errors, err)
635			}
636		}
637		// ParameterDefinitions parameters = 10;
638		v10 := compiler.MapValueForKey(m, "parameters")
639		if v10 != nil {
640			var err error
641			x.Parameters, err = NewParameterDefinitions(v10, compiler.NewContext("parameters", context))
642			if err != nil {
643				errors = append(errors, err)
644			}
645		}
646		// ResponseDefinitions responses = 11;
647		v11 := compiler.MapValueForKey(m, "responses")
648		if v11 != nil {
649			var err error
650			x.Responses, err = NewResponseDefinitions(v11, compiler.NewContext("responses", context))
651			if err != nil {
652				errors = append(errors, err)
653			}
654		}
655		// repeated SecurityRequirement security = 12;
656		v12 := compiler.MapValueForKey(m, "security")
657		if v12 != nil {
658			// repeated SecurityRequirement
659			x.Security = make([]*SecurityRequirement, 0)
660			a, ok := v12.([]interface{})
661			if ok {
662				for _, item := range a {
663					y, err := NewSecurityRequirement(item, compiler.NewContext("security", context))
664					if err != nil {
665						errors = append(errors, err)
666					}
667					x.Security = append(x.Security, y)
668				}
669			}
670		}
671		// SecurityDefinitions security_definitions = 13;
672		v13 := compiler.MapValueForKey(m, "securityDefinitions")
673		if v13 != nil {
674			var err error
675			x.SecurityDefinitions, err = NewSecurityDefinitions(v13, compiler.NewContext("securityDefinitions", context))
676			if err != nil {
677				errors = append(errors, err)
678			}
679		}
680		// repeated Tag tags = 14;
681		v14 := compiler.MapValueForKey(m, "tags")
682		if v14 != nil {
683			// repeated Tag
684			x.Tags = make([]*Tag, 0)
685			a, ok := v14.([]interface{})
686			if ok {
687				for _, item := range a {
688					y, err := NewTag(item, compiler.NewContext("tags", context))
689					if err != nil {
690						errors = append(errors, err)
691					}
692					x.Tags = append(x.Tags, y)
693				}
694			}
695		}
696		// ExternalDocs external_docs = 15;
697		v15 := compiler.MapValueForKey(m, "externalDocs")
698		if v15 != nil {
699			var err error
700			x.ExternalDocs, err = NewExternalDocs(v15, compiler.NewContext("externalDocs", context))
701			if err != nil {
702				errors = append(errors, err)
703			}
704		}
705		// repeated NamedAny vendor_extension = 16;
706		// MAP: Any ^x-
707		x.VendorExtension = make([]*NamedAny, 0)
708		for _, item := range m {
709			k, ok := compiler.StringValue(item.Key)
710			if ok {
711				v := item.Value
712				if strings.HasPrefix(k, "x-") {
713					pair := &NamedAny{}
714					pair.Name = k
715					result := &Any{}
716					handled, resultFromExt, err := compiler.HandleExtension(context, v, k)
717					if handled {
718						if err != nil {
719							errors = append(errors, err)
720						} else {
721							bytes, _ := yaml.Marshal(v)
722							result.Yaml = string(bytes)
723							result.Value = resultFromExt
724							pair.Value = result
725						}
726					} else {
727						pair.Value, err = NewAny(v, compiler.NewContext(k, context))
728						if err != nil {
729							errors = append(errors, err)
730						}
731					}
732					x.VendorExtension = append(x.VendorExtension, pair)
733				}
734			}
735		}
736	}
737	return x, compiler.NewErrorGroupOrNil(errors)
738}
739
740// NewExamples creates an object of type Examples if possible, returning an error if not.
741func NewExamples(in interface{}, context *compiler.Context) (*Examples, error) {
742	errors := make([]error, 0)
743	x := &Examples{}
744	m, ok := compiler.UnpackMap(in)
745	if !ok {
746		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
747		errors = append(errors, compiler.NewError(context, message))
748	} else {
749		// repeated NamedAny additional_properties = 1;
750		// MAP: Any
751		x.AdditionalProperties = make([]*NamedAny, 0)
752		for _, item := range m {
753			k, ok := compiler.StringValue(item.Key)
754			if ok {
755				v := item.Value
756				pair := &NamedAny{}
757				pair.Name = k
758				result := &Any{}
759				handled, resultFromExt, err := compiler.HandleExtension(context, v, k)
760				if handled {
761					if err != nil {
762						errors = append(errors, err)
763					} else {
764						bytes, _ := yaml.Marshal(v)
765						result.Yaml = string(bytes)
766						result.Value = resultFromExt
767						pair.Value = result
768					}
769				} else {
770					pair.Value, err = NewAny(v, compiler.NewContext(k, context))
771					if err != nil {
772						errors = append(errors, err)
773					}
774				}
775				x.AdditionalProperties = append(x.AdditionalProperties, pair)
776			}
777		}
778	}
779	return x, compiler.NewErrorGroupOrNil(errors)
780}
781
782// NewExternalDocs creates an object of type ExternalDocs if possible, returning an error if not.
783func NewExternalDocs(in interface{}, context *compiler.Context) (*ExternalDocs, error) {
784	errors := make([]error, 0)
785	x := &ExternalDocs{}
786	m, ok := compiler.UnpackMap(in)
787	if !ok {
788		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
789		errors = append(errors, compiler.NewError(context, message))
790	} else {
791		requiredKeys := []string{"url"}
792		missingKeys := compiler.MissingKeysInMap(m, requiredKeys)
793		if len(missingKeys) > 0 {
794			message := fmt.Sprintf("is missing required %s: %+v", compiler.PluralProperties(len(missingKeys)), strings.Join(missingKeys, ", "))
795			errors = append(errors, compiler.NewError(context, message))
796		}
797		allowedKeys := []string{"description", "url"}
798		allowedPatterns := []*regexp.Regexp{pattern0}
799		invalidKeys := compiler.InvalidKeysInMap(m, allowedKeys, allowedPatterns)
800		if len(invalidKeys) > 0 {
801			message := fmt.Sprintf("has invalid %s: %+v", compiler.PluralProperties(len(invalidKeys)), strings.Join(invalidKeys, ", "))
802			errors = append(errors, compiler.NewError(context, message))
803		}
804		// string description = 1;
805		v1 := compiler.MapValueForKey(m, "description")
806		if v1 != nil {
807			x.Description, ok = v1.(string)
808			if !ok {
809				message := fmt.Sprintf("has unexpected value for description: %+v (%T)", v1, v1)
810				errors = append(errors, compiler.NewError(context, message))
811			}
812		}
813		// string url = 2;
814		v2 := compiler.MapValueForKey(m, "url")
815		if v2 != nil {
816			x.Url, ok = v2.(string)
817			if !ok {
818				message := fmt.Sprintf("has unexpected value for url: %+v (%T)", v2, v2)
819				errors = append(errors, compiler.NewError(context, message))
820			}
821		}
822		// repeated NamedAny vendor_extension = 3;
823		// MAP: Any ^x-
824		x.VendorExtension = make([]*NamedAny, 0)
825		for _, item := range m {
826			k, ok := compiler.StringValue(item.Key)
827			if ok {
828				v := item.Value
829				if strings.HasPrefix(k, "x-") {
830					pair := &NamedAny{}
831					pair.Name = k
832					result := &Any{}
833					handled, resultFromExt, err := compiler.HandleExtension(context, v, k)
834					if handled {
835						if err != nil {
836							errors = append(errors, err)
837						} else {
838							bytes, _ := yaml.Marshal(v)
839							result.Yaml = string(bytes)
840							result.Value = resultFromExt
841							pair.Value = result
842						}
843					} else {
844						pair.Value, err = NewAny(v, compiler.NewContext(k, context))
845						if err != nil {
846							errors = append(errors, err)
847						}
848					}
849					x.VendorExtension = append(x.VendorExtension, pair)
850				}
851			}
852		}
853	}
854	return x, compiler.NewErrorGroupOrNil(errors)
855}
856
857// NewFileSchema creates an object of type FileSchema if possible, returning an error if not.
858func NewFileSchema(in interface{}, context *compiler.Context) (*FileSchema, error) {
859	errors := make([]error, 0)
860	x := &FileSchema{}
861	m, ok := compiler.UnpackMap(in)
862	if !ok {
863		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
864		errors = append(errors, compiler.NewError(context, message))
865	} else {
866		requiredKeys := []string{"type"}
867		missingKeys := compiler.MissingKeysInMap(m, requiredKeys)
868		if len(missingKeys) > 0 {
869			message := fmt.Sprintf("is missing required %s: %+v", compiler.PluralProperties(len(missingKeys)), strings.Join(missingKeys, ", "))
870			errors = append(errors, compiler.NewError(context, message))
871		}
872		allowedKeys := []string{"default", "description", "example", "externalDocs", "format", "readOnly", "required", "title", "type"}
873		allowedPatterns := []*regexp.Regexp{pattern0}
874		invalidKeys := compiler.InvalidKeysInMap(m, allowedKeys, allowedPatterns)
875		if len(invalidKeys) > 0 {
876			message := fmt.Sprintf("has invalid %s: %+v", compiler.PluralProperties(len(invalidKeys)), strings.Join(invalidKeys, ", "))
877			errors = append(errors, compiler.NewError(context, message))
878		}
879		// string format = 1;
880		v1 := compiler.MapValueForKey(m, "format")
881		if v1 != nil {
882			x.Format, ok = v1.(string)
883			if !ok {
884				message := fmt.Sprintf("has unexpected value for format: %+v (%T)", v1, v1)
885				errors = append(errors, compiler.NewError(context, message))
886			}
887		}
888		// string title = 2;
889		v2 := compiler.MapValueForKey(m, "title")
890		if v2 != nil {
891			x.Title, ok = v2.(string)
892			if !ok {
893				message := fmt.Sprintf("has unexpected value for title: %+v (%T)", v2, v2)
894				errors = append(errors, compiler.NewError(context, message))
895			}
896		}
897		// string description = 3;
898		v3 := compiler.MapValueForKey(m, "description")
899		if v3 != nil {
900			x.Description, ok = v3.(string)
901			if !ok {
902				message := fmt.Sprintf("has unexpected value for description: %+v (%T)", v3, v3)
903				errors = append(errors, compiler.NewError(context, message))
904			}
905		}
906		// Any default = 4;
907		v4 := compiler.MapValueForKey(m, "default")
908		if v4 != nil {
909			var err error
910			x.Default, err = NewAny(v4, compiler.NewContext("default", context))
911			if err != nil {
912				errors = append(errors, err)
913			}
914		}
915		// repeated string required = 5;
916		v5 := compiler.MapValueForKey(m, "required")
917		if v5 != nil {
918			v, ok := v5.([]interface{})
919			if ok {
920				x.Required = compiler.ConvertInterfaceArrayToStringArray(v)
921			} else {
922				message := fmt.Sprintf("has unexpected value for required: %+v (%T)", v5, v5)
923				errors = append(errors, compiler.NewError(context, message))
924			}
925		}
926		// string type = 6;
927		v6 := compiler.MapValueForKey(m, "type")
928		if v6 != nil {
929			x.Type, ok = v6.(string)
930			if !ok {
931				message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v6, v6)
932				errors = append(errors, compiler.NewError(context, message))
933			}
934			// check for valid enum values
935			// [file]
936			if ok && !compiler.StringArrayContainsValue([]string{"file"}, x.Type) {
937				message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v6, v6)
938				errors = append(errors, compiler.NewError(context, message))
939			}
940		}
941		// bool read_only = 7;
942		v7 := compiler.MapValueForKey(m, "readOnly")
943		if v7 != nil {
944			x.ReadOnly, ok = v7.(bool)
945			if !ok {
946				message := fmt.Sprintf("has unexpected value for readOnly: %+v (%T)", v7, v7)
947				errors = append(errors, compiler.NewError(context, message))
948			}
949		}
950		// ExternalDocs external_docs = 8;
951		v8 := compiler.MapValueForKey(m, "externalDocs")
952		if v8 != nil {
953			var err error
954			x.ExternalDocs, err = NewExternalDocs(v8, compiler.NewContext("externalDocs", context))
955			if err != nil {
956				errors = append(errors, err)
957			}
958		}
959		// Any example = 9;
960		v9 := compiler.MapValueForKey(m, "example")
961		if v9 != nil {
962			var err error
963			x.Example, err = NewAny(v9, compiler.NewContext("example", context))
964			if err != nil {
965				errors = append(errors, err)
966			}
967		}
968		// repeated NamedAny vendor_extension = 10;
969		// MAP: Any ^x-
970		x.VendorExtension = make([]*NamedAny, 0)
971		for _, item := range m {
972			k, ok := compiler.StringValue(item.Key)
973			if ok {
974				v := item.Value
975				if strings.HasPrefix(k, "x-") {
976					pair := &NamedAny{}
977					pair.Name = k
978					result := &Any{}
979					handled, resultFromExt, err := compiler.HandleExtension(context, v, k)
980					if handled {
981						if err != nil {
982							errors = append(errors, err)
983						} else {
984							bytes, _ := yaml.Marshal(v)
985							result.Yaml = string(bytes)
986							result.Value = resultFromExt
987							pair.Value = result
988						}
989					} else {
990						pair.Value, err = NewAny(v, compiler.NewContext(k, context))
991						if err != nil {
992							errors = append(errors, err)
993						}
994					}
995					x.VendorExtension = append(x.VendorExtension, pair)
996				}
997			}
998		}
999	}
1000	return x, compiler.NewErrorGroupOrNil(errors)
1001}
1002
1003// NewFormDataParameterSubSchema creates an object of type FormDataParameterSubSchema if possible, returning an error if not.
1004func NewFormDataParameterSubSchema(in interface{}, context *compiler.Context) (*FormDataParameterSubSchema, error) {
1005	errors := make([]error, 0)
1006	x := &FormDataParameterSubSchema{}
1007	m, ok := compiler.UnpackMap(in)
1008	if !ok {
1009		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
1010		errors = append(errors, compiler.NewError(context, message))
1011	} else {
1012		allowedKeys := []string{"allowEmptyValue", "collectionFormat", "default", "description", "enum", "exclusiveMaximum", "exclusiveMinimum", "format", "in", "items", "maxItems", "maxLength", "maximum", "minItems", "minLength", "minimum", "multipleOf", "name", "pattern", "required", "type", "uniqueItems"}
1013		allowedPatterns := []*regexp.Regexp{pattern0}
1014		invalidKeys := compiler.InvalidKeysInMap(m, allowedKeys, allowedPatterns)
1015		if len(invalidKeys) > 0 {
1016			message := fmt.Sprintf("has invalid %s: %+v", compiler.PluralProperties(len(invalidKeys)), strings.Join(invalidKeys, ", "))
1017			errors = append(errors, compiler.NewError(context, message))
1018		}
1019		// bool required = 1;
1020		v1 := compiler.MapValueForKey(m, "required")
1021		if v1 != nil {
1022			x.Required, ok = v1.(bool)
1023			if !ok {
1024				message := fmt.Sprintf("has unexpected value for required: %+v (%T)", v1, v1)
1025				errors = append(errors, compiler.NewError(context, message))
1026			}
1027		}
1028		// string in = 2;
1029		v2 := compiler.MapValueForKey(m, "in")
1030		if v2 != nil {
1031			x.In, ok = v2.(string)
1032			if !ok {
1033				message := fmt.Sprintf("has unexpected value for in: %+v (%T)", v2, v2)
1034				errors = append(errors, compiler.NewError(context, message))
1035			}
1036			// check for valid enum values
1037			// [formData]
1038			if ok && !compiler.StringArrayContainsValue([]string{"formData"}, x.In) {
1039				message := fmt.Sprintf("has unexpected value for in: %+v (%T)", v2, v2)
1040				errors = append(errors, compiler.NewError(context, message))
1041			}
1042		}
1043		// string description = 3;
1044		v3 := compiler.MapValueForKey(m, "description")
1045		if v3 != nil {
1046			x.Description, ok = v3.(string)
1047			if !ok {
1048				message := fmt.Sprintf("has unexpected value for description: %+v (%T)", v3, v3)
1049				errors = append(errors, compiler.NewError(context, message))
1050			}
1051		}
1052		// string name = 4;
1053		v4 := compiler.MapValueForKey(m, "name")
1054		if v4 != nil {
1055			x.Name, ok = v4.(string)
1056			if !ok {
1057				message := fmt.Sprintf("has unexpected value for name: %+v (%T)", v4, v4)
1058				errors = append(errors, compiler.NewError(context, message))
1059			}
1060		}
1061		// bool allow_empty_value = 5;
1062		v5 := compiler.MapValueForKey(m, "allowEmptyValue")
1063		if v5 != nil {
1064			x.AllowEmptyValue, ok = v5.(bool)
1065			if !ok {
1066				message := fmt.Sprintf("has unexpected value for allowEmptyValue: %+v (%T)", v5, v5)
1067				errors = append(errors, compiler.NewError(context, message))
1068			}
1069		}
1070		// string type = 6;
1071		v6 := compiler.MapValueForKey(m, "type")
1072		if v6 != nil {
1073			x.Type, ok = v6.(string)
1074			if !ok {
1075				message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v6, v6)
1076				errors = append(errors, compiler.NewError(context, message))
1077			}
1078			// check for valid enum values
1079			// [string number boolean integer array file]
1080			if ok && !compiler.StringArrayContainsValue([]string{"string", "number", "boolean", "integer", "array", "file"}, x.Type) {
1081				message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v6, v6)
1082				errors = append(errors, compiler.NewError(context, message))
1083			}
1084		}
1085		// string format = 7;
1086		v7 := compiler.MapValueForKey(m, "format")
1087		if v7 != nil {
1088			x.Format, ok = v7.(string)
1089			if !ok {
1090				message := fmt.Sprintf("has unexpected value for format: %+v (%T)", v7, v7)
1091				errors = append(errors, compiler.NewError(context, message))
1092			}
1093		}
1094		// PrimitivesItems items = 8;
1095		v8 := compiler.MapValueForKey(m, "items")
1096		if v8 != nil {
1097			var err error
1098			x.Items, err = NewPrimitivesItems(v8, compiler.NewContext("items", context))
1099			if err != nil {
1100				errors = append(errors, err)
1101			}
1102		}
1103		// string collection_format = 9;
1104		v9 := compiler.MapValueForKey(m, "collectionFormat")
1105		if v9 != nil {
1106			x.CollectionFormat, ok = v9.(string)
1107			if !ok {
1108				message := fmt.Sprintf("has unexpected value for collectionFormat: %+v (%T)", v9, v9)
1109				errors = append(errors, compiler.NewError(context, message))
1110			}
1111			// check for valid enum values
1112			// [csv ssv tsv pipes multi]
1113			if ok && !compiler.StringArrayContainsValue([]string{"csv", "ssv", "tsv", "pipes", "multi"}, x.CollectionFormat) {
1114				message := fmt.Sprintf("has unexpected value for collectionFormat: %+v (%T)", v9, v9)
1115				errors = append(errors, compiler.NewError(context, message))
1116			}
1117		}
1118		// Any default = 10;
1119		v10 := compiler.MapValueForKey(m, "default")
1120		if v10 != nil {
1121			var err error
1122			x.Default, err = NewAny(v10, compiler.NewContext("default", context))
1123			if err != nil {
1124				errors = append(errors, err)
1125			}
1126		}
1127		// float maximum = 11;
1128		v11 := compiler.MapValueForKey(m, "maximum")
1129		if v11 != nil {
1130			switch v11 := v11.(type) {
1131			case float64:
1132				x.Maximum = v11
1133			case float32:
1134				x.Maximum = float64(v11)
1135			case uint64:
1136				x.Maximum = float64(v11)
1137			case uint32:
1138				x.Maximum = float64(v11)
1139			case int64:
1140				x.Maximum = float64(v11)
1141			case int32:
1142				x.Maximum = float64(v11)
1143			case int:
1144				x.Maximum = float64(v11)
1145			default:
1146				message := fmt.Sprintf("has unexpected value for maximum: %+v (%T)", v11, v11)
1147				errors = append(errors, compiler.NewError(context, message))
1148			}
1149		}
1150		// bool exclusive_maximum = 12;
1151		v12 := compiler.MapValueForKey(m, "exclusiveMaximum")
1152		if v12 != nil {
1153			x.ExclusiveMaximum, ok = v12.(bool)
1154			if !ok {
1155				message := fmt.Sprintf("has unexpected value for exclusiveMaximum: %+v (%T)", v12, v12)
1156				errors = append(errors, compiler.NewError(context, message))
1157			}
1158		}
1159		// float minimum = 13;
1160		v13 := compiler.MapValueForKey(m, "minimum")
1161		if v13 != nil {
1162			switch v13 := v13.(type) {
1163			case float64:
1164				x.Minimum = v13
1165			case float32:
1166				x.Minimum = float64(v13)
1167			case uint64:
1168				x.Minimum = float64(v13)
1169			case uint32:
1170				x.Minimum = float64(v13)
1171			case int64:
1172				x.Minimum = float64(v13)
1173			case int32:
1174				x.Minimum = float64(v13)
1175			case int:
1176				x.Minimum = float64(v13)
1177			default:
1178				message := fmt.Sprintf("has unexpected value for minimum: %+v (%T)", v13, v13)
1179				errors = append(errors, compiler.NewError(context, message))
1180			}
1181		}
1182		// bool exclusive_minimum = 14;
1183		v14 := compiler.MapValueForKey(m, "exclusiveMinimum")
1184		if v14 != nil {
1185			x.ExclusiveMinimum, ok = v14.(bool)
1186			if !ok {
1187				message := fmt.Sprintf("has unexpected value for exclusiveMinimum: %+v (%T)", v14, v14)
1188				errors = append(errors, compiler.NewError(context, message))
1189			}
1190		}
1191		// int64 max_length = 15;
1192		v15 := compiler.MapValueForKey(m, "maxLength")
1193		if v15 != nil {
1194			t, ok := v15.(int)
1195			if ok {
1196				x.MaxLength = int64(t)
1197			} else {
1198				message := fmt.Sprintf("has unexpected value for maxLength: %+v (%T)", v15, v15)
1199				errors = append(errors, compiler.NewError(context, message))
1200			}
1201		}
1202		// int64 min_length = 16;
1203		v16 := compiler.MapValueForKey(m, "minLength")
1204		if v16 != nil {
1205			t, ok := v16.(int)
1206			if ok {
1207				x.MinLength = int64(t)
1208			} else {
1209				message := fmt.Sprintf("has unexpected value for minLength: %+v (%T)", v16, v16)
1210				errors = append(errors, compiler.NewError(context, message))
1211			}
1212		}
1213		// string pattern = 17;
1214		v17 := compiler.MapValueForKey(m, "pattern")
1215		if v17 != nil {
1216			x.Pattern, ok = v17.(string)
1217			if !ok {
1218				message := fmt.Sprintf("has unexpected value for pattern: %+v (%T)", v17, v17)
1219				errors = append(errors, compiler.NewError(context, message))
1220			}
1221		}
1222		// int64 max_items = 18;
1223		v18 := compiler.MapValueForKey(m, "maxItems")
1224		if v18 != nil {
1225			t, ok := v18.(int)
1226			if ok {
1227				x.MaxItems = int64(t)
1228			} else {
1229				message := fmt.Sprintf("has unexpected value for maxItems: %+v (%T)", v18, v18)
1230				errors = append(errors, compiler.NewError(context, message))
1231			}
1232		}
1233		// int64 min_items = 19;
1234		v19 := compiler.MapValueForKey(m, "minItems")
1235		if v19 != nil {
1236			t, ok := v19.(int)
1237			if ok {
1238				x.MinItems = int64(t)
1239			} else {
1240				message := fmt.Sprintf("has unexpected value for minItems: %+v (%T)", v19, v19)
1241				errors = append(errors, compiler.NewError(context, message))
1242			}
1243		}
1244		// bool unique_items = 20;
1245		v20 := compiler.MapValueForKey(m, "uniqueItems")
1246		if v20 != nil {
1247			x.UniqueItems, ok = v20.(bool)
1248			if !ok {
1249				message := fmt.Sprintf("has unexpected value for uniqueItems: %+v (%T)", v20, v20)
1250				errors = append(errors, compiler.NewError(context, message))
1251			}
1252		}
1253		// repeated Any enum = 21;
1254		v21 := compiler.MapValueForKey(m, "enum")
1255		if v21 != nil {
1256			// repeated Any
1257			x.Enum = make([]*Any, 0)
1258			a, ok := v21.([]interface{})
1259			if ok {
1260				for _, item := range a {
1261					y, err := NewAny(item, compiler.NewContext("enum", context))
1262					if err != nil {
1263						errors = append(errors, err)
1264					}
1265					x.Enum = append(x.Enum, y)
1266				}
1267			}
1268		}
1269		// float multiple_of = 22;
1270		v22 := compiler.MapValueForKey(m, "multipleOf")
1271		if v22 != nil {
1272			switch v22 := v22.(type) {
1273			case float64:
1274				x.MultipleOf = v22
1275			case float32:
1276				x.MultipleOf = float64(v22)
1277			case uint64:
1278				x.MultipleOf = float64(v22)
1279			case uint32:
1280				x.MultipleOf = float64(v22)
1281			case int64:
1282				x.MultipleOf = float64(v22)
1283			case int32:
1284				x.MultipleOf = float64(v22)
1285			case int:
1286				x.MultipleOf = float64(v22)
1287			default:
1288				message := fmt.Sprintf("has unexpected value for multipleOf: %+v (%T)", v22, v22)
1289				errors = append(errors, compiler.NewError(context, message))
1290			}
1291		}
1292		// repeated NamedAny vendor_extension = 23;
1293		// MAP: Any ^x-
1294		x.VendorExtension = make([]*NamedAny, 0)
1295		for _, item := range m {
1296			k, ok := compiler.StringValue(item.Key)
1297			if ok {
1298				v := item.Value
1299				if strings.HasPrefix(k, "x-") {
1300					pair := &NamedAny{}
1301					pair.Name = k
1302					result := &Any{}
1303					handled, resultFromExt, err := compiler.HandleExtension(context, v, k)
1304					if handled {
1305						if err != nil {
1306							errors = append(errors, err)
1307						} else {
1308							bytes, _ := yaml.Marshal(v)
1309							result.Yaml = string(bytes)
1310							result.Value = resultFromExt
1311							pair.Value = result
1312						}
1313					} else {
1314						pair.Value, err = NewAny(v, compiler.NewContext(k, context))
1315						if err != nil {
1316							errors = append(errors, err)
1317						}
1318					}
1319					x.VendorExtension = append(x.VendorExtension, pair)
1320				}
1321			}
1322		}
1323	}
1324	return x, compiler.NewErrorGroupOrNil(errors)
1325}
1326
1327// NewHeader creates an object of type Header if possible, returning an error if not.
1328func NewHeader(in interface{}, context *compiler.Context) (*Header, error) {
1329	errors := make([]error, 0)
1330	x := &Header{}
1331	m, ok := compiler.UnpackMap(in)
1332	if !ok {
1333		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
1334		errors = append(errors, compiler.NewError(context, message))
1335	} else {
1336		requiredKeys := []string{"type"}
1337		missingKeys := compiler.MissingKeysInMap(m, requiredKeys)
1338		if len(missingKeys) > 0 {
1339			message := fmt.Sprintf("is missing required %s: %+v", compiler.PluralProperties(len(missingKeys)), strings.Join(missingKeys, ", "))
1340			errors = append(errors, compiler.NewError(context, message))
1341		}
1342		allowedKeys := []string{"collectionFormat", "default", "description", "enum", "exclusiveMaximum", "exclusiveMinimum", "format", "items", "maxItems", "maxLength", "maximum", "minItems", "minLength", "minimum", "multipleOf", "pattern", "type", "uniqueItems"}
1343		allowedPatterns := []*regexp.Regexp{pattern0}
1344		invalidKeys := compiler.InvalidKeysInMap(m, allowedKeys, allowedPatterns)
1345		if len(invalidKeys) > 0 {
1346			message := fmt.Sprintf("has invalid %s: %+v", compiler.PluralProperties(len(invalidKeys)), strings.Join(invalidKeys, ", "))
1347			errors = append(errors, compiler.NewError(context, message))
1348		}
1349		// string type = 1;
1350		v1 := compiler.MapValueForKey(m, "type")
1351		if v1 != nil {
1352			x.Type, ok = v1.(string)
1353			if !ok {
1354				message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v1, v1)
1355				errors = append(errors, compiler.NewError(context, message))
1356			}
1357			// check for valid enum values
1358			// [string number integer boolean array]
1359			if ok && !compiler.StringArrayContainsValue([]string{"string", "number", "integer", "boolean", "array"}, x.Type) {
1360				message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v1, v1)
1361				errors = append(errors, compiler.NewError(context, message))
1362			}
1363		}
1364		// string format = 2;
1365		v2 := compiler.MapValueForKey(m, "format")
1366		if v2 != nil {
1367			x.Format, ok = v2.(string)
1368			if !ok {
1369				message := fmt.Sprintf("has unexpected value for format: %+v (%T)", v2, v2)
1370				errors = append(errors, compiler.NewError(context, message))
1371			}
1372		}
1373		// PrimitivesItems items = 3;
1374		v3 := compiler.MapValueForKey(m, "items")
1375		if v3 != nil {
1376			var err error
1377			x.Items, err = NewPrimitivesItems(v3, compiler.NewContext("items", context))
1378			if err != nil {
1379				errors = append(errors, err)
1380			}
1381		}
1382		// string collection_format = 4;
1383		v4 := compiler.MapValueForKey(m, "collectionFormat")
1384		if v4 != nil {
1385			x.CollectionFormat, ok = v4.(string)
1386			if !ok {
1387				message := fmt.Sprintf("has unexpected value for collectionFormat: %+v (%T)", v4, v4)
1388				errors = append(errors, compiler.NewError(context, message))
1389			}
1390			// check for valid enum values
1391			// [csv ssv tsv pipes]
1392			if ok && !compiler.StringArrayContainsValue([]string{"csv", "ssv", "tsv", "pipes"}, x.CollectionFormat) {
1393				message := fmt.Sprintf("has unexpected value for collectionFormat: %+v (%T)", v4, v4)
1394				errors = append(errors, compiler.NewError(context, message))
1395			}
1396		}
1397		// Any default = 5;
1398		v5 := compiler.MapValueForKey(m, "default")
1399		if v5 != nil {
1400			var err error
1401			x.Default, err = NewAny(v5, compiler.NewContext("default", context))
1402			if err != nil {
1403				errors = append(errors, err)
1404			}
1405		}
1406		// float maximum = 6;
1407		v6 := compiler.MapValueForKey(m, "maximum")
1408		if v6 != nil {
1409			switch v6 := v6.(type) {
1410			case float64:
1411				x.Maximum = v6
1412			case float32:
1413				x.Maximum = float64(v6)
1414			case uint64:
1415				x.Maximum = float64(v6)
1416			case uint32:
1417				x.Maximum = float64(v6)
1418			case int64:
1419				x.Maximum = float64(v6)
1420			case int32:
1421				x.Maximum = float64(v6)
1422			case int:
1423				x.Maximum = float64(v6)
1424			default:
1425				message := fmt.Sprintf("has unexpected value for maximum: %+v (%T)", v6, v6)
1426				errors = append(errors, compiler.NewError(context, message))
1427			}
1428		}
1429		// bool exclusive_maximum = 7;
1430		v7 := compiler.MapValueForKey(m, "exclusiveMaximum")
1431		if v7 != nil {
1432			x.ExclusiveMaximum, ok = v7.(bool)
1433			if !ok {
1434				message := fmt.Sprintf("has unexpected value for exclusiveMaximum: %+v (%T)", v7, v7)
1435				errors = append(errors, compiler.NewError(context, message))
1436			}
1437		}
1438		// float minimum = 8;
1439		v8 := compiler.MapValueForKey(m, "minimum")
1440		if v8 != nil {
1441			switch v8 := v8.(type) {
1442			case float64:
1443				x.Minimum = v8
1444			case float32:
1445				x.Minimum = float64(v8)
1446			case uint64:
1447				x.Minimum = float64(v8)
1448			case uint32:
1449				x.Minimum = float64(v8)
1450			case int64:
1451				x.Minimum = float64(v8)
1452			case int32:
1453				x.Minimum = float64(v8)
1454			case int:
1455				x.Minimum = float64(v8)
1456			default:
1457				message := fmt.Sprintf("has unexpected value for minimum: %+v (%T)", v8, v8)
1458				errors = append(errors, compiler.NewError(context, message))
1459			}
1460		}
1461		// bool exclusive_minimum = 9;
1462		v9 := compiler.MapValueForKey(m, "exclusiveMinimum")
1463		if v9 != nil {
1464			x.ExclusiveMinimum, ok = v9.(bool)
1465			if !ok {
1466				message := fmt.Sprintf("has unexpected value for exclusiveMinimum: %+v (%T)", v9, v9)
1467				errors = append(errors, compiler.NewError(context, message))
1468			}
1469		}
1470		// int64 max_length = 10;
1471		v10 := compiler.MapValueForKey(m, "maxLength")
1472		if v10 != nil {
1473			t, ok := v10.(int)
1474			if ok {
1475				x.MaxLength = int64(t)
1476			} else {
1477				message := fmt.Sprintf("has unexpected value for maxLength: %+v (%T)", v10, v10)
1478				errors = append(errors, compiler.NewError(context, message))
1479			}
1480		}
1481		// int64 min_length = 11;
1482		v11 := compiler.MapValueForKey(m, "minLength")
1483		if v11 != nil {
1484			t, ok := v11.(int)
1485			if ok {
1486				x.MinLength = int64(t)
1487			} else {
1488				message := fmt.Sprintf("has unexpected value for minLength: %+v (%T)", v11, v11)
1489				errors = append(errors, compiler.NewError(context, message))
1490			}
1491		}
1492		// string pattern = 12;
1493		v12 := compiler.MapValueForKey(m, "pattern")
1494		if v12 != nil {
1495			x.Pattern, ok = v12.(string)
1496			if !ok {
1497				message := fmt.Sprintf("has unexpected value for pattern: %+v (%T)", v12, v12)
1498				errors = append(errors, compiler.NewError(context, message))
1499			}
1500		}
1501		// int64 max_items = 13;
1502		v13 := compiler.MapValueForKey(m, "maxItems")
1503		if v13 != nil {
1504			t, ok := v13.(int)
1505			if ok {
1506				x.MaxItems = int64(t)
1507			} else {
1508				message := fmt.Sprintf("has unexpected value for maxItems: %+v (%T)", v13, v13)
1509				errors = append(errors, compiler.NewError(context, message))
1510			}
1511		}
1512		// int64 min_items = 14;
1513		v14 := compiler.MapValueForKey(m, "minItems")
1514		if v14 != nil {
1515			t, ok := v14.(int)
1516			if ok {
1517				x.MinItems = int64(t)
1518			} else {
1519				message := fmt.Sprintf("has unexpected value for minItems: %+v (%T)", v14, v14)
1520				errors = append(errors, compiler.NewError(context, message))
1521			}
1522		}
1523		// bool unique_items = 15;
1524		v15 := compiler.MapValueForKey(m, "uniqueItems")
1525		if v15 != nil {
1526			x.UniqueItems, ok = v15.(bool)
1527			if !ok {
1528				message := fmt.Sprintf("has unexpected value for uniqueItems: %+v (%T)", v15, v15)
1529				errors = append(errors, compiler.NewError(context, message))
1530			}
1531		}
1532		// repeated Any enum = 16;
1533		v16 := compiler.MapValueForKey(m, "enum")
1534		if v16 != nil {
1535			// repeated Any
1536			x.Enum = make([]*Any, 0)
1537			a, ok := v16.([]interface{})
1538			if ok {
1539				for _, item := range a {
1540					y, err := NewAny(item, compiler.NewContext("enum", context))
1541					if err != nil {
1542						errors = append(errors, err)
1543					}
1544					x.Enum = append(x.Enum, y)
1545				}
1546			}
1547		}
1548		// float multiple_of = 17;
1549		v17 := compiler.MapValueForKey(m, "multipleOf")
1550		if v17 != nil {
1551			switch v17 := v17.(type) {
1552			case float64:
1553				x.MultipleOf = v17
1554			case float32:
1555				x.MultipleOf = float64(v17)
1556			case uint64:
1557				x.MultipleOf = float64(v17)
1558			case uint32:
1559				x.MultipleOf = float64(v17)
1560			case int64:
1561				x.MultipleOf = float64(v17)
1562			case int32:
1563				x.MultipleOf = float64(v17)
1564			case int:
1565				x.MultipleOf = float64(v17)
1566			default:
1567				message := fmt.Sprintf("has unexpected value for multipleOf: %+v (%T)", v17, v17)
1568				errors = append(errors, compiler.NewError(context, message))
1569			}
1570		}
1571		// string description = 18;
1572		v18 := compiler.MapValueForKey(m, "description")
1573		if v18 != nil {
1574			x.Description, ok = v18.(string)
1575			if !ok {
1576				message := fmt.Sprintf("has unexpected value for description: %+v (%T)", v18, v18)
1577				errors = append(errors, compiler.NewError(context, message))
1578			}
1579		}
1580		// repeated NamedAny vendor_extension = 19;
1581		// MAP: Any ^x-
1582		x.VendorExtension = make([]*NamedAny, 0)
1583		for _, item := range m {
1584			k, ok := compiler.StringValue(item.Key)
1585			if ok {
1586				v := item.Value
1587				if strings.HasPrefix(k, "x-") {
1588					pair := &NamedAny{}
1589					pair.Name = k
1590					result := &Any{}
1591					handled, resultFromExt, err := compiler.HandleExtension(context, v, k)
1592					if handled {
1593						if err != nil {
1594							errors = append(errors, err)
1595						} else {
1596							bytes, _ := yaml.Marshal(v)
1597							result.Yaml = string(bytes)
1598							result.Value = resultFromExt
1599							pair.Value = result
1600						}
1601					} else {
1602						pair.Value, err = NewAny(v, compiler.NewContext(k, context))
1603						if err != nil {
1604							errors = append(errors, err)
1605						}
1606					}
1607					x.VendorExtension = append(x.VendorExtension, pair)
1608				}
1609			}
1610		}
1611	}
1612	return x, compiler.NewErrorGroupOrNil(errors)
1613}
1614
1615// NewHeaderParameterSubSchema creates an object of type HeaderParameterSubSchema if possible, returning an error if not.
1616func NewHeaderParameterSubSchema(in interface{}, context *compiler.Context) (*HeaderParameterSubSchema, error) {
1617	errors := make([]error, 0)
1618	x := &HeaderParameterSubSchema{}
1619	m, ok := compiler.UnpackMap(in)
1620	if !ok {
1621		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
1622		errors = append(errors, compiler.NewError(context, message))
1623	} else {
1624		allowedKeys := []string{"collectionFormat", "default", "description", "enum", "exclusiveMaximum", "exclusiveMinimum", "format", "in", "items", "maxItems", "maxLength", "maximum", "minItems", "minLength", "minimum", "multipleOf", "name", "pattern", "required", "type", "uniqueItems"}
1625		allowedPatterns := []*regexp.Regexp{pattern0}
1626		invalidKeys := compiler.InvalidKeysInMap(m, allowedKeys, allowedPatterns)
1627		if len(invalidKeys) > 0 {
1628			message := fmt.Sprintf("has invalid %s: %+v", compiler.PluralProperties(len(invalidKeys)), strings.Join(invalidKeys, ", "))
1629			errors = append(errors, compiler.NewError(context, message))
1630		}
1631		// bool required = 1;
1632		v1 := compiler.MapValueForKey(m, "required")
1633		if v1 != nil {
1634			x.Required, ok = v1.(bool)
1635			if !ok {
1636				message := fmt.Sprintf("has unexpected value for required: %+v (%T)", v1, v1)
1637				errors = append(errors, compiler.NewError(context, message))
1638			}
1639		}
1640		// string in = 2;
1641		v2 := compiler.MapValueForKey(m, "in")
1642		if v2 != nil {
1643			x.In, ok = v2.(string)
1644			if !ok {
1645				message := fmt.Sprintf("has unexpected value for in: %+v (%T)", v2, v2)
1646				errors = append(errors, compiler.NewError(context, message))
1647			}
1648			// check for valid enum values
1649			// [header]
1650			if ok && !compiler.StringArrayContainsValue([]string{"header"}, x.In) {
1651				message := fmt.Sprintf("has unexpected value for in: %+v (%T)", v2, v2)
1652				errors = append(errors, compiler.NewError(context, message))
1653			}
1654		}
1655		// string description = 3;
1656		v3 := compiler.MapValueForKey(m, "description")
1657		if v3 != nil {
1658			x.Description, ok = v3.(string)
1659			if !ok {
1660				message := fmt.Sprintf("has unexpected value for description: %+v (%T)", v3, v3)
1661				errors = append(errors, compiler.NewError(context, message))
1662			}
1663		}
1664		// string name = 4;
1665		v4 := compiler.MapValueForKey(m, "name")
1666		if v4 != nil {
1667			x.Name, ok = v4.(string)
1668			if !ok {
1669				message := fmt.Sprintf("has unexpected value for name: %+v (%T)", v4, v4)
1670				errors = append(errors, compiler.NewError(context, message))
1671			}
1672		}
1673		// string type = 5;
1674		v5 := compiler.MapValueForKey(m, "type")
1675		if v5 != nil {
1676			x.Type, ok = v5.(string)
1677			if !ok {
1678				message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v5, v5)
1679				errors = append(errors, compiler.NewError(context, message))
1680			}
1681			// check for valid enum values
1682			// [string number boolean integer array]
1683			if ok && !compiler.StringArrayContainsValue([]string{"string", "number", "boolean", "integer", "array"}, x.Type) {
1684				message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v5, v5)
1685				errors = append(errors, compiler.NewError(context, message))
1686			}
1687		}
1688		// string format = 6;
1689		v6 := compiler.MapValueForKey(m, "format")
1690		if v6 != nil {
1691			x.Format, ok = v6.(string)
1692			if !ok {
1693				message := fmt.Sprintf("has unexpected value for format: %+v (%T)", v6, v6)
1694				errors = append(errors, compiler.NewError(context, message))
1695			}
1696		}
1697		// PrimitivesItems items = 7;
1698		v7 := compiler.MapValueForKey(m, "items")
1699		if v7 != nil {
1700			var err error
1701			x.Items, err = NewPrimitivesItems(v7, compiler.NewContext("items", context))
1702			if err != nil {
1703				errors = append(errors, err)
1704			}
1705		}
1706		// string collection_format = 8;
1707		v8 := compiler.MapValueForKey(m, "collectionFormat")
1708		if v8 != nil {
1709			x.CollectionFormat, ok = v8.(string)
1710			if !ok {
1711				message := fmt.Sprintf("has unexpected value for collectionFormat: %+v (%T)", v8, v8)
1712				errors = append(errors, compiler.NewError(context, message))
1713			}
1714			// check for valid enum values
1715			// [csv ssv tsv pipes]
1716			if ok && !compiler.StringArrayContainsValue([]string{"csv", "ssv", "tsv", "pipes"}, x.CollectionFormat) {
1717				message := fmt.Sprintf("has unexpected value for collectionFormat: %+v (%T)", v8, v8)
1718				errors = append(errors, compiler.NewError(context, message))
1719			}
1720		}
1721		// Any default = 9;
1722		v9 := compiler.MapValueForKey(m, "default")
1723		if v9 != nil {
1724			var err error
1725			x.Default, err = NewAny(v9, compiler.NewContext("default", context))
1726			if err != nil {
1727				errors = append(errors, err)
1728			}
1729		}
1730		// float maximum = 10;
1731		v10 := compiler.MapValueForKey(m, "maximum")
1732		if v10 != nil {
1733			switch v10 := v10.(type) {
1734			case float64:
1735				x.Maximum = v10
1736			case float32:
1737				x.Maximum = float64(v10)
1738			case uint64:
1739				x.Maximum = float64(v10)
1740			case uint32:
1741				x.Maximum = float64(v10)
1742			case int64:
1743				x.Maximum = float64(v10)
1744			case int32:
1745				x.Maximum = float64(v10)
1746			case int:
1747				x.Maximum = float64(v10)
1748			default:
1749				message := fmt.Sprintf("has unexpected value for maximum: %+v (%T)", v10, v10)
1750				errors = append(errors, compiler.NewError(context, message))
1751			}
1752		}
1753		// bool exclusive_maximum = 11;
1754		v11 := compiler.MapValueForKey(m, "exclusiveMaximum")
1755		if v11 != nil {
1756			x.ExclusiveMaximum, ok = v11.(bool)
1757			if !ok {
1758				message := fmt.Sprintf("has unexpected value for exclusiveMaximum: %+v (%T)", v11, v11)
1759				errors = append(errors, compiler.NewError(context, message))
1760			}
1761		}
1762		// float minimum = 12;
1763		v12 := compiler.MapValueForKey(m, "minimum")
1764		if v12 != nil {
1765			switch v12 := v12.(type) {
1766			case float64:
1767				x.Minimum = v12
1768			case float32:
1769				x.Minimum = float64(v12)
1770			case uint64:
1771				x.Minimum = float64(v12)
1772			case uint32:
1773				x.Minimum = float64(v12)
1774			case int64:
1775				x.Minimum = float64(v12)
1776			case int32:
1777				x.Minimum = float64(v12)
1778			case int:
1779				x.Minimum = float64(v12)
1780			default:
1781				message := fmt.Sprintf("has unexpected value for minimum: %+v (%T)", v12, v12)
1782				errors = append(errors, compiler.NewError(context, message))
1783			}
1784		}
1785		// bool exclusive_minimum = 13;
1786		v13 := compiler.MapValueForKey(m, "exclusiveMinimum")
1787		if v13 != nil {
1788			x.ExclusiveMinimum, ok = v13.(bool)
1789			if !ok {
1790				message := fmt.Sprintf("has unexpected value for exclusiveMinimum: %+v (%T)", v13, v13)
1791				errors = append(errors, compiler.NewError(context, message))
1792			}
1793		}
1794		// int64 max_length = 14;
1795		v14 := compiler.MapValueForKey(m, "maxLength")
1796		if v14 != nil {
1797			t, ok := v14.(int)
1798			if ok {
1799				x.MaxLength = int64(t)
1800			} else {
1801				message := fmt.Sprintf("has unexpected value for maxLength: %+v (%T)", v14, v14)
1802				errors = append(errors, compiler.NewError(context, message))
1803			}
1804		}
1805		// int64 min_length = 15;
1806		v15 := compiler.MapValueForKey(m, "minLength")
1807		if v15 != nil {
1808			t, ok := v15.(int)
1809			if ok {
1810				x.MinLength = int64(t)
1811			} else {
1812				message := fmt.Sprintf("has unexpected value for minLength: %+v (%T)", v15, v15)
1813				errors = append(errors, compiler.NewError(context, message))
1814			}
1815		}
1816		// string pattern = 16;
1817		v16 := compiler.MapValueForKey(m, "pattern")
1818		if v16 != nil {
1819			x.Pattern, ok = v16.(string)
1820			if !ok {
1821				message := fmt.Sprintf("has unexpected value for pattern: %+v (%T)", v16, v16)
1822				errors = append(errors, compiler.NewError(context, message))
1823			}
1824		}
1825		// int64 max_items = 17;
1826		v17 := compiler.MapValueForKey(m, "maxItems")
1827		if v17 != nil {
1828			t, ok := v17.(int)
1829			if ok {
1830				x.MaxItems = int64(t)
1831			} else {
1832				message := fmt.Sprintf("has unexpected value for maxItems: %+v (%T)", v17, v17)
1833				errors = append(errors, compiler.NewError(context, message))
1834			}
1835		}
1836		// int64 min_items = 18;
1837		v18 := compiler.MapValueForKey(m, "minItems")
1838		if v18 != nil {
1839			t, ok := v18.(int)
1840			if ok {
1841				x.MinItems = int64(t)
1842			} else {
1843				message := fmt.Sprintf("has unexpected value for minItems: %+v (%T)", v18, v18)
1844				errors = append(errors, compiler.NewError(context, message))
1845			}
1846		}
1847		// bool unique_items = 19;
1848		v19 := compiler.MapValueForKey(m, "uniqueItems")
1849		if v19 != nil {
1850			x.UniqueItems, ok = v19.(bool)
1851			if !ok {
1852				message := fmt.Sprintf("has unexpected value for uniqueItems: %+v (%T)", v19, v19)
1853				errors = append(errors, compiler.NewError(context, message))
1854			}
1855		}
1856		// repeated Any enum = 20;
1857		v20 := compiler.MapValueForKey(m, "enum")
1858		if v20 != nil {
1859			// repeated Any
1860			x.Enum = make([]*Any, 0)
1861			a, ok := v20.([]interface{})
1862			if ok {
1863				for _, item := range a {
1864					y, err := NewAny(item, compiler.NewContext("enum", context))
1865					if err != nil {
1866						errors = append(errors, err)
1867					}
1868					x.Enum = append(x.Enum, y)
1869				}
1870			}
1871		}
1872		// float multiple_of = 21;
1873		v21 := compiler.MapValueForKey(m, "multipleOf")
1874		if v21 != nil {
1875			switch v21 := v21.(type) {
1876			case float64:
1877				x.MultipleOf = v21
1878			case float32:
1879				x.MultipleOf = float64(v21)
1880			case uint64:
1881				x.MultipleOf = float64(v21)
1882			case uint32:
1883				x.MultipleOf = float64(v21)
1884			case int64:
1885				x.MultipleOf = float64(v21)
1886			case int32:
1887				x.MultipleOf = float64(v21)
1888			case int:
1889				x.MultipleOf = float64(v21)
1890			default:
1891				message := fmt.Sprintf("has unexpected value for multipleOf: %+v (%T)", v21, v21)
1892				errors = append(errors, compiler.NewError(context, message))
1893			}
1894		}
1895		// repeated NamedAny vendor_extension = 22;
1896		// MAP: Any ^x-
1897		x.VendorExtension = make([]*NamedAny, 0)
1898		for _, item := range m {
1899			k, ok := compiler.StringValue(item.Key)
1900			if ok {
1901				v := item.Value
1902				if strings.HasPrefix(k, "x-") {
1903					pair := &NamedAny{}
1904					pair.Name = k
1905					result := &Any{}
1906					handled, resultFromExt, err := compiler.HandleExtension(context, v, k)
1907					if handled {
1908						if err != nil {
1909							errors = append(errors, err)
1910						} else {
1911							bytes, _ := yaml.Marshal(v)
1912							result.Yaml = string(bytes)
1913							result.Value = resultFromExt
1914							pair.Value = result
1915						}
1916					} else {
1917						pair.Value, err = NewAny(v, compiler.NewContext(k, context))
1918						if err != nil {
1919							errors = append(errors, err)
1920						}
1921					}
1922					x.VendorExtension = append(x.VendorExtension, pair)
1923				}
1924			}
1925		}
1926	}
1927	return x, compiler.NewErrorGroupOrNil(errors)
1928}
1929
1930// NewHeaders creates an object of type Headers if possible, returning an error if not.
1931func NewHeaders(in interface{}, context *compiler.Context) (*Headers, error) {
1932	errors := make([]error, 0)
1933	x := &Headers{}
1934	m, ok := compiler.UnpackMap(in)
1935	if !ok {
1936		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
1937		errors = append(errors, compiler.NewError(context, message))
1938	} else {
1939		// repeated NamedHeader additional_properties = 1;
1940		// MAP: Header
1941		x.AdditionalProperties = make([]*NamedHeader, 0)
1942		for _, item := range m {
1943			k, ok := compiler.StringValue(item.Key)
1944			if ok {
1945				v := item.Value
1946				pair := &NamedHeader{}
1947				pair.Name = k
1948				var err error
1949				pair.Value, err = NewHeader(v, compiler.NewContext(k, context))
1950				if err != nil {
1951					errors = append(errors, err)
1952				}
1953				x.AdditionalProperties = append(x.AdditionalProperties, pair)
1954			}
1955		}
1956	}
1957	return x, compiler.NewErrorGroupOrNil(errors)
1958}
1959
1960// NewInfo creates an object of type Info if possible, returning an error if not.
1961func NewInfo(in interface{}, context *compiler.Context) (*Info, error) {
1962	errors := make([]error, 0)
1963	x := &Info{}
1964	m, ok := compiler.UnpackMap(in)
1965	if !ok {
1966		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
1967		errors = append(errors, compiler.NewError(context, message))
1968	} else {
1969		requiredKeys := []string{"title", "version"}
1970		missingKeys := compiler.MissingKeysInMap(m, requiredKeys)
1971		if len(missingKeys) > 0 {
1972			message := fmt.Sprintf("is missing required %s: %+v", compiler.PluralProperties(len(missingKeys)), strings.Join(missingKeys, ", "))
1973			errors = append(errors, compiler.NewError(context, message))
1974		}
1975		allowedKeys := []string{"contact", "description", "license", "termsOfService", "title", "version"}
1976		allowedPatterns := []*regexp.Regexp{pattern0}
1977		invalidKeys := compiler.InvalidKeysInMap(m, allowedKeys, allowedPatterns)
1978		if len(invalidKeys) > 0 {
1979			message := fmt.Sprintf("has invalid %s: %+v", compiler.PluralProperties(len(invalidKeys)), strings.Join(invalidKeys, ", "))
1980			errors = append(errors, compiler.NewError(context, message))
1981		}
1982		// string title = 1;
1983		v1 := compiler.MapValueForKey(m, "title")
1984		if v1 != nil {
1985			x.Title, ok = v1.(string)
1986			if !ok {
1987				message := fmt.Sprintf("has unexpected value for title: %+v (%T)", v1, v1)
1988				errors = append(errors, compiler.NewError(context, message))
1989			}
1990		}
1991		// string version = 2;
1992		v2 := compiler.MapValueForKey(m, "version")
1993		if v2 != nil {
1994			x.Version, ok = v2.(string)
1995			if !ok {
1996				message := fmt.Sprintf("has unexpected value for version: %+v (%T)", v2, v2)
1997				errors = append(errors, compiler.NewError(context, message))
1998			}
1999		}
2000		// string description = 3;
2001		v3 := compiler.MapValueForKey(m, "description")
2002		if v3 != nil {
2003			x.Description, ok = v3.(string)
2004			if !ok {
2005				message := fmt.Sprintf("has unexpected value for description: %+v (%T)", v3, v3)
2006				errors = append(errors, compiler.NewError(context, message))
2007			}
2008		}
2009		// string terms_of_service = 4;
2010		v4 := compiler.MapValueForKey(m, "termsOfService")
2011		if v4 != nil {
2012			x.TermsOfService, ok = v4.(string)
2013			if !ok {
2014				message := fmt.Sprintf("has unexpected value for termsOfService: %+v (%T)", v4, v4)
2015				errors = append(errors, compiler.NewError(context, message))
2016			}
2017		}
2018		// Contact contact = 5;
2019		v5 := compiler.MapValueForKey(m, "contact")
2020		if v5 != nil {
2021			var err error
2022			x.Contact, err = NewContact(v5, compiler.NewContext("contact", context))
2023			if err != nil {
2024				errors = append(errors, err)
2025			}
2026		}
2027		// License license = 6;
2028		v6 := compiler.MapValueForKey(m, "license")
2029		if v6 != nil {
2030			var err error
2031			x.License, err = NewLicense(v6, compiler.NewContext("license", context))
2032			if err != nil {
2033				errors = append(errors, err)
2034			}
2035		}
2036		// repeated NamedAny vendor_extension = 7;
2037		// MAP: Any ^x-
2038		x.VendorExtension = make([]*NamedAny, 0)
2039		for _, item := range m {
2040			k, ok := compiler.StringValue(item.Key)
2041			if ok {
2042				v := item.Value
2043				if strings.HasPrefix(k, "x-") {
2044					pair := &NamedAny{}
2045					pair.Name = k
2046					result := &Any{}
2047					handled, resultFromExt, err := compiler.HandleExtension(context, v, k)
2048					if handled {
2049						if err != nil {
2050							errors = append(errors, err)
2051						} else {
2052							bytes, _ := yaml.Marshal(v)
2053							result.Yaml = string(bytes)
2054							result.Value = resultFromExt
2055							pair.Value = result
2056						}
2057					} else {
2058						pair.Value, err = NewAny(v, compiler.NewContext(k, context))
2059						if err != nil {
2060							errors = append(errors, err)
2061						}
2062					}
2063					x.VendorExtension = append(x.VendorExtension, pair)
2064				}
2065			}
2066		}
2067	}
2068	return x, compiler.NewErrorGroupOrNil(errors)
2069}
2070
2071// NewItemsItem creates an object of type ItemsItem if possible, returning an error if not.
2072func NewItemsItem(in interface{}, context *compiler.Context) (*ItemsItem, error) {
2073	errors := make([]error, 0)
2074	x := &ItemsItem{}
2075	m, ok := compiler.UnpackMap(in)
2076	if !ok {
2077		message := fmt.Sprintf("has unexpected value for item array: %+v (%T)", in, in)
2078		errors = append(errors, compiler.NewError(context, message))
2079	} else {
2080		x.Schema = make([]*Schema, 0)
2081		y, err := NewSchema(m, compiler.NewContext("<array>", context))
2082		if err != nil {
2083			return nil, err
2084		}
2085		x.Schema = append(x.Schema, y)
2086	}
2087	return x, compiler.NewErrorGroupOrNil(errors)
2088}
2089
2090// NewJsonReference creates an object of type JsonReference if possible, returning an error if not.
2091func NewJsonReference(in interface{}, context *compiler.Context) (*JsonReference, error) {
2092	errors := make([]error, 0)
2093	x := &JsonReference{}
2094	m, ok := compiler.UnpackMap(in)
2095	if !ok {
2096		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
2097		errors = append(errors, compiler.NewError(context, message))
2098	} else {
2099		requiredKeys := []string{"$ref"}
2100		missingKeys := compiler.MissingKeysInMap(m, requiredKeys)
2101		if len(missingKeys) > 0 {
2102			message := fmt.Sprintf("is missing required %s: %+v", compiler.PluralProperties(len(missingKeys)), strings.Join(missingKeys, ", "))
2103			errors = append(errors, compiler.NewError(context, message))
2104		}
2105		allowedKeys := []string{"$ref", "description"}
2106		var allowedPatterns []*regexp.Regexp
2107		invalidKeys := compiler.InvalidKeysInMap(m, allowedKeys, allowedPatterns)
2108		if len(invalidKeys) > 0 {
2109			message := fmt.Sprintf("has invalid %s: %+v", compiler.PluralProperties(len(invalidKeys)), strings.Join(invalidKeys, ", "))
2110			errors = append(errors, compiler.NewError(context, message))
2111		}
2112		// string _ref = 1;
2113		v1 := compiler.MapValueForKey(m, "$ref")
2114		if v1 != nil {
2115			x.XRef, ok = v1.(string)
2116			if !ok {
2117				message := fmt.Sprintf("has unexpected value for $ref: %+v (%T)", v1, v1)
2118				errors = append(errors, compiler.NewError(context, message))
2119			}
2120		}
2121		// string description = 2;
2122		v2 := compiler.MapValueForKey(m, "description")
2123		if v2 != nil {
2124			x.Description, ok = v2.(string)
2125			if !ok {
2126				message := fmt.Sprintf("has unexpected value for description: %+v (%T)", v2, v2)
2127				errors = append(errors, compiler.NewError(context, message))
2128			}
2129		}
2130	}
2131	return x, compiler.NewErrorGroupOrNil(errors)
2132}
2133
2134// NewLicense creates an object of type License if possible, returning an error if not.
2135func NewLicense(in interface{}, context *compiler.Context) (*License, error) {
2136	errors := make([]error, 0)
2137	x := &License{}
2138	m, ok := compiler.UnpackMap(in)
2139	if !ok {
2140		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
2141		errors = append(errors, compiler.NewError(context, message))
2142	} else {
2143		requiredKeys := []string{"name"}
2144		missingKeys := compiler.MissingKeysInMap(m, requiredKeys)
2145		if len(missingKeys) > 0 {
2146			message := fmt.Sprintf("is missing required %s: %+v", compiler.PluralProperties(len(missingKeys)), strings.Join(missingKeys, ", "))
2147			errors = append(errors, compiler.NewError(context, message))
2148		}
2149		allowedKeys := []string{"name", "url"}
2150		allowedPatterns := []*regexp.Regexp{pattern0}
2151		invalidKeys := compiler.InvalidKeysInMap(m, allowedKeys, allowedPatterns)
2152		if len(invalidKeys) > 0 {
2153			message := fmt.Sprintf("has invalid %s: %+v", compiler.PluralProperties(len(invalidKeys)), strings.Join(invalidKeys, ", "))
2154			errors = append(errors, compiler.NewError(context, message))
2155		}
2156		// string name = 1;
2157		v1 := compiler.MapValueForKey(m, "name")
2158		if v1 != nil {
2159			x.Name, ok = v1.(string)
2160			if !ok {
2161				message := fmt.Sprintf("has unexpected value for name: %+v (%T)", v1, v1)
2162				errors = append(errors, compiler.NewError(context, message))
2163			}
2164		}
2165		// string url = 2;
2166		v2 := compiler.MapValueForKey(m, "url")
2167		if v2 != nil {
2168			x.Url, ok = v2.(string)
2169			if !ok {
2170				message := fmt.Sprintf("has unexpected value for url: %+v (%T)", v2, v2)
2171				errors = append(errors, compiler.NewError(context, message))
2172			}
2173		}
2174		// repeated NamedAny vendor_extension = 3;
2175		// MAP: Any ^x-
2176		x.VendorExtension = make([]*NamedAny, 0)
2177		for _, item := range m {
2178			k, ok := compiler.StringValue(item.Key)
2179			if ok {
2180				v := item.Value
2181				if strings.HasPrefix(k, "x-") {
2182					pair := &NamedAny{}
2183					pair.Name = k
2184					result := &Any{}
2185					handled, resultFromExt, err := compiler.HandleExtension(context, v, k)
2186					if handled {
2187						if err != nil {
2188							errors = append(errors, err)
2189						} else {
2190							bytes, _ := yaml.Marshal(v)
2191							result.Yaml = string(bytes)
2192							result.Value = resultFromExt
2193							pair.Value = result
2194						}
2195					} else {
2196						pair.Value, err = NewAny(v, compiler.NewContext(k, context))
2197						if err != nil {
2198							errors = append(errors, err)
2199						}
2200					}
2201					x.VendorExtension = append(x.VendorExtension, pair)
2202				}
2203			}
2204		}
2205	}
2206	return x, compiler.NewErrorGroupOrNil(errors)
2207}
2208
2209// NewNamedAny creates an object of type NamedAny if possible, returning an error if not.
2210func NewNamedAny(in interface{}, context *compiler.Context) (*NamedAny, error) {
2211	errors := make([]error, 0)
2212	x := &NamedAny{}
2213	m, ok := compiler.UnpackMap(in)
2214	if !ok {
2215		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
2216		errors = append(errors, compiler.NewError(context, message))
2217	} else {
2218		allowedKeys := []string{"name", "value"}
2219		var allowedPatterns []*regexp.Regexp
2220		invalidKeys := compiler.InvalidKeysInMap(m, allowedKeys, allowedPatterns)
2221		if len(invalidKeys) > 0 {
2222			message := fmt.Sprintf("has invalid %s: %+v", compiler.PluralProperties(len(invalidKeys)), strings.Join(invalidKeys, ", "))
2223			errors = append(errors, compiler.NewError(context, message))
2224		}
2225		// string name = 1;
2226		v1 := compiler.MapValueForKey(m, "name")
2227		if v1 != nil {
2228			x.Name, ok = v1.(string)
2229			if !ok {
2230				message := fmt.Sprintf("has unexpected value for name: %+v (%T)", v1, v1)
2231				errors = append(errors, compiler.NewError(context, message))
2232			}
2233		}
2234		// Any value = 2;
2235		v2 := compiler.MapValueForKey(m, "value")
2236		if v2 != nil {
2237			var err error
2238			x.Value, err = NewAny(v2, compiler.NewContext("value", context))
2239			if err != nil {
2240				errors = append(errors, err)
2241			}
2242		}
2243	}
2244	return x, compiler.NewErrorGroupOrNil(errors)
2245}
2246
2247// NewNamedHeader creates an object of type NamedHeader if possible, returning an error if not.
2248func NewNamedHeader(in interface{}, context *compiler.Context) (*NamedHeader, error) {
2249	errors := make([]error, 0)
2250	x := &NamedHeader{}
2251	m, ok := compiler.UnpackMap(in)
2252	if !ok {
2253		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
2254		errors = append(errors, compiler.NewError(context, message))
2255	} else {
2256		allowedKeys := []string{"name", "value"}
2257		var allowedPatterns []*regexp.Regexp
2258		invalidKeys := compiler.InvalidKeysInMap(m, allowedKeys, allowedPatterns)
2259		if len(invalidKeys) > 0 {
2260			message := fmt.Sprintf("has invalid %s: %+v", compiler.PluralProperties(len(invalidKeys)), strings.Join(invalidKeys, ", "))
2261			errors = append(errors, compiler.NewError(context, message))
2262		}
2263		// string name = 1;
2264		v1 := compiler.MapValueForKey(m, "name")
2265		if v1 != nil {
2266			x.Name, ok = v1.(string)
2267			if !ok {
2268				message := fmt.Sprintf("has unexpected value for name: %+v (%T)", v1, v1)
2269				errors = append(errors, compiler.NewError(context, message))
2270			}
2271		}
2272		// Header value = 2;
2273		v2 := compiler.MapValueForKey(m, "value")
2274		if v2 != nil {
2275			var err error
2276			x.Value, err = NewHeader(v2, compiler.NewContext("value", context))
2277			if err != nil {
2278				errors = append(errors, err)
2279			}
2280		}
2281	}
2282	return x, compiler.NewErrorGroupOrNil(errors)
2283}
2284
2285// NewNamedParameter creates an object of type NamedParameter if possible, returning an error if not.
2286func NewNamedParameter(in interface{}, context *compiler.Context) (*NamedParameter, error) {
2287	errors := make([]error, 0)
2288	x := &NamedParameter{}
2289	m, ok := compiler.UnpackMap(in)
2290	if !ok {
2291		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
2292		errors = append(errors, compiler.NewError(context, message))
2293	} else {
2294		allowedKeys := []string{"name", "value"}
2295		var allowedPatterns []*regexp.Regexp
2296		invalidKeys := compiler.InvalidKeysInMap(m, allowedKeys, allowedPatterns)
2297		if len(invalidKeys) > 0 {
2298			message := fmt.Sprintf("has invalid %s: %+v", compiler.PluralProperties(len(invalidKeys)), strings.Join(invalidKeys, ", "))
2299			errors = append(errors, compiler.NewError(context, message))
2300		}
2301		// string name = 1;
2302		v1 := compiler.MapValueForKey(m, "name")
2303		if v1 != nil {
2304			x.Name, ok = v1.(string)
2305			if !ok {
2306				message := fmt.Sprintf("has unexpected value for name: %+v (%T)", v1, v1)
2307				errors = append(errors, compiler.NewError(context, message))
2308			}
2309		}
2310		// Parameter value = 2;
2311		v2 := compiler.MapValueForKey(m, "value")
2312		if v2 != nil {
2313			var err error
2314			x.Value, err = NewParameter(v2, compiler.NewContext("value", context))
2315			if err != nil {
2316				errors = append(errors, err)
2317			}
2318		}
2319	}
2320	return x, compiler.NewErrorGroupOrNil(errors)
2321}
2322
2323// NewNamedPathItem creates an object of type NamedPathItem if possible, returning an error if not.
2324func NewNamedPathItem(in interface{}, context *compiler.Context) (*NamedPathItem, error) {
2325	errors := make([]error, 0)
2326	x := &NamedPathItem{}
2327	m, ok := compiler.UnpackMap(in)
2328	if !ok {
2329		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
2330		errors = append(errors, compiler.NewError(context, message))
2331	} else {
2332		allowedKeys := []string{"name", "value"}
2333		var allowedPatterns []*regexp.Regexp
2334		invalidKeys := compiler.InvalidKeysInMap(m, allowedKeys, allowedPatterns)
2335		if len(invalidKeys) > 0 {
2336			message := fmt.Sprintf("has invalid %s: %+v", compiler.PluralProperties(len(invalidKeys)), strings.Join(invalidKeys, ", "))
2337			errors = append(errors, compiler.NewError(context, message))
2338		}
2339		// string name = 1;
2340		v1 := compiler.MapValueForKey(m, "name")
2341		if v1 != nil {
2342			x.Name, ok = v1.(string)
2343			if !ok {
2344				message := fmt.Sprintf("has unexpected value for name: %+v (%T)", v1, v1)
2345				errors = append(errors, compiler.NewError(context, message))
2346			}
2347		}
2348		// PathItem value = 2;
2349		v2 := compiler.MapValueForKey(m, "value")
2350		if v2 != nil {
2351			var err error
2352			x.Value, err = NewPathItem(v2, compiler.NewContext("value", context))
2353			if err != nil {
2354				errors = append(errors, err)
2355			}
2356		}
2357	}
2358	return x, compiler.NewErrorGroupOrNil(errors)
2359}
2360
2361// NewNamedResponse creates an object of type NamedResponse if possible, returning an error if not.
2362func NewNamedResponse(in interface{}, context *compiler.Context) (*NamedResponse, error) {
2363	errors := make([]error, 0)
2364	x := &NamedResponse{}
2365	m, ok := compiler.UnpackMap(in)
2366	if !ok {
2367		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
2368		errors = append(errors, compiler.NewError(context, message))
2369	} else {
2370		allowedKeys := []string{"name", "value"}
2371		var allowedPatterns []*regexp.Regexp
2372		invalidKeys := compiler.InvalidKeysInMap(m, allowedKeys, allowedPatterns)
2373		if len(invalidKeys) > 0 {
2374			message := fmt.Sprintf("has invalid %s: %+v", compiler.PluralProperties(len(invalidKeys)), strings.Join(invalidKeys, ", "))
2375			errors = append(errors, compiler.NewError(context, message))
2376		}
2377		// string name = 1;
2378		v1 := compiler.MapValueForKey(m, "name")
2379		if v1 != nil {
2380			x.Name, ok = v1.(string)
2381			if !ok {
2382				message := fmt.Sprintf("has unexpected value for name: %+v (%T)", v1, v1)
2383				errors = append(errors, compiler.NewError(context, message))
2384			}
2385		}
2386		// Response value = 2;
2387		v2 := compiler.MapValueForKey(m, "value")
2388		if v2 != nil {
2389			var err error
2390			x.Value, err = NewResponse(v2, compiler.NewContext("value", context))
2391			if err != nil {
2392				errors = append(errors, err)
2393			}
2394		}
2395	}
2396	return x, compiler.NewErrorGroupOrNil(errors)
2397}
2398
2399// NewNamedResponseValue creates an object of type NamedResponseValue if possible, returning an error if not.
2400func NewNamedResponseValue(in interface{}, context *compiler.Context) (*NamedResponseValue, error) {
2401	errors := make([]error, 0)
2402	x := &NamedResponseValue{}
2403	m, ok := compiler.UnpackMap(in)
2404	if !ok {
2405		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
2406		errors = append(errors, compiler.NewError(context, message))
2407	} else {
2408		allowedKeys := []string{"name", "value"}
2409		var allowedPatterns []*regexp.Regexp
2410		invalidKeys := compiler.InvalidKeysInMap(m, allowedKeys, allowedPatterns)
2411		if len(invalidKeys) > 0 {
2412			message := fmt.Sprintf("has invalid %s: %+v", compiler.PluralProperties(len(invalidKeys)), strings.Join(invalidKeys, ", "))
2413			errors = append(errors, compiler.NewError(context, message))
2414		}
2415		// string name = 1;
2416		v1 := compiler.MapValueForKey(m, "name")
2417		if v1 != nil {
2418			x.Name, ok = v1.(string)
2419			if !ok {
2420				message := fmt.Sprintf("has unexpected value for name: %+v (%T)", v1, v1)
2421				errors = append(errors, compiler.NewError(context, message))
2422			}
2423		}
2424		// ResponseValue value = 2;
2425		v2 := compiler.MapValueForKey(m, "value")
2426		if v2 != nil {
2427			var err error
2428			x.Value, err = NewResponseValue(v2, compiler.NewContext("value", context))
2429			if err != nil {
2430				errors = append(errors, err)
2431			}
2432		}
2433	}
2434	return x, compiler.NewErrorGroupOrNil(errors)
2435}
2436
2437// NewNamedSchema creates an object of type NamedSchema if possible, returning an error if not.
2438func NewNamedSchema(in interface{}, context *compiler.Context) (*NamedSchema, error) {
2439	errors := make([]error, 0)
2440	x := &NamedSchema{}
2441	m, ok := compiler.UnpackMap(in)
2442	if !ok {
2443		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
2444		errors = append(errors, compiler.NewError(context, message))
2445	} else {
2446		allowedKeys := []string{"name", "value"}
2447		var allowedPatterns []*regexp.Regexp
2448		invalidKeys := compiler.InvalidKeysInMap(m, allowedKeys, allowedPatterns)
2449		if len(invalidKeys) > 0 {
2450			message := fmt.Sprintf("has invalid %s: %+v", compiler.PluralProperties(len(invalidKeys)), strings.Join(invalidKeys, ", "))
2451			errors = append(errors, compiler.NewError(context, message))
2452		}
2453		// string name = 1;
2454		v1 := compiler.MapValueForKey(m, "name")
2455		if v1 != nil {
2456			x.Name, ok = v1.(string)
2457			if !ok {
2458				message := fmt.Sprintf("has unexpected value for name: %+v (%T)", v1, v1)
2459				errors = append(errors, compiler.NewError(context, message))
2460			}
2461		}
2462		// Schema value = 2;
2463		v2 := compiler.MapValueForKey(m, "value")
2464		if v2 != nil {
2465			var err error
2466			x.Value, err = NewSchema(v2, compiler.NewContext("value", context))
2467			if err != nil {
2468				errors = append(errors, err)
2469			}
2470		}
2471	}
2472	return x, compiler.NewErrorGroupOrNil(errors)
2473}
2474
2475// NewNamedSecurityDefinitionsItem creates an object of type NamedSecurityDefinitionsItem if possible, returning an error if not.
2476func NewNamedSecurityDefinitionsItem(in interface{}, context *compiler.Context) (*NamedSecurityDefinitionsItem, error) {
2477	errors := make([]error, 0)
2478	x := &NamedSecurityDefinitionsItem{}
2479	m, ok := compiler.UnpackMap(in)
2480	if !ok {
2481		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
2482		errors = append(errors, compiler.NewError(context, message))
2483	} else {
2484		allowedKeys := []string{"name", "value"}
2485		var allowedPatterns []*regexp.Regexp
2486		invalidKeys := compiler.InvalidKeysInMap(m, allowedKeys, allowedPatterns)
2487		if len(invalidKeys) > 0 {
2488			message := fmt.Sprintf("has invalid %s: %+v", compiler.PluralProperties(len(invalidKeys)), strings.Join(invalidKeys, ", "))
2489			errors = append(errors, compiler.NewError(context, message))
2490		}
2491		// string name = 1;
2492		v1 := compiler.MapValueForKey(m, "name")
2493		if v1 != nil {
2494			x.Name, ok = v1.(string)
2495			if !ok {
2496				message := fmt.Sprintf("has unexpected value for name: %+v (%T)", v1, v1)
2497				errors = append(errors, compiler.NewError(context, message))
2498			}
2499		}
2500		// SecurityDefinitionsItem value = 2;
2501		v2 := compiler.MapValueForKey(m, "value")
2502		if v2 != nil {
2503			var err error
2504			x.Value, err = NewSecurityDefinitionsItem(v2, compiler.NewContext("value", context))
2505			if err != nil {
2506				errors = append(errors, err)
2507			}
2508		}
2509	}
2510	return x, compiler.NewErrorGroupOrNil(errors)
2511}
2512
2513// NewNamedString creates an object of type NamedString if possible, returning an error if not.
2514func NewNamedString(in interface{}, context *compiler.Context) (*NamedString, error) {
2515	errors := make([]error, 0)
2516	x := &NamedString{}
2517	m, ok := compiler.UnpackMap(in)
2518	if !ok {
2519		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
2520		errors = append(errors, compiler.NewError(context, message))
2521	} else {
2522		allowedKeys := []string{"name", "value"}
2523		var allowedPatterns []*regexp.Regexp
2524		invalidKeys := compiler.InvalidKeysInMap(m, allowedKeys, allowedPatterns)
2525		if len(invalidKeys) > 0 {
2526			message := fmt.Sprintf("has invalid %s: %+v", compiler.PluralProperties(len(invalidKeys)), strings.Join(invalidKeys, ", "))
2527			errors = append(errors, compiler.NewError(context, message))
2528		}
2529		// string name = 1;
2530		v1 := compiler.MapValueForKey(m, "name")
2531		if v1 != nil {
2532			x.Name, ok = v1.(string)
2533			if !ok {
2534				message := fmt.Sprintf("has unexpected value for name: %+v (%T)", v1, v1)
2535				errors = append(errors, compiler.NewError(context, message))
2536			}
2537		}
2538		// string value = 2;
2539		v2 := compiler.MapValueForKey(m, "value")
2540		if v2 != nil {
2541			x.Value, ok = v2.(string)
2542			if !ok {
2543				message := fmt.Sprintf("has unexpected value for value: %+v (%T)", v2, v2)
2544				errors = append(errors, compiler.NewError(context, message))
2545			}
2546		}
2547	}
2548	return x, compiler.NewErrorGroupOrNil(errors)
2549}
2550
2551// NewNamedStringArray creates an object of type NamedStringArray if possible, returning an error if not.
2552func NewNamedStringArray(in interface{}, context *compiler.Context) (*NamedStringArray, error) {
2553	errors := make([]error, 0)
2554	x := &NamedStringArray{}
2555	m, ok := compiler.UnpackMap(in)
2556	if !ok {
2557		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
2558		errors = append(errors, compiler.NewError(context, message))
2559	} else {
2560		allowedKeys := []string{"name", "value"}
2561		var allowedPatterns []*regexp.Regexp
2562		invalidKeys := compiler.InvalidKeysInMap(m, allowedKeys, allowedPatterns)
2563		if len(invalidKeys) > 0 {
2564			message := fmt.Sprintf("has invalid %s: %+v", compiler.PluralProperties(len(invalidKeys)), strings.Join(invalidKeys, ", "))
2565			errors = append(errors, compiler.NewError(context, message))
2566		}
2567		// string name = 1;
2568		v1 := compiler.MapValueForKey(m, "name")
2569		if v1 != nil {
2570			x.Name, ok = v1.(string)
2571			if !ok {
2572				message := fmt.Sprintf("has unexpected value for name: %+v (%T)", v1, v1)
2573				errors = append(errors, compiler.NewError(context, message))
2574			}
2575		}
2576		// StringArray value = 2;
2577		v2 := compiler.MapValueForKey(m, "value")
2578		if v2 != nil {
2579			var err error
2580			x.Value, err = NewStringArray(v2, compiler.NewContext("value", context))
2581			if err != nil {
2582				errors = append(errors, err)
2583			}
2584		}
2585	}
2586	return x, compiler.NewErrorGroupOrNil(errors)
2587}
2588
2589// NewNonBodyParameter creates an object of type NonBodyParameter if possible, returning an error if not.
2590func NewNonBodyParameter(in interface{}, context *compiler.Context) (*NonBodyParameter, error) {
2591	errors := make([]error, 0)
2592	x := &NonBodyParameter{}
2593	matched := false
2594	m, ok := compiler.UnpackMap(in)
2595	if !ok {
2596		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
2597		errors = append(errors, compiler.NewError(context, message))
2598	} else {
2599		requiredKeys := []string{"in", "name", "type"}
2600		missingKeys := compiler.MissingKeysInMap(m, requiredKeys)
2601		if len(missingKeys) > 0 {
2602			message := fmt.Sprintf("is missing required %s: %+v", compiler.PluralProperties(len(missingKeys)), strings.Join(missingKeys, ", "))
2603			errors = append(errors, compiler.NewError(context, message))
2604		}
2605		// HeaderParameterSubSchema header_parameter_sub_schema = 1;
2606		{
2607			// errors might be ok here, they mean we just don't have the right subtype
2608			t, matchingError := NewHeaderParameterSubSchema(m, compiler.NewContext("headerParameterSubSchema", context))
2609			if matchingError == nil {
2610				x.Oneof = &NonBodyParameter_HeaderParameterSubSchema{HeaderParameterSubSchema: t}
2611				matched = true
2612			} else {
2613				errors = append(errors, matchingError)
2614			}
2615		}
2616		// FormDataParameterSubSchema form_data_parameter_sub_schema = 2;
2617		{
2618			// errors might be ok here, they mean we just don't have the right subtype
2619			t, matchingError := NewFormDataParameterSubSchema(m, compiler.NewContext("formDataParameterSubSchema", context))
2620			if matchingError == nil {
2621				x.Oneof = &NonBodyParameter_FormDataParameterSubSchema{FormDataParameterSubSchema: t}
2622				matched = true
2623			} else {
2624				errors = append(errors, matchingError)
2625			}
2626		}
2627		// QueryParameterSubSchema query_parameter_sub_schema = 3;
2628		{
2629			// errors might be ok here, they mean we just don't have the right subtype
2630			t, matchingError := NewQueryParameterSubSchema(m, compiler.NewContext("queryParameterSubSchema", context))
2631			if matchingError == nil {
2632				x.Oneof = &NonBodyParameter_QueryParameterSubSchema{QueryParameterSubSchema: t}
2633				matched = true
2634			} else {
2635				errors = append(errors, matchingError)
2636			}
2637		}
2638		// PathParameterSubSchema path_parameter_sub_schema = 4;
2639		{
2640			// errors might be ok here, they mean we just don't have the right subtype
2641			t, matchingError := NewPathParameterSubSchema(m, compiler.NewContext("pathParameterSubSchema", context))
2642			if matchingError == nil {
2643				x.Oneof = &NonBodyParameter_PathParameterSubSchema{PathParameterSubSchema: t}
2644				matched = true
2645			} else {
2646				errors = append(errors, matchingError)
2647			}
2648		}
2649	}
2650	if matched {
2651		// since the oneof matched one of its possibilities, discard any matching errors
2652		errors = make([]error, 0)
2653	}
2654	return x, compiler.NewErrorGroupOrNil(errors)
2655}
2656
2657// NewOauth2AccessCodeSecurity creates an object of type Oauth2AccessCodeSecurity if possible, returning an error if not.
2658func NewOauth2AccessCodeSecurity(in interface{}, context *compiler.Context) (*Oauth2AccessCodeSecurity, error) {
2659	errors := make([]error, 0)
2660	x := &Oauth2AccessCodeSecurity{}
2661	m, ok := compiler.UnpackMap(in)
2662	if !ok {
2663		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
2664		errors = append(errors, compiler.NewError(context, message))
2665	} else {
2666		requiredKeys := []string{"authorizationUrl", "flow", "tokenUrl", "type"}
2667		missingKeys := compiler.MissingKeysInMap(m, requiredKeys)
2668		if len(missingKeys) > 0 {
2669			message := fmt.Sprintf("is missing required %s: %+v", compiler.PluralProperties(len(missingKeys)), strings.Join(missingKeys, ", "))
2670			errors = append(errors, compiler.NewError(context, message))
2671		}
2672		allowedKeys := []string{"authorizationUrl", "description", "flow", "scopes", "tokenUrl", "type"}
2673		allowedPatterns := []*regexp.Regexp{pattern0}
2674		invalidKeys := compiler.InvalidKeysInMap(m, allowedKeys, allowedPatterns)
2675		if len(invalidKeys) > 0 {
2676			message := fmt.Sprintf("has invalid %s: %+v", compiler.PluralProperties(len(invalidKeys)), strings.Join(invalidKeys, ", "))
2677			errors = append(errors, compiler.NewError(context, message))
2678		}
2679		// string type = 1;
2680		v1 := compiler.MapValueForKey(m, "type")
2681		if v1 != nil {
2682			x.Type, ok = v1.(string)
2683			if !ok {
2684				message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v1, v1)
2685				errors = append(errors, compiler.NewError(context, message))
2686			}
2687			// check for valid enum values
2688			// [oauth2]
2689			if ok && !compiler.StringArrayContainsValue([]string{"oauth2"}, x.Type) {
2690				message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v1, v1)
2691				errors = append(errors, compiler.NewError(context, message))
2692			}
2693		}
2694		// string flow = 2;
2695		v2 := compiler.MapValueForKey(m, "flow")
2696		if v2 != nil {
2697			x.Flow, ok = v2.(string)
2698			if !ok {
2699				message := fmt.Sprintf("has unexpected value for flow: %+v (%T)", v2, v2)
2700				errors = append(errors, compiler.NewError(context, message))
2701			}
2702			// check for valid enum values
2703			// [accessCode]
2704			if ok && !compiler.StringArrayContainsValue([]string{"accessCode"}, x.Flow) {
2705				message := fmt.Sprintf("has unexpected value for flow: %+v (%T)", v2, v2)
2706				errors = append(errors, compiler.NewError(context, message))
2707			}
2708		}
2709		// Oauth2Scopes scopes = 3;
2710		v3 := compiler.MapValueForKey(m, "scopes")
2711		if v3 != nil {
2712			var err error
2713			x.Scopes, err = NewOauth2Scopes(v3, compiler.NewContext("scopes", context))
2714			if err != nil {
2715				errors = append(errors, err)
2716			}
2717		}
2718		// string authorization_url = 4;
2719		v4 := compiler.MapValueForKey(m, "authorizationUrl")
2720		if v4 != nil {
2721			x.AuthorizationUrl, ok = v4.(string)
2722			if !ok {
2723				message := fmt.Sprintf("has unexpected value for authorizationUrl: %+v (%T)", v4, v4)
2724				errors = append(errors, compiler.NewError(context, message))
2725			}
2726		}
2727		// string token_url = 5;
2728		v5 := compiler.MapValueForKey(m, "tokenUrl")
2729		if v5 != nil {
2730			x.TokenUrl, ok = v5.(string)
2731			if !ok {
2732				message := fmt.Sprintf("has unexpected value for tokenUrl: %+v (%T)", v5, v5)
2733				errors = append(errors, compiler.NewError(context, message))
2734			}
2735		}
2736		// string description = 6;
2737		v6 := compiler.MapValueForKey(m, "description")
2738		if v6 != nil {
2739			x.Description, ok = v6.(string)
2740			if !ok {
2741				message := fmt.Sprintf("has unexpected value for description: %+v (%T)", v6, v6)
2742				errors = append(errors, compiler.NewError(context, message))
2743			}
2744		}
2745		// repeated NamedAny vendor_extension = 7;
2746		// MAP: Any ^x-
2747		x.VendorExtension = make([]*NamedAny, 0)
2748		for _, item := range m {
2749			k, ok := compiler.StringValue(item.Key)
2750			if ok {
2751				v := item.Value
2752				if strings.HasPrefix(k, "x-") {
2753					pair := &NamedAny{}
2754					pair.Name = k
2755					result := &Any{}
2756					handled, resultFromExt, err := compiler.HandleExtension(context, v, k)
2757					if handled {
2758						if err != nil {
2759							errors = append(errors, err)
2760						} else {
2761							bytes, _ := yaml.Marshal(v)
2762							result.Yaml = string(bytes)
2763							result.Value = resultFromExt
2764							pair.Value = result
2765						}
2766					} else {
2767						pair.Value, err = NewAny(v, compiler.NewContext(k, context))
2768						if err != nil {
2769							errors = append(errors, err)
2770						}
2771					}
2772					x.VendorExtension = append(x.VendorExtension, pair)
2773				}
2774			}
2775		}
2776	}
2777	return x, compiler.NewErrorGroupOrNil(errors)
2778}
2779
2780// NewOauth2ApplicationSecurity creates an object of type Oauth2ApplicationSecurity if possible, returning an error if not.
2781func NewOauth2ApplicationSecurity(in interface{}, context *compiler.Context) (*Oauth2ApplicationSecurity, error) {
2782	errors := make([]error, 0)
2783	x := &Oauth2ApplicationSecurity{}
2784	m, ok := compiler.UnpackMap(in)
2785	if !ok {
2786		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
2787		errors = append(errors, compiler.NewError(context, message))
2788	} else {
2789		requiredKeys := []string{"flow", "tokenUrl", "type"}
2790		missingKeys := compiler.MissingKeysInMap(m, requiredKeys)
2791		if len(missingKeys) > 0 {
2792			message := fmt.Sprintf("is missing required %s: %+v", compiler.PluralProperties(len(missingKeys)), strings.Join(missingKeys, ", "))
2793			errors = append(errors, compiler.NewError(context, message))
2794		}
2795		allowedKeys := []string{"description", "flow", "scopes", "tokenUrl", "type"}
2796		allowedPatterns := []*regexp.Regexp{pattern0}
2797		invalidKeys := compiler.InvalidKeysInMap(m, allowedKeys, allowedPatterns)
2798		if len(invalidKeys) > 0 {
2799			message := fmt.Sprintf("has invalid %s: %+v", compiler.PluralProperties(len(invalidKeys)), strings.Join(invalidKeys, ", "))
2800			errors = append(errors, compiler.NewError(context, message))
2801		}
2802		// string type = 1;
2803		v1 := compiler.MapValueForKey(m, "type")
2804		if v1 != nil {
2805			x.Type, ok = v1.(string)
2806			if !ok {
2807				message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v1, v1)
2808				errors = append(errors, compiler.NewError(context, message))
2809			}
2810			// check for valid enum values
2811			// [oauth2]
2812			if ok && !compiler.StringArrayContainsValue([]string{"oauth2"}, x.Type) {
2813				message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v1, v1)
2814				errors = append(errors, compiler.NewError(context, message))
2815			}
2816		}
2817		// string flow = 2;
2818		v2 := compiler.MapValueForKey(m, "flow")
2819		if v2 != nil {
2820			x.Flow, ok = v2.(string)
2821			if !ok {
2822				message := fmt.Sprintf("has unexpected value for flow: %+v (%T)", v2, v2)
2823				errors = append(errors, compiler.NewError(context, message))
2824			}
2825			// check for valid enum values
2826			// [application]
2827			if ok && !compiler.StringArrayContainsValue([]string{"application"}, x.Flow) {
2828				message := fmt.Sprintf("has unexpected value for flow: %+v (%T)", v2, v2)
2829				errors = append(errors, compiler.NewError(context, message))
2830			}
2831		}
2832		// Oauth2Scopes scopes = 3;
2833		v3 := compiler.MapValueForKey(m, "scopes")
2834		if v3 != nil {
2835			var err error
2836			x.Scopes, err = NewOauth2Scopes(v3, compiler.NewContext("scopes", context))
2837			if err != nil {
2838				errors = append(errors, err)
2839			}
2840		}
2841		// string token_url = 4;
2842		v4 := compiler.MapValueForKey(m, "tokenUrl")
2843		if v4 != nil {
2844			x.TokenUrl, ok = v4.(string)
2845			if !ok {
2846				message := fmt.Sprintf("has unexpected value for tokenUrl: %+v (%T)", v4, v4)
2847				errors = append(errors, compiler.NewError(context, message))
2848			}
2849		}
2850		// string description = 5;
2851		v5 := compiler.MapValueForKey(m, "description")
2852		if v5 != nil {
2853			x.Description, ok = v5.(string)
2854			if !ok {
2855				message := fmt.Sprintf("has unexpected value for description: %+v (%T)", v5, v5)
2856				errors = append(errors, compiler.NewError(context, message))
2857			}
2858		}
2859		// repeated NamedAny vendor_extension = 6;
2860		// MAP: Any ^x-
2861		x.VendorExtension = make([]*NamedAny, 0)
2862		for _, item := range m {
2863			k, ok := compiler.StringValue(item.Key)
2864			if ok {
2865				v := item.Value
2866				if strings.HasPrefix(k, "x-") {
2867					pair := &NamedAny{}
2868					pair.Name = k
2869					result := &Any{}
2870					handled, resultFromExt, err := compiler.HandleExtension(context, v, k)
2871					if handled {
2872						if err != nil {
2873							errors = append(errors, err)
2874						} else {
2875							bytes, _ := yaml.Marshal(v)
2876							result.Yaml = string(bytes)
2877							result.Value = resultFromExt
2878							pair.Value = result
2879						}
2880					} else {
2881						pair.Value, err = NewAny(v, compiler.NewContext(k, context))
2882						if err != nil {
2883							errors = append(errors, err)
2884						}
2885					}
2886					x.VendorExtension = append(x.VendorExtension, pair)
2887				}
2888			}
2889		}
2890	}
2891	return x, compiler.NewErrorGroupOrNil(errors)
2892}
2893
2894// NewOauth2ImplicitSecurity creates an object of type Oauth2ImplicitSecurity if possible, returning an error if not.
2895func NewOauth2ImplicitSecurity(in interface{}, context *compiler.Context) (*Oauth2ImplicitSecurity, error) {
2896	errors := make([]error, 0)
2897	x := &Oauth2ImplicitSecurity{}
2898	m, ok := compiler.UnpackMap(in)
2899	if !ok {
2900		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
2901		errors = append(errors, compiler.NewError(context, message))
2902	} else {
2903		requiredKeys := []string{"authorizationUrl", "flow", "type"}
2904		missingKeys := compiler.MissingKeysInMap(m, requiredKeys)
2905		if len(missingKeys) > 0 {
2906			message := fmt.Sprintf("is missing required %s: %+v", compiler.PluralProperties(len(missingKeys)), strings.Join(missingKeys, ", "))
2907			errors = append(errors, compiler.NewError(context, message))
2908		}
2909		allowedKeys := []string{"authorizationUrl", "description", "flow", "scopes", "type"}
2910		allowedPatterns := []*regexp.Regexp{pattern0}
2911		invalidKeys := compiler.InvalidKeysInMap(m, allowedKeys, allowedPatterns)
2912		if len(invalidKeys) > 0 {
2913			message := fmt.Sprintf("has invalid %s: %+v", compiler.PluralProperties(len(invalidKeys)), strings.Join(invalidKeys, ", "))
2914			errors = append(errors, compiler.NewError(context, message))
2915		}
2916		// string type = 1;
2917		v1 := compiler.MapValueForKey(m, "type")
2918		if v1 != nil {
2919			x.Type, ok = v1.(string)
2920			if !ok {
2921				message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v1, v1)
2922				errors = append(errors, compiler.NewError(context, message))
2923			}
2924			// check for valid enum values
2925			// [oauth2]
2926			if ok && !compiler.StringArrayContainsValue([]string{"oauth2"}, x.Type) {
2927				message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v1, v1)
2928				errors = append(errors, compiler.NewError(context, message))
2929			}
2930		}
2931		// string flow = 2;
2932		v2 := compiler.MapValueForKey(m, "flow")
2933		if v2 != nil {
2934			x.Flow, ok = v2.(string)
2935			if !ok {
2936				message := fmt.Sprintf("has unexpected value for flow: %+v (%T)", v2, v2)
2937				errors = append(errors, compiler.NewError(context, message))
2938			}
2939			// check for valid enum values
2940			// [implicit]
2941			if ok && !compiler.StringArrayContainsValue([]string{"implicit"}, x.Flow) {
2942				message := fmt.Sprintf("has unexpected value for flow: %+v (%T)", v2, v2)
2943				errors = append(errors, compiler.NewError(context, message))
2944			}
2945		}
2946		// Oauth2Scopes scopes = 3;
2947		v3 := compiler.MapValueForKey(m, "scopes")
2948		if v3 != nil {
2949			var err error
2950			x.Scopes, err = NewOauth2Scopes(v3, compiler.NewContext("scopes", context))
2951			if err != nil {
2952				errors = append(errors, err)
2953			}
2954		}
2955		// string authorization_url = 4;
2956		v4 := compiler.MapValueForKey(m, "authorizationUrl")
2957		if v4 != nil {
2958			x.AuthorizationUrl, ok = v4.(string)
2959			if !ok {
2960				message := fmt.Sprintf("has unexpected value for authorizationUrl: %+v (%T)", v4, v4)
2961				errors = append(errors, compiler.NewError(context, message))
2962			}
2963		}
2964		// string description = 5;
2965		v5 := compiler.MapValueForKey(m, "description")
2966		if v5 != nil {
2967			x.Description, ok = v5.(string)
2968			if !ok {
2969				message := fmt.Sprintf("has unexpected value for description: %+v (%T)", v5, v5)
2970				errors = append(errors, compiler.NewError(context, message))
2971			}
2972		}
2973		// repeated NamedAny vendor_extension = 6;
2974		// MAP: Any ^x-
2975		x.VendorExtension = make([]*NamedAny, 0)
2976		for _, item := range m {
2977			k, ok := compiler.StringValue(item.Key)
2978			if ok {
2979				v := item.Value
2980				if strings.HasPrefix(k, "x-") {
2981					pair := &NamedAny{}
2982					pair.Name = k
2983					result := &Any{}
2984					handled, resultFromExt, err := compiler.HandleExtension(context, v, k)
2985					if handled {
2986						if err != nil {
2987							errors = append(errors, err)
2988						} else {
2989							bytes, _ := yaml.Marshal(v)
2990							result.Yaml = string(bytes)
2991							result.Value = resultFromExt
2992							pair.Value = result
2993						}
2994					} else {
2995						pair.Value, err = NewAny(v, compiler.NewContext(k, context))
2996						if err != nil {
2997							errors = append(errors, err)
2998						}
2999					}
3000					x.VendorExtension = append(x.VendorExtension, pair)
3001				}
3002			}
3003		}
3004	}
3005	return x, compiler.NewErrorGroupOrNil(errors)
3006}
3007
3008// NewOauth2PasswordSecurity creates an object of type Oauth2PasswordSecurity if possible, returning an error if not.
3009func NewOauth2PasswordSecurity(in interface{}, context *compiler.Context) (*Oauth2PasswordSecurity, error) {
3010	errors := make([]error, 0)
3011	x := &Oauth2PasswordSecurity{}
3012	m, ok := compiler.UnpackMap(in)
3013	if !ok {
3014		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
3015		errors = append(errors, compiler.NewError(context, message))
3016	} else {
3017		requiredKeys := []string{"flow", "tokenUrl", "type"}
3018		missingKeys := compiler.MissingKeysInMap(m, requiredKeys)
3019		if len(missingKeys) > 0 {
3020			message := fmt.Sprintf("is missing required %s: %+v", compiler.PluralProperties(len(missingKeys)), strings.Join(missingKeys, ", "))
3021			errors = append(errors, compiler.NewError(context, message))
3022		}
3023		allowedKeys := []string{"description", "flow", "scopes", "tokenUrl", "type"}
3024		allowedPatterns := []*regexp.Regexp{pattern0}
3025		invalidKeys := compiler.InvalidKeysInMap(m, allowedKeys, allowedPatterns)
3026		if len(invalidKeys) > 0 {
3027			message := fmt.Sprintf("has invalid %s: %+v", compiler.PluralProperties(len(invalidKeys)), strings.Join(invalidKeys, ", "))
3028			errors = append(errors, compiler.NewError(context, message))
3029		}
3030		// string type = 1;
3031		v1 := compiler.MapValueForKey(m, "type")
3032		if v1 != nil {
3033			x.Type, ok = v1.(string)
3034			if !ok {
3035				message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v1, v1)
3036				errors = append(errors, compiler.NewError(context, message))
3037			}
3038			// check for valid enum values
3039			// [oauth2]
3040			if ok && !compiler.StringArrayContainsValue([]string{"oauth2"}, x.Type) {
3041				message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v1, v1)
3042				errors = append(errors, compiler.NewError(context, message))
3043			}
3044		}
3045		// string flow = 2;
3046		v2 := compiler.MapValueForKey(m, "flow")
3047		if v2 != nil {
3048			x.Flow, ok = v2.(string)
3049			if !ok {
3050				message := fmt.Sprintf("has unexpected value for flow: %+v (%T)", v2, v2)
3051				errors = append(errors, compiler.NewError(context, message))
3052			}
3053			// check for valid enum values
3054			// [password]
3055			if ok && !compiler.StringArrayContainsValue([]string{"password"}, x.Flow) {
3056				message := fmt.Sprintf("has unexpected value for flow: %+v (%T)", v2, v2)
3057				errors = append(errors, compiler.NewError(context, message))
3058			}
3059		}
3060		// Oauth2Scopes scopes = 3;
3061		v3 := compiler.MapValueForKey(m, "scopes")
3062		if v3 != nil {
3063			var err error
3064			x.Scopes, err = NewOauth2Scopes(v3, compiler.NewContext("scopes", context))
3065			if err != nil {
3066				errors = append(errors, err)
3067			}
3068		}
3069		// string token_url = 4;
3070		v4 := compiler.MapValueForKey(m, "tokenUrl")
3071		if v4 != nil {
3072			x.TokenUrl, ok = v4.(string)
3073			if !ok {
3074				message := fmt.Sprintf("has unexpected value for tokenUrl: %+v (%T)", v4, v4)
3075				errors = append(errors, compiler.NewError(context, message))
3076			}
3077		}
3078		// string description = 5;
3079		v5 := compiler.MapValueForKey(m, "description")
3080		if v5 != nil {
3081			x.Description, ok = v5.(string)
3082			if !ok {
3083				message := fmt.Sprintf("has unexpected value for description: %+v (%T)", v5, v5)
3084				errors = append(errors, compiler.NewError(context, message))
3085			}
3086		}
3087		// repeated NamedAny vendor_extension = 6;
3088		// MAP: Any ^x-
3089		x.VendorExtension = make([]*NamedAny, 0)
3090		for _, item := range m {
3091			k, ok := compiler.StringValue(item.Key)
3092			if ok {
3093				v := item.Value
3094				if strings.HasPrefix(k, "x-") {
3095					pair := &NamedAny{}
3096					pair.Name = k
3097					result := &Any{}
3098					handled, resultFromExt, err := compiler.HandleExtension(context, v, k)
3099					if handled {
3100						if err != nil {
3101							errors = append(errors, err)
3102						} else {
3103							bytes, _ := yaml.Marshal(v)
3104							result.Yaml = string(bytes)
3105							result.Value = resultFromExt
3106							pair.Value = result
3107						}
3108					} else {
3109						pair.Value, err = NewAny(v, compiler.NewContext(k, context))
3110						if err != nil {
3111							errors = append(errors, err)
3112						}
3113					}
3114					x.VendorExtension = append(x.VendorExtension, pair)
3115				}
3116			}
3117		}
3118	}
3119	return x, compiler.NewErrorGroupOrNil(errors)
3120}
3121
3122// NewOauth2Scopes creates an object of type Oauth2Scopes if possible, returning an error if not.
3123func NewOauth2Scopes(in interface{}, context *compiler.Context) (*Oauth2Scopes, error) {
3124	errors := make([]error, 0)
3125	x := &Oauth2Scopes{}
3126	m, ok := compiler.UnpackMap(in)
3127	if !ok {
3128		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
3129		errors = append(errors, compiler.NewError(context, message))
3130	} else {
3131		// repeated NamedString additional_properties = 1;
3132		// MAP: string
3133		x.AdditionalProperties = make([]*NamedString, 0)
3134		for _, item := range m {
3135			k, ok := compiler.StringValue(item.Key)
3136			if ok {
3137				v := item.Value
3138				pair := &NamedString{}
3139				pair.Name = k
3140				pair.Value = v.(string)
3141				x.AdditionalProperties = append(x.AdditionalProperties, pair)
3142			}
3143		}
3144	}
3145	return x, compiler.NewErrorGroupOrNil(errors)
3146}
3147
3148// NewOperation creates an object of type Operation if possible, returning an error if not.
3149func NewOperation(in interface{}, context *compiler.Context) (*Operation, error) {
3150	errors := make([]error, 0)
3151	x := &Operation{}
3152	m, ok := compiler.UnpackMap(in)
3153	if !ok {
3154		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
3155		errors = append(errors, compiler.NewError(context, message))
3156	} else {
3157		requiredKeys := []string{"responses"}
3158		missingKeys := compiler.MissingKeysInMap(m, requiredKeys)
3159		if len(missingKeys) > 0 {
3160			message := fmt.Sprintf("is missing required %s: %+v", compiler.PluralProperties(len(missingKeys)), strings.Join(missingKeys, ", "))
3161			errors = append(errors, compiler.NewError(context, message))
3162		}
3163		allowedKeys := []string{"consumes", "deprecated", "description", "externalDocs", "operationId", "parameters", "produces", "responses", "schemes", "security", "summary", "tags"}
3164		allowedPatterns := []*regexp.Regexp{pattern0}
3165		invalidKeys := compiler.InvalidKeysInMap(m, allowedKeys, allowedPatterns)
3166		if len(invalidKeys) > 0 {
3167			message := fmt.Sprintf("has invalid %s: %+v", compiler.PluralProperties(len(invalidKeys)), strings.Join(invalidKeys, ", "))
3168			errors = append(errors, compiler.NewError(context, message))
3169		}
3170		// repeated string tags = 1;
3171		v1 := compiler.MapValueForKey(m, "tags")
3172		if v1 != nil {
3173			v, ok := v1.([]interface{})
3174			if ok {
3175				x.Tags = compiler.ConvertInterfaceArrayToStringArray(v)
3176			} else {
3177				message := fmt.Sprintf("has unexpected value for tags: %+v (%T)", v1, v1)
3178				errors = append(errors, compiler.NewError(context, message))
3179			}
3180		}
3181		// string summary = 2;
3182		v2 := compiler.MapValueForKey(m, "summary")
3183		if v2 != nil {
3184			x.Summary, ok = v2.(string)
3185			if !ok {
3186				message := fmt.Sprintf("has unexpected value for summary: %+v (%T)", v2, v2)
3187				errors = append(errors, compiler.NewError(context, message))
3188			}
3189		}
3190		// string description = 3;
3191		v3 := compiler.MapValueForKey(m, "description")
3192		if v3 != nil {
3193			x.Description, ok = v3.(string)
3194			if !ok {
3195				message := fmt.Sprintf("has unexpected value for description: %+v (%T)", v3, v3)
3196				errors = append(errors, compiler.NewError(context, message))
3197			}
3198		}
3199		// ExternalDocs external_docs = 4;
3200		v4 := compiler.MapValueForKey(m, "externalDocs")
3201		if v4 != nil {
3202			var err error
3203			x.ExternalDocs, err = NewExternalDocs(v4, compiler.NewContext("externalDocs", context))
3204			if err != nil {
3205				errors = append(errors, err)
3206			}
3207		}
3208		// string operation_id = 5;
3209		v5 := compiler.MapValueForKey(m, "operationId")
3210		if v5 != nil {
3211			x.OperationId, ok = v5.(string)
3212			if !ok {
3213				message := fmt.Sprintf("has unexpected value for operationId: %+v (%T)", v5, v5)
3214				errors = append(errors, compiler.NewError(context, message))
3215			}
3216		}
3217		// repeated string produces = 6;
3218		v6 := compiler.MapValueForKey(m, "produces")
3219		if v6 != nil {
3220			v, ok := v6.([]interface{})
3221			if ok {
3222				x.Produces = compiler.ConvertInterfaceArrayToStringArray(v)
3223			} else {
3224				message := fmt.Sprintf("has unexpected value for produces: %+v (%T)", v6, v6)
3225				errors = append(errors, compiler.NewError(context, message))
3226			}
3227		}
3228		// repeated string consumes = 7;
3229		v7 := compiler.MapValueForKey(m, "consumes")
3230		if v7 != nil {
3231			v, ok := v7.([]interface{})
3232			if ok {
3233				x.Consumes = compiler.ConvertInterfaceArrayToStringArray(v)
3234			} else {
3235				message := fmt.Sprintf("has unexpected value for consumes: %+v (%T)", v7, v7)
3236				errors = append(errors, compiler.NewError(context, message))
3237			}
3238		}
3239		// repeated ParametersItem parameters = 8;
3240		v8 := compiler.MapValueForKey(m, "parameters")
3241		if v8 != nil {
3242			// repeated ParametersItem
3243			x.Parameters = make([]*ParametersItem, 0)
3244			a, ok := v8.([]interface{})
3245			if ok {
3246				for _, item := range a {
3247					y, err := NewParametersItem(item, compiler.NewContext("parameters", context))
3248					if err != nil {
3249						errors = append(errors, err)
3250					}
3251					x.Parameters = append(x.Parameters, y)
3252				}
3253			}
3254		}
3255		// Responses responses = 9;
3256		v9 := compiler.MapValueForKey(m, "responses")
3257		if v9 != nil {
3258			var err error
3259			x.Responses, err = NewResponses(v9, compiler.NewContext("responses", context))
3260			if err != nil {
3261				errors = append(errors, err)
3262			}
3263		}
3264		// repeated string schemes = 10;
3265		v10 := compiler.MapValueForKey(m, "schemes")
3266		if v10 != nil {
3267			v, ok := v10.([]interface{})
3268			if ok {
3269				x.Schemes = compiler.ConvertInterfaceArrayToStringArray(v)
3270			} else {
3271				message := fmt.Sprintf("has unexpected value for schemes: %+v (%T)", v10, v10)
3272				errors = append(errors, compiler.NewError(context, message))
3273			}
3274			// check for valid enum values
3275			// [http https ws wss]
3276			if ok && !compiler.StringArrayContainsValues([]string{"http", "https", "ws", "wss"}, x.Schemes) {
3277				message := fmt.Sprintf("has unexpected value for schemes: %+v", v10)
3278				errors = append(errors, compiler.NewError(context, message))
3279			}
3280		}
3281		// bool deprecated = 11;
3282		v11 := compiler.MapValueForKey(m, "deprecated")
3283		if v11 != nil {
3284			x.Deprecated, ok = v11.(bool)
3285			if !ok {
3286				message := fmt.Sprintf("has unexpected value for deprecated: %+v (%T)", v11, v11)
3287				errors = append(errors, compiler.NewError(context, message))
3288			}
3289		}
3290		// repeated SecurityRequirement security = 12;
3291		v12 := compiler.MapValueForKey(m, "security")
3292		if v12 != nil {
3293			// repeated SecurityRequirement
3294			x.Security = make([]*SecurityRequirement, 0)
3295			a, ok := v12.([]interface{})
3296			if ok {
3297				for _, item := range a {
3298					y, err := NewSecurityRequirement(item, compiler.NewContext("security", context))
3299					if err != nil {
3300						errors = append(errors, err)
3301					}
3302					x.Security = append(x.Security, y)
3303				}
3304			}
3305		}
3306		// repeated NamedAny vendor_extension = 13;
3307		// MAP: Any ^x-
3308		x.VendorExtension = make([]*NamedAny, 0)
3309		for _, item := range m {
3310			k, ok := compiler.StringValue(item.Key)
3311			if ok {
3312				v := item.Value
3313				if strings.HasPrefix(k, "x-") {
3314					pair := &NamedAny{}
3315					pair.Name = k
3316					result := &Any{}
3317					handled, resultFromExt, err := compiler.HandleExtension(context, v, k)
3318					if handled {
3319						if err != nil {
3320							errors = append(errors, err)
3321						} else {
3322							bytes, _ := yaml.Marshal(v)
3323							result.Yaml = string(bytes)
3324							result.Value = resultFromExt
3325							pair.Value = result
3326						}
3327					} else {
3328						pair.Value, err = NewAny(v, compiler.NewContext(k, context))
3329						if err != nil {
3330							errors = append(errors, err)
3331						}
3332					}
3333					x.VendorExtension = append(x.VendorExtension, pair)
3334				}
3335			}
3336		}
3337	}
3338	return x, compiler.NewErrorGroupOrNil(errors)
3339}
3340
3341// NewParameter creates an object of type Parameter if possible, returning an error if not.
3342func NewParameter(in interface{}, context *compiler.Context) (*Parameter, error) {
3343	errors := make([]error, 0)
3344	x := &Parameter{}
3345	matched := false
3346	// BodyParameter body_parameter = 1;
3347	{
3348		m, ok := compiler.UnpackMap(in)
3349		if ok {
3350			// errors might be ok here, they mean we just don't have the right subtype
3351			t, matchingError := NewBodyParameter(m, compiler.NewContext("bodyParameter", context))
3352			if matchingError == nil {
3353				x.Oneof = &Parameter_BodyParameter{BodyParameter: t}
3354				matched = true
3355			} else {
3356				errors = append(errors, matchingError)
3357			}
3358		}
3359	}
3360	// NonBodyParameter non_body_parameter = 2;
3361	{
3362		m, ok := compiler.UnpackMap(in)
3363		if ok {
3364			// errors might be ok here, they mean we just don't have the right subtype
3365			t, matchingError := NewNonBodyParameter(m, compiler.NewContext("nonBodyParameter", context))
3366			if matchingError == nil {
3367				x.Oneof = &Parameter_NonBodyParameter{NonBodyParameter: t}
3368				matched = true
3369			} else {
3370				errors = append(errors, matchingError)
3371			}
3372		}
3373	}
3374	if matched {
3375		// since the oneof matched one of its possibilities, discard any matching errors
3376		errors = make([]error, 0)
3377	}
3378	return x, compiler.NewErrorGroupOrNil(errors)
3379}
3380
3381// NewParameterDefinitions creates an object of type ParameterDefinitions if possible, returning an error if not.
3382func NewParameterDefinitions(in interface{}, context *compiler.Context) (*ParameterDefinitions, error) {
3383	errors := make([]error, 0)
3384	x := &ParameterDefinitions{}
3385	m, ok := compiler.UnpackMap(in)
3386	if !ok {
3387		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
3388		errors = append(errors, compiler.NewError(context, message))
3389	} else {
3390		// repeated NamedParameter additional_properties = 1;
3391		// MAP: Parameter
3392		x.AdditionalProperties = make([]*NamedParameter, 0)
3393		for _, item := range m {
3394			k, ok := compiler.StringValue(item.Key)
3395			if ok {
3396				v := item.Value
3397				pair := &NamedParameter{}
3398				pair.Name = k
3399				var err error
3400				pair.Value, err = NewParameter(v, compiler.NewContext(k, context))
3401				if err != nil {
3402					errors = append(errors, err)
3403				}
3404				x.AdditionalProperties = append(x.AdditionalProperties, pair)
3405			}
3406		}
3407	}
3408	return x, compiler.NewErrorGroupOrNil(errors)
3409}
3410
3411// NewParametersItem creates an object of type ParametersItem if possible, returning an error if not.
3412func NewParametersItem(in interface{}, context *compiler.Context) (*ParametersItem, error) {
3413	errors := make([]error, 0)
3414	x := &ParametersItem{}
3415	matched := false
3416	// Parameter parameter = 1;
3417	{
3418		m, ok := compiler.UnpackMap(in)
3419		if ok {
3420			// errors might be ok here, they mean we just don't have the right subtype
3421			t, matchingError := NewParameter(m, compiler.NewContext("parameter", context))
3422			if matchingError == nil {
3423				x.Oneof = &ParametersItem_Parameter{Parameter: t}
3424				matched = true
3425			} else {
3426				errors = append(errors, matchingError)
3427			}
3428		}
3429	}
3430	// JsonReference json_reference = 2;
3431	{
3432		m, ok := compiler.UnpackMap(in)
3433		if ok {
3434			// errors might be ok here, they mean we just don't have the right subtype
3435			t, matchingError := NewJsonReference(m, compiler.NewContext("jsonReference", context))
3436			if matchingError == nil {
3437				x.Oneof = &ParametersItem_JsonReference{JsonReference: t}
3438				matched = true
3439			} else {
3440				errors = append(errors, matchingError)
3441			}
3442		}
3443	}
3444	if matched {
3445		// since the oneof matched one of its possibilities, discard any matching errors
3446		errors = make([]error, 0)
3447	}
3448	return x, compiler.NewErrorGroupOrNil(errors)
3449}
3450
3451// NewPathItem creates an object of type PathItem if possible, returning an error if not.
3452func NewPathItem(in interface{}, context *compiler.Context) (*PathItem, error) {
3453	errors := make([]error, 0)
3454	x := &PathItem{}
3455	m, ok := compiler.UnpackMap(in)
3456	if !ok {
3457		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
3458		errors = append(errors, compiler.NewError(context, message))
3459	} else {
3460		allowedKeys := []string{"$ref", "delete", "get", "head", "options", "parameters", "patch", "post", "put"}
3461		allowedPatterns := []*regexp.Regexp{pattern0}
3462		invalidKeys := compiler.InvalidKeysInMap(m, allowedKeys, allowedPatterns)
3463		if len(invalidKeys) > 0 {
3464			message := fmt.Sprintf("has invalid %s: %+v", compiler.PluralProperties(len(invalidKeys)), strings.Join(invalidKeys, ", "))
3465			errors = append(errors, compiler.NewError(context, message))
3466		}
3467		// string _ref = 1;
3468		v1 := compiler.MapValueForKey(m, "$ref")
3469		if v1 != nil {
3470			x.XRef, ok = v1.(string)
3471			if !ok {
3472				message := fmt.Sprintf("has unexpected value for $ref: %+v (%T)", v1, v1)
3473				errors = append(errors, compiler.NewError(context, message))
3474			}
3475		}
3476		// Operation get = 2;
3477		v2 := compiler.MapValueForKey(m, "get")
3478		if v2 != nil {
3479			var err error
3480			x.Get, err = NewOperation(v2, compiler.NewContext("get", context))
3481			if err != nil {
3482				errors = append(errors, err)
3483			}
3484		}
3485		// Operation put = 3;
3486		v3 := compiler.MapValueForKey(m, "put")
3487		if v3 != nil {
3488			var err error
3489			x.Put, err = NewOperation(v3, compiler.NewContext("put", context))
3490			if err != nil {
3491				errors = append(errors, err)
3492			}
3493		}
3494		// Operation post = 4;
3495		v4 := compiler.MapValueForKey(m, "post")
3496		if v4 != nil {
3497			var err error
3498			x.Post, err = NewOperation(v4, compiler.NewContext("post", context))
3499			if err != nil {
3500				errors = append(errors, err)
3501			}
3502		}
3503		// Operation delete = 5;
3504		v5 := compiler.MapValueForKey(m, "delete")
3505		if v5 != nil {
3506			var err error
3507			x.Delete, err = NewOperation(v5, compiler.NewContext("delete", context))
3508			if err != nil {
3509				errors = append(errors, err)
3510			}
3511		}
3512		// Operation options = 6;
3513		v6 := compiler.MapValueForKey(m, "options")
3514		if v6 != nil {
3515			var err error
3516			x.Options, err = NewOperation(v6, compiler.NewContext("options", context))
3517			if err != nil {
3518				errors = append(errors, err)
3519			}
3520		}
3521		// Operation head = 7;
3522		v7 := compiler.MapValueForKey(m, "head")
3523		if v7 != nil {
3524			var err error
3525			x.Head, err = NewOperation(v7, compiler.NewContext("head", context))
3526			if err != nil {
3527				errors = append(errors, err)
3528			}
3529		}
3530		// Operation patch = 8;
3531		v8 := compiler.MapValueForKey(m, "patch")
3532		if v8 != nil {
3533			var err error
3534			x.Patch, err = NewOperation(v8, compiler.NewContext("patch", context))
3535			if err != nil {
3536				errors = append(errors, err)
3537			}
3538		}
3539		// repeated ParametersItem parameters = 9;
3540		v9 := compiler.MapValueForKey(m, "parameters")
3541		if v9 != nil {
3542			// repeated ParametersItem
3543			x.Parameters = make([]*ParametersItem, 0)
3544			a, ok := v9.([]interface{})
3545			if ok {
3546				for _, item := range a {
3547					y, err := NewParametersItem(item, compiler.NewContext("parameters", context))
3548					if err != nil {
3549						errors = append(errors, err)
3550					}
3551					x.Parameters = append(x.Parameters, y)
3552				}
3553			}
3554		}
3555		// repeated NamedAny vendor_extension = 10;
3556		// MAP: Any ^x-
3557		x.VendorExtension = make([]*NamedAny, 0)
3558		for _, item := range m {
3559			k, ok := compiler.StringValue(item.Key)
3560			if ok {
3561				v := item.Value
3562				if strings.HasPrefix(k, "x-") {
3563					pair := &NamedAny{}
3564					pair.Name = k
3565					result := &Any{}
3566					handled, resultFromExt, err := compiler.HandleExtension(context, v, k)
3567					if handled {
3568						if err != nil {
3569							errors = append(errors, err)
3570						} else {
3571							bytes, _ := yaml.Marshal(v)
3572							result.Yaml = string(bytes)
3573							result.Value = resultFromExt
3574							pair.Value = result
3575						}
3576					} else {
3577						pair.Value, err = NewAny(v, compiler.NewContext(k, context))
3578						if err != nil {
3579							errors = append(errors, err)
3580						}
3581					}
3582					x.VendorExtension = append(x.VendorExtension, pair)
3583				}
3584			}
3585		}
3586	}
3587	return x, compiler.NewErrorGroupOrNil(errors)
3588}
3589
3590// NewPathParameterSubSchema creates an object of type PathParameterSubSchema if possible, returning an error if not.
3591func NewPathParameterSubSchema(in interface{}, context *compiler.Context) (*PathParameterSubSchema, error) {
3592	errors := make([]error, 0)
3593	x := &PathParameterSubSchema{}
3594	m, ok := compiler.UnpackMap(in)
3595	if !ok {
3596		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
3597		errors = append(errors, compiler.NewError(context, message))
3598	} else {
3599		requiredKeys := []string{"required"}
3600		missingKeys := compiler.MissingKeysInMap(m, requiredKeys)
3601		if len(missingKeys) > 0 {
3602			message := fmt.Sprintf("is missing required %s: %+v", compiler.PluralProperties(len(missingKeys)), strings.Join(missingKeys, ", "))
3603			errors = append(errors, compiler.NewError(context, message))
3604		}
3605		allowedKeys := []string{"collectionFormat", "default", "description", "enum", "exclusiveMaximum", "exclusiveMinimum", "format", "in", "items", "maxItems", "maxLength", "maximum", "minItems", "minLength", "minimum", "multipleOf", "name", "pattern", "required", "type", "uniqueItems"}
3606		allowedPatterns := []*regexp.Regexp{pattern0}
3607		invalidKeys := compiler.InvalidKeysInMap(m, allowedKeys, allowedPatterns)
3608		if len(invalidKeys) > 0 {
3609			message := fmt.Sprintf("has invalid %s: %+v", compiler.PluralProperties(len(invalidKeys)), strings.Join(invalidKeys, ", "))
3610			errors = append(errors, compiler.NewError(context, message))
3611		}
3612		// bool required = 1;
3613		v1 := compiler.MapValueForKey(m, "required")
3614		if v1 != nil {
3615			x.Required, ok = v1.(bool)
3616			if !ok {
3617				message := fmt.Sprintf("has unexpected value for required: %+v (%T)", v1, v1)
3618				errors = append(errors, compiler.NewError(context, message))
3619			}
3620		}
3621		// string in = 2;
3622		v2 := compiler.MapValueForKey(m, "in")
3623		if v2 != nil {
3624			x.In, ok = v2.(string)
3625			if !ok {
3626				message := fmt.Sprintf("has unexpected value for in: %+v (%T)", v2, v2)
3627				errors = append(errors, compiler.NewError(context, message))
3628			}
3629			// check for valid enum values
3630			// [path]
3631			if ok && !compiler.StringArrayContainsValue([]string{"path"}, x.In) {
3632				message := fmt.Sprintf("has unexpected value for in: %+v (%T)", v2, v2)
3633				errors = append(errors, compiler.NewError(context, message))
3634			}
3635		}
3636		// string description = 3;
3637		v3 := compiler.MapValueForKey(m, "description")
3638		if v3 != nil {
3639			x.Description, ok = v3.(string)
3640			if !ok {
3641				message := fmt.Sprintf("has unexpected value for description: %+v (%T)", v3, v3)
3642				errors = append(errors, compiler.NewError(context, message))
3643			}
3644		}
3645		// string name = 4;
3646		v4 := compiler.MapValueForKey(m, "name")
3647		if v4 != nil {
3648			x.Name, ok = v4.(string)
3649			if !ok {
3650				message := fmt.Sprintf("has unexpected value for name: %+v (%T)", v4, v4)
3651				errors = append(errors, compiler.NewError(context, message))
3652			}
3653		}
3654		// string type = 5;
3655		v5 := compiler.MapValueForKey(m, "type")
3656		if v5 != nil {
3657			x.Type, ok = v5.(string)
3658			if !ok {
3659				message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v5, v5)
3660				errors = append(errors, compiler.NewError(context, message))
3661			}
3662			// check for valid enum values
3663			// [string number boolean integer array]
3664			if ok && !compiler.StringArrayContainsValue([]string{"string", "number", "boolean", "integer", "array"}, x.Type) {
3665				message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v5, v5)
3666				errors = append(errors, compiler.NewError(context, message))
3667			}
3668		}
3669		// string format = 6;
3670		v6 := compiler.MapValueForKey(m, "format")
3671		if v6 != nil {
3672			x.Format, ok = v6.(string)
3673			if !ok {
3674				message := fmt.Sprintf("has unexpected value for format: %+v (%T)", v6, v6)
3675				errors = append(errors, compiler.NewError(context, message))
3676			}
3677		}
3678		// PrimitivesItems items = 7;
3679		v7 := compiler.MapValueForKey(m, "items")
3680		if v7 != nil {
3681			var err error
3682			x.Items, err = NewPrimitivesItems(v7, compiler.NewContext("items", context))
3683			if err != nil {
3684				errors = append(errors, err)
3685			}
3686		}
3687		// string collection_format = 8;
3688		v8 := compiler.MapValueForKey(m, "collectionFormat")
3689		if v8 != nil {
3690			x.CollectionFormat, ok = v8.(string)
3691			if !ok {
3692				message := fmt.Sprintf("has unexpected value for collectionFormat: %+v (%T)", v8, v8)
3693				errors = append(errors, compiler.NewError(context, message))
3694			}
3695			// check for valid enum values
3696			// [csv ssv tsv pipes]
3697			if ok && !compiler.StringArrayContainsValue([]string{"csv", "ssv", "tsv", "pipes"}, x.CollectionFormat) {
3698				message := fmt.Sprintf("has unexpected value for collectionFormat: %+v (%T)", v8, v8)
3699				errors = append(errors, compiler.NewError(context, message))
3700			}
3701		}
3702		// Any default = 9;
3703		v9 := compiler.MapValueForKey(m, "default")
3704		if v9 != nil {
3705			var err error
3706			x.Default, err = NewAny(v9, compiler.NewContext("default", context))
3707			if err != nil {
3708				errors = append(errors, err)
3709			}
3710		}
3711		// float maximum = 10;
3712		v10 := compiler.MapValueForKey(m, "maximum")
3713		if v10 != nil {
3714			switch v10 := v10.(type) {
3715			case float64:
3716				x.Maximum = v10
3717			case float32:
3718				x.Maximum = float64(v10)
3719			case uint64:
3720				x.Maximum = float64(v10)
3721			case uint32:
3722				x.Maximum = float64(v10)
3723			case int64:
3724				x.Maximum = float64(v10)
3725			case int32:
3726				x.Maximum = float64(v10)
3727			case int:
3728				x.Maximum = float64(v10)
3729			default:
3730				message := fmt.Sprintf("has unexpected value for maximum: %+v (%T)", v10, v10)
3731				errors = append(errors, compiler.NewError(context, message))
3732			}
3733		}
3734		// bool exclusive_maximum = 11;
3735		v11 := compiler.MapValueForKey(m, "exclusiveMaximum")
3736		if v11 != nil {
3737			x.ExclusiveMaximum, ok = v11.(bool)
3738			if !ok {
3739				message := fmt.Sprintf("has unexpected value for exclusiveMaximum: %+v (%T)", v11, v11)
3740				errors = append(errors, compiler.NewError(context, message))
3741			}
3742		}
3743		// float minimum = 12;
3744		v12 := compiler.MapValueForKey(m, "minimum")
3745		if v12 != nil {
3746			switch v12 := v12.(type) {
3747			case float64:
3748				x.Minimum = v12
3749			case float32:
3750				x.Minimum = float64(v12)
3751			case uint64:
3752				x.Minimum = float64(v12)
3753			case uint32:
3754				x.Minimum = float64(v12)
3755			case int64:
3756				x.Minimum = float64(v12)
3757			case int32:
3758				x.Minimum = float64(v12)
3759			case int:
3760				x.Minimum = float64(v12)
3761			default:
3762				message := fmt.Sprintf("has unexpected value for minimum: %+v (%T)", v12, v12)
3763				errors = append(errors, compiler.NewError(context, message))
3764			}
3765		}
3766		// bool exclusive_minimum = 13;
3767		v13 := compiler.MapValueForKey(m, "exclusiveMinimum")
3768		if v13 != nil {
3769			x.ExclusiveMinimum, ok = v13.(bool)
3770			if !ok {
3771				message := fmt.Sprintf("has unexpected value for exclusiveMinimum: %+v (%T)", v13, v13)
3772				errors = append(errors, compiler.NewError(context, message))
3773			}
3774		}
3775		// int64 max_length = 14;
3776		v14 := compiler.MapValueForKey(m, "maxLength")
3777		if v14 != nil {
3778			t, ok := v14.(int)
3779			if ok {
3780				x.MaxLength = int64(t)
3781			} else {
3782				message := fmt.Sprintf("has unexpected value for maxLength: %+v (%T)", v14, v14)
3783				errors = append(errors, compiler.NewError(context, message))
3784			}
3785		}
3786		// int64 min_length = 15;
3787		v15 := compiler.MapValueForKey(m, "minLength")
3788		if v15 != nil {
3789			t, ok := v15.(int)
3790			if ok {
3791				x.MinLength = int64(t)
3792			} else {
3793				message := fmt.Sprintf("has unexpected value for minLength: %+v (%T)", v15, v15)
3794				errors = append(errors, compiler.NewError(context, message))
3795			}
3796		}
3797		// string pattern = 16;
3798		v16 := compiler.MapValueForKey(m, "pattern")
3799		if v16 != nil {
3800			x.Pattern, ok = v16.(string)
3801			if !ok {
3802				message := fmt.Sprintf("has unexpected value for pattern: %+v (%T)", v16, v16)
3803				errors = append(errors, compiler.NewError(context, message))
3804			}
3805		}
3806		// int64 max_items = 17;
3807		v17 := compiler.MapValueForKey(m, "maxItems")
3808		if v17 != nil {
3809			t, ok := v17.(int)
3810			if ok {
3811				x.MaxItems = int64(t)
3812			} else {
3813				message := fmt.Sprintf("has unexpected value for maxItems: %+v (%T)", v17, v17)
3814				errors = append(errors, compiler.NewError(context, message))
3815			}
3816		}
3817		// int64 min_items = 18;
3818		v18 := compiler.MapValueForKey(m, "minItems")
3819		if v18 != nil {
3820			t, ok := v18.(int)
3821			if ok {
3822				x.MinItems = int64(t)
3823			} else {
3824				message := fmt.Sprintf("has unexpected value for minItems: %+v (%T)", v18, v18)
3825				errors = append(errors, compiler.NewError(context, message))
3826			}
3827		}
3828		// bool unique_items = 19;
3829		v19 := compiler.MapValueForKey(m, "uniqueItems")
3830		if v19 != nil {
3831			x.UniqueItems, ok = v19.(bool)
3832			if !ok {
3833				message := fmt.Sprintf("has unexpected value for uniqueItems: %+v (%T)", v19, v19)
3834				errors = append(errors, compiler.NewError(context, message))
3835			}
3836		}
3837		// repeated Any enum = 20;
3838		v20 := compiler.MapValueForKey(m, "enum")
3839		if v20 != nil {
3840			// repeated Any
3841			x.Enum = make([]*Any, 0)
3842			a, ok := v20.([]interface{})
3843			if ok {
3844				for _, item := range a {
3845					y, err := NewAny(item, compiler.NewContext("enum", context))
3846					if err != nil {
3847						errors = append(errors, err)
3848					}
3849					x.Enum = append(x.Enum, y)
3850				}
3851			}
3852		}
3853		// float multiple_of = 21;
3854		v21 := compiler.MapValueForKey(m, "multipleOf")
3855		if v21 != nil {
3856			switch v21 := v21.(type) {
3857			case float64:
3858				x.MultipleOf = v21
3859			case float32:
3860				x.MultipleOf = float64(v21)
3861			case uint64:
3862				x.MultipleOf = float64(v21)
3863			case uint32:
3864				x.MultipleOf = float64(v21)
3865			case int64:
3866				x.MultipleOf = float64(v21)
3867			case int32:
3868				x.MultipleOf = float64(v21)
3869			case int:
3870				x.MultipleOf = float64(v21)
3871			default:
3872				message := fmt.Sprintf("has unexpected value for multipleOf: %+v (%T)", v21, v21)
3873				errors = append(errors, compiler.NewError(context, message))
3874			}
3875		}
3876		// repeated NamedAny vendor_extension = 22;
3877		// MAP: Any ^x-
3878		x.VendorExtension = make([]*NamedAny, 0)
3879		for _, item := range m {
3880			k, ok := compiler.StringValue(item.Key)
3881			if ok {
3882				v := item.Value
3883				if strings.HasPrefix(k, "x-") {
3884					pair := &NamedAny{}
3885					pair.Name = k
3886					result := &Any{}
3887					handled, resultFromExt, err := compiler.HandleExtension(context, v, k)
3888					if handled {
3889						if err != nil {
3890							errors = append(errors, err)
3891						} else {
3892							bytes, _ := yaml.Marshal(v)
3893							result.Yaml = string(bytes)
3894							result.Value = resultFromExt
3895							pair.Value = result
3896						}
3897					} else {
3898						pair.Value, err = NewAny(v, compiler.NewContext(k, context))
3899						if err != nil {
3900							errors = append(errors, err)
3901						}
3902					}
3903					x.VendorExtension = append(x.VendorExtension, pair)
3904				}
3905			}
3906		}
3907	}
3908	return x, compiler.NewErrorGroupOrNil(errors)
3909}
3910
3911// NewPaths creates an object of type Paths if possible, returning an error if not.
3912func NewPaths(in interface{}, context *compiler.Context) (*Paths, error) {
3913	errors := make([]error, 0)
3914	x := &Paths{}
3915	m, ok := compiler.UnpackMap(in)
3916	if !ok {
3917		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
3918		errors = append(errors, compiler.NewError(context, message))
3919	} else {
3920		allowedKeys := []string{}
3921		allowedPatterns := []*regexp.Regexp{pattern0, pattern1}
3922		invalidKeys := compiler.InvalidKeysInMap(m, allowedKeys, allowedPatterns)
3923		if len(invalidKeys) > 0 {
3924			message := fmt.Sprintf("has invalid %s: %+v", compiler.PluralProperties(len(invalidKeys)), strings.Join(invalidKeys, ", "))
3925			errors = append(errors, compiler.NewError(context, message))
3926		}
3927		// repeated NamedAny vendor_extension = 1;
3928		// MAP: Any ^x-
3929		x.VendorExtension = make([]*NamedAny, 0)
3930		for _, item := range m {
3931			k, ok := compiler.StringValue(item.Key)
3932			if ok {
3933				v := item.Value
3934				if strings.HasPrefix(k, "x-") {
3935					pair := &NamedAny{}
3936					pair.Name = k
3937					result := &Any{}
3938					handled, resultFromExt, err := compiler.HandleExtension(context, v, k)
3939					if handled {
3940						if err != nil {
3941							errors = append(errors, err)
3942						} else {
3943							bytes, _ := yaml.Marshal(v)
3944							result.Yaml = string(bytes)
3945							result.Value = resultFromExt
3946							pair.Value = result
3947						}
3948					} else {
3949						pair.Value, err = NewAny(v, compiler.NewContext(k, context))
3950						if err != nil {
3951							errors = append(errors, err)
3952						}
3953					}
3954					x.VendorExtension = append(x.VendorExtension, pair)
3955				}
3956			}
3957		}
3958		// repeated NamedPathItem path = 2;
3959		// MAP: PathItem ^/
3960		x.Path = make([]*NamedPathItem, 0)
3961		for _, item := range m {
3962			k, ok := compiler.StringValue(item.Key)
3963			if ok {
3964				v := item.Value
3965				if strings.HasPrefix(k, "/") {
3966					pair := &NamedPathItem{}
3967					pair.Name = k
3968					var err error
3969					pair.Value, err = NewPathItem(v, compiler.NewContext(k, context))
3970					if err != nil {
3971						errors = append(errors, err)
3972					}
3973					x.Path = append(x.Path, pair)
3974				}
3975			}
3976		}
3977	}
3978	return x, compiler.NewErrorGroupOrNil(errors)
3979}
3980
3981// NewPrimitivesItems creates an object of type PrimitivesItems if possible, returning an error if not.
3982func NewPrimitivesItems(in interface{}, context *compiler.Context) (*PrimitivesItems, error) {
3983	errors := make([]error, 0)
3984	x := &PrimitivesItems{}
3985	m, ok := compiler.UnpackMap(in)
3986	if !ok {
3987		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
3988		errors = append(errors, compiler.NewError(context, message))
3989	} else {
3990		allowedKeys := []string{"collectionFormat", "default", "enum", "exclusiveMaximum", "exclusiveMinimum", "format", "items", "maxItems", "maxLength", "maximum", "minItems", "minLength", "minimum", "multipleOf", "pattern", "type", "uniqueItems"}
3991		allowedPatterns := []*regexp.Regexp{pattern0}
3992		invalidKeys := compiler.InvalidKeysInMap(m, allowedKeys, allowedPatterns)
3993		if len(invalidKeys) > 0 {
3994			message := fmt.Sprintf("has invalid %s: %+v", compiler.PluralProperties(len(invalidKeys)), strings.Join(invalidKeys, ", "))
3995			errors = append(errors, compiler.NewError(context, message))
3996		}
3997		// string type = 1;
3998		v1 := compiler.MapValueForKey(m, "type")
3999		if v1 != nil {
4000			x.Type, ok = v1.(string)
4001			if !ok {
4002				message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v1, v1)
4003				errors = append(errors, compiler.NewError(context, message))
4004			}
4005			// check for valid enum values
4006			// [string number integer boolean array]
4007			if ok && !compiler.StringArrayContainsValue([]string{"string", "number", "integer", "boolean", "array"}, x.Type) {
4008				message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v1, v1)
4009				errors = append(errors, compiler.NewError(context, message))
4010			}
4011		}
4012		// string format = 2;
4013		v2 := compiler.MapValueForKey(m, "format")
4014		if v2 != nil {
4015			x.Format, ok = v2.(string)
4016			if !ok {
4017				message := fmt.Sprintf("has unexpected value for format: %+v (%T)", v2, v2)
4018				errors = append(errors, compiler.NewError(context, message))
4019			}
4020		}
4021		// PrimitivesItems items = 3;
4022		v3 := compiler.MapValueForKey(m, "items")
4023		if v3 != nil {
4024			var err error
4025			x.Items, err = NewPrimitivesItems(v3, compiler.NewContext("items", context))
4026			if err != nil {
4027				errors = append(errors, err)
4028			}
4029		}
4030		// string collection_format = 4;
4031		v4 := compiler.MapValueForKey(m, "collectionFormat")
4032		if v4 != nil {
4033			x.CollectionFormat, ok = v4.(string)
4034			if !ok {
4035				message := fmt.Sprintf("has unexpected value for collectionFormat: %+v (%T)", v4, v4)
4036				errors = append(errors, compiler.NewError(context, message))
4037			}
4038			// check for valid enum values
4039			// [csv ssv tsv pipes]
4040			if ok && !compiler.StringArrayContainsValue([]string{"csv", "ssv", "tsv", "pipes"}, x.CollectionFormat) {
4041				message := fmt.Sprintf("has unexpected value for collectionFormat: %+v (%T)", v4, v4)
4042				errors = append(errors, compiler.NewError(context, message))
4043			}
4044		}
4045		// Any default = 5;
4046		v5 := compiler.MapValueForKey(m, "default")
4047		if v5 != nil {
4048			var err error
4049			x.Default, err = NewAny(v5, compiler.NewContext("default", context))
4050			if err != nil {
4051				errors = append(errors, err)
4052			}
4053		}
4054		// float maximum = 6;
4055		v6 := compiler.MapValueForKey(m, "maximum")
4056		if v6 != nil {
4057			switch v6 := v6.(type) {
4058			case float64:
4059				x.Maximum = v6
4060			case float32:
4061				x.Maximum = float64(v6)
4062			case uint64:
4063				x.Maximum = float64(v6)
4064			case uint32:
4065				x.Maximum = float64(v6)
4066			case int64:
4067				x.Maximum = float64(v6)
4068			case int32:
4069				x.Maximum = float64(v6)
4070			case int:
4071				x.Maximum = float64(v6)
4072			default:
4073				message := fmt.Sprintf("has unexpected value for maximum: %+v (%T)", v6, v6)
4074				errors = append(errors, compiler.NewError(context, message))
4075			}
4076		}
4077		// bool exclusive_maximum = 7;
4078		v7 := compiler.MapValueForKey(m, "exclusiveMaximum")
4079		if v7 != nil {
4080			x.ExclusiveMaximum, ok = v7.(bool)
4081			if !ok {
4082				message := fmt.Sprintf("has unexpected value for exclusiveMaximum: %+v (%T)", v7, v7)
4083				errors = append(errors, compiler.NewError(context, message))
4084			}
4085		}
4086		// float minimum = 8;
4087		v8 := compiler.MapValueForKey(m, "minimum")
4088		if v8 != nil {
4089			switch v8 := v8.(type) {
4090			case float64:
4091				x.Minimum = v8
4092			case float32:
4093				x.Minimum = float64(v8)
4094			case uint64:
4095				x.Minimum = float64(v8)
4096			case uint32:
4097				x.Minimum = float64(v8)
4098			case int64:
4099				x.Minimum = float64(v8)
4100			case int32:
4101				x.Minimum = float64(v8)
4102			case int:
4103				x.Minimum = float64(v8)
4104			default:
4105				message := fmt.Sprintf("has unexpected value for minimum: %+v (%T)", v8, v8)
4106				errors = append(errors, compiler.NewError(context, message))
4107			}
4108		}
4109		// bool exclusive_minimum = 9;
4110		v9 := compiler.MapValueForKey(m, "exclusiveMinimum")
4111		if v9 != nil {
4112			x.ExclusiveMinimum, ok = v9.(bool)
4113			if !ok {
4114				message := fmt.Sprintf("has unexpected value for exclusiveMinimum: %+v (%T)", v9, v9)
4115				errors = append(errors, compiler.NewError(context, message))
4116			}
4117		}
4118		// int64 max_length = 10;
4119		v10 := compiler.MapValueForKey(m, "maxLength")
4120		if v10 != nil {
4121			t, ok := v10.(int)
4122			if ok {
4123				x.MaxLength = int64(t)
4124			} else {
4125				message := fmt.Sprintf("has unexpected value for maxLength: %+v (%T)", v10, v10)
4126				errors = append(errors, compiler.NewError(context, message))
4127			}
4128		}
4129		// int64 min_length = 11;
4130		v11 := compiler.MapValueForKey(m, "minLength")
4131		if v11 != nil {
4132			t, ok := v11.(int)
4133			if ok {
4134				x.MinLength = int64(t)
4135			} else {
4136				message := fmt.Sprintf("has unexpected value for minLength: %+v (%T)", v11, v11)
4137				errors = append(errors, compiler.NewError(context, message))
4138			}
4139		}
4140		// string pattern = 12;
4141		v12 := compiler.MapValueForKey(m, "pattern")
4142		if v12 != nil {
4143			x.Pattern, ok = v12.(string)
4144			if !ok {
4145				message := fmt.Sprintf("has unexpected value for pattern: %+v (%T)", v12, v12)
4146				errors = append(errors, compiler.NewError(context, message))
4147			}
4148		}
4149		// int64 max_items = 13;
4150		v13 := compiler.MapValueForKey(m, "maxItems")
4151		if v13 != nil {
4152			t, ok := v13.(int)
4153			if ok {
4154				x.MaxItems = int64(t)
4155			} else {
4156				message := fmt.Sprintf("has unexpected value for maxItems: %+v (%T)", v13, v13)
4157				errors = append(errors, compiler.NewError(context, message))
4158			}
4159		}
4160		// int64 min_items = 14;
4161		v14 := compiler.MapValueForKey(m, "minItems")
4162		if v14 != nil {
4163			t, ok := v14.(int)
4164			if ok {
4165				x.MinItems = int64(t)
4166			} else {
4167				message := fmt.Sprintf("has unexpected value for minItems: %+v (%T)", v14, v14)
4168				errors = append(errors, compiler.NewError(context, message))
4169			}
4170		}
4171		// bool unique_items = 15;
4172		v15 := compiler.MapValueForKey(m, "uniqueItems")
4173		if v15 != nil {
4174			x.UniqueItems, ok = v15.(bool)
4175			if !ok {
4176				message := fmt.Sprintf("has unexpected value for uniqueItems: %+v (%T)", v15, v15)
4177				errors = append(errors, compiler.NewError(context, message))
4178			}
4179		}
4180		// repeated Any enum = 16;
4181		v16 := compiler.MapValueForKey(m, "enum")
4182		if v16 != nil {
4183			// repeated Any
4184			x.Enum = make([]*Any, 0)
4185			a, ok := v16.([]interface{})
4186			if ok {
4187				for _, item := range a {
4188					y, err := NewAny(item, compiler.NewContext("enum", context))
4189					if err != nil {
4190						errors = append(errors, err)
4191					}
4192					x.Enum = append(x.Enum, y)
4193				}
4194			}
4195		}
4196		// float multiple_of = 17;
4197		v17 := compiler.MapValueForKey(m, "multipleOf")
4198		if v17 != nil {
4199			switch v17 := v17.(type) {
4200			case float64:
4201				x.MultipleOf = v17
4202			case float32:
4203				x.MultipleOf = float64(v17)
4204			case uint64:
4205				x.MultipleOf = float64(v17)
4206			case uint32:
4207				x.MultipleOf = float64(v17)
4208			case int64:
4209				x.MultipleOf = float64(v17)
4210			case int32:
4211				x.MultipleOf = float64(v17)
4212			case int:
4213				x.MultipleOf = float64(v17)
4214			default:
4215				message := fmt.Sprintf("has unexpected value for multipleOf: %+v (%T)", v17, v17)
4216				errors = append(errors, compiler.NewError(context, message))
4217			}
4218		}
4219		// repeated NamedAny vendor_extension = 18;
4220		// MAP: Any ^x-
4221		x.VendorExtension = make([]*NamedAny, 0)
4222		for _, item := range m {
4223			k, ok := compiler.StringValue(item.Key)
4224			if ok {
4225				v := item.Value
4226				if strings.HasPrefix(k, "x-") {
4227					pair := &NamedAny{}
4228					pair.Name = k
4229					result := &Any{}
4230					handled, resultFromExt, err := compiler.HandleExtension(context, v, k)
4231					if handled {
4232						if err != nil {
4233							errors = append(errors, err)
4234						} else {
4235							bytes, _ := yaml.Marshal(v)
4236							result.Yaml = string(bytes)
4237							result.Value = resultFromExt
4238							pair.Value = result
4239						}
4240					} else {
4241						pair.Value, err = NewAny(v, compiler.NewContext(k, context))
4242						if err != nil {
4243							errors = append(errors, err)
4244						}
4245					}
4246					x.VendorExtension = append(x.VendorExtension, pair)
4247				}
4248			}
4249		}
4250	}
4251	return x, compiler.NewErrorGroupOrNil(errors)
4252}
4253
4254// NewProperties creates an object of type Properties if possible, returning an error if not.
4255func NewProperties(in interface{}, context *compiler.Context) (*Properties, error) {
4256	errors := make([]error, 0)
4257	x := &Properties{}
4258	m, ok := compiler.UnpackMap(in)
4259	if !ok {
4260		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
4261		errors = append(errors, compiler.NewError(context, message))
4262	} else {
4263		// repeated NamedSchema additional_properties = 1;
4264		// MAP: Schema
4265		x.AdditionalProperties = make([]*NamedSchema, 0)
4266		for _, item := range m {
4267			k, ok := compiler.StringValue(item.Key)
4268			if ok {
4269				v := item.Value
4270				pair := &NamedSchema{}
4271				pair.Name = k
4272				var err error
4273				pair.Value, err = NewSchema(v, compiler.NewContext(k, context))
4274				if err != nil {
4275					errors = append(errors, err)
4276				}
4277				x.AdditionalProperties = append(x.AdditionalProperties, pair)
4278			}
4279		}
4280	}
4281	return x, compiler.NewErrorGroupOrNil(errors)
4282}
4283
4284// NewQueryParameterSubSchema creates an object of type QueryParameterSubSchema if possible, returning an error if not.
4285func NewQueryParameterSubSchema(in interface{}, context *compiler.Context) (*QueryParameterSubSchema, error) {
4286	errors := make([]error, 0)
4287	x := &QueryParameterSubSchema{}
4288	m, ok := compiler.UnpackMap(in)
4289	if !ok {
4290		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
4291		errors = append(errors, compiler.NewError(context, message))
4292	} else {
4293		allowedKeys := []string{"allowEmptyValue", "collectionFormat", "default", "description", "enum", "exclusiveMaximum", "exclusiveMinimum", "format", "in", "items", "maxItems", "maxLength", "maximum", "minItems", "minLength", "minimum", "multipleOf", "name", "pattern", "required", "type", "uniqueItems"}
4294		allowedPatterns := []*regexp.Regexp{pattern0}
4295		invalidKeys := compiler.InvalidKeysInMap(m, allowedKeys, allowedPatterns)
4296		if len(invalidKeys) > 0 {
4297			message := fmt.Sprintf("has invalid %s: %+v", compiler.PluralProperties(len(invalidKeys)), strings.Join(invalidKeys, ", "))
4298			errors = append(errors, compiler.NewError(context, message))
4299		}
4300		// bool required = 1;
4301		v1 := compiler.MapValueForKey(m, "required")
4302		if v1 != nil {
4303			x.Required, ok = v1.(bool)
4304			if !ok {
4305				message := fmt.Sprintf("has unexpected value for required: %+v (%T)", v1, v1)
4306				errors = append(errors, compiler.NewError(context, message))
4307			}
4308		}
4309		// string in = 2;
4310		v2 := compiler.MapValueForKey(m, "in")
4311		if v2 != nil {
4312			x.In, ok = v2.(string)
4313			if !ok {
4314				message := fmt.Sprintf("has unexpected value for in: %+v (%T)", v2, v2)
4315				errors = append(errors, compiler.NewError(context, message))
4316			}
4317			// check for valid enum values
4318			// [query]
4319			if ok && !compiler.StringArrayContainsValue([]string{"query"}, x.In) {
4320				message := fmt.Sprintf("has unexpected value for in: %+v (%T)", v2, v2)
4321				errors = append(errors, compiler.NewError(context, message))
4322			}
4323		}
4324		// string description = 3;
4325		v3 := compiler.MapValueForKey(m, "description")
4326		if v3 != nil {
4327			x.Description, ok = v3.(string)
4328			if !ok {
4329				message := fmt.Sprintf("has unexpected value for description: %+v (%T)", v3, v3)
4330				errors = append(errors, compiler.NewError(context, message))
4331			}
4332		}
4333		// string name = 4;
4334		v4 := compiler.MapValueForKey(m, "name")
4335		if v4 != nil {
4336			x.Name, ok = v4.(string)
4337			if !ok {
4338				message := fmt.Sprintf("has unexpected value for name: %+v (%T)", v4, v4)
4339				errors = append(errors, compiler.NewError(context, message))
4340			}
4341		}
4342		// bool allow_empty_value = 5;
4343		v5 := compiler.MapValueForKey(m, "allowEmptyValue")
4344		if v5 != nil {
4345			x.AllowEmptyValue, ok = v5.(bool)
4346			if !ok {
4347				message := fmt.Sprintf("has unexpected value for allowEmptyValue: %+v (%T)", v5, v5)
4348				errors = append(errors, compiler.NewError(context, message))
4349			}
4350		}
4351		// string type = 6;
4352		v6 := compiler.MapValueForKey(m, "type")
4353		if v6 != nil {
4354			x.Type, ok = v6.(string)
4355			if !ok {
4356				message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v6, v6)
4357				errors = append(errors, compiler.NewError(context, message))
4358			}
4359			// check for valid enum values
4360			// [string number boolean integer array]
4361			if ok && !compiler.StringArrayContainsValue([]string{"string", "number", "boolean", "integer", "array"}, x.Type) {
4362				message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v6, v6)
4363				errors = append(errors, compiler.NewError(context, message))
4364			}
4365		}
4366		// string format = 7;
4367		v7 := compiler.MapValueForKey(m, "format")
4368		if v7 != nil {
4369			x.Format, ok = v7.(string)
4370			if !ok {
4371				message := fmt.Sprintf("has unexpected value for format: %+v (%T)", v7, v7)
4372				errors = append(errors, compiler.NewError(context, message))
4373			}
4374		}
4375		// PrimitivesItems items = 8;
4376		v8 := compiler.MapValueForKey(m, "items")
4377		if v8 != nil {
4378			var err error
4379			x.Items, err = NewPrimitivesItems(v8, compiler.NewContext("items", context))
4380			if err != nil {
4381				errors = append(errors, err)
4382			}
4383		}
4384		// string collection_format = 9;
4385		v9 := compiler.MapValueForKey(m, "collectionFormat")
4386		if v9 != nil {
4387			x.CollectionFormat, ok = v9.(string)
4388			if !ok {
4389				message := fmt.Sprintf("has unexpected value for collectionFormat: %+v (%T)", v9, v9)
4390				errors = append(errors, compiler.NewError(context, message))
4391			}
4392			// check for valid enum values
4393			// [csv ssv tsv pipes multi]
4394			if ok && !compiler.StringArrayContainsValue([]string{"csv", "ssv", "tsv", "pipes", "multi"}, x.CollectionFormat) {
4395				message := fmt.Sprintf("has unexpected value for collectionFormat: %+v (%T)", v9, v9)
4396				errors = append(errors, compiler.NewError(context, message))
4397			}
4398		}
4399		// Any default = 10;
4400		v10 := compiler.MapValueForKey(m, "default")
4401		if v10 != nil {
4402			var err error
4403			x.Default, err = NewAny(v10, compiler.NewContext("default", context))
4404			if err != nil {
4405				errors = append(errors, err)
4406			}
4407		}
4408		// float maximum = 11;
4409		v11 := compiler.MapValueForKey(m, "maximum")
4410		if v11 != nil {
4411			switch v11 := v11.(type) {
4412			case float64:
4413				x.Maximum = v11
4414			case float32:
4415				x.Maximum = float64(v11)
4416			case uint64:
4417				x.Maximum = float64(v11)
4418			case uint32:
4419				x.Maximum = float64(v11)
4420			case int64:
4421				x.Maximum = float64(v11)
4422			case int32:
4423				x.Maximum = float64(v11)
4424			case int:
4425				x.Maximum = float64(v11)
4426			default:
4427				message := fmt.Sprintf("has unexpected value for maximum: %+v (%T)", v11, v11)
4428				errors = append(errors, compiler.NewError(context, message))
4429			}
4430		}
4431		// bool exclusive_maximum = 12;
4432		v12 := compiler.MapValueForKey(m, "exclusiveMaximum")
4433		if v12 != nil {
4434			x.ExclusiveMaximum, ok = v12.(bool)
4435			if !ok {
4436				message := fmt.Sprintf("has unexpected value for exclusiveMaximum: %+v (%T)", v12, v12)
4437				errors = append(errors, compiler.NewError(context, message))
4438			}
4439		}
4440		// float minimum = 13;
4441		v13 := compiler.MapValueForKey(m, "minimum")
4442		if v13 != nil {
4443			switch v13 := v13.(type) {
4444			case float64:
4445				x.Minimum = v13
4446			case float32:
4447				x.Minimum = float64(v13)
4448			case uint64:
4449				x.Minimum = float64(v13)
4450			case uint32:
4451				x.Minimum = float64(v13)
4452			case int64:
4453				x.Minimum = float64(v13)
4454			case int32:
4455				x.Minimum = float64(v13)
4456			case int:
4457				x.Minimum = float64(v13)
4458			default:
4459				message := fmt.Sprintf("has unexpected value for minimum: %+v (%T)", v13, v13)
4460				errors = append(errors, compiler.NewError(context, message))
4461			}
4462		}
4463		// bool exclusive_minimum = 14;
4464		v14 := compiler.MapValueForKey(m, "exclusiveMinimum")
4465		if v14 != nil {
4466			x.ExclusiveMinimum, ok = v14.(bool)
4467			if !ok {
4468				message := fmt.Sprintf("has unexpected value for exclusiveMinimum: %+v (%T)", v14, v14)
4469				errors = append(errors, compiler.NewError(context, message))
4470			}
4471		}
4472		// int64 max_length = 15;
4473		v15 := compiler.MapValueForKey(m, "maxLength")
4474		if v15 != nil {
4475			t, ok := v15.(int)
4476			if ok {
4477				x.MaxLength = int64(t)
4478			} else {
4479				message := fmt.Sprintf("has unexpected value for maxLength: %+v (%T)", v15, v15)
4480				errors = append(errors, compiler.NewError(context, message))
4481			}
4482		}
4483		// int64 min_length = 16;
4484		v16 := compiler.MapValueForKey(m, "minLength")
4485		if v16 != nil {
4486			t, ok := v16.(int)
4487			if ok {
4488				x.MinLength = int64(t)
4489			} else {
4490				message := fmt.Sprintf("has unexpected value for minLength: %+v (%T)", v16, v16)
4491				errors = append(errors, compiler.NewError(context, message))
4492			}
4493		}
4494		// string pattern = 17;
4495		v17 := compiler.MapValueForKey(m, "pattern")
4496		if v17 != nil {
4497			x.Pattern, ok = v17.(string)
4498			if !ok {
4499				message := fmt.Sprintf("has unexpected value for pattern: %+v (%T)", v17, v17)
4500				errors = append(errors, compiler.NewError(context, message))
4501			}
4502		}
4503		// int64 max_items = 18;
4504		v18 := compiler.MapValueForKey(m, "maxItems")
4505		if v18 != nil {
4506			t, ok := v18.(int)
4507			if ok {
4508				x.MaxItems = int64(t)
4509			} else {
4510				message := fmt.Sprintf("has unexpected value for maxItems: %+v (%T)", v18, v18)
4511				errors = append(errors, compiler.NewError(context, message))
4512			}
4513		}
4514		// int64 min_items = 19;
4515		v19 := compiler.MapValueForKey(m, "minItems")
4516		if v19 != nil {
4517			t, ok := v19.(int)
4518			if ok {
4519				x.MinItems = int64(t)
4520			} else {
4521				message := fmt.Sprintf("has unexpected value for minItems: %+v (%T)", v19, v19)
4522				errors = append(errors, compiler.NewError(context, message))
4523			}
4524		}
4525		// bool unique_items = 20;
4526		v20 := compiler.MapValueForKey(m, "uniqueItems")
4527		if v20 != nil {
4528			x.UniqueItems, ok = v20.(bool)
4529			if !ok {
4530				message := fmt.Sprintf("has unexpected value for uniqueItems: %+v (%T)", v20, v20)
4531				errors = append(errors, compiler.NewError(context, message))
4532			}
4533		}
4534		// repeated Any enum = 21;
4535		v21 := compiler.MapValueForKey(m, "enum")
4536		if v21 != nil {
4537			// repeated Any
4538			x.Enum = make([]*Any, 0)
4539			a, ok := v21.([]interface{})
4540			if ok {
4541				for _, item := range a {
4542					y, err := NewAny(item, compiler.NewContext("enum", context))
4543					if err != nil {
4544						errors = append(errors, err)
4545					}
4546					x.Enum = append(x.Enum, y)
4547				}
4548			}
4549		}
4550		// float multiple_of = 22;
4551		v22 := compiler.MapValueForKey(m, "multipleOf")
4552		if v22 != nil {
4553			switch v22 := v22.(type) {
4554			case float64:
4555				x.MultipleOf = v22
4556			case float32:
4557				x.MultipleOf = float64(v22)
4558			case uint64:
4559				x.MultipleOf = float64(v22)
4560			case uint32:
4561				x.MultipleOf = float64(v22)
4562			case int64:
4563				x.MultipleOf = float64(v22)
4564			case int32:
4565				x.MultipleOf = float64(v22)
4566			case int:
4567				x.MultipleOf = float64(v22)
4568			default:
4569				message := fmt.Sprintf("has unexpected value for multipleOf: %+v (%T)", v22, v22)
4570				errors = append(errors, compiler.NewError(context, message))
4571			}
4572		}
4573		// repeated NamedAny vendor_extension = 23;
4574		// MAP: Any ^x-
4575		x.VendorExtension = make([]*NamedAny, 0)
4576		for _, item := range m {
4577			k, ok := compiler.StringValue(item.Key)
4578			if ok {
4579				v := item.Value
4580				if strings.HasPrefix(k, "x-") {
4581					pair := &NamedAny{}
4582					pair.Name = k
4583					result := &Any{}
4584					handled, resultFromExt, err := compiler.HandleExtension(context, v, k)
4585					if handled {
4586						if err != nil {
4587							errors = append(errors, err)
4588						} else {
4589							bytes, _ := yaml.Marshal(v)
4590							result.Yaml = string(bytes)
4591							result.Value = resultFromExt
4592							pair.Value = result
4593						}
4594					} else {
4595						pair.Value, err = NewAny(v, compiler.NewContext(k, context))
4596						if err != nil {
4597							errors = append(errors, err)
4598						}
4599					}
4600					x.VendorExtension = append(x.VendorExtension, pair)
4601				}
4602			}
4603		}
4604	}
4605	return x, compiler.NewErrorGroupOrNil(errors)
4606}
4607
4608// NewResponse creates an object of type Response if possible, returning an error if not.
4609func NewResponse(in interface{}, context *compiler.Context) (*Response, error) {
4610	errors := make([]error, 0)
4611	x := &Response{}
4612	m, ok := compiler.UnpackMap(in)
4613	if !ok {
4614		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
4615		errors = append(errors, compiler.NewError(context, message))
4616	} else {
4617		requiredKeys := []string{"description"}
4618		missingKeys := compiler.MissingKeysInMap(m, requiredKeys)
4619		if len(missingKeys) > 0 {
4620			message := fmt.Sprintf("is missing required %s: %+v", compiler.PluralProperties(len(missingKeys)), strings.Join(missingKeys, ", "))
4621			errors = append(errors, compiler.NewError(context, message))
4622		}
4623		allowedKeys := []string{"description", "examples", "headers", "schema"}
4624		allowedPatterns := []*regexp.Regexp{pattern0}
4625		invalidKeys := compiler.InvalidKeysInMap(m, allowedKeys, allowedPatterns)
4626		if len(invalidKeys) > 0 {
4627			message := fmt.Sprintf("has invalid %s: %+v", compiler.PluralProperties(len(invalidKeys)), strings.Join(invalidKeys, ", "))
4628			errors = append(errors, compiler.NewError(context, message))
4629		}
4630		// string description = 1;
4631		v1 := compiler.MapValueForKey(m, "description")
4632		if v1 != nil {
4633			x.Description, ok = v1.(string)
4634			if !ok {
4635				message := fmt.Sprintf("has unexpected value for description: %+v (%T)", v1, v1)
4636				errors = append(errors, compiler.NewError(context, message))
4637			}
4638		}
4639		// SchemaItem schema = 2;
4640		v2 := compiler.MapValueForKey(m, "schema")
4641		if v2 != nil {
4642			var err error
4643			x.Schema, err = NewSchemaItem(v2, compiler.NewContext("schema", context))
4644			if err != nil {
4645				errors = append(errors, err)
4646			}
4647		}
4648		// Headers headers = 3;
4649		v3 := compiler.MapValueForKey(m, "headers")
4650		if v3 != nil {
4651			var err error
4652			x.Headers, err = NewHeaders(v3, compiler.NewContext("headers", context))
4653			if err != nil {
4654				errors = append(errors, err)
4655			}
4656		}
4657		// Examples examples = 4;
4658		v4 := compiler.MapValueForKey(m, "examples")
4659		if v4 != nil {
4660			var err error
4661			x.Examples, err = NewExamples(v4, compiler.NewContext("examples", context))
4662			if err != nil {
4663				errors = append(errors, err)
4664			}
4665		}
4666		// repeated NamedAny vendor_extension = 5;
4667		// MAP: Any ^x-
4668		x.VendorExtension = make([]*NamedAny, 0)
4669		for _, item := range m {
4670			k, ok := compiler.StringValue(item.Key)
4671			if ok {
4672				v := item.Value
4673				if strings.HasPrefix(k, "x-") {
4674					pair := &NamedAny{}
4675					pair.Name = k
4676					result := &Any{}
4677					handled, resultFromExt, err := compiler.HandleExtension(context, v, k)
4678					if handled {
4679						if err != nil {
4680							errors = append(errors, err)
4681						} else {
4682							bytes, _ := yaml.Marshal(v)
4683							result.Yaml = string(bytes)
4684							result.Value = resultFromExt
4685							pair.Value = result
4686						}
4687					} else {
4688						pair.Value, err = NewAny(v, compiler.NewContext(k, context))
4689						if err != nil {
4690							errors = append(errors, err)
4691						}
4692					}
4693					x.VendorExtension = append(x.VendorExtension, pair)
4694				}
4695			}
4696		}
4697	}
4698	return x, compiler.NewErrorGroupOrNil(errors)
4699}
4700
4701// NewResponseDefinitions creates an object of type ResponseDefinitions if possible, returning an error if not.
4702func NewResponseDefinitions(in interface{}, context *compiler.Context) (*ResponseDefinitions, error) {
4703	errors := make([]error, 0)
4704	x := &ResponseDefinitions{}
4705	m, ok := compiler.UnpackMap(in)
4706	if !ok {
4707		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
4708		errors = append(errors, compiler.NewError(context, message))
4709	} else {
4710		// repeated NamedResponse additional_properties = 1;
4711		// MAP: Response
4712		x.AdditionalProperties = make([]*NamedResponse, 0)
4713		for _, item := range m {
4714			k, ok := compiler.StringValue(item.Key)
4715			if ok {
4716				v := item.Value
4717				pair := &NamedResponse{}
4718				pair.Name = k
4719				var err error
4720				pair.Value, err = NewResponse(v, compiler.NewContext(k, context))
4721				if err != nil {
4722					errors = append(errors, err)
4723				}
4724				x.AdditionalProperties = append(x.AdditionalProperties, pair)
4725			}
4726		}
4727	}
4728	return x, compiler.NewErrorGroupOrNil(errors)
4729}
4730
4731// NewResponseValue creates an object of type ResponseValue if possible, returning an error if not.
4732func NewResponseValue(in interface{}, context *compiler.Context) (*ResponseValue, error) {
4733	errors := make([]error, 0)
4734	x := &ResponseValue{}
4735	matched := false
4736	// Response response = 1;
4737	{
4738		m, ok := compiler.UnpackMap(in)
4739		if ok {
4740			// errors might be ok here, they mean we just don't have the right subtype
4741			t, matchingError := NewResponse(m, compiler.NewContext("response", context))
4742			if matchingError == nil {
4743				x.Oneof = &ResponseValue_Response{Response: t}
4744				matched = true
4745			} else {
4746				errors = append(errors, matchingError)
4747			}
4748		}
4749	}
4750	// JsonReference json_reference = 2;
4751	{
4752		m, ok := compiler.UnpackMap(in)
4753		if ok {
4754			// errors might be ok here, they mean we just don't have the right subtype
4755			t, matchingError := NewJsonReference(m, compiler.NewContext("jsonReference", context))
4756			if matchingError == nil {
4757				x.Oneof = &ResponseValue_JsonReference{JsonReference: t}
4758				matched = true
4759			} else {
4760				errors = append(errors, matchingError)
4761			}
4762		}
4763	}
4764	if matched {
4765		// since the oneof matched one of its possibilities, discard any matching errors
4766		errors = make([]error, 0)
4767	}
4768	return x, compiler.NewErrorGroupOrNil(errors)
4769}
4770
4771// NewResponses creates an object of type Responses if possible, returning an error if not.
4772func NewResponses(in interface{}, context *compiler.Context) (*Responses, error) {
4773	errors := make([]error, 0)
4774	x := &Responses{}
4775	m, ok := compiler.UnpackMap(in)
4776	if !ok {
4777		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
4778		errors = append(errors, compiler.NewError(context, message))
4779	} else {
4780		allowedKeys := []string{}
4781		allowedPatterns := []*regexp.Regexp{pattern2, pattern0}
4782		invalidKeys := compiler.InvalidKeysInMap(m, allowedKeys, allowedPatterns)
4783		if len(invalidKeys) > 0 {
4784			message := fmt.Sprintf("has invalid %s: %+v", compiler.PluralProperties(len(invalidKeys)), strings.Join(invalidKeys, ", "))
4785			errors = append(errors, compiler.NewError(context, message))
4786		}
4787		// repeated NamedResponseValue response_code = 1;
4788		// MAP: ResponseValue ^([0-9]{3})$|^(default)$
4789		x.ResponseCode = make([]*NamedResponseValue, 0)
4790		for _, item := range m {
4791			k, ok := compiler.StringValue(item.Key)
4792			if ok {
4793				v := item.Value
4794				if pattern2.MatchString(k) {
4795					pair := &NamedResponseValue{}
4796					pair.Name = k
4797					var err error
4798					pair.Value, err = NewResponseValue(v, compiler.NewContext(k, context))
4799					if err != nil {
4800						errors = append(errors, err)
4801					}
4802					x.ResponseCode = append(x.ResponseCode, pair)
4803				}
4804			}
4805		}
4806		// repeated NamedAny vendor_extension = 2;
4807		// MAP: Any ^x-
4808		x.VendorExtension = make([]*NamedAny, 0)
4809		for _, item := range m {
4810			k, ok := compiler.StringValue(item.Key)
4811			if ok {
4812				v := item.Value
4813				if strings.HasPrefix(k, "x-") {
4814					pair := &NamedAny{}
4815					pair.Name = k
4816					result := &Any{}
4817					handled, resultFromExt, err := compiler.HandleExtension(context, v, k)
4818					if handled {
4819						if err != nil {
4820							errors = append(errors, err)
4821						} else {
4822							bytes, _ := yaml.Marshal(v)
4823							result.Yaml = string(bytes)
4824							result.Value = resultFromExt
4825							pair.Value = result
4826						}
4827					} else {
4828						pair.Value, err = NewAny(v, compiler.NewContext(k, context))
4829						if err != nil {
4830							errors = append(errors, err)
4831						}
4832					}
4833					x.VendorExtension = append(x.VendorExtension, pair)
4834				}
4835			}
4836		}
4837	}
4838	return x, compiler.NewErrorGroupOrNil(errors)
4839}
4840
4841// NewSchema creates an object of type Schema if possible, returning an error if not.
4842func NewSchema(in interface{}, context *compiler.Context) (*Schema, error) {
4843	errors := make([]error, 0)
4844	x := &Schema{}
4845	m, ok := compiler.UnpackMap(in)
4846	if !ok {
4847		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
4848		errors = append(errors, compiler.NewError(context, message))
4849	} else {
4850		allowedKeys := []string{"$ref", "additionalProperties", "allOf", "default", "description", "discriminator", "enum", "example", "exclusiveMaximum", "exclusiveMinimum", "externalDocs", "format", "items", "maxItems", "maxLength", "maxProperties", "maximum", "minItems", "minLength", "minProperties", "minimum", "multipleOf", "pattern", "properties", "readOnly", "required", "title", "type", "uniqueItems", "xml"}
4851		allowedPatterns := []*regexp.Regexp{pattern0}
4852		invalidKeys := compiler.InvalidKeysInMap(m, allowedKeys, allowedPatterns)
4853		if len(invalidKeys) > 0 {
4854			message := fmt.Sprintf("has invalid %s: %+v", compiler.PluralProperties(len(invalidKeys)), strings.Join(invalidKeys, ", "))
4855			errors = append(errors, compiler.NewError(context, message))
4856		}
4857		// string _ref = 1;
4858		v1 := compiler.MapValueForKey(m, "$ref")
4859		if v1 != nil {
4860			x.XRef, ok = v1.(string)
4861			if !ok {
4862				message := fmt.Sprintf("has unexpected value for $ref: %+v (%T)", v1, v1)
4863				errors = append(errors, compiler.NewError(context, message))
4864			}
4865		}
4866		// string format = 2;
4867		v2 := compiler.MapValueForKey(m, "format")
4868		if v2 != nil {
4869			x.Format, ok = v2.(string)
4870			if !ok {
4871				message := fmt.Sprintf("has unexpected value for format: %+v (%T)", v2, v2)
4872				errors = append(errors, compiler.NewError(context, message))
4873			}
4874		}
4875		// string title = 3;
4876		v3 := compiler.MapValueForKey(m, "title")
4877		if v3 != nil {
4878			x.Title, ok = v3.(string)
4879			if !ok {
4880				message := fmt.Sprintf("has unexpected value for title: %+v (%T)", v3, v3)
4881				errors = append(errors, compiler.NewError(context, message))
4882			}
4883		}
4884		// string description = 4;
4885		v4 := compiler.MapValueForKey(m, "description")
4886		if v4 != nil {
4887			x.Description, ok = v4.(string)
4888			if !ok {
4889				message := fmt.Sprintf("has unexpected value for description: %+v (%T)", v4, v4)
4890				errors = append(errors, compiler.NewError(context, message))
4891			}
4892		}
4893		// Any default = 5;
4894		v5 := compiler.MapValueForKey(m, "default")
4895		if v5 != nil {
4896			var err error
4897			x.Default, err = NewAny(v5, compiler.NewContext("default", context))
4898			if err != nil {
4899				errors = append(errors, err)
4900			}
4901		}
4902		// float multiple_of = 6;
4903		v6 := compiler.MapValueForKey(m, "multipleOf")
4904		if v6 != nil {
4905			switch v6 := v6.(type) {
4906			case float64:
4907				x.MultipleOf = v6
4908			case float32:
4909				x.MultipleOf = float64(v6)
4910			case uint64:
4911				x.MultipleOf = float64(v6)
4912			case uint32:
4913				x.MultipleOf = float64(v6)
4914			case int64:
4915				x.MultipleOf = float64(v6)
4916			case int32:
4917				x.MultipleOf = float64(v6)
4918			case int:
4919				x.MultipleOf = float64(v6)
4920			default:
4921				message := fmt.Sprintf("has unexpected value for multipleOf: %+v (%T)", v6, v6)
4922				errors = append(errors, compiler.NewError(context, message))
4923			}
4924		}
4925		// float maximum = 7;
4926		v7 := compiler.MapValueForKey(m, "maximum")
4927		if v7 != nil {
4928			switch v7 := v7.(type) {
4929			case float64:
4930				x.Maximum = v7
4931			case float32:
4932				x.Maximum = float64(v7)
4933			case uint64:
4934				x.Maximum = float64(v7)
4935			case uint32:
4936				x.Maximum = float64(v7)
4937			case int64:
4938				x.Maximum = float64(v7)
4939			case int32:
4940				x.Maximum = float64(v7)
4941			case int:
4942				x.Maximum = float64(v7)
4943			default:
4944				message := fmt.Sprintf("has unexpected value for maximum: %+v (%T)", v7, v7)
4945				errors = append(errors, compiler.NewError(context, message))
4946			}
4947		}
4948		// bool exclusive_maximum = 8;
4949		v8 := compiler.MapValueForKey(m, "exclusiveMaximum")
4950		if v8 != nil {
4951			x.ExclusiveMaximum, ok = v8.(bool)
4952			if !ok {
4953				message := fmt.Sprintf("has unexpected value for exclusiveMaximum: %+v (%T)", v8, v8)
4954				errors = append(errors, compiler.NewError(context, message))
4955			}
4956		}
4957		// float minimum = 9;
4958		v9 := compiler.MapValueForKey(m, "minimum")
4959		if v9 != nil {
4960			switch v9 := v9.(type) {
4961			case float64:
4962				x.Minimum = v9
4963			case float32:
4964				x.Minimum = float64(v9)
4965			case uint64:
4966				x.Minimum = float64(v9)
4967			case uint32:
4968				x.Minimum = float64(v9)
4969			case int64:
4970				x.Minimum = float64(v9)
4971			case int32:
4972				x.Minimum = float64(v9)
4973			case int:
4974				x.Minimum = float64(v9)
4975			default:
4976				message := fmt.Sprintf("has unexpected value for minimum: %+v (%T)", v9, v9)
4977				errors = append(errors, compiler.NewError(context, message))
4978			}
4979		}
4980		// bool exclusive_minimum = 10;
4981		v10 := compiler.MapValueForKey(m, "exclusiveMinimum")
4982		if v10 != nil {
4983			x.ExclusiveMinimum, ok = v10.(bool)
4984			if !ok {
4985				message := fmt.Sprintf("has unexpected value for exclusiveMinimum: %+v (%T)", v10, v10)
4986				errors = append(errors, compiler.NewError(context, message))
4987			}
4988		}
4989		// int64 max_length = 11;
4990		v11 := compiler.MapValueForKey(m, "maxLength")
4991		if v11 != nil {
4992			t, ok := v11.(int)
4993			if ok {
4994				x.MaxLength = int64(t)
4995			} else {
4996				message := fmt.Sprintf("has unexpected value for maxLength: %+v (%T)", v11, v11)
4997				errors = append(errors, compiler.NewError(context, message))
4998			}
4999		}
5000		// int64 min_length = 12;
5001		v12 := compiler.MapValueForKey(m, "minLength")
5002		if v12 != nil {
5003			t, ok := v12.(int)
5004			if ok {
5005				x.MinLength = int64(t)
5006			} else {
5007				message := fmt.Sprintf("has unexpected value for minLength: %+v (%T)", v12, v12)
5008				errors = append(errors, compiler.NewError(context, message))
5009			}
5010		}
5011		// string pattern = 13;
5012		v13 := compiler.MapValueForKey(m, "pattern")
5013		if v13 != nil {
5014			x.Pattern, ok = v13.(string)
5015			if !ok {
5016				message := fmt.Sprintf("has unexpected value for pattern: %+v (%T)", v13, v13)
5017				errors = append(errors, compiler.NewError(context, message))
5018			}
5019		}
5020		// int64 max_items = 14;
5021		v14 := compiler.MapValueForKey(m, "maxItems")
5022		if v14 != nil {
5023			t, ok := v14.(int)
5024			if ok {
5025				x.MaxItems = int64(t)
5026			} else {
5027				message := fmt.Sprintf("has unexpected value for maxItems: %+v (%T)", v14, v14)
5028				errors = append(errors, compiler.NewError(context, message))
5029			}
5030		}
5031		// int64 min_items = 15;
5032		v15 := compiler.MapValueForKey(m, "minItems")
5033		if v15 != nil {
5034			t, ok := v15.(int)
5035			if ok {
5036				x.MinItems = int64(t)
5037			} else {
5038				message := fmt.Sprintf("has unexpected value for minItems: %+v (%T)", v15, v15)
5039				errors = append(errors, compiler.NewError(context, message))
5040			}
5041		}
5042		// bool unique_items = 16;
5043		v16 := compiler.MapValueForKey(m, "uniqueItems")
5044		if v16 != nil {
5045			x.UniqueItems, ok = v16.(bool)
5046			if !ok {
5047				message := fmt.Sprintf("has unexpected value for uniqueItems: %+v (%T)", v16, v16)
5048				errors = append(errors, compiler.NewError(context, message))
5049			}
5050		}
5051		// int64 max_properties = 17;
5052		v17 := compiler.MapValueForKey(m, "maxProperties")
5053		if v17 != nil {
5054			t, ok := v17.(int)
5055			if ok {
5056				x.MaxProperties = int64(t)
5057			} else {
5058				message := fmt.Sprintf("has unexpected value for maxProperties: %+v (%T)", v17, v17)
5059				errors = append(errors, compiler.NewError(context, message))
5060			}
5061		}
5062		// int64 min_properties = 18;
5063		v18 := compiler.MapValueForKey(m, "minProperties")
5064		if v18 != nil {
5065			t, ok := v18.(int)
5066			if ok {
5067				x.MinProperties = int64(t)
5068			} else {
5069				message := fmt.Sprintf("has unexpected value for minProperties: %+v (%T)", v18, v18)
5070				errors = append(errors, compiler.NewError(context, message))
5071			}
5072		}
5073		// repeated string required = 19;
5074		v19 := compiler.MapValueForKey(m, "required")
5075		if v19 != nil {
5076			v, ok := v19.([]interface{})
5077			if ok {
5078				x.Required = compiler.ConvertInterfaceArrayToStringArray(v)
5079			} else {
5080				message := fmt.Sprintf("has unexpected value for required: %+v (%T)", v19, v19)
5081				errors = append(errors, compiler.NewError(context, message))
5082			}
5083		}
5084		// repeated Any enum = 20;
5085		v20 := compiler.MapValueForKey(m, "enum")
5086		if v20 != nil {
5087			// repeated Any
5088			x.Enum = make([]*Any, 0)
5089			a, ok := v20.([]interface{})
5090			if ok {
5091				for _, item := range a {
5092					y, err := NewAny(item, compiler.NewContext("enum", context))
5093					if err != nil {
5094						errors = append(errors, err)
5095					}
5096					x.Enum = append(x.Enum, y)
5097				}
5098			}
5099		}
5100		// AdditionalPropertiesItem additional_properties = 21;
5101		v21 := compiler.MapValueForKey(m, "additionalProperties")
5102		if v21 != nil {
5103			var err error
5104			x.AdditionalProperties, err = NewAdditionalPropertiesItem(v21, compiler.NewContext("additionalProperties", context))
5105			if err != nil {
5106				errors = append(errors, err)
5107			}
5108		}
5109		// TypeItem type = 22;
5110		v22 := compiler.MapValueForKey(m, "type")
5111		if v22 != nil {
5112			var err error
5113			x.Type, err = NewTypeItem(v22, compiler.NewContext("type", context))
5114			if err != nil {
5115				errors = append(errors, err)
5116			}
5117		}
5118		// ItemsItem items = 23;
5119		v23 := compiler.MapValueForKey(m, "items")
5120		if v23 != nil {
5121			var err error
5122			x.Items, err = NewItemsItem(v23, compiler.NewContext("items", context))
5123			if err != nil {
5124				errors = append(errors, err)
5125			}
5126		}
5127		// repeated Schema all_of = 24;
5128		v24 := compiler.MapValueForKey(m, "allOf")
5129		if v24 != nil {
5130			// repeated Schema
5131			x.AllOf = make([]*Schema, 0)
5132			a, ok := v24.([]interface{})
5133			if ok {
5134				for _, item := range a {
5135					y, err := NewSchema(item, compiler.NewContext("allOf", context))
5136					if err != nil {
5137						errors = append(errors, err)
5138					}
5139					x.AllOf = append(x.AllOf, y)
5140				}
5141			}
5142		}
5143		// Properties properties = 25;
5144		v25 := compiler.MapValueForKey(m, "properties")
5145		if v25 != nil {
5146			var err error
5147			x.Properties, err = NewProperties(v25, compiler.NewContext("properties", context))
5148			if err != nil {
5149				errors = append(errors, err)
5150			}
5151		}
5152		// string discriminator = 26;
5153		v26 := compiler.MapValueForKey(m, "discriminator")
5154		if v26 != nil {
5155			x.Discriminator, ok = v26.(string)
5156			if !ok {
5157				message := fmt.Sprintf("has unexpected value for discriminator: %+v (%T)", v26, v26)
5158				errors = append(errors, compiler.NewError(context, message))
5159			}
5160		}
5161		// bool read_only = 27;
5162		v27 := compiler.MapValueForKey(m, "readOnly")
5163		if v27 != nil {
5164			x.ReadOnly, ok = v27.(bool)
5165			if !ok {
5166				message := fmt.Sprintf("has unexpected value for readOnly: %+v (%T)", v27, v27)
5167				errors = append(errors, compiler.NewError(context, message))
5168			}
5169		}
5170		// Xml xml = 28;
5171		v28 := compiler.MapValueForKey(m, "xml")
5172		if v28 != nil {
5173			var err error
5174			x.Xml, err = NewXml(v28, compiler.NewContext("xml", context))
5175			if err != nil {
5176				errors = append(errors, err)
5177			}
5178		}
5179		// ExternalDocs external_docs = 29;
5180		v29 := compiler.MapValueForKey(m, "externalDocs")
5181		if v29 != nil {
5182			var err error
5183			x.ExternalDocs, err = NewExternalDocs(v29, compiler.NewContext("externalDocs", context))
5184			if err != nil {
5185				errors = append(errors, err)
5186			}
5187		}
5188		// Any example = 30;
5189		v30 := compiler.MapValueForKey(m, "example")
5190		if v30 != nil {
5191			var err error
5192			x.Example, err = NewAny(v30, compiler.NewContext("example", context))
5193			if err != nil {
5194				errors = append(errors, err)
5195			}
5196		}
5197		// repeated NamedAny vendor_extension = 31;
5198		// MAP: Any ^x-
5199		x.VendorExtension = make([]*NamedAny, 0)
5200		for _, item := range m {
5201			k, ok := compiler.StringValue(item.Key)
5202			if ok {
5203				v := item.Value
5204				if strings.HasPrefix(k, "x-") {
5205					pair := &NamedAny{}
5206					pair.Name = k
5207					result := &Any{}
5208					handled, resultFromExt, err := compiler.HandleExtension(context, v, k)
5209					if handled {
5210						if err != nil {
5211							errors = append(errors, err)
5212						} else {
5213							bytes, _ := yaml.Marshal(v)
5214							result.Yaml = string(bytes)
5215							result.Value = resultFromExt
5216							pair.Value = result
5217						}
5218					} else {
5219						pair.Value, err = NewAny(v, compiler.NewContext(k, context))
5220						if err != nil {
5221							errors = append(errors, err)
5222						}
5223					}
5224					x.VendorExtension = append(x.VendorExtension, pair)
5225				}
5226			}
5227		}
5228	}
5229	return x, compiler.NewErrorGroupOrNil(errors)
5230}
5231
5232// NewSchemaItem creates an object of type SchemaItem if possible, returning an error if not.
5233func NewSchemaItem(in interface{}, context *compiler.Context) (*SchemaItem, error) {
5234	errors := make([]error, 0)
5235	x := &SchemaItem{}
5236	matched := false
5237	// Schema schema = 1;
5238	{
5239		m, ok := compiler.UnpackMap(in)
5240		if ok {
5241			// errors might be ok here, they mean we just don't have the right subtype
5242			t, matchingError := NewSchema(m, compiler.NewContext("schema", context))
5243			if matchingError == nil {
5244				x.Oneof = &SchemaItem_Schema{Schema: t}
5245				matched = true
5246			} else {
5247				errors = append(errors, matchingError)
5248			}
5249		}
5250	}
5251	// FileSchema file_schema = 2;
5252	{
5253		m, ok := compiler.UnpackMap(in)
5254		if ok {
5255			// errors might be ok here, they mean we just don't have the right subtype
5256			t, matchingError := NewFileSchema(m, compiler.NewContext("fileSchema", context))
5257			if matchingError == nil {
5258				x.Oneof = &SchemaItem_FileSchema{FileSchema: t}
5259				matched = true
5260			} else {
5261				errors = append(errors, matchingError)
5262			}
5263		}
5264	}
5265	if matched {
5266		// since the oneof matched one of its possibilities, discard any matching errors
5267		errors = make([]error, 0)
5268	}
5269	return x, compiler.NewErrorGroupOrNil(errors)
5270}
5271
5272// NewSecurityDefinitions creates an object of type SecurityDefinitions if possible, returning an error if not.
5273func NewSecurityDefinitions(in interface{}, context *compiler.Context) (*SecurityDefinitions, error) {
5274	errors := make([]error, 0)
5275	x := &SecurityDefinitions{}
5276	m, ok := compiler.UnpackMap(in)
5277	if !ok {
5278		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
5279		errors = append(errors, compiler.NewError(context, message))
5280	} else {
5281		// repeated NamedSecurityDefinitionsItem additional_properties = 1;
5282		// MAP: SecurityDefinitionsItem
5283		x.AdditionalProperties = make([]*NamedSecurityDefinitionsItem, 0)
5284		for _, item := range m {
5285			k, ok := compiler.StringValue(item.Key)
5286			if ok {
5287				v := item.Value
5288				pair := &NamedSecurityDefinitionsItem{}
5289				pair.Name = k
5290				var err error
5291				pair.Value, err = NewSecurityDefinitionsItem(v, compiler.NewContext(k, context))
5292				if err != nil {
5293					errors = append(errors, err)
5294				}
5295				x.AdditionalProperties = append(x.AdditionalProperties, pair)
5296			}
5297		}
5298	}
5299	return x, compiler.NewErrorGroupOrNil(errors)
5300}
5301
5302// NewSecurityDefinitionsItem creates an object of type SecurityDefinitionsItem if possible, returning an error if not.
5303func NewSecurityDefinitionsItem(in interface{}, context *compiler.Context) (*SecurityDefinitionsItem, error) {
5304	errors := make([]error, 0)
5305	x := &SecurityDefinitionsItem{}
5306	matched := false
5307	// BasicAuthenticationSecurity basic_authentication_security = 1;
5308	{
5309		m, ok := compiler.UnpackMap(in)
5310		if ok {
5311			// errors might be ok here, they mean we just don't have the right subtype
5312			t, matchingError := NewBasicAuthenticationSecurity(m, compiler.NewContext("basicAuthenticationSecurity", context))
5313			if matchingError == nil {
5314				x.Oneof = &SecurityDefinitionsItem_BasicAuthenticationSecurity{BasicAuthenticationSecurity: t}
5315				matched = true
5316			} else {
5317				errors = append(errors, matchingError)
5318			}
5319		}
5320	}
5321	// ApiKeySecurity api_key_security = 2;
5322	{
5323		m, ok := compiler.UnpackMap(in)
5324		if ok {
5325			// errors might be ok here, they mean we just don't have the right subtype
5326			t, matchingError := NewApiKeySecurity(m, compiler.NewContext("apiKeySecurity", context))
5327			if matchingError == nil {
5328				x.Oneof = &SecurityDefinitionsItem_ApiKeySecurity{ApiKeySecurity: t}
5329				matched = true
5330			} else {
5331				errors = append(errors, matchingError)
5332			}
5333		}
5334	}
5335	// Oauth2ImplicitSecurity oauth2_implicit_security = 3;
5336	{
5337		m, ok := compiler.UnpackMap(in)
5338		if ok {
5339			// errors might be ok here, they mean we just don't have the right subtype
5340			t, matchingError := NewOauth2ImplicitSecurity(m, compiler.NewContext("oauth2ImplicitSecurity", context))
5341			if matchingError == nil {
5342				x.Oneof = &SecurityDefinitionsItem_Oauth2ImplicitSecurity{Oauth2ImplicitSecurity: t}
5343				matched = true
5344			} else {
5345				errors = append(errors, matchingError)
5346			}
5347		}
5348	}
5349	// Oauth2PasswordSecurity oauth2_password_security = 4;
5350	{
5351		m, ok := compiler.UnpackMap(in)
5352		if ok {
5353			// errors might be ok here, they mean we just don't have the right subtype
5354			t, matchingError := NewOauth2PasswordSecurity(m, compiler.NewContext("oauth2PasswordSecurity", context))
5355			if matchingError == nil {
5356				x.Oneof = &SecurityDefinitionsItem_Oauth2PasswordSecurity{Oauth2PasswordSecurity: t}
5357				matched = true
5358			} else {
5359				errors = append(errors, matchingError)
5360			}
5361		}
5362	}
5363	// Oauth2ApplicationSecurity oauth2_application_security = 5;
5364	{
5365		m, ok := compiler.UnpackMap(in)
5366		if ok {
5367			// errors might be ok here, they mean we just don't have the right subtype
5368			t, matchingError := NewOauth2ApplicationSecurity(m, compiler.NewContext("oauth2ApplicationSecurity", context))
5369			if matchingError == nil {
5370				x.Oneof = &SecurityDefinitionsItem_Oauth2ApplicationSecurity{Oauth2ApplicationSecurity: t}
5371				matched = true
5372			} else {
5373				errors = append(errors, matchingError)
5374			}
5375		}
5376	}
5377	// Oauth2AccessCodeSecurity oauth2_access_code_security = 6;
5378	{
5379		m, ok := compiler.UnpackMap(in)
5380		if ok {
5381			// errors might be ok here, they mean we just don't have the right subtype
5382			t, matchingError := NewOauth2AccessCodeSecurity(m, compiler.NewContext("oauth2AccessCodeSecurity", context))
5383			if matchingError == nil {
5384				x.Oneof = &SecurityDefinitionsItem_Oauth2AccessCodeSecurity{Oauth2AccessCodeSecurity: t}
5385				matched = true
5386			} else {
5387				errors = append(errors, matchingError)
5388			}
5389		}
5390	}
5391	if matched {
5392		// since the oneof matched one of its possibilities, discard any matching errors
5393		errors = make([]error, 0)
5394	}
5395	return x, compiler.NewErrorGroupOrNil(errors)
5396}
5397
5398// NewSecurityRequirement creates an object of type SecurityRequirement if possible, returning an error if not.
5399func NewSecurityRequirement(in interface{}, context *compiler.Context) (*SecurityRequirement, error) {
5400	errors := make([]error, 0)
5401	x := &SecurityRequirement{}
5402	m, ok := compiler.UnpackMap(in)
5403	if !ok {
5404		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
5405		errors = append(errors, compiler.NewError(context, message))
5406	} else {
5407		// repeated NamedStringArray additional_properties = 1;
5408		// MAP: StringArray
5409		x.AdditionalProperties = make([]*NamedStringArray, 0)
5410		for _, item := range m {
5411			k, ok := compiler.StringValue(item.Key)
5412			if ok {
5413				v := item.Value
5414				pair := &NamedStringArray{}
5415				pair.Name = k
5416				var err error
5417				pair.Value, err = NewStringArray(v, compiler.NewContext(k, context))
5418				if err != nil {
5419					errors = append(errors, err)
5420				}
5421				x.AdditionalProperties = append(x.AdditionalProperties, pair)
5422			}
5423		}
5424	}
5425	return x, compiler.NewErrorGroupOrNil(errors)
5426}
5427
5428// NewStringArray creates an object of type StringArray if possible, returning an error if not.
5429func NewStringArray(in interface{}, context *compiler.Context) (*StringArray, error) {
5430	errors := make([]error, 0)
5431	x := &StringArray{}
5432	a, ok := in.([]interface{})
5433	if !ok {
5434		message := fmt.Sprintf("has unexpected value for StringArray: %+v (%T)", in, in)
5435		errors = append(errors, compiler.NewError(context, message))
5436	} else {
5437		x.Value = make([]string, 0)
5438		for _, s := range a {
5439			x.Value = append(x.Value, s.(string))
5440		}
5441	}
5442	return x, compiler.NewErrorGroupOrNil(errors)
5443}
5444
5445// NewTag creates an object of type Tag if possible, returning an error if not.
5446func NewTag(in interface{}, context *compiler.Context) (*Tag, error) {
5447	errors := make([]error, 0)
5448	x := &Tag{}
5449	m, ok := compiler.UnpackMap(in)
5450	if !ok {
5451		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
5452		errors = append(errors, compiler.NewError(context, message))
5453	} else {
5454		requiredKeys := []string{"name"}
5455		missingKeys := compiler.MissingKeysInMap(m, requiredKeys)
5456		if len(missingKeys) > 0 {
5457			message := fmt.Sprintf("is missing required %s: %+v", compiler.PluralProperties(len(missingKeys)), strings.Join(missingKeys, ", "))
5458			errors = append(errors, compiler.NewError(context, message))
5459		}
5460		allowedKeys := []string{"description", "externalDocs", "name"}
5461		allowedPatterns := []*regexp.Regexp{pattern0}
5462		invalidKeys := compiler.InvalidKeysInMap(m, allowedKeys, allowedPatterns)
5463		if len(invalidKeys) > 0 {
5464			message := fmt.Sprintf("has invalid %s: %+v", compiler.PluralProperties(len(invalidKeys)), strings.Join(invalidKeys, ", "))
5465			errors = append(errors, compiler.NewError(context, message))
5466		}
5467		// string name = 1;
5468		v1 := compiler.MapValueForKey(m, "name")
5469		if v1 != nil {
5470			x.Name, ok = v1.(string)
5471			if !ok {
5472				message := fmt.Sprintf("has unexpected value for name: %+v (%T)", v1, v1)
5473				errors = append(errors, compiler.NewError(context, message))
5474			}
5475		}
5476		// string description = 2;
5477		v2 := compiler.MapValueForKey(m, "description")
5478		if v2 != nil {
5479			x.Description, ok = v2.(string)
5480			if !ok {
5481				message := fmt.Sprintf("has unexpected value for description: %+v (%T)", v2, v2)
5482				errors = append(errors, compiler.NewError(context, message))
5483			}
5484		}
5485		// ExternalDocs external_docs = 3;
5486		v3 := compiler.MapValueForKey(m, "externalDocs")
5487		if v3 != nil {
5488			var err error
5489			x.ExternalDocs, err = NewExternalDocs(v3, compiler.NewContext("externalDocs", context))
5490			if err != nil {
5491				errors = append(errors, err)
5492			}
5493		}
5494		// repeated NamedAny vendor_extension = 4;
5495		// MAP: Any ^x-
5496		x.VendorExtension = make([]*NamedAny, 0)
5497		for _, item := range m {
5498			k, ok := compiler.StringValue(item.Key)
5499			if ok {
5500				v := item.Value
5501				if strings.HasPrefix(k, "x-") {
5502					pair := &NamedAny{}
5503					pair.Name = k
5504					result := &Any{}
5505					handled, resultFromExt, err := compiler.HandleExtension(context, v, k)
5506					if handled {
5507						if err != nil {
5508							errors = append(errors, err)
5509						} else {
5510							bytes, _ := yaml.Marshal(v)
5511							result.Yaml = string(bytes)
5512							result.Value = resultFromExt
5513							pair.Value = result
5514						}
5515					} else {
5516						pair.Value, err = NewAny(v, compiler.NewContext(k, context))
5517						if err != nil {
5518							errors = append(errors, err)
5519						}
5520					}
5521					x.VendorExtension = append(x.VendorExtension, pair)
5522				}
5523			}
5524		}
5525	}
5526	return x, compiler.NewErrorGroupOrNil(errors)
5527}
5528
5529// NewTypeItem creates an object of type TypeItem if possible, returning an error if not.
5530func NewTypeItem(in interface{}, context *compiler.Context) (*TypeItem, error) {
5531	errors := make([]error, 0)
5532	x := &TypeItem{}
5533	switch in := in.(type) {
5534	case string:
5535		x.Value = make([]string, 0)
5536		x.Value = append(x.Value, in)
5537	case []interface{}:
5538		x.Value = make([]string, 0)
5539		for _, v := range in {
5540			value, ok := v.(string)
5541			if ok {
5542				x.Value = append(x.Value, value)
5543			} else {
5544				message := fmt.Sprintf("has unexpected value for string array element: %+v (%T)", value, value)
5545				errors = append(errors, compiler.NewError(context, message))
5546			}
5547		}
5548	default:
5549		message := fmt.Sprintf("has unexpected value for string array: %+v (%T)", in, in)
5550		errors = append(errors, compiler.NewError(context, message))
5551	}
5552	return x, compiler.NewErrorGroupOrNil(errors)
5553}
5554
5555// NewVendorExtension creates an object of type VendorExtension if possible, returning an error if not.
5556func NewVendorExtension(in interface{}, context *compiler.Context) (*VendorExtension, error) {
5557	errors := make([]error, 0)
5558	x := &VendorExtension{}
5559	m, ok := compiler.UnpackMap(in)
5560	if !ok {
5561		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
5562		errors = append(errors, compiler.NewError(context, message))
5563	} else {
5564		// repeated NamedAny additional_properties = 1;
5565		// MAP: Any
5566		x.AdditionalProperties = make([]*NamedAny, 0)
5567		for _, item := range m {
5568			k, ok := compiler.StringValue(item.Key)
5569			if ok {
5570				v := item.Value
5571				pair := &NamedAny{}
5572				pair.Name = k
5573				result := &Any{}
5574				handled, resultFromExt, err := compiler.HandleExtension(context, v, k)
5575				if handled {
5576					if err != nil {
5577						errors = append(errors, err)
5578					} else {
5579						bytes, _ := yaml.Marshal(v)
5580						result.Yaml = string(bytes)
5581						result.Value = resultFromExt
5582						pair.Value = result
5583					}
5584				} else {
5585					pair.Value, err = NewAny(v, compiler.NewContext(k, context))
5586					if err != nil {
5587						errors = append(errors, err)
5588					}
5589				}
5590				x.AdditionalProperties = append(x.AdditionalProperties, pair)
5591			}
5592		}
5593	}
5594	return x, compiler.NewErrorGroupOrNil(errors)
5595}
5596
5597// NewXml creates an object of type Xml if possible, returning an error if not.
5598func NewXml(in interface{}, context *compiler.Context) (*Xml, error) {
5599	errors := make([]error, 0)
5600	x := &Xml{}
5601	m, ok := compiler.UnpackMap(in)
5602	if !ok {
5603		message := fmt.Sprintf("has unexpected value: %+v (%T)", in, in)
5604		errors = append(errors, compiler.NewError(context, message))
5605	} else {
5606		allowedKeys := []string{"attribute", "name", "namespace", "prefix", "wrapped"}
5607		allowedPatterns := []*regexp.Regexp{pattern0}
5608		invalidKeys := compiler.InvalidKeysInMap(m, allowedKeys, allowedPatterns)
5609		if len(invalidKeys) > 0 {
5610			message := fmt.Sprintf("has invalid %s: %+v", compiler.PluralProperties(len(invalidKeys)), strings.Join(invalidKeys, ", "))
5611			errors = append(errors, compiler.NewError(context, message))
5612		}
5613		// string name = 1;
5614		v1 := compiler.MapValueForKey(m, "name")
5615		if v1 != nil {
5616			x.Name, ok = v1.(string)
5617			if !ok {
5618				message := fmt.Sprintf("has unexpected value for name: %+v (%T)", v1, v1)
5619				errors = append(errors, compiler.NewError(context, message))
5620			}
5621		}
5622		// string namespace = 2;
5623		v2 := compiler.MapValueForKey(m, "namespace")
5624		if v2 != nil {
5625			x.Namespace, ok = v2.(string)
5626			if !ok {
5627				message := fmt.Sprintf("has unexpected value for namespace: %+v (%T)", v2, v2)
5628				errors = append(errors, compiler.NewError(context, message))
5629			}
5630		}
5631		// string prefix = 3;
5632		v3 := compiler.MapValueForKey(m, "prefix")
5633		if v3 != nil {
5634			x.Prefix, ok = v3.(string)
5635			if !ok {
5636				message := fmt.Sprintf("has unexpected value for prefix: %+v (%T)", v3, v3)
5637				errors = append(errors, compiler.NewError(context, message))
5638			}
5639		}
5640		// bool attribute = 4;
5641		v4 := compiler.MapValueForKey(m, "attribute")
5642		if v4 != nil {
5643			x.Attribute, ok = v4.(bool)
5644			if !ok {
5645				message := fmt.Sprintf("has unexpected value for attribute: %+v (%T)", v4, v4)
5646				errors = append(errors, compiler.NewError(context, message))
5647			}
5648		}
5649		// bool wrapped = 5;
5650		v5 := compiler.MapValueForKey(m, "wrapped")
5651		if v5 != nil {
5652			x.Wrapped, ok = v5.(bool)
5653			if !ok {
5654				message := fmt.Sprintf("has unexpected value for wrapped: %+v (%T)", v5, v5)
5655				errors = append(errors, compiler.NewError(context, message))
5656			}
5657		}
5658		// repeated NamedAny vendor_extension = 6;
5659		// MAP: Any ^x-
5660		x.VendorExtension = make([]*NamedAny, 0)
5661		for _, item := range m {
5662			k, ok := compiler.StringValue(item.Key)
5663			if ok {
5664				v := item.Value
5665				if strings.HasPrefix(k, "x-") {
5666					pair := &NamedAny{}
5667					pair.Name = k
5668					result := &Any{}
5669					handled, resultFromExt, err := compiler.HandleExtension(context, v, k)
5670					if handled {
5671						if err != nil {
5672							errors = append(errors, err)
5673						} else {
5674							bytes, _ := yaml.Marshal(v)
5675							result.Yaml = string(bytes)
5676							result.Value = resultFromExt
5677							pair.Value = result
5678						}
5679					} else {
5680						pair.Value, err = NewAny(v, compiler.NewContext(k, context))
5681						if err != nil {
5682							errors = append(errors, err)
5683						}
5684					}
5685					x.VendorExtension = append(x.VendorExtension, pair)
5686				}
5687			}
5688		}
5689	}
5690	return x, compiler.NewErrorGroupOrNil(errors)
5691}
5692
5693// ResolveReferences resolves references found inside AdditionalPropertiesItem objects.
5694func (m *AdditionalPropertiesItem) ResolveReferences(root string) (interface{}, error) {
5695	errors := make([]error, 0)
5696	{
5697		p, ok := m.Oneof.(*AdditionalPropertiesItem_Schema)
5698		if ok {
5699			_, err := p.Schema.ResolveReferences(root)
5700			if err != nil {
5701				return nil, err
5702			}
5703		}
5704	}
5705	return nil, compiler.NewErrorGroupOrNil(errors)
5706}
5707
5708// ResolveReferences resolves references found inside Any objects.
5709func (m *Any) ResolveReferences(root string) (interface{}, error) {
5710	errors := make([]error, 0)
5711	return nil, compiler.NewErrorGroupOrNil(errors)
5712}
5713
5714// ResolveReferences resolves references found inside ApiKeySecurity objects.
5715func (m *ApiKeySecurity) ResolveReferences(root string) (interface{}, error) {
5716	errors := make([]error, 0)
5717	for _, item := range m.VendorExtension {
5718		if item != nil {
5719			_, err := item.ResolveReferences(root)
5720			if err != nil {
5721				errors = append(errors, err)
5722			}
5723		}
5724	}
5725	return nil, compiler.NewErrorGroupOrNil(errors)
5726}
5727
5728// ResolveReferences resolves references found inside BasicAuthenticationSecurity objects.
5729func (m *BasicAuthenticationSecurity) ResolveReferences(root string) (interface{}, error) {
5730	errors := make([]error, 0)
5731	for _, item := range m.VendorExtension {
5732		if item != nil {
5733			_, err := item.ResolveReferences(root)
5734			if err != nil {
5735				errors = append(errors, err)
5736			}
5737		}
5738	}
5739	return nil, compiler.NewErrorGroupOrNil(errors)
5740}
5741
5742// ResolveReferences resolves references found inside BodyParameter objects.
5743func (m *BodyParameter) ResolveReferences(root string) (interface{}, error) {
5744	errors := make([]error, 0)
5745	if m.Schema != nil {
5746		_, err := m.Schema.ResolveReferences(root)
5747		if err != nil {
5748			errors = append(errors, err)
5749		}
5750	}
5751	for _, item := range m.VendorExtension {
5752		if item != nil {
5753			_, err := item.ResolveReferences(root)
5754			if err != nil {
5755				errors = append(errors, err)
5756			}
5757		}
5758	}
5759	return nil, compiler.NewErrorGroupOrNil(errors)
5760}
5761
5762// ResolveReferences resolves references found inside Contact objects.
5763func (m *Contact) ResolveReferences(root string) (interface{}, error) {
5764	errors := make([]error, 0)
5765	for _, item := range m.VendorExtension {
5766		if item != nil {
5767			_, err := item.ResolveReferences(root)
5768			if err != nil {
5769				errors = append(errors, err)
5770			}
5771		}
5772	}
5773	return nil, compiler.NewErrorGroupOrNil(errors)
5774}
5775
5776// ResolveReferences resolves references found inside Default objects.
5777func (m *Default) ResolveReferences(root string) (interface{}, error) {
5778	errors := make([]error, 0)
5779	for _, item := range m.AdditionalProperties {
5780		if item != nil {
5781			_, err := item.ResolveReferences(root)
5782			if err != nil {
5783				errors = append(errors, err)
5784			}
5785		}
5786	}
5787	return nil, compiler.NewErrorGroupOrNil(errors)
5788}
5789
5790// ResolveReferences resolves references found inside Definitions objects.
5791func (m *Definitions) ResolveReferences(root string) (interface{}, error) {
5792	errors := make([]error, 0)
5793	for _, item := range m.AdditionalProperties {
5794		if item != nil {
5795			_, err := item.ResolveReferences(root)
5796			if err != nil {
5797				errors = append(errors, err)
5798			}
5799		}
5800	}
5801	return nil, compiler.NewErrorGroupOrNil(errors)
5802}
5803
5804// ResolveReferences resolves references found inside Document objects.
5805func (m *Document) ResolveReferences(root string) (interface{}, error) {
5806	errors := make([]error, 0)
5807	if m.Info != nil {
5808		_, err := m.Info.ResolveReferences(root)
5809		if err != nil {
5810			errors = append(errors, err)
5811		}
5812	}
5813	if m.Paths != nil {
5814		_, err := m.Paths.ResolveReferences(root)
5815		if err != nil {
5816			errors = append(errors, err)
5817		}
5818	}
5819	if m.Definitions != nil {
5820		_, err := m.Definitions.ResolveReferences(root)
5821		if err != nil {
5822			errors = append(errors, err)
5823		}
5824	}
5825	if m.Parameters != nil {
5826		_, err := m.Parameters.ResolveReferences(root)
5827		if err != nil {
5828			errors = append(errors, err)
5829		}
5830	}
5831	if m.Responses != nil {
5832		_, err := m.Responses.ResolveReferences(root)
5833		if err != nil {
5834			errors = append(errors, err)
5835		}
5836	}
5837	for _, item := range m.Security {
5838		if item != nil {
5839			_, err := item.ResolveReferences(root)
5840			if err != nil {
5841				errors = append(errors, err)
5842			}
5843		}
5844	}
5845	if m.SecurityDefinitions != nil {
5846		_, err := m.SecurityDefinitions.ResolveReferences(root)
5847		if err != nil {
5848			errors = append(errors, err)
5849		}
5850	}
5851	for _, item := range m.Tags {
5852		if item != nil {
5853			_, err := item.ResolveReferences(root)
5854			if err != nil {
5855				errors = append(errors, err)
5856			}
5857		}
5858	}
5859	if m.ExternalDocs != nil {
5860		_, err := m.ExternalDocs.ResolveReferences(root)
5861		if err != nil {
5862			errors = append(errors, err)
5863		}
5864	}
5865	for _, item := range m.VendorExtension {
5866		if item != nil {
5867			_, err := item.ResolveReferences(root)
5868			if err != nil {
5869				errors = append(errors, err)
5870			}
5871		}
5872	}
5873	return nil, compiler.NewErrorGroupOrNil(errors)
5874}
5875
5876// ResolveReferences resolves references found inside Examples objects.
5877func (m *Examples) ResolveReferences(root string) (interface{}, error) {
5878	errors := make([]error, 0)
5879	for _, item := range m.AdditionalProperties {
5880		if item != nil {
5881			_, err := item.ResolveReferences(root)
5882			if err != nil {
5883				errors = append(errors, err)
5884			}
5885		}
5886	}
5887	return nil, compiler.NewErrorGroupOrNil(errors)
5888}
5889
5890// ResolveReferences resolves references found inside ExternalDocs objects.
5891func (m *ExternalDocs) ResolveReferences(root string) (interface{}, error) {
5892	errors := make([]error, 0)
5893	for _, item := range m.VendorExtension {
5894		if item != nil {
5895			_, err := item.ResolveReferences(root)
5896			if err != nil {
5897				errors = append(errors, err)
5898			}
5899		}
5900	}
5901	return nil, compiler.NewErrorGroupOrNil(errors)
5902}
5903
5904// ResolveReferences resolves references found inside FileSchema objects.
5905func (m *FileSchema) ResolveReferences(root string) (interface{}, error) {
5906	errors := make([]error, 0)
5907	if m.Default != nil {
5908		_, err := m.Default.ResolveReferences(root)
5909		if err != nil {
5910			errors = append(errors, err)
5911		}
5912	}
5913	if m.ExternalDocs != nil {
5914		_, err := m.ExternalDocs.ResolveReferences(root)
5915		if err != nil {
5916			errors = append(errors, err)
5917		}
5918	}
5919	if m.Example != nil {
5920		_, err := m.Example.ResolveReferences(root)
5921		if err != nil {
5922			errors = append(errors, err)
5923		}
5924	}
5925	for _, item := range m.VendorExtension {
5926		if item != nil {
5927			_, err := item.ResolveReferences(root)
5928			if err != nil {
5929				errors = append(errors, err)
5930			}
5931		}
5932	}
5933	return nil, compiler.NewErrorGroupOrNil(errors)
5934}
5935
5936// ResolveReferences resolves references found inside FormDataParameterSubSchema objects.
5937func (m *FormDataParameterSubSchema) ResolveReferences(root string) (interface{}, error) {
5938	errors := make([]error, 0)
5939	if m.Items != nil {
5940		_, err := m.Items.ResolveReferences(root)
5941		if err != nil {
5942			errors = append(errors, err)
5943		}
5944	}
5945	if m.Default != nil {
5946		_, err := m.Default.ResolveReferences(root)
5947		if err != nil {
5948			errors = append(errors, err)
5949		}
5950	}
5951	for _, item := range m.Enum {
5952		if item != nil {
5953			_, err := item.ResolveReferences(root)
5954			if err != nil {
5955				errors = append(errors, err)
5956			}
5957		}
5958	}
5959	for _, item := range m.VendorExtension {
5960		if item != nil {
5961			_, err := item.ResolveReferences(root)
5962			if err != nil {
5963				errors = append(errors, err)
5964			}
5965		}
5966	}
5967	return nil, compiler.NewErrorGroupOrNil(errors)
5968}
5969
5970// ResolveReferences resolves references found inside Header objects.
5971func (m *Header) ResolveReferences(root string) (interface{}, error) {
5972	errors := make([]error, 0)
5973	if m.Items != nil {
5974		_, err := m.Items.ResolveReferences(root)
5975		if err != nil {
5976			errors = append(errors, err)
5977		}
5978	}
5979	if m.Default != nil {
5980		_, err := m.Default.ResolveReferences(root)
5981		if err != nil {
5982			errors = append(errors, err)
5983		}
5984	}
5985	for _, item := range m.Enum {
5986		if item != nil {
5987			_, err := item.ResolveReferences(root)
5988			if err != nil {
5989				errors = append(errors, err)
5990			}
5991		}
5992	}
5993	for _, item := range m.VendorExtension {
5994		if item != nil {
5995			_, err := item.ResolveReferences(root)
5996			if err != nil {
5997				errors = append(errors, err)
5998			}
5999		}
6000	}
6001	return nil, compiler.NewErrorGroupOrNil(errors)
6002}
6003
6004// ResolveReferences resolves references found inside HeaderParameterSubSchema objects.
6005func (m *HeaderParameterSubSchema) ResolveReferences(root string) (interface{}, error) {
6006	errors := make([]error, 0)
6007	if m.Items != nil {
6008		_, err := m.Items.ResolveReferences(root)
6009		if err != nil {
6010			errors = append(errors, err)
6011		}
6012	}
6013	if m.Default != nil {
6014		_, err := m.Default.ResolveReferences(root)
6015		if err != nil {
6016			errors = append(errors, err)
6017		}
6018	}
6019	for _, item := range m.Enum {
6020		if item != nil {
6021			_, err := item.ResolveReferences(root)
6022			if err != nil {
6023				errors = append(errors, err)
6024			}
6025		}
6026	}
6027	for _, item := range m.VendorExtension {
6028		if item != nil {
6029			_, err := item.ResolveReferences(root)
6030			if err != nil {
6031				errors = append(errors, err)
6032			}
6033		}
6034	}
6035	return nil, compiler.NewErrorGroupOrNil(errors)
6036}
6037
6038// ResolveReferences resolves references found inside Headers objects.
6039func (m *Headers) ResolveReferences(root string) (interface{}, error) {
6040	errors := make([]error, 0)
6041	for _, item := range m.AdditionalProperties {
6042		if item != nil {
6043			_, err := item.ResolveReferences(root)
6044			if err != nil {
6045				errors = append(errors, err)
6046			}
6047		}
6048	}
6049	return nil, compiler.NewErrorGroupOrNil(errors)
6050}
6051
6052// ResolveReferences resolves references found inside Info objects.
6053func (m *Info) ResolveReferences(root string) (interface{}, error) {
6054	errors := make([]error, 0)
6055	if m.Contact != nil {
6056		_, err := m.Contact.ResolveReferences(root)
6057		if err != nil {
6058			errors = append(errors, err)
6059		}
6060	}
6061	if m.License != nil {
6062		_, err := m.License.ResolveReferences(root)
6063		if err != nil {
6064			errors = append(errors, err)
6065		}
6066	}
6067	for _, item := range m.VendorExtension {
6068		if item != nil {
6069			_, err := item.ResolveReferences(root)
6070			if err != nil {
6071				errors = append(errors, err)
6072			}
6073		}
6074	}
6075	return nil, compiler.NewErrorGroupOrNil(errors)
6076}
6077
6078// ResolveReferences resolves references found inside ItemsItem objects.
6079func (m *ItemsItem) ResolveReferences(root string) (interface{}, error) {
6080	errors := make([]error, 0)
6081	for _, item := range m.Schema {
6082		if item != nil {
6083			_, err := item.ResolveReferences(root)
6084			if err != nil {
6085				errors = append(errors, err)
6086			}
6087		}
6088	}
6089	return nil, compiler.NewErrorGroupOrNil(errors)
6090}
6091
6092// ResolveReferences resolves references found inside JsonReference objects.
6093func (m *JsonReference) ResolveReferences(root string) (interface{}, error) {
6094	errors := make([]error, 0)
6095	if m.XRef != "" {
6096		info, err := compiler.ReadInfoForRef(root, m.XRef)
6097		if err != nil {
6098			return nil, err
6099		}
6100		if info != nil {
6101			replacement, err := NewJsonReference(info, nil)
6102			if err == nil {
6103				*m = *replacement
6104				return m.ResolveReferences(root)
6105			}
6106		}
6107		return info, nil
6108	}
6109	return nil, compiler.NewErrorGroupOrNil(errors)
6110}
6111
6112// ResolveReferences resolves references found inside License objects.
6113func (m *License) ResolveReferences(root string) (interface{}, error) {
6114	errors := make([]error, 0)
6115	for _, item := range m.VendorExtension {
6116		if item != nil {
6117			_, err := item.ResolveReferences(root)
6118			if err != nil {
6119				errors = append(errors, err)
6120			}
6121		}
6122	}
6123	return nil, compiler.NewErrorGroupOrNil(errors)
6124}
6125
6126// ResolveReferences resolves references found inside NamedAny objects.
6127func (m *NamedAny) ResolveReferences(root string) (interface{}, error) {
6128	errors := make([]error, 0)
6129	if m.Value != nil {
6130		_, err := m.Value.ResolveReferences(root)
6131		if err != nil {
6132			errors = append(errors, err)
6133		}
6134	}
6135	return nil, compiler.NewErrorGroupOrNil(errors)
6136}
6137
6138// ResolveReferences resolves references found inside NamedHeader objects.
6139func (m *NamedHeader) ResolveReferences(root string) (interface{}, error) {
6140	errors := make([]error, 0)
6141	if m.Value != nil {
6142		_, err := m.Value.ResolveReferences(root)
6143		if err != nil {
6144			errors = append(errors, err)
6145		}
6146	}
6147	return nil, compiler.NewErrorGroupOrNil(errors)
6148}
6149
6150// ResolveReferences resolves references found inside NamedParameter objects.
6151func (m *NamedParameter) ResolveReferences(root string) (interface{}, error) {
6152	errors := make([]error, 0)
6153	if m.Value != nil {
6154		_, err := m.Value.ResolveReferences(root)
6155		if err != nil {
6156			errors = append(errors, err)
6157		}
6158	}
6159	return nil, compiler.NewErrorGroupOrNil(errors)
6160}
6161
6162// ResolveReferences resolves references found inside NamedPathItem objects.
6163func (m *NamedPathItem) ResolveReferences(root string) (interface{}, error) {
6164	errors := make([]error, 0)
6165	if m.Value != nil {
6166		_, err := m.Value.ResolveReferences(root)
6167		if err != nil {
6168			errors = append(errors, err)
6169		}
6170	}
6171	return nil, compiler.NewErrorGroupOrNil(errors)
6172}
6173
6174// ResolveReferences resolves references found inside NamedResponse objects.
6175func (m *NamedResponse) ResolveReferences(root string) (interface{}, error) {
6176	errors := make([]error, 0)
6177	if m.Value != nil {
6178		_, err := m.Value.ResolveReferences(root)
6179		if err != nil {
6180			errors = append(errors, err)
6181		}
6182	}
6183	return nil, compiler.NewErrorGroupOrNil(errors)
6184}
6185
6186// ResolveReferences resolves references found inside NamedResponseValue objects.
6187func (m *NamedResponseValue) ResolveReferences(root string) (interface{}, error) {
6188	errors := make([]error, 0)
6189	if m.Value != nil {
6190		_, err := m.Value.ResolveReferences(root)
6191		if err != nil {
6192			errors = append(errors, err)
6193		}
6194	}
6195	return nil, compiler.NewErrorGroupOrNil(errors)
6196}
6197
6198// ResolveReferences resolves references found inside NamedSchema objects.
6199func (m *NamedSchema) ResolveReferences(root string) (interface{}, error) {
6200	errors := make([]error, 0)
6201	if m.Value != nil {
6202		_, err := m.Value.ResolveReferences(root)
6203		if err != nil {
6204			errors = append(errors, err)
6205		}
6206	}
6207	return nil, compiler.NewErrorGroupOrNil(errors)
6208}
6209
6210// ResolveReferences resolves references found inside NamedSecurityDefinitionsItem objects.
6211func (m *NamedSecurityDefinitionsItem) ResolveReferences(root string) (interface{}, error) {
6212	errors := make([]error, 0)
6213	if m.Value != nil {
6214		_, err := m.Value.ResolveReferences(root)
6215		if err != nil {
6216			errors = append(errors, err)
6217		}
6218	}
6219	return nil, compiler.NewErrorGroupOrNil(errors)
6220}
6221
6222// ResolveReferences resolves references found inside NamedString objects.
6223func (m *NamedString) ResolveReferences(root string) (interface{}, error) {
6224	errors := make([]error, 0)
6225	return nil, compiler.NewErrorGroupOrNil(errors)
6226}
6227
6228// ResolveReferences resolves references found inside NamedStringArray objects.
6229func (m *NamedStringArray) ResolveReferences(root string) (interface{}, error) {
6230	errors := make([]error, 0)
6231	if m.Value != nil {
6232		_, err := m.Value.ResolveReferences(root)
6233		if err != nil {
6234			errors = append(errors, err)
6235		}
6236	}
6237	return nil, compiler.NewErrorGroupOrNil(errors)
6238}
6239
6240// ResolveReferences resolves references found inside NonBodyParameter objects.
6241func (m *NonBodyParameter) ResolveReferences(root string) (interface{}, error) {
6242	errors := make([]error, 0)
6243	{
6244		p, ok := m.Oneof.(*NonBodyParameter_HeaderParameterSubSchema)
6245		if ok {
6246			_, err := p.HeaderParameterSubSchema.ResolveReferences(root)
6247			if err != nil {
6248				return nil, err
6249			}
6250		}
6251	}
6252	{
6253		p, ok := m.Oneof.(*NonBodyParameter_FormDataParameterSubSchema)
6254		if ok {
6255			_, err := p.FormDataParameterSubSchema.ResolveReferences(root)
6256			if err != nil {
6257				return nil, err
6258			}
6259		}
6260	}
6261	{
6262		p, ok := m.Oneof.(*NonBodyParameter_QueryParameterSubSchema)
6263		if ok {
6264			_, err := p.QueryParameterSubSchema.ResolveReferences(root)
6265			if err != nil {
6266				return nil, err
6267			}
6268		}
6269	}
6270	{
6271		p, ok := m.Oneof.(*NonBodyParameter_PathParameterSubSchema)
6272		if ok {
6273			_, err := p.PathParameterSubSchema.ResolveReferences(root)
6274			if err != nil {
6275				return nil, err
6276			}
6277		}
6278	}
6279	return nil, compiler.NewErrorGroupOrNil(errors)
6280}
6281
6282// ResolveReferences resolves references found inside Oauth2AccessCodeSecurity objects.
6283func (m *Oauth2AccessCodeSecurity) ResolveReferences(root string) (interface{}, error) {
6284	errors := make([]error, 0)
6285	if m.Scopes != nil {
6286		_, err := m.Scopes.ResolveReferences(root)
6287		if err != nil {
6288			errors = append(errors, err)
6289		}
6290	}
6291	for _, item := range m.VendorExtension {
6292		if item != nil {
6293			_, err := item.ResolveReferences(root)
6294			if err != nil {
6295				errors = append(errors, err)
6296			}
6297		}
6298	}
6299	return nil, compiler.NewErrorGroupOrNil(errors)
6300}
6301
6302// ResolveReferences resolves references found inside Oauth2ApplicationSecurity objects.
6303func (m *Oauth2ApplicationSecurity) ResolveReferences(root string) (interface{}, error) {
6304	errors := make([]error, 0)
6305	if m.Scopes != nil {
6306		_, err := m.Scopes.ResolveReferences(root)
6307		if err != nil {
6308			errors = append(errors, err)
6309		}
6310	}
6311	for _, item := range m.VendorExtension {
6312		if item != nil {
6313			_, err := item.ResolveReferences(root)
6314			if err != nil {
6315				errors = append(errors, err)
6316			}
6317		}
6318	}
6319	return nil, compiler.NewErrorGroupOrNil(errors)
6320}
6321
6322// ResolveReferences resolves references found inside Oauth2ImplicitSecurity objects.
6323func (m *Oauth2ImplicitSecurity) ResolveReferences(root string) (interface{}, error) {
6324	errors := make([]error, 0)
6325	if m.Scopes != nil {
6326		_, err := m.Scopes.ResolveReferences(root)
6327		if err != nil {
6328			errors = append(errors, err)
6329		}
6330	}
6331	for _, item := range m.VendorExtension {
6332		if item != nil {
6333			_, err := item.ResolveReferences(root)
6334			if err != nil {
6335				errors = append(errors, err)
6336			}
6337		}
6338	}
6339	return nil, compiler.NewErrorGroupOrNil(errors)
6340}
6341
6342// ResolveReferences resolves references found inside Oauth2PasswordSecurity objects.
6343func (m *Oauth2PasswordSecurity) ResolveReferences(root string) (interface{}, error) {
6344	errors := make([]error, 0)
6345	if m.Scopes != nil {
6346		_, err := m.Scopes.ResolveReferences(root)
6347		if err != nil {
6348			errors = append(errors, err)
6349		}
6350	}
6351	for _, item := range m.VendorExtension {
6352		if item != nil {
6353			_, err := item.ResolveReferences(root)
6354			if err != nil {
6355				errors = append(errors, err)
6356			}
6357		}
6358	}
6359	return nil, compiler.NewErrorGroupOrNil(errors)
6360}
6361
6362// ResolveReferences resolves references found inside Oauth2Scopes objects.
6363func (m *Oauth2Scopes) ResolveReferences(root string) (interface{}, error) {
6364	errors := make([]error, 0)
6365	for _, item := range m.AdditionalProperties {
6366		if item != nil {
6367			_, err := item.ResolveReferences(root)
6368			if err != nil {
6369				errors = append(errors, err)
6370			}
6371		}
6372	}
6373	return nil, compiler.NewErrorGroupOrNil(errors)
6374}
6375
6376// ResolveReferences resolves references found inside Operation objects.
6377func (m *Operation) ResolveReferences(root string) (interface{}, error) {
6378	errors := make([]error, 0)
6379	if m.ExternalDocs != nil {
6380		_, err := m.ExternalDocs.ResolveReferences(root)
6381		if err != nil {
6382			errors = append(errors, err)
6383		}
6384	}
6385	for _, item := range m.Parameters {
6386		if item != nil {
6387			_, err := item.ResolveReferences(root)
6388			if err != nil {
6389				errors = append(errors, err)
6390			}
6391		}
6392	}
6393	if m.Responses != nil {
6394		_, err := m.Responses.ResolveReferences(root)
6395		if err != nil {
6396			errors = append(errors, err)
6397		}
6398	}
6399	for _, item := range m.Security {
6400		if item != nil {
6401			_, err := item.ResolveReferences(root)
6402			if err != nil {
6403				errors = append(errors, err)
6404			}
6405		}
6406	}
6407	for _, item := range m.VendorExtension {
6408		if item != nil {
6409			_, err := item.ResolveReferences(root)
6410			if err != nil {
6411				errors = append(errors, err)
6412			}
6413		}
6414	}
6415	return nil, compiler.NewErrorGroupOrNil(errors)
6416}
6417
6418// ResolveReferences resolves references found inside Parameter objects.
6419func (m *Parameter) ResolveReferences(root string) (interface{}, error) {
6420	errors := make([]error, 0)
6421	{
6422		p, ok := m.Oneof.(*Parameter_BodyParameter)
6423		if ok {
6424			_, err := p.BodyParameter.ResolveReferences(root)
6425			if err != nil {
6426				return nil, err
6427			}
6428		}
6429	}
6430	{
6431		p, ok := m.Oneof.(*Parameter_NonBodyParameter)
6432		if ok {
6433			_, err := p.NonBodyParameter.ResolveReferences(root)
6434			if err != nil {
6435				return nil, err
6436			}
6437		}
6438	}
6439	return nil, compiler.NewErrorGroupOrNil(errors)
6440}
6441
6442// ResolveReferences resolves references found inside ParameterDefinitions objects.
6443func (m *ParameterDefinitions) ResolveReferences(root string) (interface{}, error) {
6444	errors := make([]error, 0)
6445	for _, item := range m.AdditionalProperties {
6446		if item != nil {
6447			_, err := item.ResolveReferences(root)
6448			if err != nil {
6449				errors = append(errors, err)
6450			}
6451		}
6452	}
6453	return nil, compiler.NewErrorGroupOrNil(errors)
6454}
6455
6456// ResolveReferences resolves references found inside ParametersItem objects.
6457func (m *ParametersItem) ResolveReferences(root string) (interface{}, error) {
6458	errors := make([]error, 0)
6459	{
6460		p, ok := m.Oneof.(*ParametersItem_Parameter)
6461		if ok {
6462			_, err := p.Parameter.ResolveReferences(root)
6463			if err != nil {
6464				return nil, err
6465			}
6466		}
6467	}
6468	{
6469		p, ok := m.Oneof.(*ParametersItem_JsonReference)
6470		if ok {
6471			info, err := p.JsonReference.ResolveReferences(root)
6472			if err != nil {
6473				return nil, err
6474			} else if info != nil {
6475				n, err := NewParametersItem(info, nil)
6476				if err != nil {
6477					return nil, err
6478				} else if n != nil {
6479					*m = *n
6480					return nil, nil
6481				}
6482			}
6483		}
6484	}
6485	return nil, compiler.NewErrorGroupOrNil(errors)
6486}
6487
6488// ResolveReferences resolves references found inside PathItem objects.
6489func (m *PathItem) ResolveReferences(root string) (interface{}, error) {
6490	errors := make([]error, 0)
6491	if m.XRef != "" {
6492		info, err := compiler.ReadInfoForRef(root, m.XRef)
6493		if err != nil {
6494			return nil, err
6495		}
6496		if info != nil {
6497			replacement, err := NewPathItem(info, nil)
6498			if err == nil {
6499				*m = *replacement
6500				return m.ResolveReferences(root)
6501			}
6502		}
6503		return info, nil
6504	}
6505	if m.Get != nil {
6506		_, err := m.Get.ResolveReferences(root)
6507		if err != nil {
6508			errors = append(errors, err)
6509		}
6510	}
6511	if m.Put != nil {
6512		_, err := m.Put.ResolveReferences(root)
6513		if err != nil {
6514			errors = append(errors, err)
6515		}
6516	}
6517	if m.Post != nil {
6518		_, err := m.Post.ResolveReferences(root)
6519		if err != nil {
6520			errors = append(errors, err)
6521		}
6522	}
6523	if m.Delete != nil {
6524		_, err := m.Delete.ResolveReferences(root)
6525		if err != nil {
6526			errors = append(errors, err)
6527		}
6528	}
6529	if m.Options != nil {
6530		_, err := m.Options.ResolveReferences(root)
6531		if err != nil {
6532			errors = append(errors, err)
6533		}
6534	}
6535	if m.Head != nil {
6536		_, err := m.Head.ResolveReferences(root)
6537		if err != nil {
6538			errors = append(errors, err)
6539		}
6540	}
6541	if m.Patch != nil {
6542		_, err := m.Patch.ResolveReferences(root)
6543		if err != nil {
6544			errors = append(errors, err)
6545		}
6546	}
6547	for _, item := range m.Parameters {
6548		if item != nil {
6549			_, err := item.ResolveReferences(root)
6550			if err != nil {
6551				errors = append(errors, err)
6552			}
6553		}
6554	}
6555	for _, item := range m.VendorExtension {
6556		if item != nil {
6557			_, err := item.ResolveReferences(root)
6558			if err != nil {
6559				errors = append(errors, err)
6560			}
6561		}
6562	}
6563	return nil, compiler.NewErrorGroupOrNil(errors)
6564}
6565
6566// ResolveReferences resolves references found inside PathParameterSubSchema objects.
6567func (m *PathParameterSubSchema) ResolveReferences(root string) (interface{}, error) {
6568	errors := make([]error, 0)
6569	if m.Items != nil {
6570		_, err := m.Items.ResolveReferences(root)
6571		if err != nil {
6572			errors = append(errors, err)
6573		}
6574	}
6575	if m.Default != nil {
6576		_, err := m.Default.ResolveReferences(root)
6577		if err != nil {
6578			errors = append(errors, err)
6579		}
6580	}
6581	for _, item := range m.Enum {
6582		if item != nil {
6583			_, err := item.ResolveReferences(root)
6584			if err != nil {
6585				errors = append(errors, err)
6586			}
6587		}
6588	}
6589	for _, item := range m.VendorExtension {
6590		if item != nil {
6591			_, err := item.ResolveReferences(root)
6592			if err != nil {
6593				errors = append(errors, err)
6594			}
6595		}
6596	}
6597	return nil, compiler.NewErrorGroupOrNil(errors)
6598}
6599
6600// ResolveReferences resolves references found inside Paths objects.
6601func (m *Paths) ResolveReferences(root string) (interface{}, error) {
6602	errors := make([]error, 0)
6603	for _, item := range m.VendorExtension {
6604		if item != nil {
6605			_, err := item.ResolveReferences(root)
6606			if err != nil {
6607				errors = append(errors, err)
6608			}
6609		}
6610	}
6611	for _, item := range m.Path {
6612		if item != nil {
6613			_, err := item.ResolveReferences(root)
6614			if err != nil {
6615				errors = append(errors, err)
6616			}
6617		}
6618	}
6619	return nil, compiler.NewErrorGroupOrNil(errors)
6620}
6621
6622// ResolveReferences resolves references found inside PrimitivesItems objects.
6623func (m *PrimitivesItems) ResolveReferences(root string) (interface{}, error) {
6624	errors := make([]error, 0)
6625	if m.Items != nil {
6626		_, err := m.Items.ResolveReferences(root)
6627		if err != nil {
6628			errors = append(errors, err)
6629		}
6630	}
6631	if m.Default != nil {
6632		_, err := m.Default.ResolveReferences(root)
6633		if err != nil {
6634			errors = append(errors, err)
6635		}
6636	}
6637	for _, item := range m.Enum {
6638		if item != nil {
6639			_, err := item.ResolveReferences(root)
6640			if err != nil {
6641				errors = append(errors, err)
6642			}
6643		}
6644	}
6645	for _, item := range m.VendorExtension {
6646		if item != nil {
6647			_, err := item.ResolveReferences(root)
6648			if err != nil {
6649				errors = append(errors, err)
6650			}
6651		}
6652	}
6653	return nil, compiler.NewErrorGroupOrNil(errors)
6654}
6655
6656// ResolveReferences resolves references found inside Properties objects.
6657func (m *Properties) ResolveReferences(root string) (interface{}, error) {
6658	errors := make([]error, 0)
6659	for _, item := range m.AdditionalProperties {
6660		if item != nil {
6661			_, err := item.ResolveReferences(root)
6662			if err != nil {
6663				errors = append(errors, err)
6664			}
6665		}
6666	}
6667	return nil, compiler.NewErrorGroupOrNil(errors)
6668}
6669
6670// ResolveReferences resolves references found inside QueryParameterSubSchema objects.
6671func (m *QueryParameterSubSchema) ResolveReferences(root string) (interface{}, error) {
6672	errors := make([]error, 0)
6673	if m.Items != nil {
6674		_, err := m.Items.ResolveReferences(root)
6675		if err != nil {
6676			errors = append(errors, err)
6677		}
6678	}
6679	if m.Default != nil {
6680		_, err := m.Default.ResolveReferences(root)
6681		if err != nil {
6682			errors = append(errors, err)
6683		}
6684	}
6685	for _, item := range m.Enum {
6686		if item != nil {
6687			_, err := item.ResolveReferences(root)
6688			if err != nil {
6689				errors = append(errors, err)
6690			}
6691		}
6692	}
6693	for _, item := range m.VendorExtension {
6694		if item != nil {
6695			_, err := item.ResolveReferences(root)
6696			if err != nil {
6697				errors = append(errors, err)
6698			}
6699		}
6700	}
6701	return nil, compiler.NewErrorGroupOrNil(errors)
6702}
6703
6704// ResolveReferences resolves references found inside Response objects.
6705func (m *Response) ResolveReferences(root string) (interface{}, error) {
6706	errors := make([]error, 0)
6707	if m.Schema != nil {
6708		_, err := m.Schema.ResolveReferences(root)
6709		if err != nil {
6710			errors = append(errors, err)
6711		}
6712	}
6713	if m.Headers != nil {
6714		_, err := m.Headers.ResolveReferences(root)
6715		if err != nil {
6716			errors = append(errors, err)
6717		}
6718	}
6719	if m.Examples != nil {
6720		_, err := m.Examples.ResolveReferences(root)
6721		if err != nil {
6722			errors = append(errors, err)
6723		}
6724	}
6725	for _, item := range m.VendorExtension {
6726		if item != nil {
6727			_, err := item.ResolveReferences(root)
6728			if err != nil {
6729				errors = append(errors, err)
6730			}
6731		}
6732	}
6733	return nil, compiler.NewErrorGroupOrNil(errors)
6734}
6735
6736// ResolveReferences resolves references found inside ResponseDefinitions objects.
6737func (m *ResponseDefinitions) ResolveReferences(root string) (interface{}, error) {
6738	errors := make([]error, 0)
6739	for _, item := range m.AdditionalProperties {
6740		if item != nil {
6741			_, err := item.ResolveReferences(root)
6742			if err != nil {
6743				errors = append(errors, err)
6744			}
6745		}
6746	}
6747	return nil, compiler.NewErrorGroupOrNil(errors)
6748}
6749
6750// ResolveReferences resolves references found inside ResponseValue objects.
6751func (m *ResponseValue) ResolveReferences(root string) (interface{}, error) {
6752	errors := make([]error, 0)
6753	{
6754		p, ok := m.Oneof.(*ResponseValue_Response)
6755		if ok {
6756			_, err := p.Response.ResolveReferences(root)
6757			if err != nil {
6758				return nil, err
6759			}
6760		}
6761	}
6762	{
6763		p, ok := m.Oneof.(*ResponseValue_JsonReference)
6764		if ok {
6765			info, err := p.JsonReference.ResolveReferences(root)
6766			if err != nil {
6767				return nil, err
6768			} else if info != nil {
6769				n, err := NewResponseValue(info, nil)
6770				if err != nil {
6771					return nil, err
6772				} else if n != nil {
6773					*m = *n
6774					return nil, nil
6775				}
6776			}
6777		}
6778	}
6779	return nil, compiler.NewErrorGroupOrNil(errors)
6780}
6781
6782// ResolveReferences resolves references found inside Responses objects.
6783func (m *Responses) ResolveReferences(root string) (interface{}, error) {
6784	errors := make([]error, 0)
6785	for _, item := range m.ResponseCode {
6786		if item != nil {
6787			_, err := item.ResolveReferences(root)
6788			if err != nil {
6789				errors = append(errors, err)
6790			}
6791		}
6792	}
6793	for _, item := range m.VendorExtension {
6794		if item != nil {
6795			_, err := item.ResolveReferences(root)
6796			if err != nil {
6797				errors = append(errors, err)
6798			}
6799		}
6800	}
6801	return nil, compiler.NewErrorGroupOrNil(errors)
6802}
6803
6804// ResolveReferences resolves references found inside Schema objects.
6805func (m *Schema) ResolveReferences(root string) (interface{}, error) {
6806	errors := make([]error, 0)
6807	if m.XRef != "" {
6808		info, err := compiler.ReadInfoForRef(root, m.XRef)
6809		if err != nil {
6810			return nil, err
6811		}
6812		if info != nil {
6813			replacement, err := NewSchema(info, nil)
6814			if err == nil {
6815				*m = *replacement
6816				return m.ResolveReferences(root)
6817			}
6818		}
6819		return info, nil
6820	}
6821	if m.Default != nil {
6822		_, err := m.Default.ResolveReferences(root)
6823		if err != nil {
6824			errors = append(errors, err)
6825		}
6826	}
6827	for _, item := range m.Enum {
6828		if item != nil {
6829			_, err := item.ResolveReferences(root)
6830			if err != nil {
6831				errors = append(errors, err)
6832			}
6833		}
6834	}
6835	if m.AdditionalProperties != nil {
6836		_, err := m.AdditionalProperties.ResolveReferences(root)
6837		if err != nil {
6838			errors = append(errors, err)
6839		}
6840	}
6841	if m.Type != nil {
6842		_, err := m.Type.ResolveReferences(root)
6843		if err != nil {
6844			errors = append(errors, err)
6845		}
6846	}
6847	if m.Items != nil {
6848		_, err := m.Items.ResolveReferences(root)
6849		if err != nil {
6850			errors = append(errors, err)
6851		}
6852	}
6853	for _, item := range m.AllOf {
6854		if item != nil {
6855			_, err := item.ResolveReferences(root)
6856			if err != nil {
6857				errors = append(errors, err)
6858			}
6859		}
6860	}
6861	if m.Properties != nil {
6862		_, err := m.Properties.ResolveReferences(root)
6863		if err != nil {
6864			errors = append(errors, err)
6865		}
6866	}
6867	if m.Xml != nil {
6868		_, err := m.Xml.ResolveReferences(root)
6869		if err != nil {
6870			errors = append(errors, err)
6871		}
6872	}
6873	if m.ExternalDocs != nil {
6874		_, err := m.ExternalDocs.ResolveReferences(root)
6875		if err != nil {
6876			errors = append(errors, err)
6877		}
6878	}
6879	if m.Example != nil {
6880		_, err := m.Example.ResolveReferences(root)
6881		if err != nil {
6882			errors = append(errors, err)
6883		}
6884	}
6885	for _, item := range m.VendorExtension {
6886		if item != nil {
6887			_, err := item.ResolveReferences(root)
6888			if err != nil {
6889				errors = append(errors, err)
6890			}
6891		}
6892	}
6893	return nil, compiler.NewErrorGroupOrNil(errors)
6894}
6895
6896// ResolveReferences resolves references found inside SchemaItem objects.
6897func (m *SchemaItem) ResolveReferences(root string) (interface{}, error) {
6898	errors := make([]error, 0)
6899	{
6900		p, ok := m.Oneof.(*SchemaItem_Schema)
6901		if ok {
6902			_, err := p.Schema.ResolveReferences(root)
6903			if err != nil {
6904				return nil, err
6905			}
6906		}
6907	}
6908	{
6909		p, ok := m.Oneof.(*SchemaItem_FileSchema)
6910		if ok {
6911			_, err := p.FileSchema.ResolveReferences(root)
6912			if err != nil {
6913				return nil, err
6914			}
6915		}
6916	}
6917	return nil, compiler.NewErrorGroupOrNil(errors)
6918}
6919
6920// ResolveReferences resolves references found inside SecurityDefinitions objects.
6921func (m *SecurityDefinitions) ResolveReferences(root string) (interface{}, error) {
6922	errors := make([]error, 0)
6923	for _, item := range m.AdditionalProperties {
6924		if item != nil {
6925			_, err := item.ResolveReferences(root)
6926			if err != nil {
6927				errors = append(errors, err)
6928			}
6929		}
6930	}
6931	return nil, compiler.NewErrorGroupOrNil(errors)
6932}
6933
6934// ResolveReferences resolves references found inside SecurityDefinitionsItem objects.
6935func (m *SecurityDefinitionsItem) ResolveReferences(root string) (interface{}, error) {
6936	errors := make([]error, 0)
6937	{
6938		p, ok := m.Oneof.(*SecurityDefinitionsItem_BasicAuthenticationSecurity)
6939		if ok {
6940			_, err := p.BasicAuthenticationSecurity.ResolveReferences(root)
6941			if err != nil {
6942				return nil, err
6943			}
6944		}
6945	}
6946	{
6947		p, ok := m.Oneof.(*SecurityDefinitionsItem_ApiKeySecurity)
6948		if ok {
6949			_, err := p.ApiKeySecurity.ResolveReferences(root)
6950			if err != nil {
6951				return nil, err
6952			}
6953		}
6954	}
6955	{
6956		p, ok := m.Oneof.(*SecurityDefinitionsItem_Oauth2ImplicitSecurity)
6957		if ok {
6958			_, err := p.Oauth2ImplicitSecurity.ResolveReferences(root)
6959			if err != nil {
6960				return nil, err
6961			}
6962		}
6963	}
6964	{
6965		p, ok := m.Oneof.(*SecurityDefinitionsItem_Oauth2PasswordSecurity)
6966		if ok {
6967			_, err := p.Oauth2PasswordSecurity.ResolveReferences(root)
6968			if err != nil {
6969				return nil, err
6970			}
6971		}
6972	}
6973	{
6974		p, ok := m.Oneof.(*SecurityDefinitionsItem_Oauth2ApplicationSecurity)
6975		if ok {
6976			_, err := p.Oauth2ApplicationSecurity.ResolveReferences(root)
6977			if err != nil {
6978				return nil, err
6979			}
6980		}
6981	}
6982	{
6983		p, ok := m.Oneof.(*SecurityDefinitionsItem_Oauth2AccessCodeSecurity)
6984		if ok {
6985			_, err := p.Oauth2AccessCodeSecurity.ResolveReferences(root)
6986			if err != nil {
6987				return nil, err
6988			}
6989		}
6990	}
6991	return nil, compiler.NewErrorGroupOrNil(errors)
6992}
6993
6994// ResolveReferences resolves references found inside SecurityRequirement objects.
6995func (m *SecurityRequirement) ResolveReferences(root string) (interface{}, error) {
6996	errors := make([]error, 0)
6997	for _, item := range m.AdditionalProperties {
6998		if item != nil {
6999			_, err := item.ResolveReferences(root)
7000			if err != nil {
7001				errors = append(errors, err)
7002			}
7003		}
7004	}
7005	return nil, compiler.NewErrorGroupOrNil(errors)
7006}
7007
7008// ResolveReferences resolves references found inside StringArray objects.
7009func (m *StringArray) ResolveReferences(root string) (interface{}, error) {
7010	errors := make([]error, 0)
7011	return nil, compiler.NewErrorGroupOrNil(errors)
7012}
7013
7014// ResolveReferences resolves references found inside Tag objects.
7015func (m *Tag) ResolveReferences(root string) (interface{}, error) {
7016	errors := make([]error, 0)
7017	if m.ExternalDocs != nil {
7018		_, err := m.ExternalDocs.ResolveReferences(root)
7019		if err != nil {
7020			errors = append(errors, err)
7021		}
7022	}
7023	for _, item := range m.VendorExtension {
7024		if item != nil {
7025			_, err := item.ResolveReferences(root)
7026			if err != nil {
7027				errors = append(errors, err)
7028			}
7029		}
7030	}
7031	return nil, compiler.NewErrorGroupOrNil(errors)
7032}
7033
7034// ResolveReferences resolves references found inside TypeItem objects.
7035func (m *TypeItem) ResolveReferences(root string) (interface{}, error) {
7036	errors := make([]error, 0)
7037	return nil, compiler.NewErrorGroupOrNil(errors)
7038}
7039
7040// ResolveReferences resolves references found inside VendorExtension objects.
7041func (m *VendorExtension) ResolveReferences(root string) (interface{}, error) {
7042	errors := make([]error, 0)
7043	for _, item := range m.AdditionalProperties {
7044		if item != nil {
7045			_, err := item.ResolveReferences(root)
7046			if err != nil {
7047				errors = append(errors, err)
7048			}
7049		}
7050	}
7051	return nil, compiler.NewErrorGroupOrNil(errors)
7052}
7053
7054// ResolveReferences resolves references found inside Xml objects.
7055func (m *Xml) ResolveReferences(root string) (interface{}, error) {
7056	errors := make([]error, 0)
7057	for _, item := range m.VendorExtension {
7058		if item != nil {
7059			_, err := item.ResolveReferences(root)
7060			if err != nil {
7061				errors = append(errors, err)
7062			}
7063		}
7064	}
7065	return nil, compiler.NewErrorGroupOrNil(errors)
7066}
7067
7068// ToRawInfo returns a description of AdditionalPropertiesItem suitable for JSON or YAML export.
7069func (m *AdditionalPropertiesItem) ToRawInfo() interface{} {
7070	// ONE OF WRAPPER
7071	// AdditionalPropertiesItem
7072	// {Name:schema Type:Schema StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
7073	v0 := m.GetSchema()
7074	if v0 != nil {
7075		return v0.ToRawInfo()
7076	}
7077	// {Name:boolean Type:bool StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
7078	if v1, ok := m.GetOneof().(*AdditionalPropertiesItem_Boolean); ok {
7079		return v1.Boolean
7080	}
7081	return nil
7082}
7083
7084// ToRawInfo returns a description of Any suitable for JSON or YAML export.
7085func (m *Any) ToRawInfo() interface{} {
7086	var err error
7087	var info1 []yaml.MapSlice
7088	err = yaml.Unmarshal([]byte(m.Yaml), &info1)
7089	if err == nil {
7090		return info1
7091	}
7092	var info2 yaml.MapSlice
7093	err = yaml.Unmarshal([]byte(m.Yaml), &info2)
7094	if err == nil {
7095		return info2
7096	}
7097	var info3 interface{}
7098	err = yaml.Unmarshal([]byte(m.Yaml), &info3)
7099	if err == nil {
7100		return info3
7101	}
7102	return nil
7103}
7104
7105// ToRawInfo returns a description of ApiKeySecurity suitable for JSON or YAML export.
7106func (m *ApiKeySecurity) ToRawInfo() interface{} {
7107	info := yaml.MapSlice{}
7108	if m.Type != "" {
7109		info = append(info, yaml.MapItem{"type", m.Type})
7110	}
7111	if m.Name != "" {
7112		info = append(info, yaml.MapItem{"name", m.Name})
7113	}
7114	if m.In != "" {
7115		info = append(info, yaml.MapItem{"in", m.In})
7116	}
7117	if m.Description != "" {
7118		info = append(info, yaml.MapItem{"description", m.Description})
7119	}
7120	if m.VendorExtension != nil {
7121		for _, item := range m.VendorExtension {
7122			info = append(info, yaml.MapItem{item.Name, item.Value.ToRawInfo()})
7123		}
7124	}
7125	// &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:}
7126	return info
7127}
7128
7129// ToRawInfo returns a description of BasicAuthenticationSecurity suitable for JSON or YAML export.
7130func (m *BasicAuthenticationSecurity) ToRawInfo() interface{} {
7131	info := yaml.MapSlice{}
7132	if m.Type != "" {
7133		info = append(info, yaml.MapItem{"type", m.Type})
7134	}
7135	if m.Description != "" {
7136		info = append(info, yaml.MapItem{"description", m.Description})
7137	}
7138	if m.VendorExtension != nil {
7139		for _, item := range m.VendorExtension {
7140			info = append(info, yaml.MapItem{item.Name, item.Value.ToRawInfo()})
7141		}
7142	}
7143	// &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:}
7144	return info
7145}
7146
7147// ToRawInfo returns a description of BodyParameter suitable for JSON or YAML export.
7148func (m *BodyParameter) ToRawInfo() interface{} {
7149	info := yaml.MapSlice{}
7150	if m.Description != "" {
7151		info = append(info, yaml.MapItem{"description", m.Description})
7152	}
7153	if m.Name != "" {
7154		info = append(info, yaml.MapItem{"name", m.Name})
7155	}
7156	if m.In != "" {
7157		info = append(info, yaml.MapItem{"in", m.In})
7158	}
7159	if m.Required != false {
7160		info = append(info, yaml.MapItem{"required", m.Required})
7161	}
7162	if m.Schema != nil {
7163		info = append(info, yaml.MapItem{"schema", m.Schema.ToRawInfo()})
7164	}
7165	// &{Name:schema Type:Schema StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
7166	if m.VendorExtension != nil {
7167		for _, item := range m.VendorExtension {
7168			info = append(info, yaml.MapItem{item.Name, item.Value.ToRawInfo()})
7169		}
7170	}
7171	// &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:}
7172	return info
7173}
7174
7175// ToRawInfo returns a description of Contact suitable for JSON or YAML export.
7176func (m *Contact) ToRawInfo() interface{} {
7177	info := yaml.MapSlice{}
7178	if m.Name != "" {
7179		info = append(info, yaml.MapItem{"name", m.Name})
7180	}
7181	if m.Url != "" {
7182		info = append(info, yaml.MapItem{"url", m.Url})
7183	}
7184	if m.Email != "" {
7185		info = append(info, yaml.MapItem{"email", m.Email})
7186	}
7187	if m.VendorExtension != nil {
7188		for _, item := range m.VendorExtension {
7189			info = append(info, yaml.MapItem{item.Name, item.Value.ToRawInfo()})
7190		}
7191	}
7192	// &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:}
7193	return info
7194}
7195
7196// ToRawInfo returns a description of Default suitable for JSON or YAML export.
7197func (m *Default) ToRawInfo() interface{} {
7198	info := yaml.MapSlice{}
7199	if m.AdditionalProperties != nil {
7200		for _, item := range m.AdditionalProperties {
7201			info = append(info, yaml.MapItem{item.Name, item.Value.ToRawInfo()})
7202		}
7203	}
7204	// &{Name:additionalProperties Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern: Implicit:false Description:}
7205	return info
7206}
7207
7208// ToRawInfo returns a description of Definitions suitable for JSON or YAML export.
7209func (m *Definitions) ToRawInfo() interface{} {
7210	info := yaml.MapSlice{}
7211	if m.AdditionalProperties != nil {
7212		for _, item := range m.AdditionalProperties {
7213			info = append(info, yaml.MapItem{item.Name, item.Value.ToRawInfo()})
7214		}
7215	}
7216	// &{Name:additionalProperties Type:NamedSchema StringEnumValues:[] MapType:Schema Repeated:true Pattern: Implicit:true Description:}
7217	return info
7218}
7219
7220// ToRawInfo returns a description of Document suitable for JSON or YAML export.
7221func (m *Document) ToRawInfo() interface{} {
7222	info := yaml.MapSlice{}
7223	if m.Swagger != "" {
7224		info = append(info, yaml.MapItem{"swagger", m.Swagger})
7225	}
7226	if m.Info != nil {
7227		info = append(info, yaml.MapItem{"info", m.Info.ToRawInfo()})
7228	}
7229	// &{Name:info Type:Info StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
7230	if m.Host != "" {
7231		info = append(info, yaml.MapItem{"host", m.Host})
7232	}
7233	if m.BasePath != "" {
7234		info = append(info, yaml.MapItem{"basePath", m.BasePath})
7235	}
7236	if len(m.Schemes) != 0 {
7237		info = append(info, yaml.MapItem{"schemes", m.Schemes})
7238	}
7239	if len(m.Consumes) != 0 {
7240		info = append(info, yaml.MapItem{"consumes", m.Consumes})
7241	}
7242	if len(m.Produces) != 0 {
7243		info = append(info, yaml.MapItem{"produces", m.Produces})
7244	}
7245	if m.Paths != nil {
7246		info = append(info, yaml.MapItem{"paths", m.Paths.ToRawInfo()})
7247	}
7248	// &{Name:paths Type:Paths StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
7249	if m.Definitions != nil {
7250		info = append(info, yaml.MapItem{"definitions", m.Definitions.ToRawInfo()})
7251	}
7252	// &{Name:definitions Type:Definitions StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
7253	if m.Parameters != nil {
7254		info = append(info, yaml.MapItem{"parameters", m.Parameters.ToRawInfo()})
7255	}
7256	// &{Name:parameters Type:ParameterDefinitions StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
7257	if m.Responses != nil {
7258		info = append(info, yaml.MapItem{"responses", m.Responses.ToRawInfo()})
7259	}
7260	// &{Name:responses Type:ResponseDefinitions StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
7261	if len(m.Security) != 0 {
7262		items := make([]interface{}, 0)
7263		for _, item := range m.Security {
7264			items = append(items, item.ToRawInfo())
7265		}
7266		info = append(info, yaml.MapItem{"security", items})
7267	}
7268	// &{Name:security Type:SecurityRequirement StringEnumValues:[] MapType: Repeated:true Pattern: Implicit:false Description:}
7269	if m.SecurityDefinitions != nil {
7270		info = append(info, yaml.MapItem{"securityDefinitions", m.SecurityDefinitions.ToRawInfo()})
7271	}
7272	// &{Name:securityDefinitions Type:SecurityDefinitions StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
7273	if len(m.Tags) != 0 {
7274		items := make([]interface{}, 0)
7275		for _, item := range m.Tags {
7276			items = append(items, item.ToRawInfo())
7277		}
7278		info = append(info, yaml.MapItem{"tags", items})
7279	}
7280	// &{Name:tags Type:Tag StringEnumValues:[] MapType: Repeated:true Pattern: Implicit:false Description:}
7281	if m.ExternalDocs != nil {
7282		info = append(info, yaml.MapItem{"externalDocs", m.ExternalDocs.ToRawInfo()})
7283	}
7284	// &{Name:externalDocs Type:ExternalDocs StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
7285	if m.VendorExtension != nil {
7286		for _, item := range m.VendorExtension {
7287			info = append(info, yaml.MapItem{item.Name, item.Value.ToRawInfo()})
7288		}
7289	}
7290	// &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:}
7291	return info
7292}
7293
7294// ToRawInfo returns a description of Examples suitable for JSON or YAML export.
7295func (m *Examples) ToRawInfo() interface{} {
7296	info := yaml.MapSlice{}
7297	if m.AdditionalProperties != nil {
7298		for _, item := range m.AdditionalProperties {
7299			info = append(info, yaml.MapItem{item.Name, item.Value.ToRawInfo()})
7300		}
7301	}
7302	// &{Name:additionalProperties Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern: Implicit:true Description:}
7303	return info
7304}
7305
7306// ToRawInfo returns a description of ExternalDocs suitable for JSON or YAML export.
7307func (m *ExternalDocs) ToRawInfo() interface{} {
7308	info := yaml.MapSlice{}
7309	if m.Description != "" {
7310		info = append(info, yaml.MapItem{"description", m.Description})
7311	}
7312	if m.Url != "" {
7313		info = append(info, yaml.MapItem{"url", m.Url})
7314	}
7315	if m.VendorExtension != nil {
7316		for _, item := range m.VendorExtension {
7317			info = append(info, yaml.MapItem{item.Name, item.Value.ToRawInfo()})
7318		}
7319	}
7320	// &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:}
7321	return info
7322}
7323
7324// ToRawInfo returns a description of FileSchema suitable for JSON or YAML export.
7325func (m *FileSchema) ToRawInfo() interface{} {
7326	info := yaml.MapSlice{}
7327	if m.Format != "" {
7328		info = append(info, yaml.MapItem{"format", m.Format})
7329	}
7330	if m.Title != "" {
7331		info = append(info, yaml.MapItem{"title", m.Title})
7332	}
7333	if m.Description != "" {
7334		info = append(info, yaml.MapItem{"description", m.Description})
7335	}
7336	if m.Default != nil {
7337		info = append(info, yaml.MapItem{"default", m.Default.ToRawInfo()})
7338	}
7339	// &{Name:default Type:Any StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
7340	if len(m.Required) != 0 {
7341		info = append(info, yaml.MapItem{"required", m.Required})
7342	}
7343	if m.Type != "" {
7344		info = append(info, yaml.MapItem{"type", m.Type})
7345	}
7346	if m.ReadOnly != false {
7347		info = append(info, yaml.MapItem{"readOnly", m.ReadOnly})
7348	}
7349	if m.ExternalDocs != nil {
7350		info = append(info, yaml.MapItem{"externalDocs", m.ExternalDocs.ToRawInfo()})
7351	}
7352	// &{Name:externalDocs Type:ExternalDocs StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
7353	if m.Example != nil {
7354		info = append(info, yaml.MapItem{"example", m.Example.ToRawInfo()})
7355	}
7356	// &{Name:example Type:Any StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
7357	if m.VendorExtension != nil {
7358		for _, item := range m.VendorExtension {
7359			info = append(info, yaml.MapItem{item.Name, item.Value.ToRawInfo()})
7360		}
7361	}
7362	// &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:}
7363	return info
7364}
7365
7366// ToRawInfo returns a description of FormDataParameterSubSchema suitable for JSON or YAML export.
7367func (m *FormDataParameterSubSchema) ToRawInfo() interface{} {
7368	info := yaml.MapSlice{}
7369	if m.Required != false {
7370		info = append(info, yaml.MapItem{"required", m.Required})
7371	}
7372	if m.In != "" {
7373		info = append(info, yaml.MapItem{"in", m.In})
7374	}
7375	if m.Description != "" {
7376		info = append(info, yaml.MapItem{"description", m.Description})
7377	}
7378	if m.Name != "" {
7379		info = append(info, yaml.MapItem{"name", m.Name})
7380	}
7381	if m.AllowEmptyValue != false {
7382		info = append(info, yaml.MapItem{"allowEmptyValue", m.AllowEmptyValue})
7383	}
7384	if m.Type != "" {
7385		info = append(info, yaml.MapItem{"type", m.Type})
7386	}
7387	if m.Format != "" {
7388		info = append(info, yaml.MapItem{"format", m.Format})
7389	}
7390	if m.Items != nil {
7391		info = append(info, yaml.MapItem{"items", m.Items.ToRawInfo()})
7392	}
7393	// &{Name:items Type:PrimitivesItems StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
7394	if m.CollectionFormat != "" {
7395		info = append(info, yaml.MapItem{"collectionFormat", m.CollectionFormat})
7396	}
7397	if m.Default != nil {
7398		info = append(info, yaml.MapItem{"default", m.Default.ToRawInfo()})
7399	}
7400	// &{Name:default Type:Any StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
7401	if m.Maximum != 0.0 {
7402		info = append(info, yaml.MapItem{"maximum", m.Maximum})
7403	}
7404	if m.ExclusiveMaximum != false {
7405		info = append(info, yaml.MapItem{"exclusiveMaximum", m.ExclusiveMaximum})
7406	}
7407	if m.Minimum != 0.0 {
7408		info = append(info, yaml.MapItem{"minimum", m.Minimum})
7409	}
7410	if m.ExclusiveMinimum != false {
7411		info = append(info, yaml.MapItem{"exclusiveMinimum", m.ExclusiveMinimum})
7412	}
7413	if m.MaxLength != 0 {
7414		info = append(info, yaml.MapItem{"maxLength", m.MaxLength})
7415	}
7416	if m.MinLength != 0 {
7417		info = append(info, yaml.MapItem{"minLength", m.MinLength})
7418	}
7419	if m.Pattern != "" {
7420		info = append(info, yaml.MapItem{"pattern", m.Pattern})
7421	}
7422	if m.MaxItems != 0 {
7423		info = append(info, yaml.MapItem{"maxItems", m.MaxItems})
7424	}
7425	if m.MinItems != 0 {
7426		info = append(info, yaml.MapItem{"minItems", m.MinItems})
7427	}
7428	if m.UniqueItems != false {
7429		info = append(info, yaml.MapItem{"uniqueItems", m.UniqueItems})
7430	}
7431	if len(m.Enum) != 0 {
7432		items := make([]interface{}, 0)
7433		for _, item := range m.Enum {
7434			items = append(items, item.ToRawInfo())
7435		}
7436		info = append(info, yaml.MapItem{"enum", items})
7437	}
7438	// &{Name:enum Type:Any StringEnumValues:[] MapType: Repeated:true Pattern: Implicit:false Description:}
7439	if m.MultipleOf != 0.0 {
7440		info = append(info, yaml.MapItem{"multipleOf", m.MultipleOf})
7441	}
7442	if m.VendorExtension != nil {
7443		for _, item := range m.VendorExtension {
7444			info = append(info, yaml.MapItem{item.Name, item.Value.ToRawInfo()})
7445		}
7446	}
7447	// &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:}
7448	return info
7449}
7450
7451// ToRawInfo returns a description of Header suitable for JSON or YAML export.
7452func (m *Header) ToRawInfo() interface{} {
7453	info := yaml.MapSlice{}
7454	if m.Type != "" {
7455		info = append(info, yaml.MapItem{"type", m.Type})
7456	}
7457	if m.Format != "" {
7458		info = append(info, yaml.MapItem{"format", m.Format})
7459	}
7460	if m.Items != nil {
7461		info = append(info, yaml.MapItem{"items", m.Items.ToRawInfo()})
7462	}
7463	// &{Name:items Type:PrimitivesItems StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
7464	if m.CollectionFormat != "" {
7465		info = append(info, yaml.MapItem{"collectionFormat", m.CollectionFormat})
7466	}
7467	if m.Default != nil {
7468		info = append(info, yaml.MapItem{"default", m.Default.ToRawInfo()})
7469	}
7470	// &{Name:default Type:Any StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
7471	if m.Maximum != 0.0 {
7472		info = append(info, yaml.MapItem{"maximum", m.Maximum})
7473	}
7474	if m.ExclusiveMaximum != false {
7475		info = append(info, yaml.MapItem{"exclusiveMaximum", m.ExclusiveMaximum})
7476	}
7477	if m.Minimum != 0.0 {
7478		info = append(info, yaml.MapItem{"minimum", m.Minimum})
7479	}
7480	if m.ExclusiveMinimum != false {
7481		info = append(info, yaml.MapItem{"exclusiveMinimum", m.ExclusiveMinimum})
7482	}
7483	if m.MaxLength != 0 {
7484		info = append(info, yaml.MapItem{"maxLength", m.MaxLength})
7485	}
7486	if m.MinLength != 0 {
7487		info = append(info, yaml.MapItem{"minLength", m.MinLength})
7488	}
7489	if m.Pattern != "" {
7490		info = append(info, yaml.MapItem{"pattern", m.Pattern})
7491	}
7492	if m.MaxItems != 0 {
7493		info = append(info, yaml.MapItem{"maxItems", m.MaxItems})
7494	}
7495	if m.MinItems != 0 {
7496		info = append(info, yaml.MapItem{"minItems", m.MinItems})
7497	}
7498	if m.UniqueItems != false {
7499		info = append(info, yaml.MapItem{"uniqueItems", m.UniqueItems})
7500	}
7501	if len(m.Enum) != 0 {
7502		items := make([]interface{}, 0)
7503		for _, item := range m.Enum {
7504			items = append(items, item.ToRawInfo())
7505		}
7506		info = append(info, yaml.MapItem{"enum", items})
7507	}
7508	// &{Name:enum Type:Any StringEnumValues:[] MapType: Repeated:true Pattern: Implicit:false Description:}
7509	if m.MultipleOf != 0.0 {
7510		info = append(info, yaml.MapItem{"multipleOf", m.MultipleOf})
7511	}
7512	if m.Description != "" {
7513		info = append(info, yaml.MapItem{"description", m.Description})
7514	}
7515	if m.VendorExtension != nil {
7516		for _, item := range m.VendorExtension {
7517			info = append(info, yaml.MapItem{item.Name, item.Value.ToRawInfo()})
7518		}
7519	}
7520	// &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:}
7521	return info
7522}
7523
7524// ToRawInfo returns a description of HeaderParameterSubSchema suitable for JSON or YAML export.
7525func (m *HeaderParameterSubSchema) ToRawInfo() interface{} {
7526	info := yaml.MapSlice{}
7527	if m.Required != false {
7528		info = append(info, yaml.MapItem{"required", m.Required})
7529	}
7530	if m.In != "" {
7531		info = append(info, yaml.MapItem{"in", m.In})
7532	}
7533	if m.Description != "" {
7534		info = append(info, yaml.MapItem{"description", m.Description})
7535	}
7536	if m.Name != "" {
7537		info = append(info, yaml.MapItem{"name", m.Name})
7538	}
7539	if m.Type != "" {
7540		info = append(info, yaml.MapItem{"type", m.Type})
7541	}
7542	if m.Format != "" {
7543		info = append(info, yaml.MapItem{"format", m.Format})
7544	}
7545	if m.Items != nil {
7546		info = append(info, yaml.MapItem{"items", m.Items.ToRawInfo()})
7547	}
7548	// &{Name:items Type:PrimitivesItems StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
7549	if m.CollectionFormat != "" {
7550		info = append(info, yaml.MapItem{"collectionFormat", m.CollectionFormat})
7551	}
7552	if m.Default != nil {
7553		info = append(info, yaml.MapItem{"default", m.Default.ToRawInfo()})
7554	}
7555	// &{Name:default Type:Any StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
7556	if m.Maximum != 0.0 {
7557		info = append(info, yaml.MapItem{"maximum", m.Maximum})
7558	}
7559	if m.ExclusiveMaximum != false {
7560		info = append(info, yaml.MapItem{"exclusiveMaximum", m.ExclusiveMaximum})
7561	}
7562	if m.Minimum != 0.0 {
7563		info = append(info, yaml.MapItem{"minimum", m.Minimum})
7564	}
7565	if m.ExclusiveMinimum != false {
7566		info = append(info, yaml.MapItem{"exclusiveMinimum", m.ExclusiveMinimum})
7567	}
7568	if m.MaxLength != 0 {
7569		info = append(info, yaml.MapItem{"maxLength", m.MaxLength})
7570	}
7571	if m.MinLength != 0 {
7572		info = append(info, yaml.MapItem{"minLength", m.MinLength})
7573	}
7574	if m.Pattern != "" {
7575		info = append(info, yaml.MapItem{"pattern", m.Pattern})
7576	}
7577	if m.MaxItems != 0 {
7578		info = append(info, yaml.MapItem{"maxItems", m.MaxItems})
7579	}
7580	if m.MinItems != 0 {
7581		info = append(info, yaml.MapItem{"minItems", m.MinItems})
7582	}
7583	if m.UniqueItems != false {
7584		info = append(info, yaml.MapItem{"uniqueItems", m.UniqueItems})
7585	}
7586	if len(m.Enum) != 0 {
7587		items := make([]interface{}, 0)
7588		for _, item := range m.Enum {
7589			items = append(items, item.ToRawInfo())
7590		}
7591		info = append(info, yaml.MapItem{"enum", items})
7592	}
7593	// &{Name:enum Type:Any StringEnumValues:[] MapType: Repeated:true Pattern: Implicit:false Description:}
7594	if m.MultipleOf != 0.0 {
7595		info = append(info, yaml.MapItem{"multipleOf", m.MultipleOf})
7596	}
7597	if m.VendorExtension != nil {
7598		for _, item := range m.VendorExtension {
7599			info = append(info, yaml.MapItem{item.Name, item.Value.ToRawInfo()})
7600		}
7601	}
7602	// &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:}
7603	return info
7604}
7605
7606// ToRawInfo returns a description of Headers suitable for JSON or YAML export.
7607func (m *Headers) ToRawInfo() interface{} {
7608	info := yaml.MapSlice{}
7609	if m.AdditionalProperties != nil {
7610		for _, item := range m.AdditionalProperties {
7611			info = append(info, yaml.MapItem{item.Name, item.Value.ToRawInfo()})
7612		}
7613	}
7614	// &{Name:additionalProperties Type:NamedHeader StringEnumValues:[] MapType:Header Repeated:true Pattern: Implicit:true Description:}
7615	return info
7616}
7617
7618// ToRawInfo returns a description of Info suitable for JSON or YAML export.
7619func (m *Info) ToRawInfo() interface{} {
7620	info := yaml.MapSlice{}
7621	if m.Title != "" {
7622		info = append(info, yaml.MapItem{"title", m.Title})
7623	}
7624	if m.Version != "" {
7625		info = append(info, yaml.MapItem{"version", m.Version})
7626	}
7627	if m.Description != "" {
7628		info = append(info, yaml.MapItem{"description", m.Description})
7629	}
7630	if m.TermsOfService != "" {
7631		info = append(info, yaml.MapItem{"termsOfService", m.TermsOfService})
7632	}
7633	if m.Contact != nil {
7634		info = append(info, yaml.MapItem{"contact", m.Contact.ToRawInfo()})
7635	}
7636	// &{Name:contact Type:Contact StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
7637	if m.License != nil {
7638		info = append(info, yaml.MapItem{"license", m.License.ToRawInfo()})
7639	}
7640	// &{Name:license Type:License StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
7641	if m.VendorExtension != nil {
7642		for _, item := range m.VendorExtension {
7643			info = append(info, yaml.MapItem{item.Name, item.Value.ToRawInfo()})
7644		}
7645	}
7646	// &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:}
7647	return info
7648}
7649
7650// ToRawInfo returns a description of ItemsItem suitable for JSON or YAML export.
7651func (m *ItemsItem) ToRawInfo() interface{} {
7652	info := yaml.MapSlice{}
7653	if len(m.Schema) != 0 {
7654		items := make([]interface{}, 0)
7655		for _, item := range m.Schema {
7656			items = append(items, item.ToRawInfo())
7657		}
7658		info = append(info, yaml.MapItem{"schema", items})
7659	}
7660	// &{Name:schema Type:Schema StringEnumValues:[] MapType: Repeated:true Pattern: Implicit:false Description:}
7661	return info
7662}
7663
7664// ToRawInfo returns a description of JsonReference suitable for JSON or YAML export.
7665func (m *JsonReference) ToRawInfo() interface{} {
7666	info := yaml.MapSlice{}
7667	if m.XRef != "" {
7668		info = append(info, yaml.MapItem{"$ref", m.XRef})
7669	}
7670	if m.Description != "" {
7671		info = append(info, yaml.MapItem{"description", m.Description})
7672	}
7673	return info
7674}
7675
7676// ToRawInfo returns a description of License suitable for JSON or YAML export.
7677func (m *License) ToRawInfo() interface{} {
7678	info := yaml.MapSlice{}
7679	if m.Name != "" {
7680		info = append(info, yaml.MapItem{"name", m.Name})
7681	}
7682	if m.Url != "" {
7683		info = append(info, yaml.MapItem{"url", m.Url})
7684	}
7685	if m.VendorExtension != nil {
7686		for _, item := range m.VendorExtension {
7687			info = append(info, yaml.MapItem{item.Name, item.Value.ToRawInfo()})
7688		}
7689	}
7690	// &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:}
7691	return info
7692}
7693
7694// ToRawInfo returns a description of NamedAny suitable for JSON or YAML export.
7695func (m *NamedAny) ToRawInfo() interface{} {
7696	info := yaml.MapSlice{}
7697	if m.Name != "" {
7698		info = append(info, yaml.MapItem{"name", m.Name})
7699	}
7700	// &{Name:value Type:Any StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:Mapped value}
7701	return info
7702}
7703
7704// ToRawInfo returns a description of NamedHeader suitable for JSON or YAML export.
7705func (m *NamedHeader) ToRawInfo() interface{} {
7706	info := yaml.MapSlice{}
7707	if m.Name != "" {
7708		info = append(info, yaml.MapItem{"name", m.Name})
7709	}
7710	// &{Name:value Type:Header StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:Mapped value}
7711	return info
7712}
7713
7714// ToRawInfo returns a description of NamedParameter suitable for JSON or YAML export.
7715func (m *NamedParameter) ToRawInfo() interface{} {
7716	info := yaml.MapSlice{}
7717	if m.Name != "" {
7718		info = append(info, yaml.MapItem{"name", m.Name})
7719	}
7720	// &{Name:value Type:Parameter StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:Mapped value}
7721	return info
7722}
7723
7724// ToRawInfo returns a description of NamedPathItem suitable for JSON or YAML export.
7725func (m *NamedPathItem) ToRawInfo() interface{} {
7726	info := yaml.MapSlice{}
7727	if m.Name != "" {
7728		info = append(info, yaml.MapItem{"name", m.Name})
7729	}
7730	// &{Name:value Type:PathItem StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:Mapped value}
7731	return info
7732}
7733
7734// ToRawInfo returns a description of NamedResponse suitable for JSON or YAML export.
7735func (m *NamedResponse) ToRawInfo() interface{} {
7736	info := yaml.MapSlice{}
7737	if m.Name != "" {
7738		info = append(info, yaml.MapItem{"name", m.Name})
7739	}
7740	// &{Name:value Type:Response StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:Mapped value}
7741	return info
7742}
7743
7744// ToRawInfo returns a description of NamedResponseValue suitable for JSON or YAML export.
7745func (m *NamedResponseValue) ToRawInfo() interface{} {
7746	info := yaml.MapSlice{}
7747	if m.Name != "" {
7748		info = append(info, yaml.MapItem{"name", m.Name})
7749	}
7750	// &{Name:value Type:ResponseValue StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:Mapped value}
7751	return info
7752}
7753
7754// ToRawInfo returns a description of NamedSchema suitable for JSON or YAML export.
7755func (m *NamedSchema) ToRawInfo() interface{} {
7756	info := yaml.MapSlice{}
7757	if m.Name != "" {
7758		info = append(info, yaml.MapItem{"name", m.Name})
7759	}
7760	// &{Name:value Type:Schema StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:Mapped value}
7761	return info
7762}
7763
7764// ToRawInfo returns a description of NamedSecurityDefinitionsItem suitable for JSON or YAML export.
7765func (m *NamedSecurityDefinitionsItem) ToRawInfo() interface{} {
7766	info := yaml.MapSlice{}
7767	if m.Name != "" {
7768		info = append(info, yaml.MapItem{"name", m.Name})
7769	}
7770	// &{Name:value Type:SecurityDefinitionsItem StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:Mapped value}
7771	return info
7772}
7773
7774// ToRawInfo returns a description of NamedString suitable for JSON or YAML export.
7775func (m *NamedString) ToRawInfo() interface{} {
7776	info := yaml.MapSlice{}
7777	if m.Name != "" {
7778		info = append(info, yaml.MapItem{"name", m.Name})
7779	}
7780	if m.Value != "" {
7781		info = append(info, yaml.MapItem{"value", m.Value})
7782	}
7783	return info
7784}
7785
7786// ToRawInfo returns a description of NamedStringArray suitable for JSON or YAML export.
7787func (m *NamedStringArray) ToRawInfo() interface{} {
7788	info := yaml.MapSlice{}
7789	if m.Name != "" {
7790		info = append(info, yaml.MapItem{"name", m.Name})
7791	}
7792	// &{Name:value Type:StringArray StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:Mapped value}
7793	return info
7794}
7795
7796// ToRawInfo returns a description of NonBodyParameter suitable for JSON or YAML export.
7797func (m *NonBodyParameter) ToRawInfo() interface{} {
7798	// ONE OF WRAPPER
7799	// NonBodyParameter
7800	// {Name:headerParameterSubSchema Type:HeaderParameterSubSchema StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
7801	v0 := m.GetHeaderParameterSubSchema()
7802	if v0 != nil {
7803		return v0.ToRawInfo()
7804	}
7805	// {Name:formDataParameterSubSchema Type:FormDataParameterSubSchema StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
7806	v1 := m.GetFormDataParameterSubSchema()
7807	if v1 != nil {
7808		return v1.ToRawInfo()
7809	}
7810	// {Name:queryParameterSubSchema Type:QueryParameterSubSchema StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
7811	v2 := m.GetQueryParameterSubSchema()
7812	if v2 != nil {
7813		return v2.ToRawInfo()
7814	}
7815	// {Name:pathParameterSubSchema Type:PathParameterSubSchema StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
7816	v3 := m.GetPathParameterSubSchema()
7817	if v3 != nil {
7818		return v3.ToRawInfo()
7819	}
7820	return nil
7821}
7822
7823// ToRawInfo returns a description of Oauth2AccessCodeSecurity suitable for JSON or YAML export.
7824func (m *Oauth2AccessCodeSecurity) ToRawInfo() interface{} {
7825	info := yaml.MapSlice{}
7826	if m.Type != "" {
7827		info = append(info, yaml.MapItem{"type", m.Type})
7828	}
7829	if m.Flow != "" {
7830		info = append(info, yaml.MapItem{"flow", m.Flow})
7831	}
7832	if m.Scopes != nil {
7833		info = append(info, yaml.MapItem{"scopes", m.Scopes.ToRawInfo()})
7834	}
7835	// &{Name:scopes Type:Oauth2Scopes StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
7836	if m.AuthorizationUrl != "" {
7837		info = append(info, yaml.MapItem{"authorizationUrl", m.AuthorizationUrl})
7838	}
7839	if m.TokenUrl != "" {
7840		info = append(info, yaml.MapItem{"tokenUrl", m.TokenUrl})
7841	}
7842	if m.Description != "" {
7843		info = append(info, yaml.MapItem{"description", m.Description})
7844	}
7845	if m.VendorExtension != nil {
7846		for _, item := range m.VendorExtension {
7847			info = append(info, yaml.MapItem{item.Name, item.Value.ToRawInfo()})
7848		}
7849	}
7850	// &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:}
7851	return info
7852}
7853
7854// ToRawInfo returns a description of Oauth2ApplicationSecurity suitable for JSON or YAML export.
7855func (m *Oauth2ApplicationSecurity) ToRawInfo() interface{} {
7856	info := yaml.MapSlice{}
7857	if m.Type != "" {
7858		info = append(info, yaml.MapItem{"type", m.Type})
7859	}
7860	if m.Flow != "" {
7861		info = append(info, yaml.MapItem{"flow", m.Flow})
7862	}
7863	if m.Scopes != nil {
7864		info = append(info, yaml.MapItem{"scopes", m.Scopes.ToRawInfo()})
7865	}
7866	// &{Name:scopes Type:Oauth2Scopes StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
7867	if m.TokenUrl != "" {
7868		info = append(info, yaml.MapItem{"tokenUrl", m.TokenUrl})
7869	}
7870	if m.Description != "" {
7871		info = append(info, yaml.MapItem{"description", m.Description})
7872	}
7873	if m.VendorExtension != nil {
7874		for _, item := range m.VendorExtension {
7875			info = append(info, yaml.MapItem{item.Name, item.Value.ToRawInfo()})
7876		}
7877	}
7878	// &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:}
7879	return info
7880}
7881
7882// ToRawInfo returns a description of Oauth2ImplicitSecurity suitable for JSON or YAML export.
7883func (m *Oauth2ImplicitSecurity) ToRawInfo() interface{} {
7884	info := yaml.MapSlice{}
7885	if m.Type != "" {
7886		info = append(info, yaml.MapItem{"type", m.Type})
7887	}
7888	if m.Flow != "" {
7889		info = append(info, yaml.MapItem{"flow", m.Flow})
7890	}
7891	if m.Scopes != nil {
7892		info = append(info, yaml.MapItem{"scopes", m.Scopes.ToRawInfo()})
7893	}
7894	// &{Name:scopes Type:Oauth2Scopes StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
7895	if m.AuthorizationUrl != "" {
7896		info = append(info, yaml.MapItem{"authorizationUrl", m.AuthorizationUrl})
7897	}
7898	if m.Description != "" {
7899		info = append(info, yaml.MapItem{"description", m.Description})
7900	}
7901	if m.VendorExtension != nil {
7902		for _, item := range m.VendorExtension {
7903			info = append(info, yaml.MapItem{item.Name, item.Value.ToRawInfo()})
7904		}
7905	}
7906	// &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:}
7907	return info
7908}
7909
7910// ToRawInfo returns a description of Oauth2PasswordSecurity suitable for JSON or YAML export.
7911func (m *Oauth2PasswordSecurity) ToRawInfo() interface{} {
7912	info := yaml.MapSlice{}
7913	if m.Type != "" {
7914		info = append(info, yaml.MapItem{"type", m.Type})
7915	}
7916	if m.Flow != "" {
7917		info = append(info, yaml.MapItem{"flow", m.Flow})
7918	}
7919	if m.Scopes != nil {
7920		info = append(info, yaml.MapItem{"scopes", m.Scopes.ToRawInfo()})
7921	}
7922	// &{Name:scopes Type:Oauth2Scopes StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
7923	if m.TokenUrl != "" {
7924		info = append(info, yaml.MapItem{"tokenUrl", m.TokenUrl})
7925	}
7926	if m.Description != "" {
7927		info = append(info, yaml.MapItem{"description", m.Description})
7928	}
7929	if m.VendorExtension != nil {
7930		for _, item := range m.VendorExtension {
7931			info = append(info, yaml.MapItem{item.Name, item.Value.ToRawInfo()})
7932		}
7933	}
7934	// &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:}
7935	return info
7936}
7937
7938// ToRawInfo returns a description of Oauth2Scopes suitable for JSON or YAML export.
7939func (m *Oauth2Scopes) ToRawInfo() interface{} {
7940	info := yaml.MapSlice{}
7941	// &{Name:additionalProperties Type:NamedString StringEnumValues:[] MapType:string Repeated:true Pattern: Implicit:true Description:}
7942	return info
7943}
7944
7945// ToRawInfo returns a description of Operation suitable for JSON or YAML export.
7946func (m *Operation) ToRawInfo() interface{} {
7947	info := yaml.MapSlice{}
7948	if len(m.Tags) != 0 {
7949		info = append(info, yaml.MapItem{"tags", m.Tags})
7950	}
7951	if m.Summary != "" {
7952		info = append(info, yaml.MapItem{"summary", m.Summary})
7953	}
7954	if m.Description != "" {
7955		info = append(info, yaml.MapItem{"description", m.Description})
7956	}
7957	if m.ExternalDocs != nil {
7958		info = append(info, yaml.MapItem{"externalDocs", m.ExternalDocs.ToRawInfo()})
7959	}
7960	// &{Name:externalDocs Type:ExternalDocs StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
7961	if m.OperationId != "" {
7962		info = append(info, yaml.MapItem{"operationId", m.OperationId})
7963	}
7964	if len(m.Produces) != 0 {
7965		info = append(info, yaml.MapItem{"produces", m.Produces})
7966	}
7967	if len(m.Consumes) != 0 {
7968		info = append(info, yaml.MapItem{"consumes", m.Consumes})
7969	}
7970	if len(m.Parameters) != 0 {
7971		items := make([]interface{}, 0)
7972		for _, item := range m.Parameters {
7973			items = append(items, item.ToRawInfo())
7974		}
7975		info = append(info, yaml.MapItem{"parameters", items})
7976	}
7977	// &{Name:parameters Type:ParametersItem StringEnumValues:[] MapType: Repeated:true Pattern: Implicit:false Description:The parameters needed to send a valid API call.}
7978	if m.Responses != nil {
7979		info = append(info, yaml.MapItem{"responses", m.Responses.ToRawInfo()})
7980	}
7981	// &{Name:responses Type:Responses StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
7982	if len(m.Schemes) != 0 {
7983		info = append(info, yaml.MapItem{"schemes", m.Schemes})
7984	}
7985	if m.Deprecated != false {
7986		info = append(info, yaml.MapItem{"deprecated", m.Deprecated})
7987	}
7988	if len(m.Security) != 0 {
7989		items := make([]interface{}, 0)
7990		for _, item := range m.Security {
7991			items = append(items, item.ToRawInfo())
7992		}
7993		info = append(info, yaml.MapItem{"security", items})
7994	}
7995	// &{Name:security Type:SecurityRequirement StringEnumValues:[] MapType: Repeated:true Pattern: Implicit:false Description:}
7996	if m.VendorExtension != nil {
7997		for _, item := range m.VendorExtension {
7998			info = append(info, yaml.MapItem{item.Name, item.Value.ToRawInfo()})
7999		}
8000	}
8001	// &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:}
8002	return info
8003}
8004
8005// ToRawInfo returns a description of Parameter suitable for JSON or YAML export.
8006func (m *Parameter) ToRawInfo() interface{} {
8007	// ONE OF WRAPPER
8008	// Parameter
8009	// {Name:bodyParameter Type:BodyParameter StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
8010	v0 := m.GetBodyParameter()
8011	if v0 != nil {
8012		return v0.ToRawInfo()
8013	}
8014	// {Name:nonBodyParameter Type:NonBodyParameter StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
8015	v1 := m.GetNonBodyParameter()
8016	if v1 != nil {
8017		return v1.ToRawInfo()
8018	}
8019	return nil
8020}
8021
8022// ToRawInfo returns a description of ParameterDefinitions suitable for JSON or YAML export.
8023func (m *ParameterDefinitions) ToRawInfo() interface{} {
8024	info := yaml.MapSlice{}
8025	if m.AdditionalProperties != nil {
8026		for _, item := range m.AdditionalProperties {
8027			info = append(info, yaml.MapItem{item.Name, item.Value.ToRawInfo()})
8028		}
8029	}
8030	// &{Name:additionalProperties Type:NamedParameter StringEnumValues:[] MapType:Parameter Repeated:true Pattern: Implicit:true Description:}
8031	return info
8032}
8033
8034// ToRawInfo returns a description of ParametersItem suitable for JSON or YAML export.
8035func (m *ParametersItem) ToRawInfo() interface{} {
8036	// ONE OF WRAPPER
8037	// ParametersItem
8038	// {Name:parameter Type:Parameter StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
8039	v0 := m.GetParameter()
8040	if v0 != nil {
8041		return v0.ToRawInfo()
8042	}
8043	// {Name:jsonReference Type:JsonReference StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
8044	v1 := m.GetJsonReference()
8045	if v1 != nil {
8046		return v1.ToRawInfo()
8047	}
8048	return nil
8049}
8050
8051// ToRawInfo returns a description of PathItem suitable for JSON or YAML export.
8052func (m *PathItem) ToRawInfo() interface{} {
8053	info := yaml.MapSlice{}
8054	if m.XRef != "" {
8055		info = append(info, yaml.MapItem{"$ref", m.XRef})
8056	}
8057	if m.Get != nil {
8058		info = append(info, yaml.MapItem{"get", m.Get.ToRawInfo()})
8059	}
8060	// &{Name:get Type:Operation StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
8061	if m.Put != nil {
8062		info = append(info, yaml.MapItem{"put", m.Put.ToRawInfo()})
8063	}
8064	// &{Name:put Type:Operation StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
8065	if m.Post != nil {
8066		info = append(info, yaml.MapItem{"post", m.Post.ToRawInfo()})
8067	}
8068	// &{Name:post Type:Operation StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
8069	if m.Delete != nil {
8070		info = append(info, yaml.MapItem{"delete", m.Delete.ToRawInfo()})
8071	}
8072	// &{Name:delete Type:Operation StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
8073	if m.Options != nil {
8074		info = append(info, yaml.MapItem{"options", m.Options.ToRawInfo()})
8075	}
8076	// &{Name:options Type:Operation StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
8077	if m.Head != nil {
8078		info = append(info, yaml.MapItem{"head", m.Head.ToRawInfo()})
8079	}
8080	// &{Name:head Type:Operation StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
8081	if m.Patch != nil {
8082		info = append(info, yaml.MapItem{"patch", m.Patch.ToRawInfo()})
8083	}
8084	// &{Name:patch Type:Operation StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
8085	if len(m.Parameters) != 0 {
8086		items := make([]interface{}, 0)
8087		for _, item := range m.Parameters {
8088			items = append(items, item.ToRawInfo())
8089		}
8090		info = append(info, yaml.MapItem{"parameters", items})
8091	}
8092	// &{Name:parameters Type:ParametersItem StringEnumValues:[] MapType: Repeated:true Pattern: Implicit:false Description:The parameters needed to send a valid API call.}
8093	if m.VendorExtension != nil {
8094		for _, item := range m.VendorExtension {
8095			info = append(info, yaml.MapItem{item.Name, item.Value.ToRawInfo()})
8096		}
8097	}
8098	// &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:}
8099	return info
8100}
8101
8102// ToRawInfo returns a description of PathParameterSubSchema suitable for JSON or YAML export.
8103func (m *PathParameterSubSchema) ToRawInfo() interface{} {
8104	info := yaml.MapSlice{}
8105	if m.Required != false {
8106		info = append(info, yaml.MapItem{"required", m.Required})
8107	}
8108	if m.In != "" {
8109		info = append(info, yaml.MapItem{"in", m.In})
8110	}
8111	if m.Description != "" {
8112		info = append(info, yaml.MapItem{"description", m.Description})
8113	}
8114	if m.Name != "" {
8115		info = append(info, yaml.MapItem{"name", m.Name})
8116	}
8117	if m.Type != "" {
8118		info = append(info, yaml.MapItem{"type", m.Type})
8119	}
8120	if m.Format != "" {
8121		info = append(info, yaml.MapItem{"format", m.Format})
8122	}
8123	if m.Items != nil {
8124		info = append(info, yaml.MapItem{"items", m.Items.ToRawInfo()})
8125	}
8126	// &{Name:items Type:PrimitivesItems StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
8127	if m.CollectionFormat != "" {
8128		info = append(info, yaml.MapItem{"collectionFormat", m.CollectionFormat})
8129	}
8130	if m.Default != nil {
8131		info = append(info, yaml.MapItem{"default", m.Default.ToRawInfo()})
8132	}
8133	// &{Name:default Type:Any StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
8134	if m.Maximum != 0.0 {
8135		info = append(info, yaml.MapItem{"maximum", m.Maximum})
8136	}
8137	if m.ExclusiveMaximum != false {
8138		info = append(info, yaml.MapItem{"exclusiveMaximum", m.ExclusiveMaximum})
8139	}
8140	if m.Minimum != 0.0 {
8141		info = append(info, yaml.MapItem{"minimum", m.Minimum})
8142	}
8143	if m.ExclusiveMinimum != false {
8144		info = append(info, yaml.MapItem{"exclusiveMinimum", m.ExclusiveMinimum})
8145	}
8146	if m.MaxLength != 0 {
8147		info = append(info, yaml.MapItem{"maxLength", m.MaxLength})
8148	}
8149	if m.MinLength != 0 {
8150		info = append(info, yaml.MapItem{"minLength", m.MinLength})
8151	}
8152	if m.Pattern != "" {
8153		info = append(info, yaml.MapItem{"pattern", m.Pattern})
8154	}
8155	if m.MaxItems != 0 {
8156		info = append(info, yaml.MapItem{"maxItems", m.MaxItems})
8157	}
8158	if m.MinItems != 0 {
8159		info = append(info, yaml.MapItem{"minItems", m.MinItems})
8160	}
8161	if m.UniqueItems != false {
8162		info = append(info, yaml.MapItem{"uniqueItems", m.UniqueItems})
8163	}
8164	if len(m.Enum) != 0 {
8165		items := make([]interface{}, 0)
8166		for _, item := range m.Enum {
8167			items = append(items, item.ToRawInfo())
8168		}
8169		info = append(info, yaml.MapItem{"enum", items})
8170	}
8171	// &{Name:enum Type:Any StringEnumValues:[] MapType: Repeated:true Pattern: Implicit:false Description:}
8172	if m.MultipleOf != 0.0 {
8173		info = append(info, yaml.MapItem{"multipleOf", m.MultipleOf})
8174	}
8175	if m.VendorExtension != nil {
8176		for _, item := range m.VendorExtension {
8177			info = append(info, yaml.MapItem{item.Name, item.Value.ToRawInfo()})
8178		}
8179	}
8180	// &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:}
8181	return info
8182}
8183
8184// ToRawInfo returns a description of Paths suitable for JSON or YAML export.
8185func (m *Paths) ToRawInfo() interface{} {
8186	info := yaml.MapSlice{}
8187	if m.VendorExtension != nil {
8188		for _, item := range m.VendorExtension {
8189			info = append(info, yaml.MapItem{item.Name, item.Value.ToRawInfo()})
8190		}
8191	}
8192	// &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:}
8193	if m.Path != nil {
8194		for _, item := range m.Path {
8195			info = append(info, yaml.MapItem{item.Name, item.Value.ToRawInfo()})
8196		}
8197	}
8198	// &{Name:Path Type:NamedPathItem StringEnumValues:[] MapType:PathItem Repeated:true Pattern:^/ Implicit:true Description:}
8199	return info
8200}
8201
8202// ToRawInfo returns a description of PrimitivesItems suitable for JSON or YAML export.
8203func (m *PrimitivesItems) ToRawInfo() interface{} {
8204	info := yaml.MapSlice{}
8205	if m.Type != "" {
8206		info = append(info, yaml.MapItem{"type", m.Type})
8207	}
8208	if m.Format != "" {
8209		info = append(info, yaml.MapItem{"format", m.Format})
8210	}
8211	if m.Items != nil {
8212		info = append(info, yaml.MapItem{"items", m.Items.ToRawInfo()})
8213	}
8214	// &{Name:items Type:PrimitivesItems StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
8215	if m.CollectionFormat != "" {
8216		info = append(info, yaml.MapItem{"collectionFormat", m.CollectionFormat})
8217	}
8218	if m.Default != nil {
8219		info = append(info, yaml.MapItem{"default", m.Default.ToRawInfo()})
8220	}
8221	// &{Name:default Type:Any StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
8222	if m.Maximum != 0.0 {
8223		info = append(info, yaml.MapItem{"maximum", m.Maximum})
8224	}
8225	if m.ExclusiveMaximum != false {
8226		info = append(info, yaml.MapItem{"exclusiveMaximum", m.ExclusiveMaximum})
8227	}
8228	if m.Minimum != 0.0 {
8229		info = append(info, yaml.MapItem{"minimum", m.Minimum})
8230	}
8231	if m.ExclusiveMinimum != false {
8232		info = append(info, yaml.MapItem{"exclusiveMinimum", m.ExclusiveMinimum})
8233	}
8234	if m.MaxLength != 0 {
8235		info = append(info, yaml.MapItem{"maxLength", m.MaxLength})
8236	}
8237	if m.MinLength != 0 {
8238		info = append(info, yaml.MapItem{"minLength", m.MinLength})
8239	}
8240	if m.Pattern != "" {
8241		info = append(info, yaml.MapItem{"pattern", m.Pattern})
8242	}
8243	if m.MaxItems != 0 {
8244		info = append(info, yaml.MapItem{"maxItems", m.MaxItems})
8245	}
8246	if m.MinItems != 0 {
8247		info = append(info, yaml.MapItem{"minItems", m.MinItems})
8248	}
8249	if m.UniqueItems != false {
8250		info = append(info, yaml.MapItem{"uniqueItems", m.UniqueItems})
8251	}
8252	if len(m.Enum) != 0 {
8253		items := make([]interface{}, 0)
8254		for _, item := range m.Enum {
8255			items = append(items, item.ToRawInfo())
8256		}
8257		info = append(info, yaml.MapItem{"enum", items})
8258	}
8259	// &{Name:enum Type:Any StringEnumValues:[] MapType: Repeated:true Pattern: Implicit:false Description:}
8260	if m.MultipleOf != 0.0 {
8261		info = append(info, yaml.MapItem{"multipleOf", m.MultipleOf})
8262	}
8263	if m.VendorExtension != nil {
8264		for _, item := range m.VendorExtension {
8265			info = append(info, yaml.MapItem{item.Name, item.Value.ToRawInfo()})
8266		}
8267	}
8268	// &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:}
8269	return info
8270}
8271
8272// ToRawInfo returns a description of Properties suitable for JSON or YAML export.
8273func (m *Properties) ToRawInfo() interface{} {
8274	info := yaml.MapSlice{}
8275	if m.AdditionalProperties != nil {
8276		for _, item := range m.AdditionalProperties {
8277			info = append(info, yaml.MapItem{item.Name, item.Value.ToRawInfo()})
8278		}
8279	}
8280	// &{Name:additionalProperties Type:NamedSchema StringEnumValues:[] MapType:Schema Repeated:true Pattern: Implicit:true Description:}
8281	return info
8282}
8283
8284// ToRawInfo returns a description of QueryParameterSubSchema suitable for JSON or YAML export.
8285func (m *QueryParameterSubSchema) ToRawInfo() interface{} {
8286	info := yaml.MapSlice{}
8287	if m.Required != false {
8288		info = append(info, yaml.MapItem{"required", m.Required})
8289	}
8290	if m.In != "" {
8291		info = append(info, yaml.MapItem{"in", m.In})
8292	}
8293	if m.Description != "" {
8294		info = append(info, yaml.MapItem{"description", m.Description})
8295	}
8296	if m.Name != "" {
8297		info = append(info, yaml.MapItem{"name", m.Name})
8298	}
8299	if m.AllowEmptyValue != false {
8300		info = append(info, yaml.MapItem{"allowEmptyValue", m.AllowEmptyValue})
8301	}
8302	if m.Type != "" {
8303		info = append(info, yaml.MapItem{"type", m.Type})
8304	}
8305	if m.Format != "" {
8306		info = append(info, yaml.MapItem{"format", m.Format})
8307	}
8308	if m.Items != nil {
8309		info = append(info, yaml.MapItem{"items", m.Items.ToRawInfo()})
8310	}
8311	// &{Name:items Type:PrimitivesItems StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
8312	if m.CollectionFormat != "" {
8313		info = append(info, yaml.MapItem{"collectionFormat", m.CollectionFormat})
8314	}
8315	if m.Default != nil {
8316		info = append(info, yaml.MapItem{"default", m.Default.ToRawInfo()})
8317	}
8318	// &{Name:default Type:Any StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
8319	if m.Maximum != 0.0 {
8320		info = append(info, yaml.MapItem{"maximum", m.Maximum})
8321	}
8322	if m.ExclusiveMaximum != false {
8323		info = append(info, yaml.MapItem{"exclusiveMaximum", m.ExclusiveMaximum})
8324	}
8325	if m.Minimum != 0.0 {
8326		info = append(info, yaml.MapItem{"minimum", m.Minimum})
8327	}
8328	if m.ExclusiveMinimum != false {
8329		info = append(info, yaml.MapItem{"exclusiveMinimum", m.ExclusiveMinimum})
8330	}
8331	if m.MaxLength != 0 {
8332		info = append(info, yaml.MapItem{"maxLength", m.MaxLength})
8333	}
8334	if m.MinLength != 0 {
8335		info = append(info, yaml.MapItem{"minLength", m.MinLength})
8336	}
8337	if m.Pattern != "" {
8338		info = append(info, yaml.MapItem{"pattern", m.Pattern})
8339	}
8340	if m.MaxItems != 0 {
8341		info = append(info, yaml.MapItem{"maxItems", m.MaxItems})
8342	}
8343	if m.MinItems != 0 {
8344		info = append(info, yaml.MapItem{"minItems", m.MinItems})
8345	}
8346	if m.UniqueItems != false {
8347		info = append(info, yaml.MapItem{"uniqueItems", m.UniqueItems})
8348	}
8349	if len(m.Enum) != 0 {
8350		items := make([]interface{}, 0)
8351		for _, item := range m.Enum {
8352			items = append(items, item.ToRawInfo())
8353		}
8354		info = append(info, yaml.MapItem{"enum", items})
8355	}
8356	// &{Name:enum Type:Any StringEnumValues:[] MapType: Repeated:true Pattern: Implicit:false Description:}
8357	if m.MultipleOf != 0.0 {
8358		info = append(info, yaml.MapItem{"multipleOf", m.MultipleOf})
8359	}
8360	if m.VendorExtension != nil {
8361		for _, item := range m.VendorExtension {
8362			info = append(info, yaml.MapItem{item.Name, item.Value.ToRawInfo()})
8363		}
8364	}
8365	// &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:}
8366	return info
8367}
8368
8369// ToRawInfo returns a description of Response suitable for JSON or YAML export.
8370func (m *Response) ToRawInfo() interface{} {
8371	info := yaml.MapSlice{}
8372	if m.Description != "" {
8373		info = append(info, yaml.MapItem{"description", m.Description})
8374	}
8375	if m.Schema != nil {
8376		info = append(info, yaml.MapItem{"schema", m.Schema.ToRawInfo()})
8377	}
8378	// &{Name:schema Type:SchemaItem StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
8379	if m.Headers != nil {
8380		info = append(info, yaml.MapItem{"headers", m.Headers.ToRawInfo()})
8381	}
8382	// &{Name:headers Type:Headers StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
8383	if m.Examples != nil {
8384		info = append(info, yaml.MapItem{"examples", m.Examples.ToRawInfo()})
8385	}
8386	// &{Name:examples Type:Examples StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
8387	if m.VendorExtension != nil {
8388		for _, item := range m.VendorExtension {
8389			info = append(info, yaml.MapItem{item.Name, item.Value.ToRawInfo()})
8390		}
8391	}
8392	// &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:}
8393	return info
8394}
8395
8396// ToRawInfo returns a description of ResponseDefinitions suitable for JSON or YAML export.
8397func (m *ResponseDefinitions) ToRawInfo() interface{} {
8398	info := yaml.MapSlice{}
8399	if m.AdditionalProperties != nil {
8400		for _, item := range m.AdditionalProperties {
8401			info = append(info, yaml.MapItem{item.Name, item.Value.ToRawInfo()})
8402		}
8403	}
8404	// &{Name:additionalProperties Type:NamedResponse StringEnumValues:[] MapType:Response Repeated:true Pattern: Implicit:true Description:}
8405	return info
8406}
8407
8408// ToRawInfo returns a description of ResponseValue suitable for JSON or YAML export.
8409func (m *ResponseValue) ToRawInfo() interface{} {
8410	// ONE OF WRAPPER
8411	// ResponseValue
8412	// {Name:response Type:Response StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
8413	v0 := m.GetResponse()
8414	if v0 != nil {
8415		return v0.ToRawInfo()
8416	}
8417	// {Name:jsonReference Type:JsonReference StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
8418	v1 := m.GetJsonReference()
8419	if v1 != nil {
8420		return v1.ToRawInfo()
8421	}
8422	return nil
8423}
8424
8425// ToRawInfo returns a description of Responses suitable for JSON or YAML export.
8426func (m *Responses) ToRawInfo() interface{} {
8427	info := yaml.MapSlice{}
8428	if m.ResponseCode != nil {
8429		for _, item := range m.ResponseCode {
8430			info = append(info, yaml.MapItem{item.Name, item.Value.ToRawInfo()})
8431		}
8432	}
8433	// &{Name:ResponseCode Type:NamedResponseValue StringEnumValues:[] MapType:ResponseValue Repeated:true Pattern:^([0-9]{3})$|^(default)$ Implicit:true Description:}
8434	if m.VendorExtension != nil {
8435		for _, item := range m.VendorExtension {
8436			info = append(info, yaml.MapItem{item.Name, item.Value.ToRawInfo()})
8437		}
8438	}
8439	// &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:}
8440	return info
8441}
8442
8443// ToRawInfo returns a description of Schema suitable for JSON or YAML export.
8444func (m *Schema) ToRawInfo() interface{} {
8445	info := yaml.MapSlice{}
8446	if m.XRef != "" {
8447		info = append(info, yaml.MapItem{"$ref", m.XRef})
8448	}
8449	if m.Format != "" {
8450		info = append(info, yaml.MapItem{"format", m.Format})
8451	}
8452	if m.Title != "" {
8453		info = append(info, yaml.MapItem{"title", m.Title})
8454	}
8455	if m.Description != "" {
8456		info = append(info, yaml.MapItem{"description", m.Description})
8457	}
8458	if m.Default != nil {
8459		info = append(info, yaml.MapItem{"default", m.Default.ToRawInfo()})
8460	}
8461	// &{Name:default Type:Any StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
8462	if m.MultipleOf != 0.0 {
8463		info = append(info, yaml.MapItem{"multipleOf", m.MultipleOf})
8464	}
8465	if m.Maximum != 0.0 {
8466		info = append(info, yaml.MapItem{"maximum", m.Maximum})
8467	}
8468	if m.ExclusiveMaximum != false {
8469		info = append(info, yaml.MapItem{"exclusiveMaximum", m.ExclusiveMaximum})
8470	}
8471	if m.Minimum != 0.0 {
8472		info = append(info, yaml.MapItem{"minimum", m.Minimum})
8473	}
8474	if m.ExclusiveMinimum != false {
8475		info = append(info, yaml.MapItem{"exclusiveMinimum", m.ExclusiveMinimum})
8476	}
8477	if m.MaxLength != 0 {
8478		info = append(info, yaml.MapItem{"maxLength", m.MaxLength})
8479	}
8480	if m.MinLength != 0 {
8481		info = append(info, yaml.MapItem{"minLength", m.MinLength})
8482	}
8483	if m.Pattern != "" {
8484		info = append(info, yaml.MapItem{"pattern", m.Pattern})
8485	}
8486	if m.MaxItems != 0 {
8487		info = append(info, yaml.MapItem{"maxItems", m.MaxItems})
8488	}
8489	if m.MinItems != 0 {
8490		info = append(info, yaml.MapItem{"minItems", m.MinItems})
8491	}
8492	if m.UniqueItems != false {
8493		info = append(info, yaml.MapItem{"uniqueItems", m.UniqueItems})
8494	}
8495	if m.MaxProperties != 0 {
8496		info = append(info, yaml.MapItem{"maxProperties", m.MaxProperties})
8497	}
8498	if m.MinProperties != 0 {
8499		info = append(info, yaml.MapItem{"minProperties", m.MinProperties})
8500	}
8501	if len(m.Required) != 0 {
8502		info = append(info, yaml.MapItem{"required", m.Required})
8503	}
8504	if len(m.Enum) != 0 {
8505		items := make([]interface{}, 0)
8506		for _, item := range m.Enum {
8507			items = append(items, item.ToRawInfo())
8508		}
8509		info = append(info, yaml.MapItem{"enum", items})
8510	}
8511	// &{Name:enum Type:Any StringEnumValues:[] MapType: Repeated:true Pattern: Implicit:false Description:}
8512	if m.AdditionalProperties != nil {
8513		info = append(info, yaml.MapItem{"additionalProperties", m.AdditionalProperties.ToRawInfo()})
8514	}
8515	// &{Name:additionalProperties Type:AdditionalPropertiesItem StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
8516	if m.Type != nil {
8517		if len(m.Type.Value) == 1 {
8518			info = append(info, yaml.MapItem{"type", m.Type.Value[0]})
8519		} else {
8520			info = append(info, yaml.MapItem{"type", m.Type.Value})
8521		}
8522	}
8523	// &{Name:type Type:TypeItem StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
8524	if m.Items != nil {
8525		items := make([]interface{}, 0)
8526		for _, item := range m.Items.Schema {
8527			items = append(items, item.ToRawInfo())
8528		}
8529		info = append(info, yaml.MapItem{"items", items[0]})
8530	}
8531	// &{Name:items Type:ItemsItem StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
8532	if len(m.AllOf) != 0 {
8533		items := make([]interface{}, 0)
8534		for _, item := range m.AllOf {
8535			items = append(items, item.ToRawInfo())
8536		}
8537		info = append(info, yaml.MapItem{"allOf", items})
8538	}
8539	// &{Name:allOf Type:Schema StringEnumValues:[] MapType: Repeated:true Pattern: Implicit:false Description:}
8540	if m.Properties != nil {
8541		info = append(info, yaml.MapItem{"properties", m.Properties.ToRawInfo()})
8542	}
8543	// &{Name:properties Type:Properties StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
8544	if m.Discriminator != "" {
8545		info = append(info, yaml.MapItem{"discriminator", m.Discriminator})
8546	}
8547	if m.ReadOnly != false {
8548		info = append(info, yaml.MapItem{"readOnly", m.ReadOnly})
8549	}
8550	if m.Xml != nil {
8551		info = append(info, yaml.MapItem{"xml", m.Xml.ToRawInfo()})
8552	}
8553	// &{Name:xml Type:Xml StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
8554	if m.ExternalDocs != nil {
8555		info = append(info, yaml.MapItem{"externalDocs", m.ExternalDocs.ToRawInfo()})
8556	}
8557	// &{Name:externalDocs Type:ExternalDocs StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
8558	if m.Example != nil {
8559		info = append(info, yaml.MapItem{"example", m.Example.ToRawInfo()})
8560	}
8561	// &{Name:example Type:Any StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
8562	if m.VendorExtension != nil {
8563		for _, item := range m.VendorExtension {
8564			info = append(info, yaml.MapItem{item.Name, item.Value.ToRawInfo()})
8565		}
8566	}
8567	// &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:}
8568	return info
8569}
8570
8571// ToRawInfo returns a description of SchemaItem suitable for JSON or YAML export.
8572func (m *SchemaItem) ToRawInfo() interface{} {
8573	// ONE OF WRAPPER
8574	// SchemaItem
8575	// {Name:schema Type:Schema StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
8576	v0 := m.GetSchema()
8577	if v0 != nil {
8578		return v0.ToRawInfo()
8579	}
8580	// {Name:fileSchema Type:FileSchema StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
8581	v1 := m.GetFileSchema()
8582	if v1 != nil {
8583		return v1.ToRawInfo()
8584	}
8585	return nil
8586}
8587
8588// ToRawInfo returns a description of SecurityDefinitions suitable for JSON or YAML export.
8589func (m *SecurityDefinitions) ToRawInfo() interface{} {
8590	info := yaml.MapSlice{}
8591	if m.AdditionalProperties != nil {
8592		for _, item := range m.AdditionalProperties {
8593			info = append(info, yaml.MapItem{item.Name, item.Value.ToRawInfo()})
8594		}
8595	}
8596	// &{Name:additionalProperties Type:NamedSecurityDefinitionsItem StringEnumValues:[] MapType:SecurityDefinitionsItem Repeated:true Pattern: Implicit:true Description:}
8597	return info
8598}
8599
8600// ToRawInfo returns a description of SecurityDefinitionsItem suitable for JSON or YAML export.
8601func (m *SecurityDefinitionsItem) ToRawInfo() interface{} {
8602	// ONE OF WRAPPER
8603	// SecurityDefinitionsItem
8604	// {Name:basicAuthenticationSecurity Type:BasicAuthenticationSecurity StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
8605	v0 := m.GetBasicAuthenticationSecurity()
8606	if v0 != nil {
8607		return v0.ToRawInfo()
8608	}
8609	// {Name:apiKeySecurity Type:ApiKeySecurity StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
8610	v1 := m.GetApiKeySecurity()
8611	if v1 != nil {
8612		return v1.ToRawInfo()
8613	}
8614	// {Name:oauth2ImplicitSecurity Type:Oauth2ImplicitSecurity StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
8615	v2 := m.GetOauth2ImplicitSecurity()
8616	if v2 != nil {
8617		return v2.ToRawInfo()
8618	}
8619	// {Name:oauth2PasswordSecurity Type:Oauth2PasswordSecurity StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
8620	v3 := m.GetOauth2PasswordSecurity()
8621	if v3 != nil {
8622		return v3.ToRawInfo()
8623	}
8624	// {Name:oauth2ApplicationSecurity Type:Oauth2ApplicationSecurity StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
8625	v4 := m.GetOauth2ApplicationSecurity()
8626	if v4 != nil {
8627		return v4.ToRawInfo()
8628	}
8629	// {Name:oauth2AccessCodeSecurity Type:Oauth2AccessCodeSecurity StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
8630	v5 := m.GetOauth2AccessCodeSecurity()
8631	if v5 != nil {
8632		return v5.ToRawInfo()
8633	}
8634	return nil
8635}
8636
8637// ToRawInfo returns a description of SecurityRequirement suitable for JSON or YAML export.
8638func (m *SecurityRequirement) ToRawInfo() interface{} {
8639	info := yaml.MapSlice{}
8640	if m.AdditionalProperties != nil {
8641		for _, item := range m.AdditionalProperties {
8642			info = append(info, yaml.MapItem{item.Name, item.Value.ToRawInfo()})
8643		}
8644	}
8645	// &{Name:additionalProperties Type:NamedStringArray StringEnumValues:[] MapType:StringArray Repeated:true Pattern: Implicit:true Description:}
8646	return info
8647}
8648
8649// ToRawInfo returns a description of StringArray suitable for JSON or YAML export.
8650func (m *StringArray) ToRawInfo() interface{} {
8651	return m.Value
8652}
8653
8654// ToRawInfo returns a description of Tag suitable for JSON or YAML export.
8655func (m *Tag) ToRawInfo() interface{} {
8656	info := yaml.MapSlice{}
8657	if m.Name != "" {
8658		info = append(info, yaml.MapItem{"name", m.Name})
8659	}
8660	if m.Description != "" {
8661		info = append(info, yaml.MapItem{"description", m.Description})
8662	}
8663	if m.ExternalDocs != nil {
8664		info = append(info, yaml.MapItem{"externalDocs", m.ExternalDocs.ToRawInfo()})
8665	}
8666	// &{Name:externalDocs Type:ExternalDocs StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:}
8667	if m.VendorExtension != nil {
8668		for _, item := range m.VendorExtension {
8669			info = append(info, yaml.MapItem{item.Name, item.Value.ToRawInfo()})
8670		}
8671	}
8672	// &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:}
8673	return info
8674}
8675
8676// ToRawInfo returns a description of TypeItem suitable for JSON or YAML export.
8677func (m *TypeItem) ToRawInfo() interface{} {
8678	info := yaml.MapSlice{}
8679	if len(m.Value) != 0 {
8680		info = append(info, yaml.MapItem{"value", m.Value})
8681	}
8682	return info
8683}
8684
8685// ToRawInfo returns a description of VendorExtension suitable for JSON or YAML export.
8686func (m *VendorExtension) ToRawInfo() interface{} {
8687	info := yaml.MapSlice{}
8688	if m.AdditionalProperties != nil {
8689		for _, item := range m.AdditionalProperties {
8690			info = append(info, yaml.MapItem{item.Name, item.Value.ToRawInfo()})
8691		}
8692	}
8693	// &{Name:additionalProperties Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern: Implicit:true Description:}
8694	return info
8695}
8696
8697// ToRawInfo returns a description of Xml suitable for JSON or YAML export.
8698func (m *Xml) ToRawInfo() interface{} {
8699	info := yaml.MapSlice{}
8700	if m.Name != "" {
8701		info = append(info, yaml.MapItem{"name", m.Name})
8702	}
8703	if m.Namespace != "" {
8704		info = append(info, yaml.MapItem{"namespace", m.Namespace})
8705	}
8706	if m.Prefix != "" {
8707		info = append(info, yaml.MapItem{"prefix", m.Prefix})
8708	}
8709	if m.Attribute != false {
8710		info = append(info, yaml.MapItem{"attribute", m.Attribute})
8711	}
8712	if m.Wrapped != false {
8713		info = append(info, yaml.MapItem{"wrapped", m.Wrapped})
8714	}
8715	if m.VendorExtension != nil {
8716		for _, item := range m.VendorExtension {
8717			info = append(info, yaml.MapItem{item.Name, item.Value.ToRawInfo()})
8718		}
8719	}
8720	// &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:}
8721	return info
8722}
8723
8724var (
8725	pattern0 = regexp.MustCompile("^x-")
8726	pattern1 = regexp.MustCompile("^/")
8727	pattern2 = regexp.MustCompile("^([0-9]{3})$|^(default)$")
8728)
8729