Skip to content

Commit 30a8284

Browse files
committed
better handling of referenced enums
1 parent 3c09bd0 commit 30a8284

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
@@ -985,6 +985,8 @@ public ExtendedCodegenModel(CodegenModel cm) {
985985
}
986986

987987
class ExtendedCodegenProperty extends CodegenProperty {
988+
public String enumBaseType;
989+
988990
public ExtendedCodegenProperty(CodegenProperty cp) {
989991
super();
990992

@@ -1053,6 +1055,29 @@ public ExtendedCodegenProperty(CodegenProperty cp) {
10531055
this.vars = cp.vars;
10541056
this.requiredVars = cp.requiredVars;
10551057
this.vendorExtensions = cp.vendorExtensions;
1058+
1059+
// For enum references, determine the base type from the enum values
1060+
if (cp.isEnumRef && cp.allowableValues != null && cp.allowableValues.get("values") != null) {
1061+
List<Object> values = (List<Object>) cp.allowableValues.get("values");
1062+
if (!values.isEmpty()) {
1063+
Object firstValue = values.get(0);
1064+
if (firstValue instanceof String) {
1065+
this.enumBaseType = "String.t";
1066+
} else if (firstValue instanceof Integer || firstValue instanceof Long) {
1067+
this.enumBaseType = "integer()";
1068+
} else if (firstValue instanceof Float || firstValue instanceof Double) {
1069+
this.enumBaseType = "float()";
1070+
} else if (firstValue instanceof Boolean) {
1071+
this.enumBaseType = "boolean()";
1072+
} else {
1073+
// Default to string for unknown types
1074+
this.enumBaseType = "String.t";
1075+
}
1076+
} else {
1077+
// No values, default to string
1078+
this.enumBaseType = "String.t";
1079+
}
1080+
}
10561081
}
10571082

10581083
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)