DripDrop.Channel behaviour (DripDrop v0.1.0)

Copy Markdown View Source

Uniform contract implemented by DripDrop channel providers.

Summary

Types

credential_errors()

@type credential_errors() :: [{atom(), binary()}]

delivery_error()

@type delivery_error() :: %{kind: error_kind(), reason: term()}

delivery_success()

@type delivery_success() :: %{
  optional(:provider_message_id) => binary() | nil,
  optional(:response) => map()
}

error_kind()

@type error_kind() :: :temporary | :permanent

webhook_route()

@type webhook_route() :: {atom(), binary(), module()}

Callbacks

deliver(t, term, t)

@callback deliver(Ecto.Schema.t(), term(), Ecto.Schema.t()) ::
  {:ok, delivery_success()} | {:error, delivery_error()}

validate_credentials(map)

@callback validate_credentials(map()) :: :ok | {:error, credential_errors()}

verify_signature(t, term)

@callback verify_signature(Ecto.Schema.t(), term()) :: :ok | {:error, term()}

webhook_routes(t)

@callback webhook_routes(Ecto.Schema.t()) :: [webhook_route()]