defmodule Bingex.Swap.Data.SetLeverage do @moduledoc """ Represents response content on `Bingex.Swap.set_leverage` request. """ import Bingex.{Helpers, Convertors} alias Bingex.API.Reply defstruct [ :symbol, :available_long_quantity, :available_long_value, :max_long_value, :available_short_quantity, :available_short_value, :max_short_value ] @type t() :: %__MODULE__{ symbol: nil | binary(), available_long_quantity: nil | float(), available_long_value: nil | float(), max_long_value: nil | float(), available_short_quantity: nil | float(), available_short_value: nil | float(), max_short_value: nil | float() } @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 %__MODULE__{ symbol: get_and_transform(data, "symbol", &to_non_empty_binary/1), available_long_quantity: get_and_transform(data, "availableLongVol", &to_float/1), available_long_value: get_and_transform(data, "availableLongVal", &to_float/1), max_long_value: get_and_transform(data, "maxPositionLongVal", &to_float/1), available_short_quantity: get_and_transform(data, "availableShortVol", &to_float/1), available_short_value: get_and_transform(data, "availableShortVal", &to_float/1), max_short_value: get_and_transform(data, "maxPositionShortVal", &to_float/1) } end def decode(_data), do: %__MODULE__{} end