Skip to content

Commit 82e1860

Browse files
committed
fix: generator does not generate enum code correct
- enums which aren't definied in a ref within the API spec, were handled like normal strings
1 parent 3751d40 commit 82e1860

File tree

1 file changed

+137
-0
lines changed

1 file changed

+137
-0
lines changed

templates/go/model_simple.mustache

Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,137 @@ func set{{classname}}{{getter}}AttributeType(arg *{{classname}}{{getter}}Attribu
277277
{{/isDate}}
278278
{{#isEnumRef}}
279279
{{! special handling for enums}}
280+
{{#isEnum}}
281+
//isEnum
282+
283+
// {{{classname}}}{{#lambda.titlecase}}{{nameInCamelCase}}{{/lambda.titlecase}} {{{description}}}{{^description}}the model '{{{classname}}}'{{/description}}
284+
type {{{classname}}}{{#lambda.titlecase}}{{nameInCamelCase}}{{/lambda.titlecase}} {{dataType}}
285+
286+
// List of {{name}}
287+
const (
288+
{{#allowableValues}}
289+
{{#enumVars}}
290+
{{^-first}}
291+
{{/-first}}
292+
{{! Tweak to get the name in the correct format. Name can not directly passed like in the type, because it would use the enum name }}
293+
{{{classname.toUpperCase}}}{{{enumName}}}_{{name}} {{{classname}}}{{#lambda.titlecase}}{{nameInCamelCase}}{{/lambda.titlecase}} = {{{value}}}
294+
{{/enumVars}}
295+
{{/allowableValues}}
296+
)
297+
298+
// All allowed values of {{{classname}}} enum
299+
var Allowed{{{classname}}}{{#lambda.titlecase}}{{nameInCamelCase}}{{/lambda.titlecase}}EnumValues = []{{{classname}}}{{#lambda.titlecase}}{{nameInCamelCase}}{{/lambda.titlecase}}{
300+
{{#allowableValues}}
301+
{{#enumVars}}
302+
{{{value}}},
303+
{{/enumVars}}
304+
{{/allowableValues}}
305+
}
306+
307+
func (v *{{{classname}}}{{#lambda.titlecase}}{{nameInCamelCase}}{{/lambda.titlecase}}) UnmarshalJSON(src []byte) error {
308+
var value {{dataType}}
309+
err := json.Unmarshal(src, &value)
310+
if err != nil {
311+
return err
312+
}
313+
// Allow unmarshalling zero value for testing purposes
314+
var zeroValue {{dataType}}
315+
if value == zeroValue {
316+
return nil
317+
}
318+
enumTypeValue := {{{classname}}}{{#lambda.titlecase}}{{nameInCamelCase}}{{/lambda.titlecase}}(value)
319+
for _, existing := range Allowed{{{classname}}}{{#lambda.titlecase}}{{nameInCamelCase}}{{/lambda.titlecase}}EnumValues {
320+
if existing == enumTypeValue {
321+
*v = enumTypeValue
322+
return nil
323+
}
324+
}
325+
326+
return fmt.Errorf("%+v is not a valid {{classname}}", value)
327+
}
328+
329+
// New{{{classname}}}{{#lambda.titlecase}}{{nameInCamelCase}}{{/lambda.titlecase}}FromValue returns a pointer to a valid {{{classname}}}{{#lambda.titlecase}}{{nameInCamelCase}}{{/lambda.titlecase}}
330+
// for the value passed as argument, or an error if the value passed is not allowed by the enum
331+
func New{{{classname}}}{{#lambda.titlecase}}{{nameInCamelCase}}{{/lambda.titlecase}}FromValue(v {{dataType}}) (*{{{classname}}}{{#lambda.titlecase}}{{nameInCamelCase}}{{/lambda.titlecase}}, error) {
332+
ev := {{{classname}}}{{#lambda.titlecase}}{{nameInCamelCase}}{{/lambda.titlecase}}(v)
333+
if ev.IsValid() {
334+
return &ev, nil
335+
} else {
336+
return nil, fmt.Errorf("invalid value '%v' for {{{classname}}}{{#lambda.titlecase}}{{nameInCamelCase}}{{/lambda.titlecase}}: valid values are %v", v, Allowed{{{classname}}}{{#lambda.titlecase}}{{nameInCamelCase}}{{/lambda.titlecase}}EnumValues)
337+
}
338+
}
339+
340+
// IsValid return true if the value is valid for the enum, false otherwise
341+
func (v {{{classname}}}{{#lambda.titlecase}}{{nameInCamelCase}}{{/lambda.titlecase}}) IsValid() bool {
342+
for _, existing := range Allowed{{{classname}}}{{#lambda.titlecase}}{{nameInCamelCase}}{{/lambda.titlecase}}EnumValues {
343+
if existing == v {
344+
return true
345+
}
346+
}
347+
return false
348+
}
349+
350+
// Ptr returns reference to {{{name}}}{{#lambda.titlecase}}{{nameInCamelCase}}{{/lambda.titlecase}} value
351+
func (v {{{classname}}}{{#lambda.titlecase}}{{nameInCamelCase}}{{/lambda.titlecase}}) Ptr() *{{{classname}}}{{#lambda.titlecase}}{{nameInCamelCase}}{{/lambda.titlecase}} {
352+
return &v
353+
}
354+
355+
type Nullable{{{classname}}}{{#lambda.titlecase}}{{nameInCamelCase}}{{/lambda.titlecase}} struct {
356+
value *{{{classname}}}{{#lambda.titlecase}}{{nameInCamelCase}}{{/lambda.titlecase}}
357+
isSet bool
358+
}
359+
360+
func (v Nullable{{classname}}{{#lambda.titlecase}}{{nameInCamelCase}}{{/lambda.titlecase}}) Get() *{{classname}}{{#lambda.titlecase}}{{nameInCamelCase}}{{/lambda.titlecase}} {
361+
return v.value
362+
}
363+
364+
func (v *Nullable{{classname}}{{#lambda.titlecase}}{{nameInCamelCase}}{{/lambda.titlecase}}) Set(val *{{classname}}{{#lambda.titlecase}}{{nameInCamelCase}}{{/lambda.titlecase}}) {
365+
v.value = val
366+
v.isSet = true
367+
}
368+
369+
func (v Nullable{{classname}}{{#lambda.titlecase}}{{nameInCamelCase}}{{/lambda.titlecase}}) IsSet() bool {
370+
return v.isSet
371+
}
372+
373+
func (v *Nullable{{classname}}{{#lambda.titlecase}}{{nameInCamelCase}}{{/lambda.titlecase}}) Unset() {
374+
v.value = nil
375+
v.isSet = false
376+
}
377+
378+
func NewNullable{{classname}}{{#lambda.titlecase}}{{nameInCamelCase}}{{/lambda.titlecase}}(val *{{classname}}{{#lambda.titlecase}}{{nameInCamelCase}}{{/lambda.titlecase}}) *Nullable{{classname}}{{#lambda.titlecase}}{{nameInCamelCase}}{{/lambda.titlecase}} {
379+
return &Nullable{{classname}}{{#lambda.titlecase}}{{nameInCamelCase}}{{/lambda.titlecase}}{value: val, isSet: true}
380+
}
381+
382+
func (v Nullable{{{classname}}}{{#lambda.titlecase}}{{nameInCamelCase}}{{/lambda.titlecase}}) MarshalJSON() ([]byte, error) {
383+
return json.Marshal(v.value)
384+
}
385+
386+
func (v *Nullable{{{classname}}}{{#lambda.titlecase}}{{nameInCamelCase}}{{/lambda.titlecase}}) UnmarshalJSON(src []byte) error {
387+
v.isSet = true
388+
return json.Unmarshal(src, &v.value)
389+
}
390+
391+
type {{classname}}{{getter}}AttributeType = *{{{classname}}}{{#lambda.titlecase}}{{nameInCamelCase}}{{/lambda.titlecase}}
392+
type {{classname}}{{getter}}ArgType = {{#isNullable}}*{{/isNullable}}{{{classname}}}{{#lambda.titlecase}}{{nameInCamelCase}}{{/lambda.titlecase}}
393+
type {{classname}}{{getter}}RetType = {{#isNullable}}*{{/isNullable}}{{{classname}}}{{#lambda.titlecase}}{{nameInCamelCase}}{{/lambda.titlecase}}
394+
func get{{classname}}{{getter}}AttributeTypeOk(arg {{classname}}{{getter}}AttributeType) (ret {{classname}}{{getter}}RetType, ok bool) {
395+
if arg == nil {
396+
{{#isNullable}}
397+
return nil,false
398+
{{/isNullable}}
399+
{{^isNullable}}
400+
return ret,false
401+
{{/isNullable}}
402+
}
403+
return {{^isNullable}}*{{/isNullable}}arg,true
404+
}
405+
406+
func set{{classname}}{{getter}}AttributeType(arg *{{classname}}{{getter}}AttributeType, val {{classname}}{{getter}}RetType) {
407+
*arg={{^isNullable}}&{{/isNullable}}val
408+
}
409+
{{/isEnum}}
410+
{{^isEnum}}
280411
// isEnumRef
281412
type {{classname}}{{getter}}AttributeType = *{{^isNumeric}}{{dataType}}{{/isNumeric}}{{#isNumeric}}int64{{/isNumeric}}
282413
type {{classname}}{{getter}}ArgType = {{#isNullable}}*{{/isNullable}}{{^isNumeric}}{{dataType}}{{/isNumeric}}{{#isNumeric}}int64{{/isNumeric}}
@@ -296,6 +427,7 @@ func get{{classname}}{{getter}}AttributeTypeOk(arg {{classname}}{{getter}}Attrib
296427
func set{{classname}}{{getter}}AttributeType(arg *{{classname}}{{getter}}AttributeType, val {{classname}}{{getter}}RetType) {
297428
*arg={{^isNullable}}&{{/isNullable}}val
298429
}
430+
{{/isEnum}}
299431
{{/isEnumRef}}
300432
{{#isModel}}
301433
{{! special handling for recursive datatypes}}
@@ -542,8 +674,13 @@ func New{{classname}}WithDefaults() *{{classname}} {
542674
{{#defaultValue}}
543675
{{^vendorExtensions.x-golang-is-container}}
544676
{{^isReadOnly}}
677+
{{#isEnum}}
678+
var {{nameInCamelCase}} {{{classname}}}{{#lambda.titlecase}}{{nameInCamelCase}}{{/lambda.titlecase}} = {{{.}}}
679+
{{/isEnum}}
680+
{{^isEnum}}
545681
{{!we use datatypeWithEnum here, since it will represent the non-nullable name of the datatype, e.g. int64 for NullableInt64}}
546682
var {{nameInCamelCase}} {{#isInteger}}int64{{/isInteger}}{{#isNumber}}float64{{/isNumber}}{{^isNumber}}{{^isInteger}}{{dataType}}{{/isInteger}}{{/isNumber}} = {{{.}}}
683+
{{/isEnum}}
547684
{{#isNullable}}
548685
this.{{name}} = *New{{dataType}}(&{{nameInCamelCase}})
549686
{{/isNullable}}

0 commit comments

Comments
 (0)