From 65d9c1326cc9d19a2135d8edafca33f478a7ff7a Mon Sep 17 00:00:00 2001 From: Ale Figueroa Date: Thu, 7 Mar 2019 18:00:47 -0600 Subject: [PATCH 1/9] Update Tesla dependency and replace Poison with Jason --- .../openapitools/codegen/languages/ElixirClientCodegen.java | 4 ++-- samples/client/petstore/elixir/mix.exs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) 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 21ad9e70b144..9544dacc082f 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 @@ -52,8 +52,8 @@ public class ElixirClientCodegen extends DefaultCodegen implements CodegenConfig String supportedElixirVersion = "1.4"; List extraApplications = Arrays.asList(":logger"); List deps = Arrays.asList( - "{:tesla, \"~> 0.8\"}", - "{:poison, \">= 1.0.0\"}" + "{:tesla, \"~> 1.0.0\"}", + "{:jason, \">= 1.1\"}" ); public ElixirClientCodegen() { diff --git a/samples/client/petstore/elixir/mix.exs b/samples/client/petstore/elixir/mix.exs index 469ffcee7827..2db49104a756 100644 --- a/samples/client/petstore/elixir/mix.exs +++ b/samples/client/petstore/elixir/mix.exs @@ -29,8 +29,8 @@ defmodule OpenapiPetstore.Mixfile do # Type "mix help deps" for more examples and options defp deps do [ - {:tesla, "~> 0.8"}, - {:poison, ">= 1.0.0"} + {:tesla, "~> 1.0.0"}, + {:jason, ">= 1.1"} ] end end From aa1de1bbe9ce9e19f46f18ee5c556e287fdbce0b Mon Sep 17 00:00:00 2001 From: Ale Figueroa Date: Thu, 7 Mar 2019 18:01:40 -0600 Subject: [PATCH 2/9] Use new Tesla method to set headers --- .../src/main/resources/elixir/request_builder.ex.mustache | 2 +- .../petstore/elixir/lib/openapi_petstore/request_builder.ex | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/elixir/request_builder.ex.mustache b/modules/openapi-generator/src/main/resources/elixir/request_builder.ex.mustache index 10afaba4ce58..d279935e35c7 100644 --- a/modules/openapi-generator/src/main/resources/elixir/request_builder.ex.mustache +++ b/modules/openapi-generator/src/main/resources/elixir/request_builder.ex.mustache @@ -87,7 +87,7 @@ defmodule {{moduleName}}.RequestBuilder do end def add_param(request, :headers, key, value) do request - |> Map.update(:headers, %{key => value}, &(Map.put(&1, key, value))) + |> Tesla.put_header(key, value) end def add_param(request, :file, name, path) do request diff --git a/samples/client/petstore/elixir/lib/openapi_petstore/request_builder.ex b/samples/client/petstore/elixir/lib/openapi_petstore/request_builder.ex index e81e72d1cf32..28cc87aed2c9 100644 --- a/samples/client/petstore/elixir/lib/openapi_petstore/request_builder.ex +++ b/samples/client/petstore/elixir/lib/openapi_petstore/request_builder.ex @@ -90,7 +90,7 @@ defmodule OpenapiPetstore.RequestBuilder do end def add_param(request, :headers, key, value) do request - |> Map.update(:headers, %{key => value}, &(Map.put(&1, key, value))) + |> Tesla.put_header(key, value) end def add_param(request, :file, name, path) do request From 32d96582872cfb1149a06be580b8023c17148258 Mon Sep 17 00:00:00 2001 From: Ale Figueroa Date: Thu, 7 Mar 2019 19:03:27 -0600 Subject: [PATCH 3/9] Fix jason dependency definition --- .../org/openapitools/codegen/languages/ElixirClientCodegen.java | 2 +- samples/client/petstore/elixir/mix.exs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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 9544dacc082f..0ed1d29f46f7 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 @@ -53,7 +53,7 @@ public class ElixirClientCodegen extends DefaultCodegen implements CodegenConfig List extraApplications = Arrays.asList(":logger"); List deps = Arrays.asList( "{:tesla, \"~> 1.0.0\"}", - "{:jason, \">= 1.1\"}" + "{:jason, \">= 1.0.0\"}" ); public ElixirClientCodegen() { diff --git a/samples/client/petstore/elixir/mix.exs b/samples/client/petstore/elixir/mix.exs index 2db49104a756..b4f87713b240 100644 --- a/samples/client/petstore/elixir/mix.exs +++ b/samples/client/petstore/elixir/mix.exs @@ -30,7 +30,7 @@ defmodule OpenapiPetstore.Mixfile do defp deps do [ {:tesla, "~> 1.0.0"}, - {:jason, ">= 1.1"} + {:jason, ">= 1.0.0"} ] end end From a594991c835ed33cb5e5af8ecec3770c4ef36261 Mon Sep 17 00:00:00 2001 From: Ale Figueroa Date: Thu, 7 Mar 2019 19:32:50 -0600 Subject: [PATCH 4/9] Use list for Headers instead of a map --- .../src/main/resources/elixir/connection.ex.mustache | 4 ++-- .../client/petstore/elixir/lib/openapi_petstore/connection.ex | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/elixir/connection.ex.mustache b/modules/openapi-generator/src/main/resources/elixir/connection.ex.mustache index 052a9d357e47..f02444ec96cc 100644 --- a/modules/openapi-generator/src/main/resources/elixir/connection.ex.mustache +++ b/modules/openapi-generator/src/main/resources/elixir/connection.ex.mustache @@ -8,7 +8,7 @@ defmodule {{moduleName}}.Connection do # Add any middleware here (authentication) plug Tesla.Middleware.BaseUrl, "{{{basePath}}}" - plug Tesla.Middleware.Headers, %{"User-Agent" => "Elixir"} + plug Tesla.Middleware.Headers, [{"user-agent", "Elixir"}] plug Tesla.Middleware.EncodeJson {{#hasAuthMethods}} @@ -34,7 +34,7 @@ defmodule {{moduleName}}.Connection do @spec new(String.t) :: Tesla.Env.client def new(token) when is_binary(token) do Tesla.build_client([ - {Tesla.Middleware.Headers, %{"Authorization" => "Bearer #{token}"}} + {Tesla.Middleware.Headers, [{"authorization", "Bearer #{token}"}]} ]) end diff --git a/samples/client/petstore/elixir/lib/openapi_petstore/connection.ex b/samples/client/petstore/elixir/lib/openapi_petstore/connection.ex index 834cc003d108..4d57652cb754 100644 --- a/samples/client/petstore/elixir/lib/openapi_petstore/connection.ex +++ b/samples/client/petstore/elixir/lib/openapi_petstore/connection.ex @@ -11,7 +11,7 @@ defmodule OpenapiPetstore.Connection do # Add any middleware here (authentication) plug Tesla.Middleware.BaseUrl, "http://petstore.swagger.io:80/v2" - plug Tesla.Middleware.Headers, %{"User-Agent" => "Elixir"} + plug Tesla.Middleware.Headers, [{"user-agent", "Elixir"}] plug Tesla.Middleware.EncodeJson @doc """ @@ -51,7 +51,7 @@ defmodule OpenapiPetstore.Connection do @spec new(String.t) :: Tesla.Env.client def new(token) when is_binary(token) do Tesla.build_client([ - {Tesla.Middleware.Headers, %{"Authorization" => "Bearer #{token}"}} + {Tesla.Middleware.Headers, [{"authorization", "Bearer #{token}"}]} ]) end From 95d8d5cbe1a25d05b0f0bf4d9ba498b4f86fcaac Mon Sep 17 00:00:00 2001 From: Ale Figueroa Date: Thu, 7 Mar 2019 22:02:27 -0600 Subject: [PATCH 5/9] Rollback to Poison because Jason does not support 'as:' option to decode to arbitrary struct --- .../org/openapitools/codegen/languages/ElixirClientCodegen.java | 2 +- .../src/main/resources/elixir/connection.ex.mustache | 2 +- .../client/petstore/elixir/lib/openapi_petstore/connection.ex | 2 +- samples/client/petstore/elixir/mix.exs | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) 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 0ed1d29f46f7..dc850506eb68 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 @@ -53,7 +53,7 @@ public class ElixirClientCodegen extends DefaultCodegen implements CodegenConfig List extraApplications = Arrays.asList(":logger"); List deps = Arrays.asList( "{:tesla, \"~> 1.0.0\"}", - "{:jason, \">= 1.0.0\"}" + "{:poison, \">= 1.0.0\"}" ); public ElixirClientCodegen() { diff --git a/modules/openapi-generator/src/main/resources/elixir/connection.ex.mustache b/modules/openapi-generator/src/main/resources/elixir/connection.ex.mustache index f02444ec96cc..82cfd90f48c9 100644 --- a/modules/openapi-generator/src/main/resources/elixir/connection.ex.mustache +++ b/modules/openapi-generator/src/main/resources/elixir/connection.ex.mustache @@ -9,7 +9,7 @@ defmodule {{moduleName}}.Connection do # Add any middleware here (authentication) plug Tesla.Middleware.BaseUrl, "{{{basePath}}}" plug Tesla.Middleware.Headers, [{"user-agent", "Elixir"}] - plug Tesla.Middleware.EncodeJson + plug Tesla.Middleware.EncodeJson, engine: Poison {{#hasAuthMethods}} {{#authMethods}} diff --git a/samples/client/petstore/elixir/lib/openapi_petstore/connection.ex b/samples/client/petstore/elixir/lib/openapi_petstore/connection.ex index 4d57652cb754..c44015b7f806 100644 --- a/samples/client/petstore/elixir/lib/openapi_petstore/connection.ex +++ b/samples/client/petstore/elixir/lib/openapi_petstore/connection.ex @@ -12,7 +12,7 @@ defmodule OpenapiPetstore.Connection do # Add any middleware here (authentication) plug Tesla.Middleware.BaseUrl, "http://petstore.swagger.io:80/v2" plug Tesla.Middleware.Headers, [{"user-agent", "Elixir"}] - plug Tesla.Middleware.EncodeJson + plug Tesla.Middleware.EncodeJson, engine: Poison @doc """ Configure a client connection using Basic authentication. diff --git a/samples/client/petstore/elixir/mix.exs b/samples/client/petstore/elixir/mix.exs index b4f87713b240..74d94a93948c 100644 --- a/samples/client/petstore/elixir/mix.exs +++ b/samples/client/petstore/elixir/mix.exs @@ -30,7 +30,7 @@ defmodule OpenapiPetstore.Mixfile do defp deps do [ {:tesla, "~> 1.0.0"}, - {:jason, ">= 1.0.0"} + {:poison, ">= 1.0.0"} ] end end From 159043bc9a0ef5372acc8b5e503fcd1545a7ff1a Mon Sep 17 00:00:00 2001 From: Ale Figueroa Date: Fri, 8 Mar 2019 01:24:50 -0600 Subject: [PATCH 6/9] Use new return signature from Tesla 1.0 in decode function --- .../resources/elixir/request_builder.ex.mustache | 13 +++++++------ .../elixir/lib/openapi_petstore/request_builder.ex | 13 +++++++------ 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/elixir/request_builder.ex.mustache b/modules/openapi-generator/src/main/resources/elixir/request_builder.ex.mustache index d279935e35c7..85cba7143e1f 100644 --- a/modules/openapi-generator/src/main/resources/elixir/request_builder.ex.mustache +++ b/modules/openapi-generator/src/main/resources/elixir/request_builder.ex.mustache @@ -107,7 +107,7 @@ defmodule {{moduleName}}.RequestBuilder do ## Parameters - - arg1 (Tesla.Env.t | term) - The response object + - arg1 ({:ok, Tesla.Env.t} | term) - The response object - arg2 (:false | struct | [struct]) - The shape of the struct to deserialize into ## Returns @@ -115,12 +115,13 @@ defmodule {{moduleName}}.RequestBuilder do {:ok, struct} on success {:error, term} on failure """ - @spec decode(Tesla.Env.t | term()) :: {:ok, struct()} | {:error, Tesla.Env.t} | {:error, term()} - def decode(%Tesla.Env{status: 200, body: body}), do: Poison.decode(body) + @spec decode({:ok, Tesla.Env.t} | term()) :: {:ok, struct()} | {:error, Tesla.Env.t} | {:error, term()} + def decode({:ok, %Tesla.Env{status: 200, body: body}}), do: Poison.decode(body) def decode(response), do: {:error, response} - @spec decode(Tesla.Env.t | term(), :false | struct() | [struct()]) :: {:ok, struct()} | {:error, Tesla.Env.t} | {:error, term()} - def decode(%Tesla.Env{status: 200} = env, false), do: {:ok, env} - def decode(%Tesla.Env{status: 200, body: body}, struct), do: Poison.decode(body, as: struct) + @spec decode({:ok, Tesla.Env.t} | term(), :false | struct() | [struct()]) :: {:ok, struct()} | {:error, Tesla.Env.t} | {:error, term()} + def decode({:ok, %Tesla.Env{status: 200}} = env, false), do: {:ok, env} + def decode({:ok, %Tesla.Env{status: 200, body: body}}, struct), do: Poison.decode(body, as: struct) + def decode({:error, _} = error), do: error def decode(response, _struct), do: {:error, response} end diff --git a/samples/client/petstore/elixir/lib/openapi_petstore/request_builder.ex b/samples/client/petstore/elixir/lib/openapi_petstore/request_builder.ex index 28cc87aed2c9..aab5569622eb 100644 --- a/samples/client/petstore/elixir/lib/openapi_petstore/request_builder.ex +++ b/samples/client/petstore/elixir/lib/openapi_petstore/request_builder.ex @@ -110,7 +110,7 @@ defmodule OpenapiPetstore.RequestBuilder do ## Parameters - - arg1 (Tesla.Env.t | term) - The response object + - arg1 ({:ok, Tesla.Env.t} | term) - The response object - arg2 (:false | struct | [struct]) - The shape of the struct to deserialize into ## Returns @@ -118,12 +118,13 @@ defmodule OpenapiPetstore.RequestBuilder do {:ok, struct} on success {:error, term} on failure """ - @spec decode(Tesla.Env.t | term()) :: {:ok, struct()} | {:error, Tesla.Env.t} | {:error, term()} - def decode(%Tesla.Env{status: 200, body: body}), do: Poison.decode(body) + @spec decode({:ok, Tesla.Env.t} | term()) :: {:ok, struct()} | {:error, Tesla.Env.t} | {:error, term()} + def decode({:ok, %Tesla.Env{status: 200, body: body}}), do: Poison.decode(body) def decode(response), do: {:error, response} - @spec decode(Tesla.Env.t | term(), :false | struct() | [struct()]) :: {:ok, struct()} | {:error, Tesla.Env.t} | {:error, term()} - def decode(%Tesla.Env{status: 200} = env, false), do: {:ok, env} - def decode(%Tesla.Env{status: 200, body: body}, struct), do: Poison.decode(body, as: struct) + @spec decode({:ok, Tesla.Env.t} | term(), :false | struct() | [struct()]) :: {:ok, struct()} | {:error, Tesla.Env.t} | {:error, term()} + def decode({:ok, %Tesla.Env{status: 200}} = env, false), do: {:ok, env} + def decode({:ok, %Tesla.Env{status: 200, body: body}}, struct), do: Poison.decode(body, as: struct) + def decode({:error, _} = error), do: error def decode(response, _struct), do: {:error, response} end From 73ac86069c710451a72c67dfd0242392942aef82 Mon Sep 17 00:00:00 2001 From: Ale Figueroa Date: Fri, 8 Mar 2019 01:31:54 -0600 Subject: [PATCH 7/9] catch error when a struct is given as second parameter to RequestBuilder.decode --- .../src/main/resources/elixir/request_builder.ex.mustache | 3 ++- .../petstore/elixir/lib/openapi_petstore/request_builder.ex | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/elixir/request_builder.ex.mustache b/modules/openapi-generator/src/main/resources/elixir/request_builder.ex.mustache index 85cba7143e1f..499942577ce7 100644 --- a/modules/openapi-generator/src/main/resources/elixir/request_builder.ex.mustache +++ b/modules/openapi-generator/src/main/resources/elixir/request_builder.ex.mustache @@ -118,10 +118,11 @@ defmodule {{moduleName}}.RequestBuilder do @spec decode({:ok, Tesla.Env.t} | term()) :: {:ok, struct()} | {:error, Tesla.Env.t} | {:error, term()} def decode({:ok, %Tesla.Env{status: 200, body: body}}), do: Poison.decode(body) def decode(response), do: {:error, response} + def decode({:error, _} = error), do: error @spec decode({:ok, Tesla.Env.t} | term(), :false | struct() | [struct()]) :: {:ok, struct()} | {:error, Tesla.Env.t} | {:error, term()} def decode({:ok, %Tesla.Env{status: 200}} = env, false), do: {:ok, env} def decode({:ok, %Tesla.Env{status: 200, body: body}}, struct), do: Poison.decode(body, as: struct) - def decode({:error, _} = error), do: error + def decode({:error, _} = error, _struct), do: error def decode(response, _struct), do: {:error, response} end diff --git a/samples/client/petstore/elixir/lib/openapi_petstore/request_builder.ex b/samples/client/petstore/elixir/lib/openapi_petstore/request_builder.ex index aab5569622eb..6d963fe445d0 100644 --- a/samples/client/petstore/elixir/lib/openapi_petstore/request_builder.ex +++ b/samples/client/petstore/elixir/lib/openapi_petstore/request_builder.ex @@ -121,10 +121,11 @@ defmodule OpenapiPetstore.RequestBuilder do @spec decode({:ok, Tesla.Env.t} | term()) :: {:ok, struct()} | {:error, Tesla.Env.t} | {:error, term()} def decode({:ok, %Tesla.Env{status: 200, body: body}}), do: Poison.decode(body) def decode(response), do: {:error, response} + def decode({:error, _} = error), do: error @spec decode({:ok, Tesla.Env.t} | term(), :false | struct() | [struct()]) :: {:ok, struct()} | {:error, Tesla.Env.t} | {:error, term()} def decode({:ok, %Tesla.Env{status: 200}} = env, false), do: {:ok, env} def decode({:ok, %Tesla.Env{status: 200, body: body}}, struct), do: Poison.decode(body, as: struct) - def decode({:error, _} = error), do: error + def decode({:error, _} = error, _struct), do: error def decode(response, _struct), do: {:error, response} end From 1a8b5cb4455c115cc211bd276a0ce325ea0cc9ae Mon Sep 17 00:00:00 2001 From: Michael Ramstein <633688+mrmstn@users.noreply.github.com> Date: Fri, 8 Mar 2019 10:31:01 -0600 Subject: [PATCH 8/9] Update modules/openapi-generator/src/main/resources/elixir/request_builder.ex.mustache Co-Authored-By: yknx4 --- .../src/main/resources/elixir/request_builder.ex.mustache | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/openapi-generator/src/main/resources/elixir/request_builder.ex.mustache b/modules/openapi-generator/src/main/resources/elixir/request_builder.ex.mustache index 499942577ce7..e06765d15db5 100644 --- a/modules/openapi-generator/src/main/resources/elixir/request_builder.ex.mustache +++ b/modules/openapi-generator/src/main/resources/elixir/request_builder.ex.mustache @@ -119,6 +119,7 @@ defmodule {{moduleName}}.RequestBuilder do def decode({:ok, %Tesla.Env{status: 200, body: body}}), do: Poison.decode(body) def decode(response), do: {:error, response} def decode({:error, _} = error), do: error + def decode(response), do: {:error, response} @spec decode({:ok, Tesla.Env.t} | term(), :false | struct() | [struct()]) :: {:ok, struct()} | {:error, Tesla.Env.t} | {:error, term()} def decode({:ok, %Tesla.Env{status: 200}} = env, false), do: {:ok, env} From edee5bf0be893963d4a1290aed4e1cc5822b5d32 Mon Sep 17 00:00:00 2001 From: Michael Ramstein <633688+mrmstn@users.noreply.github.com> Date: Fri, 8 Mar 2019 10:31:07 -0600 Subject: [PATCH 9/9] Update modules/openapi-generator/src/main/resources/elixir/request_builder.ex.mustache Co-Authored-By: yknx4 --- .../src/main/resources/elixir/request_builder.ex.mustache | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/openapi-generator/src/main/resources/elixir/request_builder.ex.mustache b/modules/openapi-generator/src/main/resources/elixir/request_builder.ex.mustache index e06765d15db5..bda2d25af960 100644 --- a/modules/openapi-generator/src/main/resources/elixir/request_builder.ex.mustache +++ b/modules/openapi-generator/src/main/resources/elixir/request_builder.ex.mustache @@ -124,6 +124,7 @@ defmodule {{moduleName}}.RequestBuilder do @spec decode({:ok, Tesla.Env.t} | term(), :false | struct() | [struct()]) :: {:ok, struct()} | {:error, Tesla.Env.t} | {:error, term()} def decode({:ok, %Tesla.Env{status: 200}} = env, false), do: {:ok, env} def decode({:ok, %Tesla.Env{status: 200, body: body}}, struct), do: Poison.decode(body, as: struct) + def decode({:ok, %Tesla.Env{} = response}, _struct), do: {:error, response} def decode({:error, _} = error, _struct), do: error def decode(response, _struct), do: {:error, response} end