lib/tai/events/stream_terminate.ex

defmodule Tai.Events.StreamTerminate do
  alias __MODULE__

  @type venue :: Tai.Venue.id()
  @type t :: %StreamTerminate{venue: venue, reason: term}

  @enforce_keys ~w(venue reason)a
  defstruct ~w(venue reason)a
end

defimpl TaiEvents.LogEvent, for: Tai.Events.StreamTerminate do
  def to_data(event) do
    keys =
      event
      |> Map.keys()
      |> Enum.filter(&(&1 != :__struct__))

    event
    |> Map.take(keys)
    |> Map.put(:reason, event.reason |> inspect)
  end
end