Current section
Files
Jump to
Current section
Files
lib/bingex/user/model/api_key_info.ex
defmodule Bingex.User.Model.ApiKeyInfo do
@moduledoc """
Represents API key information returned by BingX.
"""
import Bingex.{Helpers, Convertors}
defstruct [
:api_key,
:note,
:permissions,
:ip_addresses,
:status,
:create_time,
:update_time
]
@type permission() ::
:spot_trading
| :swap_trading
| :read
| :transfer
| :withdraw
@type t() :: %__MODULE__{
api_key: nil | binary(),
note: nil | binary(),
permissions: list(permission()),
ip_addresses: list(binary()),
status: nil | integer(),
create_time: nil | integer(),
update_time: nil | integer()
}
@spec decode(map()) :: {:ok, t()} | :error
def decode(%{} = data) do
{:ok,
%__MODULE__{
api_key: get_and_transform(data, "apiKey", &to_non_empty_binary/1),
note: get_and_transform(data, "note", &to_non_empty_binary/1),
permissions:
Map.get(data, "permissions", [])
|> Enum.map(&permission_from_code/1)
|> Enum.reject(&is_nil/1),
ip_addresses: Map.get(data, "ipAddresses", []),
status: get_and_transform(data, "status", &to_integer/1),
create_time: get_and_transform(data, "createTime", &to_integer/1),
update_time: get_and_transform(data, "updateTime", &to_integer/1)
}}
end
def decode(_), do: :error
@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(_), do: nil
end