Skip to main content

lib/rujira/fin/events/retract.ex

defmodule Rujira.Fin.Events.Retract do
  @moduledoc "An order retraction event (`wasm-rujira-fin/retract`)."

  defstruct side: nil, price: nil, owner: nil

  @type t :: %__MODULE__{
          side: :base | :quote,
          price: String.t(),
          owner: String.t()
        }

  @spec new(map()) :: {:ok, t()} | {:error, term()}
  def new(%{"side" => side, "price" => price, "owner" => owner}) do
    {:ok,
     %__MODULE__{
       side: side |> String.downcase() |> String.to_existing_atom(),
       price: price,
       owner: owner
     }}
  end

  def new(_), do: {:error, :invalid_attrs}
end