Current section

Files

Jump to
bingex lib bingex swap data get_server_time_data.ex
Raw

lib/bingex/swap/data/get_server_time_data.ex

defmodule Bingex.Swap.GetServerTimeData do
@moduledoc """
Parses and structures server time data for BingX swaps.
Extracts the server time from the API response and embeds it into a `Bingex.API.Reply`.
"""
alias Bingex.API.Reply
import Bingex.{Helpers, Convertors}
defstruct [:time]
@type t() :: %__MODULE__{
time: non_neg_integer()
}
@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
def embed_in_reply(%Reply{data: _} = reply), do: reply
@spec decode(any()) :: {:ok, t()} | :error
def decode(%{"data" => data}) when is_map(data) do
struct = %__MODULE__{
time: get_and_transform(data, "serverTime", &to_non_neg_integer/1)
}
{:ok, struct}
end
def decode(_data), do: :error
end