Current section

Files

Jump to
bingex lib bingex swap model position_update.ex
Raw

lib/bingex/swap/model/position_update.ex

defmodule Bingex.Swap.Model.PositionUpdate do
@moduledoc """
Represents basic position update information.
"""
import Bingex.{Helpers, Convertors}
alias Bingex.Model.Order
defstruct [
:side,
:symbol,
:margin,
:quantity,
:average_price,
:unrealized_pnl,
:realized_pnl,
:margin_mode
]
@type t() :: %__MODULE__{
side: nil | Order.position_side(),
symbol: nil | binary(),
margin: nil | float(),
quantity: nil | float(),
average_price: nil | float(),
unrealized_pnl: nil | float(),
realized_pnl: nil | float(),
margin_mode: nil | Order.margin_mode()
}
@spec decode(map()) :: {:ok, t()} | :error
def decode(%{} = data) do
{:ok,
%__MODULE__{
side: get_and_transform(data, "ps", &decode_position_side/1),
symbol: get_and_transform(data, "s", &to_non_empty_binary/1),
margin: get_and_transform(data, "iw", &to_float/1),
quantity: get_and_transform(data, "pa", &to_float/1),
average_price: get_and_transform(data, "ep", &to_float/1),
unrealized_pnl: get_and_transform(data, "up", &to_float/1),
realized_pnl: get_and_transform(data, "cr", &to_float/1),
margin_mode: get_and_transform(data, "mt", &decode_margin_mode/1)
}}
end
def decode(_data), do: :error
end