lib/xtb_client/messages/server_time.ex

defmodule XtbClient.Messages.ServerTime do
  @moduledoc """
  Info about current time on trading server.
  
  ## Parameters
  - `time` actual time on server,
  - `time_string` string version of `time` value.
  
  ## Handled Api methods
  - `getServerTime`
  """

  @type t :: %__MODULE__{
          time: DateTime.t(),
          time_string: binary()
        }

  @enforce_keys [:time, :time_string]

  @derive Jason.Encoder
  defstruct time: nil,
            time_string: ""

  def new(%{
        "time" => time_value,
        "timeString" => time_string
      })
      when is_number(time_value) and is_binary(time_string) do
    %__MODULE__{
      time: DateTime.from_unix!(time_value, :millisecond),
      time_string: time_string
    }
  end

  def match(method, data) when method in ["getServerTime"] do
    {:ok, __MODULE__.new(data)}
  end

  def match(_method, _data) do
    {:no_match}
  end
end