Skip to content

Commit b1de687

Browse files
authored
[julia] better serverside validation code (#21072)
* [julia] better serverside validation code Updating the code generated for julia server to add more checks in the validation stage of incoming requests. Particularly adds checks for request body and required parameters. Updates the generated models with some helper methods that are used in validation filter. * bump OpenAPI.jl version to use for CI
1 parent 6da343a commit b1de687

File tree

22 files changed

+522
-138
lines changed

22 files changed

+522
-138
lines changed

.github/workflows/samples-julia.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ jobs:
3030
# Using develop mode to install package so that it is easier to modify the package test files
3131
julia -e "using Pkg; Pkg.develop(\"OpenAPI\");"
3232
cd ~/.julia/dev/OpenAPI
33-
git checkout v0.1.25
33+
git checkout v0.2.0
3434
cd $currdir
3535
rm -rf ~/.julia/dev/OpenAPI/test/client/openapigenerator_petstore_v3/petstore
3636
rm -rf ~/.julia/dev/OpenAPI/test/server/openapigenerator_petstore_v3/petstore

modules/openapi-generator/src/main/resources/julia-client/partial_model_single.mustache

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,16 @@ Base.@kwdef mutable struct {{classname}} <: OpenAPI.APIModel
1717
{{/allVars}}
1818

1919
function {{classname}}({{#allVars}}{{{name}}}, {{/allVars}})
20-
{{#allVars}}
21-
OpenAPI.validate_property({{classname}}, Symbol("{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"), {{{name}}})
22-
{{/allVars}}
23-
return new({{#allVars}}{{{name}}}, {{/allVars}})
20+
o = new({{#allVars}}{{{name}}}, {{/allVars}})
21+
OpenAPI.validate_properties(o)
22+
return o
2423
end
2524
end # type {{classname}}
2625

2726
const _property_types_{{classname}} = Dict{Symbol,String}({{#allVars}}Symbol("{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}")=>"{{datatype}}", {{/allVars}})
2827
OpenAPI.property_type(::Type{ {{classname}} }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_{{classname}}[name]))}
2928

30-
function check_required(o::{{classname}})
29+
function OpenAPI.check_required(o::{{classname}})
3130
{{#allVars}}
3231
{{#required}}
3332
o.{{{name}}} === nothing && (return false)
@@ -36,6 +35,12 @@ function check_required(o::{{classname}})
3635
true
3736
end
3837

38+
function OpenAPI.validate_properties(o::{{classname}})
39+
{{#allVars}}
40+
OpenAPI.validate_property({{classname}}, Symbol("{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"), o.{{{name}}})
41+
{{/allVars}}
42+
end
43+
3944
function OpenAPI.validate_property(::Type{ {{classname}} }, name::Symbol, val)
4045
{{#allVars}}
4146
{{#isEnum}}{{#allowableValues}}

modules/openapi-generator/src/main/resources/julia-server/api.mustache

Lines changed: 25 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -24,41 +24,31 @@ end
2424
function {{operationId}}_validate(handler)
2525
function {{operationId}}_validate_handler(req::HTTP.Request)
2626
openapi_params = req.context[:openapi_params]
27-
{{#allParams}}{{#hasValidation}}
28-
{{#maxLength}}
29-
OpenAPI.validate_param("{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}", "{{operationId}}", :maxLength, openapi_params["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"], {{maxLength}})
30-
{{/maxLength}}
31-
{{#minLength}}
32-
OpenAPI.validate_param("{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}", "{{operationId}}", :minLength, openapi_params["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"], {{minLength}})
33-
{{/minLength}}
34-
{{#maximum}}
35-
OpenAPI.validate_param("{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}", "{{operationId}}", :maximum, openapi_params["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"], {{maximum}}, {{#exclusiveMaximum}}true{{/exclusiveMaximum}}{{^exclusiveMaximum}}false{{/exclusiveMaximum}})
36-
{{/maximum}}
37-
{{#minimum}}
38-
OpenAPI.validate_param("{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}", "{{operationId}}", :minimum, openapi_params["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"], {{minimum}}, {{#exclusiveMinimum}}true{{/exclusiveMinimum}}{{^exclusiveMinimum}}false{{/exclusiveMinimum}})
39-
{{/minimum}}
40-
{{#maxItems}}
41-
OpenAPI.validate_param("{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}", "{{operationId}}", :maxItems, openapi_params["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"], {{maxItems}})
42-
{{/maxItems}}
43-
{{#minItems}}
44-
OpenAPI.validate_param("{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}", "{{operationId}}", :minItems, openapi_params["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"], {{minItems}})
45-
{{/minItems}}
46-
{{#uniqueItems}}
47-
OpenAPI.validate_param("{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}", "{{operationId}}", :uniqueItems, openapi_params["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"], {{uniqueItems}})
48-
{{/uniqueItems}}
49-
{{#maxProperties}}
50-
OpenAPI.validate_param("{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}", "{{operationId}}", :maxProperties, openapi_params["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"], {{maxProperties}})
51-
{{/maxProperties}}
52-
{{#minProperties}}
53-
OpenAPI.validate_param("{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}", "{{operationId}}", :minProperties, openapi_params["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"], {{minProperties}})
54-
{{/minProperties}}
55-
{{#pattern}}
56-
OpenAPI.validate_param("{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}", "{{operationId}}", :pattern, openapi_params["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"], r"{{{pattern}}}")
57-
{{/pattern}}
58-
{{#multipleOf}}
59-
OpenAPI.validate_param("{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}", "{{operationId}}", :multipleOf, openapi_params["{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"], {{multipleOf}})
60-
{{/multipleOf}}
61-
{{/hasValidation}}{{/allParams}}
27+
op = "{{operationId}}"{{#allParams}}
28+
29+
n = "{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"
30+
v = get(openapi_params, n, nothing){{#required}}
31+
isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op)){{/required}}
32+
if !isnothing(v){{#hasValidation}}{{#maxLength}}
33+
OpenAPI.validate_param(n, op, :maxLength, v, {{maxLength}}){{/maxLength}}{{#minLength}}
34+
OpenAPI.validate_param(n, op, :minLength, v, {{minLength}}){{/minLength}}{{#maximum}}
35+
OpenAPI.validate_param(n, op, :maximum, v, {{maximum}}, {{#exclusiveMaximum}}true{{/exclusiveMaximum}}{{^exclusiveMaximum}}false{{/exclusiveMaximum}}){{/maximum}}{{#minimum}}
36+
OpenAPI.validate_param(n, op, :minimum, v, {{minimum}}, {{#exclusiveMinimum}}true{{/exclusiveMinimum}}{{^exclusiveMinimum}}false{{/exclusiveMinimum}}){{/minimum}}{{#maxItems}}
37+
OpenAPI.validate_param(n, op, :maxItems, v, {{maxItems}}){{/maxItems}}{{#minItems}}
38+
OpenAPI.validate_param(n, op, :minItems, v, {{minItems}}){{/minItems}}{{#uniqueItems}}
39+
OpenAPI.validate_param(n, op, :uniqueItems, v, {{uniqueItems}}){{/uniqueItems}}{{#maxProperties}}
40+
OpenAPI.validate_param(n, op, :maxProperties, v, {{maxProperties}}){{/maxProperties}}{{#minProperties}}
41+
OpenAPI.validate_param(n, op, :minProperties, v, {{minProperties}}){{/minProperties}}{{#pattern}}
42+
OpenAPI.validate_param(n, op, :pattern, v, r"{{{pattern}}}"){{/pattern}}{{#multipleOf}}
43+
OpenAPI.validate_param(n, op, :multipleOf, v, {{multipleOf}}){{/multipleOf}}{{/hasValidation}}{{^hasValidation}}
44+
if isa(v, OpenAPI.APIModel)
45+
OpenAPI.validate_properties(v)
46+
if !OpenAPI.check_required(v)
47+
throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
48+
end
49+
end{{/hasValidation}}
50+
end{{/allParams}}
51+
6252
return handler(req)
6353
end
6454
end

modules/openapi-generator/src/main/resources/julia-server/partial_model_single.mustache

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,16 @@ Base.@kwdef mutable struct {{classname}} <: OpenAPI.APIModel
1717
{{/allVars}}
1818

1919
function {{classname}}({{#allVars}}{{{name}}}, {{/allVars}})
20-
{{#allVars}}
21-
OpenAPI.validate_property({{classname}}, Symbol("{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"), {{{name}}})
22-
{{/allVars}}
23-
return new({{#allVars}}{{{name}}}, {{/allVars}})
20+
o = new({{#allVars}}{{{name}}}, {{/allVars}})
21+
OpenAPI.validate_properties(o)
22+
return o
2423
end
2524
end # type {{classname}}
2625

2726
const _property_types_{{classname}} = Dict{Symbol,String}({{#allVars}}Symbol("{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}")=>"{{datatype}}", {{/allVars}})
2827
OpenAPI.property_type(::Type{ {{classname}} }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_{{classname}}[name]))}
2928

30-
function check_required(o::{{classname}})
29+
function OpenAPI.check_required(o::{{classname}})
3130
{{#allVars}}
3231
{{#required}}
3332
o.{{{name}}} === nothing && (return false)
@@ -36,6 +35,12 @@ function check_required(o::{{classname}})
3635
true
3736
end
3837

38+
function OpenAPI.validate_properties(o::{{classname}})
39+
{{#allVars}}
40+
OpenAPI.validate_property({{classname}}, Symbol("{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}"), o.{{{name}}})
41+
{{/allVars}}
42+
end
43+
3944
function OpenAPI.validate_property(::Type{ {{classname}} }, name::Symbol, val)
4045
{{#allVars}}
4146
{{#isEnum}}{{#allowableValues}}

samples/client/petstore/julia/src/models/model_ApiResponse.jl

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,20 +21,25 @@ Base.@kwdef mutable struct ApiResponse <: OpenAPI.APIModel
2121
message::Union{Nothing, String} = nothing
2222

2323
function ApiResponse(code, type, message, )
24-
OpenAPI.validate_property(ApiResponse, Symbol("code"), code)
25-
OpenAPI.validate_property(ApiResponse, Symbol("type"), type)
26-
OpenAPI.validate_property(ApiResponse, Symbol("message"), message)
27-
return new(code, type, message, )
24+
o = new(code, type, message, )
25+
OpenAPI.validate_properties(o)
26+
return o
2827
end
2928
end # type ApiResponse
3029

3130
const _property_types_ApiResponse = Dict{Symbol,String}(Symbol("code")=>"Int64", Symbol("type")=>"String", Symbol("message")=>"String", )
3231
OpenAPI.property_type(::Type{ ApiResponse }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_ApiResponse[name]))}
3332

34-
function check_required(o::ApiResponse)
33+
function OpenAPI.check_required(o::ApiResponse)
3534
true
3635
end
3736

37+
function OpenAPI.validate_properties(o::ApiResponse)
38+
OpenAPI.validate_property(ApiResponse, Symbol("code"), o.code)
39+
OpenAPI.validate_property(ApiResponse, Symbol("type"), o.type)
40+
OpenAPI.validate_property(ApiResponse, Symbol("message"), o.message)
41+
end
42+
3843
function OpenAPI.validate_property(::Type{ ApiResponse }, name::Symbol, val)
3944

4045
if name === Symbol("code")

samples/client/petstore/julia/src/models/model_Category.jl

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,24 @@ Base.@kwdef mutable struct Category <: OpenAPI.APIModel
1818
name::Union{Nothing, String} = nothing
1919

2020
function Category(id, name, )
21-
OpenAPI.validate_property(Category, Symbol("id"), id)
22-
OpenAPI.validate_property(Category, Symbol("name"), name)
23-
return new(id, name, )
21+
o = new(id, name, )
22+
OpenAPI.validate_properties(o)
23+
return o
2424
end
2525
end # type Category
2626

2727
const _property_types_Category = Dict{Symbol,String}(Symbol("id")=>"Int64", Symbol("name")=>"String", )
2828
OpenAPI.property_type(::Type{ Category }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_Category[name]))}
2929

30-
function check_required(o::Category)
30+
function OpenAPI.check_required(o::Category)
3131
true
3232
end
3333

34+
function OpenAPI.validate_properties(o::Category)
35+
OpenAPI.validate_property(Category, Symbol("id"), o.id)
36+
OpenAPI.validate_property(Category, Symbol("name"), o.name)
37+
end
38+
3439
function OpenAPI.validate_property(::Type{ Category }, name::Symbol, val)
3540

3641
if name === Symbol("id")

samples/client/petstore/julia/src/models/model_MappedModel.jl

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,24 @@ Base.@kwdef mutable struct MappedModel <: OpenAPI.APIModel
1818
uuid_default_value::Union{Nothing, String} = nothing
1919

2020
function MappedModel(mappedProperty, uuid_default_value, )
21-
OpenAPI.validate_property(MappedModel, Symbol("another_property"), mappedProperty)
22-
OpenAPI.validate_property(MappedModel, Symbol("uuid_default_value"), uuid_default_value)
23-
return new(mappedProperty, uuid_default_value, )
21+
o = new(mappedProperty, uuid_default_value, )
22+
OpenAPI.validate_properties(o)
23+
return o
2424
end
2525
end # type MappedModel
2626

2727
const _property_types_MappedModel = Dict{Symbol,String}(Symbol("another_property")=>"Int64", Symbol("uuid_default_value")=>"String", )
2828
OpenAPI.property_type(::Type{ MappedModel }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_MappedModel[name]))}
2929

30-
function check_required(o::MappedModel)
30+
function OpenAPI.check_required(o::MappedModel)
3131
true
3232
end
3333

34+
function OpenAPI.validate_properties(o::MappedModel)
35+
OpenAPI.validate_property(MappedModel, Symbol("another_property"), o.mappedProperty)
36+
OpenAPI.validate_property(MappedModel, Symbol("uuid_default_value"), o.uuid_default_value)
37+
end
38+
3439
function OpenAPI.validate_property(::Type{ MappedModel }, name::Symbol, val)
3540

3641
if name === Symbol("another_property")

samples/client/petstore/julia/src/models/model_Order.jl

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,23 +30,28 @@ Base.@kwdef mutable struct Order <: OpenAPI.APIModel
3030
complete::Union{Nothing, Bool} = false
3131

3232
function Order(id, petId, quantity, shipDate, status, complete, )
33-
OpenAPI.validate_property(Order, Symbol("id"), id)
34-
OpenAPI.validate_property(Order, Symbol("petId"), petId)
35-
OpenAPI.validate_property(Order, Symbol("quantity"), quantity)
36-
OpenAPI.validate_property(Order, Symbol("shipDate"), shipDate)
37-
OpenAPI.validate_property(Order, Symbol("status"), status)
38-
OpenAPI.validate_property(Order, Symbol("complete"), complete)
39-
return new(id, petId, quantity, shipDate, status, complete, )
33+
o = new(id, petId, quantity, shipDate, status, complete, )
34+
OpenAPI.validate_properties(o)
35+
return o
4036
end
4137
end # type Order
4238

4339
const _property_types_Order = Dict{Symbol,String}(Symbol("id")=>"Int64", Symbol("petId")=>"Int64", Symbol("quantity")=>"Int64", Symbol("shipDate")=>"ZonedDateTime", Symbol("status")=>"String", Symbol("complete")=>"Bool", )
4440
OpenAPI.property_type(::Type{ Order }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_Order[name]))}
4541

46-
function check_required(o::Order)
42+
function OpenAPI.check_required(o::Order)
4743
true
4844
end
4945

46+
function OpenAPI.validate_properties(o::Order)
47+
OpenAPI.validate_property(Order, Symbol("id"), o.id)
48+
OpenAPI.validate_property(Order, Symbol("petId"), o.petId)
49+
OpenAPI.validate_property(Order, Symbol("quantity"), o.quantity)
50+
OpenAPI.validate_property(Order, Symbol("shipDate"), o.shipDate)
51+
OpenAPI.validate_property(Order, Symbol("status"), o.status)
52+
OpenAPI.validate_property(Order, Symbol("complete"), o.complete)
53+
end
54+
5055
function OpenAPI.validate_property(::Type{ Order }, name::Symbol, val)
5156

5257
if name === Symbol("id")

samples/client/petstore/julia/src/models/model_Pet.jl

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,25 +30,30 @@ Base.@kwdef mutable struct Pet <: OpenAPI.APIModel
3030
status::Union{Nothing, String} = nothing
3131

3232
function Pet(id, category, name, photoUrls, tags, status, )
33-
OpenAPI.validate_property(Pet, Symbol("id"), id)
34-
OpenAPI.validate_property(Pet, Symbol("category"), category)
35-
OpenAPI.validate_property(Pet, Symbol("name"), name)
36-
OpenAPI.validate_property(Pet, Symbol("photoUrls"), photoUrls)
37-
OpenAPI.validate_property(Pet, Symbol("tags"), tags)
38-
OpenAPI.validate_property(Pet, Symbol("status"), status)
39-
return new(id, category, name, photoUrls, tags, status, )
33+
o = new(id, category, name, photoUrls, tags, status, )
34+
OpenAPI.validate_properties(o)
35+
return o
4036
end
4137
end # type Pet
4238

4339
const _property_types_Pet = Dict{Symbol,String}(Symbol("id")=>"Int64", Symbol("category")=>"Category", Symbol("name")=>"String", Symbol("photoUrls")=>"Vector{String}", Symbol("tags")=>"Vector{Tag}", Symbol("status")=>"String", )
4440
OpenAPI.property_type(::Type{ Pet }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_Pet[name]))}
4541

46-
function check_required(o::Pet)
42+
function OpenAPI.check_required(o::Pet)
4743
o.name === nothing && (return false)
4844
o.photoUrls === nothing && (return false)
4945
true
5046
end
5147

48+
function OpenAPI.validate_properties(o::Pet)
49+
OpenAPI.validate_property(Pet, Symbol("id"), o.id)
50+
OpenAPI.validate_property(Pet, Symbol("category"), o.category)
51+
OpenAPI.validate_property(Pet, Symbol("name"), o.name)
52+
OpenAPI.validate_property(Pet, Symbol("photoUrls"), o.photoUrls)
53+
OpenAPI.validate_property(Pet, Symbol("tags"), o.tags)
54+
OpenAPI.validate_property(Pet, Symbol("status"), o.status)
55+
end
56+
5257
function OpenAPI.validate_property(::Type{ Pet }, name::Symbol, val)
5358

5459
if name === Symbol("id")

samples/client/petstore/julia/src/models/model_Tag.jl

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,24 @@ Base.@kwdef mutable struct Tag <: OpenAPI.APIModel
1818
name::Union{Nothing, String} = nothing
1919

2020
function Tag(id, name, )
21-
OpenAPI.validate_property(Tag, Symbol("id"), id)
22-
OpenAPI.validate_property(Tag, Symbol("name"), name)
23-
return new(id, name, )
21+
o = new(id, name, )
22+
OpenAPI.validate_properties(o)
23+
return o
2424
end
2525
end # type Tag
2626

2727
const _property_types_Tag = Dict{Symbol,String}(Symbol("id")=>"Int64", Symbol("name")=>"String", )
2828
OpenAPI.property_type(::Type{ Tag }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_Tag[name]))}
2929

30-
function check_required(o::Tag)
30+
function OpenAPI.check_required(o::Tag)
3131
true
3232
end
3333

34+
function OpenAPI.validate_properties(o::Tag)
35+
OpenAPI.validate_property(Tag, Symbol("id"), o.id)
36+
OpenAPI.validate_property(Tag, Symbol("name"), o.name)
37+
end
38+
3439
function OpenAPI.validate_property(::Type{ Tag }, name::Symbol, val)
3540

3641
if name === Symbol("id")

samples/client/petstore/julia/src/models/model_User.jl

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -36,25 +36,30 @@ Base.@kwdef mutable struct User <: OpenAPI.APIModel
3636
userStatus::Union{Nothing, Int64} = nothing
3737

3838
function User(id, username, firstName, lastName, email, password, phone, userStatus, )
39-
OpenAPI.validate_property(User, Symbol("id"), id)
40-
OpenAPI.validate_property(User, Symbol("username"), username)
41-
OpenAPI.validate_property(User, Symbol("firstName"), firstName)
42-
OpenAPI.validate_property(User, Symbol("lastName"), lastName)
43-
OpenAPI.validate_property(User, Symbol("email"), email)
44-
OpenAPI.validate_property(User, Symbol("password"), password)
45-
OpenAPI.validate_property(User, Symbol("phone"), phone)
46-
OpenAPI.validate_property(User, Symbol("userStatus"), userStatus)
47-
return new(id, username, firstName, lastName, email, password, phone, userStatus, )
39+
o = new(id, username, firstName, lastName, email, password, phone, userStatus, )
40+
OpenAPI.validate_properties(o)
41+
return o
4842
end
4943
end # type User
5044

5145
const _property_types_User = Dict{Symbol,String}(Symbol("id")=>"Int64", Symbol("username")=>"String", Symbol("firstName")=>"String", Symbol("lastName")=>"String", Symbol("email")=>"String", Symbol("password")=>"String", Symbol("phone")=>"String", Symbol("userStatus")=>"Int64", )
5246
OpenAPI.property_type(::Type{ User }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_User[name]))}
5347

54-
function check_required(o::User)
48+
function OpenAPI.check_required(o::User)
5549
true
5650
end
5751

52+
function OpenAPI.validate_properties(o::User)
53+
OpenAPI.validate_property(User, Symbol("id"), o.id)
54+
OpenAPI.validate_property(User, Symbol("username"), o.username)
55+
OpenAPI.validate_property(User, Symbol("firstName"), o.firstName)
56+
OpenAPI.validate_property(User, Symbol("lastName"), o.lastName)
57+
OpenAPI.validate_property(User, Symbol("email"), o.email)
58+
OpenAPI.validate_property(User, Symbol("password"), o.password)
59+
OpenAPI.validate_property(User, Symbol("phone"), o.phone)
60+
OpenAPI.validate_property(User, Symbol("userStatus"), o.userStatus)
61+
end
62+
5863
function OpenAPI.validate_property(::Type{ User }, name::Symbol, val)
5964

6065
if name === Symbol("id")

0 commit comments

Comments
 (0)