Simple error processing

This commit is contained in:
Danil Negrienko 2020-06-29 05:00:31 +03:00
parent 7ddac90b29
commit 9c24e1651b
3 changed files with 22 additions and 17 deletions

View File

@ -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
```

View File

@ -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}

View File

@ -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/"