Current section

Files

Jump to
bingex lib bingex swap data get_orders_history.ex
Raw

lib/bingex/swap/data/get_orders_history.ex

defmodule Bingex.Swap.Data.GetOrdersHistory do
@moduledoc """
Represents response content on `Bingex.Swap.get_orders_history` request.
"""
alias Bingex.API.Reply
alias Bingex.Swap.Model.DetailedOrderInfo
defstruct history: []
@type t() :: %__MODULE__{
history: [DetailedOrderInfo.t()]
}
@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" => %{"orders" => data_list}}) when is_list(data_list) do
history =
Enum.reduce(data_list, [], fn data, list ->
case DetailedOrderInfo.decode(data) do
{:ok, struct} -> [struct | list]
:error -> list
end
end)
|> Enum.reverse()
%__MODULE__{history: history}
end
def decode(_data), do: %__MODULE__{}
end