diff --git a/README.md b/README.md index 19fe197..e5bb5be 100755 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ by adding `microsoft_translator` to your list of dependencies in `mix.exs`: ```elixir def deps do [ - {:microsoft_translator, "~> 0.1.2"} + {:microsoft_translator, "~> 0.1.3"} ] end ``` diff --git a/lib/microsoft_translator/client.ex b/lib/microsoft_translator/client.ex index b81321c..4540c6c 100644 --- a/lib/microsoft_translator/client.ex +++ b/lib/microsoft_translator/client.ex @@ -69,29 +69,34 @@ defmodule MicrosoftTranslator.Client do defp parse(%{body: body}, api_method) do Jason.decode!(body, keys: :atoms) - |> transform_response(api_method) + |> process_response(api_method) end - defp transform_response(response, :detect) do - result = - response - |> List.first() - |> Map.fetch(:language) + defp process_response(response, api_method) do + case response do + %{error: %{code: code, message: message}} -> + %{error: %{code: code, message: message}} - case result do + list when is_list(list) and api_method in ~w(detect translate)a -> + list + |> List.first() + |> transform_response(api_method) + + map when is_map(map) and api_method in ~w(languages)a -> + transform_response(map, api_method) + end + end + + defp transform_response(response, :detect) when is_map(response) do + case Map.fetch(response, :language) do {:ok, language} -> %{languageCode: language} end end - defp transform_response(response, :translate) do - response - |> List.first() - |> Map.take([:translations]) - end - - defp transform_response(response, :languages) do - %{dictionary: dictionary} = response + defp transform_response(response, :translate) when is_map(response), + do: Map.take(response, ~w(translations)a) + defp transform_response(%{dictionary: dictionary}, :languages) do dictionary |> Enum.map(fn {key, %{name: name, nativeName: native, dir: dir}} -> %{code: "#{key}", name: name, nativeName: native, dir: dir} diff --git a/mix.exs b/mix.exs index 3af70f4..6ee3314 100755 --- a/mix.exs +++ b/mix.exs @@ -2,7 +2,7 @@ defmodule MicrosoftTranslator.MixProject do use Mix.Project @name "MicrosoftTranslator" - @version "0.1.2" + @version "0.1.3" # @repo_url "https://github.com/negrienko/microsoft_translator" @repo_url "https://gl.negrienko.com/negrienko/microsoft_translator" @homepage_url "https://negrienko.com/all/microsoft-translator/"