Current section
Files
Jump to
Current section
Files
lib/bingex/swap/data/place_orders_data.ex
defmodule Bingex.Swap.PlaceOrdersData do
@moduledoc """
Parses and structures batch order placement data for BingX swaps.
Converts raw API response data into a list of `Bingex.Swap.OrderInfo` structs
and embeds them into a `Bingex.API.Reply`.
"""
alias Bingex.API.Reply
alias Bingex.Swap.OrderInfo
defstruct [:orders]
@type t() :: %__MODULE__{orders: [OrderInfo.t()]}
@spec embed_in_reply(Reply.t()) :: Reply.t(t())
def embed_in_reply(%Reply{payload: payload} = reply) do
case decode(payload) do
{:ok, data} -> Reply.put_data(reply, data)
:error -> reply
end
end
@spec decode(any()) :: {:ok, t()} | :error
def decode(%{"data" => %{"orders" => raw_orders}}) when is_list(raw_orders) do
orders =
Enum.reduce(raw_orders, [], fn raw_order, orders ->
case OrderInfo.decode(raw_order) do
{:ok, order} -> [order | orders]
:error -> orders
end
end)
struct = %__MODULE__{orders: orders}
{:ok, struct}
end
def decode(_data), do: :error
end