# `Chimeway.Dispatch`
[🔗](https://github.com/jonlunsford/chimeway/blob/v1.0.0/lib/chimeway/dispatch.ex#L1)

Behaviour contract for the dispatcher seam.

Configure the dispatcher via:

    config :chimeway, :dispatcher, Chimeway.Dispatch.Sync

The default implementation is `Chimeway.Dispatch.Sync`, which plans delivery rows
without calling any adapter. `Chimeway.Dispatch.Oban` will be the Phase 3
alternative that enqueues adapter calls as background jobs.

Dispatch is called after notification creation, outside the notification
`Ecto.Multi` transaction. Adapter calls must never hold a DB transaction open.

# `dispatch`

```elixir
@callback dispatch(
  notifications :: [Chimeway.Notifications.Notification.t()],
  opts :: keyword()
) ::
  {:ok, [Chimeway.Delivery.t()]} | {:error, term()}
```

# `dispatch_delivery`

```elixir
@callback dispatch_delivery(
  delivery_or_id :: Chimeway.Delivery.t() | binary(),
  opts :: keyword()
) ::
  {:ok, Chimeway.Delivery.t()}
  | {:skip, Chimeway.Delivery.t()}
  | {:error, term()}
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
