Skip to content

Commit 3c09bd0

Browse files
committed
better handling of referenced enums
1 parent 0eca3c0 commit 3c09bd0

11 files changed

Lines changed: 19 additions & 153 deletions

File tree

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -972,7 +972,7 @@ public ExtendedCodegenModel(CodegenModel cm) {
972972
this.hasImports = !this.imports.isEmpty();
973973

974974
for (CodegenProperty var : this.vars) {
975-
if (var.isPrimitiveType || var.isMap) {
975+
if (var.isPrimitiveType || var.isMap || var.isEnum || var.isEnumRef) {
976976
this.ectoFields.add(var);
977977
if (var.required) {
978978
this.requiredEctoFields.add(var);
@@ -1042,6 +1042,7 @@ public ExtendedCodegenProperty(CodegenProperty cp) {
10421042
this.isArray = cp.isArray;
10431043
this.isMap = cp.isMap;
10441044
this.isEnum = cp.isEnum;
1045+
this.isEnumRef = cp.isEnumRef;
10451046
this.isReadOnly = cp.isReadOnly;
10461047
this.isWriteOnly = cp.isWriteOnly;
10471048
this.isNullable = cp.isNullable;
@@ -1056,11 +1057,9 @@ public ExtendedCodegenProperty(CodegenProperty cp) {
10561057

10571058
public String ectoType() {
10581059
String ectoType = ectoType(this);
1059-
10601060
if (":any".equals(ectoType)) {
10611061
return ectoType + ", virtual: true";
10621062
}
1063-
10641063
return ectoType;
10651064
}
10661065

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{{>licenseInfo}}
2-
{{#models}}{{#model}}defmodule {{moduleName}}.Model.{{classname}} do
2+
{{#models}}{{#model}}{{^isEnum}}defmodule {{moduleName}}.Model.{{classname}} do
33
@moduledoc """
44
{{&description}}
55
"""
@@ -18,7 +18,12 @@
1818
field {{#atom}}{{&baseName}}{{/atom}}, Ecto.Enum, values: [{{#allowableValues}}{{#values}}{{#atom}}{{.}}{{/atom}}{{^-last}}, {{/-last}}{{/values}}{{/allowableValues}}]
1919
{{/isEnum}}
2020
{{^isEnum}}
21+
{{#isEnumRef}}
22+
field {{#atom}}{{&baseName}}{{/atom}}, Ecto.Enum, values: [{{#allowableValues}}{{#values}}{{#atom}}{{.}}{{/atom}}{{^-last}}, {{/-last}}{{/values}}{{/allowableValues}}]
23+
{{/isEnumRef}}
24+
{{^isEnumRef}}
2125
field {{#atom}}{{&baseName}}{{/atom}}, {{{ectoType}}}
26+
{{/isEnumRef}}
2227
{{/isEnum}}
2328
{{/ectoFields}}
2429
{{#ectoEmbeds}}
@@ -36,4 +41,4 @@
3641
{{/ectoEmbeds}}
3742
end
3843
end
39-
{{/model}}{{/models}}
44+
{{/isEnum}}{{/model}}{{/models}}

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,14 @@ defmodule OpenapiPetstore.Model.AllOfWithSingleRef do
1616
@primary_key false
1717
embedded_schema do
1818
field :username, :string
19-
embeds_one :SingleRefType, OpenapiPetstore.Model.SingleRefType
19+
field :SingleRefType, Ecto.Enum, values: [:admin, :user]
2020
end
2121

2222
@spec changeset(t(), map()) :: Ecto.Changeset.t()
2323
def changeset(%__MODULE__{} = struct, params) do
2424
struct
25-
|> Ecto.Changeset.cast(params, [:username])
25+
|> Ecto.Changeset.cast(params, [:username, :SingleRefType])
2626
|> Ecto.Changeset.validate_required([])
27-
|> Ecto.Changeset.cast_embed(:SingleRefType)
2827
end
2928
end
3029

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,4 @@
11
# NOTE: This file is auto generated by OpenAPI Generator 7.14.0-SNAPSHOT (https://openapi-generator.tech).
22
# Do not edit this file manually.
33

4-
defmodule OpenapiPetstore.Model.EnumClass do
5-
@moduledoc """
6-
7-
"""
8-
use Ecto.Schema
9-
10-
@type t :: %__MODULE__{
11-
12-
}
13-
14-
@derive {JSON.Encoder, only: []}
15-
@primary_key false
16-
embedded_schema do
17-
end
18-
19-
@spec changeset(t(), map()) :: Ecto.Changeset.t()
20-
def changeset(%__MODULE__{} = struct, params) do
21-
struct
22-
|> Ecto.Changeset.cast(params, [])
23-
|> Ecto.Changeset.validate_required([])
24-
end
25-
end
264

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

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,21 +25,17 @@ defmodule OpenapiPetstore.Model.EnumTest do
2525
field :enum_string_required, Ecto.Enum, values: [:UPPER, :lower, :""]
2626
field :enum_integer, Ecto.Enum, values: [:"1", :"-1"]
2727
field :enum_number, Ecto.Enum, values: [:"1.1", :"-1.2"]
28-
embeds_one :outerEnum, OpenapiPetstore.Model.OuterEnum
29-
embeds_one :outerEnumInteger, OpenapiPetstore.Model.OuterEnumInteger
30-
embeds_one :outerEnumDefaultValue, OpenapiPetstore.Model.OuterEnumDefaultValue
31-
embeds_one :outerEnumIntegerDefaultValue, OpenapiPetstore.Model.OuterEnumIntegerDefaultValue
28+
field :outerEnum, Ecto.Enum, values: [:placed, :approved, :delivered]
29+
field :outerEnumInteger, Ecto.Enum, values: [:"0", :"1", :"2"]
30+
field :outerEnumDefaultValue, Ecto.Enum, values: [:placed, :approved, :delivered]
31+
field :outerEnumIntegerDefaultValue, Ecto.Enum, values: [:"0", :"1", :"2"]
3232
end
3333

3434
@spec changeset(t(), map()) :: Ecto.Changeset.t()
3535
def changeset(%__MODULE__{} = struct, params) do
3636
struct
37-
|> Ecto.Changeset.cast(params, [:enum_string, :enum_string_required, :enum_integer, :enum_number])
37+
|> Ecto.Changeset.cast(params, [:enum_string, :enum_string_required, :enum_integer, :enum_number, :outerEnum, :outerEnumInteger, :outerEnumDefaultValue, :outerEnumIntegerDefaultValue])
3838
|> Ecto.Changeset.validate_required([:enum_string_required])
39-
|> Ecto.Changeset.cast_embed(:outerEnum)
40-
|> Ecto.Changeset.cast_embed(:outerEnumInteger)
41-
|> Ecto.Changeset.cast_embed(:outerEnumDefaultValue)
42-
|> Ecto.Changeset.cast_embed(:outerEnumIntegerDefaultValue)
4339
end
4440
end
4541

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,4 @@
11
# NOTE: This file is auto generated by OpenAPI Generator 7.14.0-SNAPSHOT (https://openapi-generator.tech).
22
# Do not edit this file manually.
33

4-
defmodule OpenapiPetstore.Model.OuterEnum do
5-
@moduledoc """
6-
7-
"""
8-
use Ecto.Schema
9-
10-
@type t :: %__MODULE__{
11-
12-
}
13-
14-
@derive {JSON.Encoder, only: []}
15-
@primary_key false
16-
embedded_schema do
17-
end
18-
19-
@spec changeset(t(), map()) :: Ecto.Changeset.t()
20-
def changeset(%__MODULE__{} = struct, params) do
21-
struct
22-
|> Ecto.Changeset.cast(params, [])
23-
|> Ecto.Changeset.validate_required([])
24-
end
25-
end
264

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,4 @@
11
# NOTE: This file is auto generated by OpenAPI Generator 7.14.0-SNAPSHOT (https://openapi-generator.tech).
22
# Do not edit this file manually.
33

4-
defmodule OpenapiPetstore.Model.OuterEnumDefaultValue do
5-
@moduledoc """
6-
7-
"""
8-
use Ecto.Schema
9-
10-
@type t :: %__MODULE__{
11-
12-
}
13-
14-
@derive {JSON.Encoder, only: []}
15-
@primary_key false
16-
embedded_schema do
17-
end
18-
19-
@spec changeset(t(), map()) :: Ecto.Changeset.t()
20-
def changeset(%__MODULE__{} = struct, params) do
21-
struct
22-
|> Ecto.Changeset.cast(params, [])
23-
|> Ecto.Changeset.validate_required([])
24-
end
25-
end
264

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,4 @@
11
# NOTE: This file is auto generated by OpenAPI Generator 7.14.0-SNAPSHOT (https://openapi-generator.tech).
22
# Do not edit this file manually.
33

4-
defmodule OpenapiPetstore.Model.OuterEnumInteger do
5-
@moduledoc """
6-
7-
"""
8-
use Ecto.Schema
9-
10-
@type t :: %__MODULE__{
11-
12-
}
13-
14-
@derive {JSON.Encoder, only: []}
15-
@primary_key false
16-
embedded_schema do
17-
end
18-
19-
@spec changeset(t(), map()) :: Ecto.Changeset.t()
20-
def changeset(%__MODULE__{} = struct, params) do
21-
struct
22-
|> Ecto.Changeset.cast(params, [])
23-
|> Ecto.Changeset.validate_required([])
24-
end
25-
end
264

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,4 @@
11
# NOTE: This file is auto generated by OpenAPI Generator 7.14.0-SNAPSHOT (https://openapi-generator.tech).
22
# Do not edit this file manually.
33

4-
defmodule OpenapiPetstore.Model.OuterEnumIntegerDefaultValue do
5-
@moduledoc """
6-
7-
"""
8-
use Ecto.Schema
9-
10-
@type t :: %__MODULE__{
11-
12-
}
13-
14-
@derive {JSON.Encoder, only: []}
15-
@primary_key false
16-
embedded_schema do
17-
end
18-
19-
@spec changeset(t(), map()) :: Ecto.Changeset.t()
20-
def changeset(%__MODULE__{} = struct, params) do
21-
struct
22-
|> Ecto.Changeset.cast(params, [])
23-
|> Ecto.Changeset.validate_required([])
24-
end
25-
end
264

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,14 @@ defmodule OpenapiPetstore.Model.OuterObjectWithEnumProperty do
1414
@derive {JSON.Encoder, only: [:value]}
1515
@primary_key false
1616
embedded_schema do
17-
embeds_one :value, OpenapiPetstore.Model.OuterEnumInteger
17+
field :value, Ecto.Enum, values: [:"0", :"1", :"2"]
1818
end
1919

2020
@spec changeset(t(), map()) :: Ecto.Changeset.t()
2121
def changeset(%__MODULE__{} = struct, params) do
2222
struct
23-
|> Ecto.Changeset.cast(params, [])
24-
|> Ecto.Changeset.validate_required([])
25-
|> Ecto.Changeset.cast_embed(:value, required: true)
23+
|> Ecto.Changeset.cast(params, [:value])
24+
|> Ecto.Changeset.validate_required([:value])
2625
end
2726
end
2827

0 commit comments

Comments
 (0)