[julia] improve enum support (#20016)

* [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.

* generated samples
This commit is contained in:
Tanmay Mohapatra
2024-11-06 13:34:15 +05:30
committed by GitHub
parent e1bccbfe47
commit 06547b7b82
17 changed files with 112 additions and 6 deletions

View File

@@ -25,6 +25,7 @@ import org.openapitools.codegen.meta.features.ParameterFeature;
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<String> 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 @@ public abstract class AbstractJuliaCodegen extends DefaultCodegen {
return super.addMustacheLambdas()
.put("escapeDollar", new EscapeChar("(?<!\\\\)\\$", "\\\\\\$"));
}
// override with any special post-processing
@Override
@SuppressWarnings("static-method")
public ModelsMap postProcessModels(ModelsMap objs) {
objs = super.postProcessModels(objs);
return postProcessModelsEnum(objs);
}
/**
* Return the enum value in the language specified format
* e.g. status becomes "status"
*
* @param value enum variable name
* @param datatype data type
* @return the sanitized value for enum
*/
public String toEnumValue(String value, String datatype) {
if (datatype != null && UNQUOTED_DATATYPES.contains(datatype)) {
return value;
} else {
return "\"" + escapeText(value) + "\"";
}
}
}

View File

@@ -38,11 +38,11 @@ end
function OpenAPI.validate_property(::Type{ {{classname}} }, name::Symbol, val)
{{#allVars}}
{{#isEnum}}
{{#isEnum}}{{#allowableValues}}
if name === Symbol("{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}")
OpenAPI.validate_param(name, "{{classname}}", :enum, val, [{{#_enum}}{{#isString}}"{{.}}"{{/isString}}{{^isString}}{{.}}{{/isString}}{{^-last}}, {{/-last}}{{/_enum}}])
OpenAPI.validate_param(name, "{{classname}}", :enum, val, [{{#enumVars}}{{{value}}}{{^-last}}, {{/-last}}{{/enumVars}}])
end
{{/isEnum}}
{{/allowableValues}}{{/isEnum}}
{{^isEnum}}
{{#format}}
if name === Symbol("{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}")

View File

@@ -38,11 +38,11 @@ end
function OpenAPI.validate_property(::Type{ {{classname}} }, name::Symbol, val)
{{#allVars}}
{{#isEnum}}
{{#isEnum}}{{#allowableValues}}
if name === Symbol("{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}")
OpenAPI.validate_param(name, "{{classname}}", :enum, val, [{{#_enum}}{{#isString}}"{{.}}"{{/isString}}{{^isString}}{{.}}{{/isString}}{{^-last}}, {{/-last}}{{/_enum}}])
OpenAPI.validate_param(name, "{{classname}}", :enum, val, [{{#enumVars}}{{{value}}}{{^-last}}, {{/-last}}{{/enumVars}}])
end
{{/isEnum}}
{{/allowableValues}}{{/isEnum}}
{{^isEnum}}
{{#format}}
if name === Symbol("{{#lambda.escapeDollar}}{{baseName}}{{/lambda.escapeDollar}}")