lib/event_store_dashboard/event.ex

defmodule EventStoreDashboard.Event do
  @moduledoc false

  @behaviour Access

  @type t :: %__MODULE__{
          event_number: non_neg_integer() | nil,
          stream_version: non_neg_integer() | nil,
          event_id: String.t() | nil,
          stream_uuid: String.t() | nil,
          event_type: String.t() | nil,
          correlation_id: String.t() | nil,
          causation_id: String.t() | nil,
          data: any(),
          metadata: any(),
          created_at: DateTime.t() | NaiveDateTime.t() | nil
        }

  defstruct [
    :event_number,
    :stream_version,
    :event_id,
    :stream_uuid,
    :event_type,
    :correlation_id,
    :causation_id,
    :data,
    :metadata,
    :created_at
  ]

  @impl Access
  defdelegate fetch(struct, key), to: Map

  @impl Access
  defdelegate get_and_update(struct, key, fun), to: Map

  @impl Access
  defdelegate pop(struct, key), to: Map
end