Skip to content

Commit 19af19e

Browse files
committed
decode list of objects
1 parent 3b9ff53 commit 19af19e

3 files changed

Lines changed: 32 additions & 22 deletions

File tree

modules/openapi-generator/src/main/resources/elixir/request_builder.ex.mustache

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -192,13 +192,16 @@ defmodule {{moduleName}}.RequestBuilder do
192192

193193
defp decode(%Tesla.Env{body: body}, module) do
194194
case JSON.decode(body) do
195-
{:ok, params} ->
196-
module
197-
|> struct
198-
|> module.changeset(params)
199-
|> Ecto.Changeset.apply_action(:insert)
200-
{:error, error} ->
201-
{:error, error}
195+
{:ok, objects} when is_list(objects) -> Enum.map(objects, &(to_model(module, &1)))
196+
{:ok, params} -> to_model(module, params)
197+
{:error, error} -> {:error, error}
202198
end
203199
end
200+
201+
defp to_model(module, params) do
202+
module
203+
|> struct
204+
|> module.changeset(params)
205+
|> Ecto.Changeset.apply_action(:insert)
206+
end
204207
end

samples/client/petstore/elixir/lib/openapi_petstore/request_builder.ex

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -194,13 +194,16 @@ defmodule OpenapiPetstore.RequestBuilder do
194194

195195
defp decode(%Tesla.Env{body: body}, module) do
196196
case JSON.decode(body) do
197-
{:ok, params} ->
198-
module
199-
|> struct
200-
|> module.changeset(params)
201-
|> Ecto.Changeset.apply_action(:insert)
202-
{:error, error} ->
203-
{:error, error}
197+
{:ok, objects} when is_list(objects) -> Enum.map(objects, &(to_model(module, &1)))
198+
{:ok, params} -> to_model(module, params)
199+
{:error, error} -> {:error, error}
204200
end
205201
end
202+
203+
defp to_model(module, params) do
204+
module
205+
|> struct
206+
|> module.changeset(params)
207+
|> Ecto.Changeset.apply_action(:insert)
208+
end
206209
end

samples/client/petstore/elixir/test/outer_enum_test.exs

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,17 @@ defmodule OuterEnumTest do
1515

1616
@tag timeout: :infinity
1717
test "json_decode/2 with valid JSON" do
18-
assert Deserializer.json_decode(@valid_json, EnumTest) ==
19-
{:ok,
20-
%EnumTest{
21-
enum_string: "UPPER",
22-
enum_number: 1.1,
23-
outerEnum: "placed",
24-
outerEnumInteger: 1
25-
}}
18+
enum_test =
19+
JSON.decode!(@valid_json)
20+
|> then(fn params -> EnumTest.changeset(%EnumTest{}, params) end)
21+
|> Ecto.Changeset.apply_action!(:insert)
22+
23+
assert enum_test ==
24+
%EnumTest{
25+
enum_string: "UPPER",
26+
enum_number: 1.1,
27+
outerEnum: "placed",
28+
outerEnumInteger: 1
29+
}
2630
end
2731
end

0 commit comments

Comments
 (0)