Current section
Files
Jump to
Current section
Files
lib/bingex/swap/data/cancel_all_orders.ex
defmodule Bingex.Swap.Data.CancelAllOrders do
@moduledoc """
Represents response content on `Bingex.Swap.cancel_all_orders` request.
"""
import Bingex.{Helpers, Convertors}
alias Bingex.API.Reply
alias Bingex.Swap.Model.DetailedOrderInfo
defstruct failed: [], succeeded: []
@type t() :: %__MODULE__{
succeeded: [binary()],
failed: [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" => data}) when is_map(data) do
succeeded_raw = get_and_transform(data, "success", [], &to_list/1) || []
failed_raw = get_and_transform(data, "failed", [], &to_list/1) || []
failed =
failed_raw
|> Enum.map(&to_non_empty_binary/1)
|> reject_nils()
succeeded =
Enum.reduce(succeeded_raw, [], fn raw_order, orders ->
case DetailedOrderInfo.decode(raw_order) do
{:ok, order} -> [order | orders]
:error -> orders
end
end)
%__MODULE__{failed: failed, succeeded: succeeded}
end
def decode(_data), do: %__MODULE__{}
end