Skip to main content

lib/rujira/thorchain/events/swap.ex

defmodule Rujira.Thorchain.Events.Swap do
  @moduledoc "A THORChain pool swap event."

  defstruct pool: nil, id: nil, coin: nil, emit_asset: nil, memo: nil, from: nil, to: nil

  @type t :: %__MODULE__{
          pool: String.t(),
          id: String.t() | nil,
          coin: String.t() | nil,
          emit_asset: String.t() | nil,
          memo: String.t() | nil,
          from: String.t() | nil,
          to: String.t() | nil
        }

  @spec new(map()) :: {:ok, t()} | {:error, :invalid_attrs}
  def new(%{"pool" => pool} = attrs) do
    {:ok,
     %__MODULE__{
       pool: pool,
       id: Map.get(attrs, "id"),
       coin: Map.get(attrs, "coin"),
       emit_asset: Map.get(attrs, "emit_asset"),
       memo: Map.get(attrs, "memo"),
       from: Map.get(attrs, "from"),
       to: Map.get(attrs, "to")
     }}
  end

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