Simple error processing
This commit is contained in:
parent
7ddac90b29
commit
9c24e1651b
@ -12,7 +12,7 @@ by adding `microsoft_translator` to your list of dependencies in `mix.exs`:
|
|||||||
```elixir
|
```elixir
|
||||||
def deps do
|
def deps do
|
||||||
[
|
[
|
||||||
{:microsoft_translator, "~> 0.1.2"}
|
{:microsoft_translator, "~> 0.1.3"}
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
```
|
```
|
||||||
|
@ -69,29 +69,34 @@ defmodule MicrosoftTranslator.Client do
|
|||||||
|
|
||||||
defp parse(%{body: body}, api_method) do
|
defp parse(%{body: body}, api_method) do
|
||||||
Jason.decode!(body, keys: :atoms)
|
Jason.decode!(body, keys: :atoms)
|
||||||
|> transform_response(api_method)
|
|> process_response(api_method)
|
||||||
end
|
end
|
||||||
|
|
||||||
defp transform_response(response, :detect) do
|
defp process_response(response, api_method) do
|
||||||
result =
|
case response do
|
||||||
response
|
%{error: %{code: code, message: message}} ->
|
||||||
|> List.first()
|
%{error: %{code: code, message: message}}
|
||||||
|> Map.fetch(:language)
|
|
||||||
|
|
||||||
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}
|
{:ok, language} -> %{languageCode: language}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
defp transform_response(response, :translate) do
|
defp transform_response(response, :translate) when is_map(response),
|
||||||
response
|
do: Map.take(response, ~w(translations)a)
|
||||||
|> List.first()
|
|
||||||
|> Map.take([:translations])
|
|
||||||
end
|
|
||||||
|
|
||||||
defp transform_response(response, :languages) do
|
|
||||||
%{dictionary: dictionary} = response
|
|
||||||
|
|
||||||
|
defp transform_response(%{dictionary: dictionary}, :languages) do
|
||||||
dictionary
|
dictionary
|
||||||
|> Enum.map(fn {key, %{name: name, nativeName: native, dir: dir}} ->
|
|> Enum.map(fn {key, %{name: name, nativeName: native, dir: dir}} ->
|
||||||
%{code: "#{key}", name: name, nativeName: native, dir: dir}
|
%{code: "#{key}", name: name, nativeName: native, dir: dir}
|
||||||
|
2
mix.exs
2
mix.exs
@ -2,7 +2,7 @@ defmodule MicrosoftTranslator.MixProject do
|
|||||||
use Mix.Project
|
use Mix.Project
|
||||||
|
|
||||||
@name "MicrosoftTranslator"
|
@name "MicrosoftTranslator"
|
||||||
@version "0.1.2"
|
@version "0.1.3"
|
||||||
# @repo_url "https://github.com/negrienko/microsoft_translator"
|
# @repo_url "https://github.com/negrienko/microsoft_translator"
|
||||||
@repo_url "https://gl.negrienko.com/negrienko/microsoft_translator"
|
@repo_url "https://gl.negrienko.com/negrienko/microsoft_translator"
|
||||||
@homepage_url "https://negrienko.com/all/microsoft-translator/"
|
@homepage_url "https://negrienko.com/all/microsoft-translator/"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user