lib/mailglass_inbound/ingress/provider.ex

defmodule MailglassInbound.Ingress.Provider do
  @moduledoc false

  alias MailglassInbound.InboundMessage
  alias MailglassInbound.Ingress.Request

  @type normalized_t :: %{
          required(:message) => InboundMessage.t(),
          required(:evidence) => map()
        }

  @type request_t :: Request.t()

  @callback verify!(
              raw_body :: binary(),
              headers :: [{String.t(), String.t()}],
              config :: map()
            ) :: map()

  @callback normalize(
              raw_body :: binary(),
              headers :: [{String.t(), String.t()}]
            ) :: normalized_t()
end