Skip to content

Commit

Permalink
[go-server] Set default values in object properties
Browse files Browse the repository at this point in the history
When a default value is set for an object property, ensure it is set
into the struct before decoding the JSON body.

Fix OpenAPITools#4579
  • Loading branch information
rledisez committed May 13, 2024
1 parent b23dcbd commit 10480ad
Show file tree
Hide file tree
Showing 47 changed files with 276 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -591,7 +591,12 @@ func (c *{{classname}}Controller) {{nickname}}(w http.ResponseWriter, r *http.Re
{{paramName}}Param := r.Header.Get("{{baseName}}")
{{/isHeaderParam}}
{{#isBodyParam}}
{{#isArray}}
{{paramName}}Param := {{dataType}}{}
{{/isArray}}
{{^isArray}}
{{paramName}}Param := New{{dataType}}WithDefaults()
{{/isArray}}
d := json.NewDecoder(r.Body)
{{^isAdditionalPropertiesTrue}}
d.DisallowUnknownFields()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,27 @@ type {{classname}} struct {
{{/deprecated}}
{{name}} {{#isNullable}}*{{/isNullable}}{{{dataType}}} `json:"{{baseName}}{{^required}},omitempty{{/required}}"{{#vendorExtensions.x-go-custom-tag}} {{{.}}}{{/vendorExtensions.x-go-custom-tag}}`
{{/vars}}
}{{/isEnum}}
}

{{^isArray}}
// New{{classname}}WithDefaults instantiates a new {{classname}} object
// This constructor will only assign default values to properties that have it defined,
// but it doesn't guarantee that properties required by API are set
func New{{classname}}WithDefaults() {{classname}} {
this := {{classname}}{}
{{#vars}}
{{#defaultValue}}
{{^isArray}}
this.{{name}} = {{#isBoolean}}{{{.}}}{{/isBoolean}}{{#isNumeric}}{{{.}}}{{/isNumeric}}{{^isBoolean}}{{^isNumeric}}"{{{.}}}"{{/isNumeric}}{{/isBoolean}}
{{/isArray}}
{{/defaultValue}}
{{#isModel}}
{{#isNullable}}*{{/isNullable}}this.{{name}} = New{{dataType}}WithDefaults()
{{/isModel}}
{{/vars}}
return this
}{{/isArray}}
{{/isEnum}}

// Assert{{classname}}Required checks if the required fields are not zero-ed
func Assert{{classname}}Required(obj {{classname}}) error {
Expand Down
4 changes: 2 additions & 2 deletions samples/openapi3/server/petstore/go/go-petstore/go/api_pet.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions samples/server/petstore/go-api-server/go/api_pet.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion samples/server/petstore/go-api-server/go/api_store.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions samples/server/petstore/go-api-server/go/api_user.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions samples/server/petstore/go-api-server/go/model_an_object.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions samples/server/petstore/go-api-server/go/model_category.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion samples/server/petstore/go-api-server/go/model_colour.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion samples/server/petstore/go-api-server/go/model_gender.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions samples/server/petstore/go-api-server/go/model_order.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions samples/server/petstore/go-api-server/go/model_order_info.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 10480ad

Please sign in to comment.