From 87b7ef7fed983284d2cf8e197cb6780dce6dcdc4 Mon Sep 17 00:00:00 2001 From: tan Date: Mon, 4 Nov 2024 05:33:05 +0530 Subject: [PATCH 1/2] [julia] improve enum support Improved enum support. Added an override for `postProcessModels` method in julia code generator to do enum post processing. Added an override for `toEnumValue` method in julia code generator to generate enum values correctly based on julia types. Updated templates to use `#enumVars` for generating enum values. --- .../languages/AbstractJuliaCodegen.java | 44 +++++++++++++++++++ .../partial_model_single.mustache | 6 +-- .../partial_model_single.mustache | 6 +-- 3 files changed, 50 insertions(+), 6 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJuliaCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJuliaCodegen.java index 3f2549780f59..81cee1d2786c 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJuliaCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJuliaCodegen.java @@ -25,6 +25,7 @@ import org.openapitools.codegen.meta.features.SchemaSupportFeature; import org.openapitools.codegen.meta.features.SecurityFeature; import org.openapitools.codegen.meta.features.WireFormatFeature; +import org.openapitools.codegen.model.ModelsMap; import java.io.File; import java.text.SimpleDateFormat; @@ -70,6 +71,25 @@ public abstract class AbstractJuliaCodegen extends DefaultCodegen { protected final DateTimeFormatter OFFSET_DATE_TIME_FORMAT = DateTimeFormatter.ISO_OFFSET_DATE_TIME; protected final SimpleDateFormat DATE_TIME_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX", Locale.ROOT); protected final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd", Locale.ROOT); + protected final List UNQUOTED_DATATYPES = Arrays.asList( + "int", + "integer", + "long", + "short", + "byte", + "float", + "double", + "number", + "decimal", + "boolean", + "Int64", + "Int32", + "UInt8", + "Float32", + "Float64", + "Bool" + ); + public AbstractJuliaCodegen() { super(); @@ -549,4 +569,28 @@ protected ImmutableMap.Builder addMustacheLambdas() { return super.addMustacheLambdas() .put("escapeDollar", new EscapeChar("(? Date: Mon, 4 Nov 2024 06:06:44 +0530 Subject: [PATCH 2/2] generated samples --- .../client/petstore/julia/src/models/model_ApiResponse.jl | 3 +++ .../client/petstore/julia/src/models/model_Category.jl | 2 ++ .../client/petstore/julia/src/models/model_MappedModel.jl | 2 ++ samples/client/petstore/julia/src/models/model_Order.jl | 7 +++++++ samples/client/petstore/julia/src/models/model_Pet.jl | 7 +++++++ samples/client/petstore/julia/src/models/model_Tag.jl | 2 ++ samples/client/petstore/julia/src/models/model_User.jl | 8 ++++++++ .../petstore/julia/src/models/model_AnotherModel.jl | 2 ++ .../server/petstore/julia/src/models/model_ApiResponse.jl | 3 +++ .../server/petstore/julia/src/models/model_Category.jl | 2 ++ samples/server/petstore/julia/src/models/model_Order.jl | 7 +++++++ samples/server/petstore/julia/src/models/model_Pet.jl | 7 +++++++ samples/server/petstore/julia/src/models/model_Tag.jl | 2 ++ samples/server/petstore/julia/src/models/model_User.jl | 8 ++++++++ 14 files changed, 62 insertions(+) diff --git a/samples/client/petstore/julia/src/models/model_ApiResponse.jl b/samples/client/petstore/julia/src/models/model_ApiResponse.jl index 107fab6677fb..e840bde445b6 100644 --- a/samples/client/petstore/julia/src/models/model_ApiResponse.jl +++ b/samples/client/petstore/julia/src/models/model_ApiResponse.jl @@ -36,7 +36,10 @@ function check_required(o::ApiResponse) end function OpenAPI.validate_property(::Type{ ApiResponse }, name::Symbol, val) + if name === Symbol("code") OpenAPI.validate_param(name, "ApiResponse", :format, val, "int32") end + + end diff --git a/samples/client/petstore/julia/src/models/model_Category.jl b/samples/client/petstore/julia/src/models/model_Category.jl index bd583ab337c3..79d9a8acd1ca 100644 --- a/samples/client/petstore/julia/src/models/model_Category.jl +++ b/samples/client/petstore/julia/src/models/model_Category.jl @@ -32,9 +32,11 @@ function check_required(o::Category) end function OpenAPI.validate_property(::Type{ Category }, name::Symbol, val) + if name === Symbol("id") OpenAPI.validate_param(name, "Category", :format, val, "int64") end + if name === Symbol("name") OpenAPI.validate_param(name, "Category", :pattern, val, r"^[a-zA-Z0-9]+[a-zA-Z0-9\.\-_]*[a-zA-Z0-9]+$") end diff --git a/samples/client/petstore/julia/src/models/model_MappedModel.jl b/samples/client/petstore/julia/src/models/model_MappedModel.jl index 94bf2fe52a1b..0203cbc6b545 100644 --- a/samples/client/petstore/julia/src/models/model_MappedModel.jl +++ b/samples/client/petstore/julia/src/models/model_MappedModel.jl @@ -32,9 +32,11 @@ function check_required(o::MappedModel) end function OpenAPI.validate_property(::Type{ MappedModel }, name::Symbol, val) + if name === Symbol("another_property") OpenAPI.validate_param(name, "MappedModel", :format, val, "int32") end + if name === Symbol("uuid_default_value") OpenAPI.validate_param(name, "MappedModel", :format, val, "uuid") end diff --git a/samples/client/petstore/julia/src/models/model_Order.jl b/samples/client/petstore/julia/src/models/model_Order.jl index 9443890b17b5..4073ad540b65 100644 --- a/samples/client/petstore/julia/src/models/model_Order.jl +++ b/samples/client/petstore/julia/src/models/model_Order.jl @@ -48,19 +48,26 @@ function check_required(o::Order) end function OpenAPI.validate_property(::Type{ Order }, name::Symbol, val) + if name === Symbol("id") OpenAPI.validate_param(name, "Order", :format, val, "int64") end + if name === Symbol("petId") OpenAPI.validate_param(name, "Order", :format, val, "int64") end + if name === Symbol("quantity") OpenAPI.validate_param(name, "Order", :format, val, "int32") end + if name === Symbol("shipDate") OpenAPI.validate_param(name, "Order", :format, val, "date-time") end + if name === Symbol("status") OpenAPI.validate_param(name, "Order", :enum, val, ["placed", "approved", "delivered"]) end + + end diff --git a/samples/client/petstore/julia/src/models/model_Pet.jl b/samples/client/petstore/julia/src/models/model_Pet.jl index 569a9326912d..afe35a0ab551 100644 --- a/samples/client/petstore/julia/src/models/model_Pet.jl +++ b/samples/client/petstore/julia/src/models/model_Pet.jl @@ -50,10 +50,17 @@ function check_required(o::Pet) end function OpenAPI.validate_property(::Type{ Pet }, name::Symbol, val) + if name === Symbol("id") OpenAPI.validate_param(name, "Pet", :format, val, "int64") end + + + + + if name === Symbol("status") OpenAPI.validate_param(name, "Pet", :enum, val, ["available", "pending", "sold"]) end + end diff --git a/samples/client/petstore/julia/src/models/model_Tag.jl b/samples/client/petstore/julia/src/models/model_Tag.jl index f717688e9963..aeea1601b5e0 100644 --- a/samples/client/petstore/julia/src/models/model_Tag.jl +++ b/samples/client/petstore/julia/src/models/model_Tag.jl @@ -32,7 +32,9 @@ function check_required(o::Tag) end function OpenAPI.validate_property(::Type{ Tag }, name::Symbol, val) + if name === Symbol("id") OpenAPI.validate_param(name, "Tag", :format, val, "int64") end + end diff --git a/samples/client/petstore/julia/src/models/model_User.jl b/samples/client/petstore/julia/src/models/model_User.jl index 5af0ccd94da4..5497ba8fa6e2 100644 --- a/samples/client/petstore/julia/src/models/model_User.jl +++ b/samples/client/petstore/julia/src/models/model_User.jl @@ -56,9 +56,17 @@ function check_required(o::User) end function OpenAPI.validate_property(::Type{ User }, name::Symbol, val) + if name === Symbol("id") OpenAPI.validate_param(name, "User", :format, val, "int64") end + + + + + + + if name === Symbol("userStatus") OpenAPI.validate_param(name, "User", :format, val, "int32") end diff --git a/samples/server/petstore/julia/src/models/model_AnotherModel.jl b/samples/server/petstore/julia/src/models/model_AnotherModel.jl index e5235e2e4be0..d40f233d010d 100644 --- a/samples/server/petstore/julia/src/models/model_AnotherModel.jl +++ b/samples/server/petstore/julia/src/models/model_AnotherModel.jl @@ -32,9 +32,11 @@ function check_required(o::AnotherModel) end function OpenAPI.validate_property(::Type{ AnotherModel }, name::Symbol, val) + if name === Symbol("another_property") OpenAPI.validate_param(name, "AnotherModel", :format, val, "int32") end + if name === Symbol("uuid_default_value") OpenAPI.validate_param(name, "AnotherModel", :format, val, "uuid") end diff --git a/samples/server/petstore/julia/src/models/model_ApiResponse.jl b/samples/server/petstore/julia/src/models/model_ApiResponse.jl index 107fab6677fb..e840bde445b6 100644 --- a/samples/server/petstore/julia/src/models/model_ApiResponse.jl +++ b/samples/server/petstore/julia/src/models/model_ApiResponse.jl @@ -36,7 +36,10 @@ function check_required(o::ApiResponse) end function OpenAPI.validate_property(::Type{ ApiResponse }, name::Symbol, val) + if name === Symbol("code") OpenAPI.validate_param(name, "ApiResponse", :format, val, "int32") end + + end diff --git a/samples/server/petstore/julia/src/models/model_Category.jl b/samples/server/petstore/julia/src/models/model_Category.jl index bd583ab337c3..79d9a8acd1ca 100644 --- a/samples/server/petstore/julia/src/models/model_Category.jl +++ b/samples/server/petstore/julia/src/models/model_Category.jl @@ -32,9 +32,11 @@ function check_required(o::Category) end function OpenAPI.validate_property(::Type{ Category }, name::Symbol, val) + if name === Symbol("id") OpenAPI.validate_param(name, "Category", :format, val, "int64") end + if name === Symbol("name") OpenAPI.validate_param(name, "Category", :pattern, val, r"^[a-zA-Z0-9]+[a-zA-Z0-9\.\-_]*[a-zA-Z0-9]+$") end diff --git a/samples/server/petstore/julia/src/models/model_Order.jl b/samples/server/petstore/julia/src/models/model_Order.jl index 9443890b17b5..4073ad540b65 100644 --- a/samples/server/petstore/julia/src/models/model_Order.jl +++ b/samples/server/petstore/julia/src/models/model_Order.jl @@ -48,19 +48,26 @@ function check_required(o::Order) end function OpenAPI.validate_property(::Type{ Order }, name::Symbol, val) + if name === Symbol("id") OpenAPI.validate_param(name, "Order", :format, val, "int64") end + if name === Symbol("petId") OpenAPI.validate_param(name, "Order", :format, val, "int64") end + if name === Symbol("quantity") OpenAPI.validate_param(name, "Order", :format, val, "int32") end + if name === Symbol("shipDate") OpenAPI.validate_param(name, "Order", :format, val, "date-time") end + if name === Symbol("status") OpenAPI.validate_param(name, "Order", :enum, val, ["placed", "approved", "delivered"]) end + + end diff --git a/samples/server/petstore/julia/src/models/model_Pet.jl b/samples/server/petstore/julia/src/models/model_Pet.jl index 569a9326912d..afe35a0ab551 100644 --- a/samples/server/petstore/julia/src/models/model_Pet.jl +++ b/samples/server/petstore/julia/src/models/model_Pet.jl @@ -50,10 +50,17 @@ function check_required(o::Pet) end function OpenAPI.validate_property(::Type{ Pet }, name::Symbol, val) + if name === Symbol("id") OpenAPI.validate_param(name, "Pet", :format, val, "int64") end + + + + + if name === Symbol("status") OpenAPI.validate_param(name, "Pet", :enum, val, ["available", "pending", "sold"]) end + end diff --git a/samples/server/petstore/julia/src/models/model_Tag.jl b/samples/server/petstore/julia/src/models/model_Tag.jl index f717688e9963..aeea1601b5e0 100644 --- a/samples/server/petstore/julia/src/models/model_Tag.jl +++ b/samples/server/petstore/julia/src/models/model_Tag.jl @@ -32,7 +32,9 @@ function check_required(o::Tag) end function OpenAPI.validate_property(::Type{ Tag }, name::Symbol, val) + if name === Symbol("id") OpenAPI.validate_param(name, "Tag", :format, val, "int64") end + end diff --git a/samples/server/petstore/julia/src/models/model_User.jl b/samples/server/petstore/julia/src/models/model_User.jl index 5af0ccd94da4..5497ba8fa6e2 100644 --- a/samples/server/petstore/julia/src/models/model_User.jl +++ b/samples/server/petstore/julia/src/models/model_User.jl @@ -56,9 +56,17 @@ function check_required(o::User) end function OpenAPI.validate_property(::Type{ User }, name::Symbol, val) + if name === Symbol("id") OpenAPI.validate_param(name, "User", :format, val, "int64") end + + + + + + + if name === Symbol("userStatus") OpenAPI.validate_param(name, "User", :format, val, "int32") end