lib/w3ws/raw_event.ex

defmodule W3WS.RawEvent do
  @moduledoc """
  W3WS RawEvent represents an encoded event.
  """

  @type t :: %__MODULE__{
          address: String.t(),
          block_hash: String.t(),
          block_number: String.t(),
          data: String.t(),
          log_index: String.t(),
          removed: boolean(),
          topics: list(String.t()),
          transaction_hash: String.t(),
          transaction_index: String.t()
        }
  defstruct address: nil,
            block_hash: nil,
            block_number: nil,
            data: nil,
            log_index: nil,
            removed: nil,
            topics: nil,
            transaction_hash: nil,
            transaction_index: nil

  @doc """
  Create a `RawEvent` from a map of log event data
  """
  @spec from_map(map()) :: t()
  def from_map(%{
        "address" => address,
        "blockHash" => block_hash,
        "blockNumber" => block_number,
        "data" => data,
        "logIndex" => log_index,
        "removed" => removed,
        "topics" => topics,
        "transactionHash" => transaction_hash,
        "transactionIndex" => transaction_index
      }) do
    %__MODULE__{
      address: address,
      block_hash: block_hash,
      block_number: block_number,
      data: data,
      log_index: log_index,
      removed: removed,
      topics: topics,
      transaction_hash: transaction_hash,
      transaction_index: transaction_index
    }
  end
end