lib/membrane_rtmp_plugin/rtmp/source/message_validator.ex

defprotocol Membrane.RTMP.MessageValidator do
  alias Membrane.RTMP.Messages

  @moduledoc """
  Protocol for implementing RTMP Message validators. Allows for verifying some
  of the RTMP messages.
  """

  @type validation_result_t :: {:ok, term()} | {:error, reason :: any()}

  @doc """
  Validates the `t:Membrane.RTMP.Messages.ReleaseStream.t/0` message.
  """
  @spec validate_release_stream(t(), Messages.ReleaseStream.t()) :: validation_result_t()
  def validate_release_stream(impl, message)

  @doc """
  Validates the `t:Membrane.RTMP.Messages.Publish.t/0` message.
  """
  @spec validate_publish(t(), Messages.Publish.t()) :: validation_result_t()
  def validate_publish(impl, message)

  @doc """
  Validates the `t:Membrane.RTMP.Messages.SetDataFrame.t/0` message.
  """
  @spec validate_set_data_frame(t(), Messages.SetDataFrame.t()) :: validation_result_t()
  def validate_set_data_frame(impl, message)
end