diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ElixirClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ElixirClientCodegen.java index 72ffa1b93177..757a0d23f9b4 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ElixirClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ElixirClientCodegen.java @@ -727,34 +727,45 @@ public class ElixirClientCodegen extends DefaultCodegen implements CodegenConfig } } - sb.append("keyword()) :: {:ok, "); - if (returnBaseType == null) { - sb.append("nil"); - } else if (returnSimpleType) { - if (!returnTypeIsPrimitive) { - sb.append(moduleName); - sb.append(".Model."); - } - sb.append(returnBaseType); - sb.append(".t"); - } else if (returnContainer == null) { - sb.append(returnBaseType); - sb.append(".t"); - } else { - if (returnContainer.equals("array") || - returnContainer.equals("set")) { - sb.append("list("); - if (!returnTypeIsPrimitive) { - sb.append(moduleName); - sb.append(".Model."); + sb.append("keyword()) :: "); + HashSet uniqueResponseTypes = new HashSet(); + for (CodegenResponse response : this.responses) { + ExtendedCodegenResponse exResponse = (ExtendedCodegenResponse) response; + StringBuilder returnEntry = new StringBuilder(""); + if (exResponse.baseType == null) { + returnEntry.append("nil"); + } else if (exResponse.simpleType) { + if (!exResponse.primitiveType) { + returnEntry.append(moduleName); + returnEntry.append(".Model."); + } + returnEntry.append(exResponse.baseType); + returnEntry.append(".t"); + } else if (exResponse.containerType == null) { + returnEntry.append(returnBaseType); + returnEntry.append(".t"); + } else { + if (exResponse.containerType.equals("array") || + exResponse.containerType.equals("set")) { + returnEntry.append("list("); + if (!exResponse.primitiveType) { + returnEntry.append(moduleName); + returnEntry.append(".Model."); + } + returnEntry.append(exResponse.baseType); + returnEntry.append(".t)"); + } else if (exResponse.containerType.equals("map")) { + returnEntry.append("map()"); } - sb.append(returnBaseType); - sb.append(".t)"); - } else if (returnContainer.equals("map")) { - sb.append("map()"); } + uniqueResponseTypes.add(returnEntry.toString()); } - sb.append("} | {:error, Tesla.Env.t}"); + + for (String returnType : uniqueResponseTypes) { + sb.append("{:ok, ").append(returnType).append("} | "); + } + + sb.append("{:error, Tesla.Env.t}"); return sb.toString(); } diff --git a/samples/client/petstore/elixir/lib/openapi_petstore/api/pet.ex b/samples/client/petstore/elixir/lib/openapi_petstore/api/pet.ex index 85c04b4d4030..561f7af6f386 100644 --- a/samples/client/petstore/elixir/lib/openapi_petstore/api/pet.ex +++ b/samples/client/petstore/elixir/lib/openapi_petstore/api/pet.ex @@ -83,7 +83,7 @@ defmodule OpenapiPetstore.Api.Pet do {:ok, [%Pet{}, ...]} on success {:error, info} on failure """ - @spec find_pets_by_status(Tesla.Env.client, list(String.t), keyword()) :: {:ok, list(OpenapiPetstore.Model.Pet.t)} | {:error, Tesla.Env.t} + @spec find_pets_by_status(Tesla.Env.client, list(String.t), keyword()) :: {:ok, nil} | {:ok, list(OpenapiPetstore.Model.Pet.t)} | {:error, Tesla.Env.t} def find_pets_by_status(connection, status, _opts \\ []) do %{} |> method(:get) @@ -111,7 +111,7 @@ defmodule OpenapiPetstore.Api.Pet do {:ok, [%Pet{}, ...]} on success {:error, info} on failure """ - @spec find_pets_by_tags(Tesla.Env.client, list(String.t), keyword()) :: {:ok, list(OpenapiPetstore.Model.Pet.t)} | {:error, Tesla.Env.t} + @spec find_pets_by_tags(Tesla.Env.client, list(String.t), keyword()) :: {:ok, nil} | {:ok, list(OpenapiPetstore.Model.Pet.t)} | {:error, Tesla.Env.t} def find_pets_by_tags(connection, tags, _opts \\ []) do %{} |> method(:get) @@ -139,7 +139,7 @@ defmodule OpenapiPetstore.Api.Pet do {:ok, %OpenapiPetstore.Model.Pet{}} on success {:error, info} on failure """ - @spec get_pet_by_id(Tesla.Env.client, integer(), keyword()) :: {:ok, OpenapiPetstore.Model.Pet.t} | {:error, Tesla.Env.t} + @spec get_pet_by_id(Tesla.Env.client, integer(), keyword()) :: {:ok, nil} | {:ok, OpenapiPetstore.Model.Pet.t} | {:error, Tesla.Env.t} def get_pet_by_id(connection, pet_id, _opts \\ []) do %{} |> method(:get) diff --git a/samples/client/petstore/elixir/lib/openapi_petstore/api/store.ex b/samples/client/petstore/elixir/lib/openapi_petstore/api/store.ex index a42a976114fc..a64c4bfe72ae 100644 --- a/samples/client/petstore/elixir/lib/openapi_petstore/api/store.ex +++ b/samples/client/petstore/elixir/lib/openapi_petstore/api/store.ex @@ -77,7 +77,7 @@ defmodule OpenapiPetstore.Api.Store do {:ok, %OpenapiPetstore.Model.Order{}} on success {:error, info} on failure """ - @spec get_order_by_id(Tesla.Env.client, integer(), keyword()) :: {:ok, OpenapiPetstore.Model.Order.t} | {:error, Tesla.Env.t} + @spec get_order_by_id(Tesla.Env.client, integer(), keyword()) :: {:ok, nil} | {:ok, OpenapiPetstore.Model.Order.t} | {:error, Tesla.Env.t} def get_order_by_id(connection, order_id, _opts \\ []) do %{} |> method(:get) @@ -104,7 +104,7 @@ defmodule OpenapiPetstore.Api.Store do {:ok, %OpenapiPetstore.Model.Order{}} on success {:error, info} on failure """ - @spec place_order(Tesla.Env.client, OpenapiPetstore.Model.Order.t, keyword()) :: {:ok, OpenapiPetstore.Model.Order.t} | {:error, Tesla.Env.t} + @spec place_order(Tesla.Env.client, OpenapiPetstore.Model.Order.t, keyword()) :: {:ok, nil} | {:ok, OpenapiPetstore.Model.Order.t} | {:error, Tesla.Env.t} def place_order(connection, body, _opts \\ []) do %{} |> method(:post) diff --git a/samples/client/petstore/elixir/lib/openapi_petstore/api/user.ex b/samples/client/petstore/elixir/lib/openapi_petstore/api/user.ex index 23378e5dd39f..a2acacce0ae0 100644 --- a/samples/client/petstore/elixir/lib/openapi_petstore/api/user.ex +++ b/samples/client/petstore/elixir/lib/openapi_petstore/api/user.ex @@ -130,7 +130,7 @@ defmodule OpenapiPetstore.Api.User do {:ok, %OpenapiPetstore.Model.User{}} on success {:error, info} on failure """ - @spec get_user_by_name(Tesla.Env.client, String.t, keyword()) :: {:ok, OpenapiPetstore.Model.User.t} | {:error, Tesla.Env.t} + @spec get_user_by_name(Tesla.Env.client, String.t, keyword()) :: {:ok, nil} | {:ok, OpenapiPetstore.Model.User.t} | {:error, Tesla.Env.t} def get_user_by_name(connection, username, _opts \\ []) do %{} |> method(:get) @@ -158,7 +158,7 @@ defmodule OpenapiPetstore.Api.User do {:ok, %OpenapiPetstore.Model.String.t{}} on success {:error, info} on failure """ - @spec login_user(Tesla.Env.client, String.t, String.t, keyword()) :: {:ok, String.t} | {:error, Tesla.Env.t} + @spec login_user(Tesla.Env.client, String.t, String.t, keyword()) :: {:ok, nil} | {:ok, String.t} | {:error, Tesla.Env.t} def login_user(connection, username, password, _opts \\ []) do %{} |> method(:get)