diff --git a/modules/openapi-generator/src/main/resources/elixir/deserializer.ex.mustache b/modules/openapi-generator/src/main/resources/elixir/deserializer.ex.mustache index 2ea317b4dca..53a68dfde0f 100644 --- a/modules/openapi-generator/src/main/resources/elixir/deserializer.ex.mustache +++ b/modules/openapi-generator/src/main/resources/elixir/deserializer.ex.mustache @@ -91,8 +91,12 @@ defmodule {{moduleName}}.Deserializer do end end - defp to_struct(map_or_list, module) + defp to_struct(value, module) defp to_struct(nil, _), do: nil + + defp to_struct(binary, module) when is_binary(binary) and is_atom(module) do + module.decode(binary) + end defp to_struct(list, module) when is_list(list) and is_atom(module) do Enum.map(list, &to_struct(&1, module)) diff --git a/samples/client/petstore/elixir/lib/openapi_petstore/deserializer.ex b/samples/client/petstore/elixir/lib/openapi_petstore/deserializer.ex index 63ca878d1e9..01cb4bbdf5f 100644 --- a/samples/client/petstore/elixir/lib/openapi_petstore/deserializer.ex +++ b/samples/client/petstore/elixir/lib/openapi_petstore/deserializer.ex @@ -93,8 +93,12 @@ defmodule OpenapiPetstore.Deserializer do end end - defp to_struct(map_or_list, module) + defp to_struct(value, module) defp to_struct(nil, _), do: nil + + defp to_struct(binary, module) when is_binary(binary) and is_atom(module) do + module.decode(binary) + end defp to_struct(list, module) when is_list(list) and is_atom(module) do Enum.map(list, &to_struct(&1, module)) diff --git a/samples/client/petstore/elixir/test/outer_enum_test.exs b/samples/client/petstore/elixir/test/outer_enum_test.exs new file mode 100644 index 00000000000..5cb41e8fc59 --- /dev/null +++ b/samples/client/petstore/elixir/test/outer_enum_test.exs @@ -0,0 +1,23 @@ +defmodule OuterEnumTest do + use ExUnit.Case, async: true + + alias OpenapiPetstore.Deserializer + alias OpenapiPetstore.Model.EnumTest + + @valid_json """ + { + "enum_string": "UPPER", + "outerEnum": "placed" + } + """ + + @tag timeout: :infinity + test "jason_decode/2 with valid JSON" do + assert Deserializer.jason_decode(@valid_json, EnumTest) == + {:ok, + %EnumTest{ + enum_string: "UPPER", + outerEnum: "placed" + }} + end +end