Current section

Files

Jump to
ex_messagebird lib services error.ex
Raw

lib/services/error.ex

defmodule ExMessagebird.Error do
defstruct code: nil, description: nil, parameter: nil
@type t :: %__MODULE__{
code: __MODULE__.code(),
description: String.t(),
parameter: String.t()
}
@doc """
Creates an Error struct from the JSON error object returned by the messagebird API.
Example JSON:
```
{
"code": 2,
"description": "Request not allowed (incorrect access_key)",
"parameter": "access_key"
}
```
"""
def from_json(%{
"code" => code,
"description" => description,
"parameter" => parameter
}) do
{:ok,
%__MODULE__{
code: code_to_atom(code),
description: description,
parameter: parameter
}}
end
def from_json(_), do: {:error, :invalid_response}
@doc """
Returns a list of Error structs from a Messagebird API error response.
Example: https://developers.messagebird.com/api#api-errors
"""
def from_response(%{"errors" => list}) when is_list(list) do
{:ok,
list
|> Enum.map(fn x ->
case from_json(x) do
{:ok, struct} -> struct
_ -> nil
end
end)
|> Enum.filter(fn x -> not is_nil(x) end)}
end
def from_response(_), do: {:error, :invalid_response}
@type code ::
:request_not_allowed
| :missing_params
| :invalid_params
| :not_found
| :bad_request
| :not_enough_balance
| :api_not_found
| :internal_error
| :unknown
@doc """
Converts an error code to an atom
## Exanples
iex> ExMessagebird.Error.code_to_atom(2)
:request_not_allowed
iex> ExMessagebird.Error.code_to_atom(9)
:missing_params
iex> ExMessagebird.Error.code_to_atom(10)
:invalid_params
iex> ExMessagebird.Error.code_to_atom(20)
:not_found
iex> ExMessagebird.Error.code_to_atom(21)
:bad_request
iex> ExMessagebird.Error.code_to_atom(25)
:not_enough_balance
iex> ExMessagebird.Error.code_to_atom(98)
:api_not_found
iex> ExMessagebird.Error.code_to_atom(99)
:internal_error
iex> ExMessagebird.Error.code_to_atom(101)
:unknown
"""
def code_to_atom(integer) do
case integer do
2 ->
:request_not_allowed
9 ->
:missing_params
10 ->
:invalid_params
20 ->
:not_found
21 ->
:bad_request
25 ->
:not_enough_balance
98 ->
:api_not_found
99 ->
:internal_error
_ ->
:unknown
end
end
end