Skip to content

Commit 5b3258a

Browse files
committed
better handling of referenced enums
1 parent 9ec9bf4 commit 5b3258a

5 files changed

Lines changed: 32 additions & 7 deletions

File tree

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ElixirClientCodegen.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -979,6 +979,8 @@ public ExtendedCodegenModel(CodegenModel cm) {
979979
}
980980

981981
class ExtendedCodegenProperty extends CodegenProperty {
982+
public String enumBaseType;
983+
982984
public ExtendedCodegenProperty(CodegenProperty cp) {
983985
super();
984986

@@ -1047,6 +1049,29 @@ public ExtendedCodegenProperty(CodegenProperty cp) {
10471049
this.vars = cp.vars;
10481050
this.requiredVars = cp.requiredVars;
10491051
this.vendorExtensions = cp.vendorExtensions;
1052+
1053+
// For enum references, determine the base type from the enum values
1054+
if (cp.isEnumRef && cp.allowableValues != null && cp.allowableValues.get("values") != null) {
1055+
List<Object> values = (List<Object>) cp.allowableValues.get("values");
1056+
if (!values.isEmpty()) {
1057+
Object firstValue = values.get(0);
1058+
if (firstValue instanceof String) {
1059+
this.enumBaseType = "String.t";
1060+
} else if (firstValue instanceof Integer || firstValue instanceof Long) {
1061+
this.enumBaseType = "integer()";
1062+
} else if (firstValue instanceof Float || firstValue instanceof Double) {
1063+
this.enumBaseType = "float()";
1064+
} else if (firstValue instanceof Boolean) {
1065+
this.enumBaseType = "boolean()";
1066+
} else {
1067+
// Default to string for unknown types
1068+
this.enumBaseType = "String.t";
1069+
}
1070+
} else {
1071+
// No values, default to string
1072+
this.enumBaseType = "String.t";
1073+
}
1074+
}
10501075
}
10511076

10521077
public String ectoType() {

modules/openapi-generator/src/main/resources/elixir/model.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
use Ecto.Schema
77

88
@type t :: %__MODULE__{
9-
{{#vars}}{{#atom}}{{&baseName}}{{/atom}} => {{{datatype}}}{{#isNullable}} | nil{{/isNullable}}{{^isNullable}}{{^required}} | nil{{/required}}{{/isNullable}}{{^-last}},
9+
{{#vars}}{{#atom}}{{&baseName}}{{/atom}} => {{#isEnumRef}}{{{enumBaseType}}}{{/isEnumRef}}{{^isEnumRef}}{{{datatype}}}{{/isEnumRef}}{{#isNullable}} | nil{{/isNullable}}{{^isNullable}}{{^required}} | nil{{/required}}{{/isNullable}}{{^-last}},
1010
{{/-last}}{{/vars}}
1111
}
1212

samples/client/petstore/elixir/lib/openapi_petstore/model/all_of_with_single_ref.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ defmodule OpenapiPetstore.Model.AllOfWithSingleRef do
99

1010
@type t :: %__MODULE__{
1111
:username => String.t | nil,
12-
:SingleRefType => OpenapiPetstore.Model.SingleRefType.t | nil
12+
:SingleRefType => String.t | nil
1313
}
1414

1515
@derive {JSON.Encoder, only: [:username, :SingleRefType]}

samples/client/petstore/elixir/lib/openapi_petstore/model/enum_test.ex

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@ defmodule OpenapiPetstore.Model.EnumTest do
1212
:enum_string_required => String.t,
1313
:enum_integer => integer() | nil,
1414
:enum_number => float() | nil,
15-
:outerEnum => OpenapiPetstore.Model.OuterEnum.t | nil,
16-
:outerEnumInteger => OpenapiPetstore.Model.OuterEnumInteger.t | nil,
17-
:outerEnumDefaultValue => OpenapiPetstore.Model.OuterEnumDefaultValue.t | nil,
18-
:outerEnumIntegerDefaultValue => OpenapiPetstore.Model.OuterEnumIntegerDefaultValue.t | nil
15+
:outerEnum => String.t | nil,
16+
:outerEnumInteger => integer() | nil,
17+
:outerEnumDefaultValue => String.t | nil,
18+
:outerEnumIntegerDefaultValue => integer() | nil
1919
}
2020

2121
@derive {JSON.Encoder, only: [:enum_string, :enum_string_required, :enum_integer, :enum_number, :outerEnum, :outerEnumInteger, :outerEnumDefaultValue, :outerEnumIntegerDefaultValue]}

samples/client/petstore/elixir/lib/openapi_petstore/model/outer_object_with_enum_property.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ defmodule OpenapiPetstore.Model.OuterObjectWithEnumProperty do
88
use Ecto.Schema
99

1010
@type t :: %__MODULE__{
11-
:value => OpenapiPetstore.Model.OuterEnumInteger.t
11+
:value => integer()
1212
}
1313

1414
@derive {JSON.Encoder, only: [:value]}

0 commit comments

Comments
 (0)