Skip to content

Commit affb6bc

Browse files
[GO] Add assert constraints checks for complex types in the model template (#18654)
* [GO] Add assert constraints checks for complex types in the model template * [GO] Update samples * [GO] revert AssertRecurseInterface naming
1 parent a9b1f93 commit affb6bc

10 files changed

Lines changed: 139 additions & 0 deletions

File tree

modules/openapi-generator/src/main/resources/go-server/model.mustache

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,61 @@ func Assert{{classname}}Constraints(obj {{classname}}) error {
174174
return &ParsingError{Param: "{{name}}", Err: errors.New(errMsgMaxValueConstraint)}
175175
}
176176
{{/maximum}}
177+
{{#isNullable}}
178+
{{#isModel}}
179+
if obj.{{name}} != nil {
180+
{{/isModel}}
181+
{{#isArray}}
182+
{{#items.isModel}}
183+
if obj.{{name}} != nil {
184+
{{/items.isModel}}
185+
{{/isArray}}
186+
{{/isNullable}}
187+
{{#isModel}}
188+
{{#isNullable}} {{/isNullable}} if err := Assert{{baseType}}Constraints({{#isNullable}}*{{/isNullable}}obj.{{name}}); err != nil {
189+
{{#isNullable}} {{/isNullable}} return err
190+
{{#isNullable}} {{/isNullable}} }
191+
{{/isModel}}
192+
{{#isArray}}
193+
{{#items.isModel}}
194+
{{#isNullable}} {{/isNullable}} for _, el := range {{#isNullable}}*{{/isNullable}}obj.{{name}} {
195+
{{#isNullable}} {{/isNullable}} if err := Assert{{items.baseType}}Constraints(el); err != nil {
196+
{{#isNullable}} {{/isNullable}} return err
197+
{{#isNullable}} {{/isNullable}} }
198+
{{#isNullable}} {{/isNullable}} }
199+
{{/items.isModel}}
200+
{{^items.isModel}}
201+
{{#mostInnerItems.isModel}}
202+
{{^mostInnerItems.isPrimitiveType}}
203+
{{#isNullable}}
204+
if obj.{{name}} != nil {
205+
{{/isNullable}}
206+
{{#isNullable}} {{/isNullable}} if err := AssertRecurseInterfaceRequired({{#isNullable}}*{{/isNullable}}obj.{{name}}, Assert{{mostInnerItems.dataType}}Constraints); err != nil {
207+
{{#isNullable}} {{/isNullable}} return err
208+
{{#isNullable}} {{/isNullable}} }
209+
{{/mostInnerItems.isPrimitiveType}}
210+
{{/mostInnerItems.isModel}}
211+
{{/items.isModel}}
212+
{{/isArray}}
213+
{{#isNullable}}
214+
{{#isModel}}
215+
}
216+
{{/isModel}}
217+
{{#isArray}}
218+
{{#items.isModel}}
219+
}
220+
{{/items.isModel}}
221+
{{^items.isModel}}
222+
{{#mostInnerItems.isModel}}
223+
{{^mostInnerItems.isPrimitiveType}}
224+
{{#isNullable}}
225+
}
226+
{{/isNullable}}
227+
{{/mostInnerItems.isPrimitiveType}}
228+
{{/mostInnerItems.isModel}}
229+
{{/items.isModel}}
230+
{{/isArray}}
231+
{{/isNullable}}
177232
{{/Vars}}
178233
return nil
179234
}{{/model}}{{/models}}

samples/openapi3/server/petstore/go/go-petstore/go/model_an_object.go

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

samples/openapi3/server/petstore/go/go-petstore/go/model_pet.go

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

samples/openapi3/server/petstore/go/go-petstore/go/model_user.go

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

samples/server/petstore/go-api-server/go/model_an_object.go

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

samples/server/petstore/go-api-server/go/model_pet.go

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

samples/server/petstore/go-api-server/go/model_user.go

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

samples/server/petstore/go-chi-server/go/model_an_object.go

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

samples/server/petstore/go-chi-server/go/model_pet.go

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

samples/server/petstore/go-chi-server/go/model_user.go

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)