Current section
Files
Jump to
Current section
Files
lib/bingex/user/data/get_api_key_permissions.ex
defmodule Bingex.User.Data.GetApiKeyPermissions do
@moduledoc """
Represents response content on `Bingex.User.get_api_key_permissions` request.
"""
import Bingex.{Helpers, Convertors}
alias Bingex.API.Reply
@type permission() ::
:spot_trading
| :read
| :swap_trading
| :transfer
| :withdraw
| :sub_account_transfer
defstruct [
:api_key,
:permissions,
:ip_addresses,
:note
]
@type t() :: %__MODULE__{
api_key: nil | binary(),
permissions: list(permission()),
ip_addresses: list(term()),
note: nil | binary()
}
@spec embed_in_reply(Reply.t()) :: Reply.t(t())
def embed_in_reply(%Reply{payload: payload} = reply) do
Reply.put_data(reply, decode(payload))
end
@spec decode(any()) :: t()
def decode(%{} = data) do
%__MODULE__{
api_key: get_and_transform(data, "apiKey", &to_non_empty_binary/1),
permissions:
data
|> Map.get("permissions", [])
|> Enum.map(&permission_from_code/1)
|> Enum.reject(&is_nil/1),
ip_addresses: Map.get(data, "ipAddresses", []),
note: get_and_transform(data, "note", &to_non_empty_binary/1)
}
end
def decode(_payload), do: %__MODULE__{}
@spec permission_from_code(any()) :: permission() | nil
defp permission_from_code(1), do: :spot_trading
defp permission_from_code(2), do: :read
defp permission_from_code(3), do: :swap_trading
defp permission_from_code(4), do: :transfer
defp permission_from_code(5), do: :withdraw
defp permission_from_code(7), do: :sub_account_transfer
defp permission_from_code(_), do: nil
end