# `DripDrop.Scheduler`
[🔗](https://github.com/agoodway/dripdrop/blob/v0.1.0/lib/dripdrop/scheduler.ex#L1)

Behaviour for scheduling DripDrop step executions.

# `cancel`

```elixir
@callback cancel(job_id :: term()) :: :ok | {:error, term()}
```

# `schedule`

```elixir
@callback schedule(execution :: term(), scheduled_for :: DateTime.t()) ::
  {:ok, term()} | {:error, term()}
```

# `configured`

```elixir
@spec configured() :: module()
```

Returns the configured scheduler module.

# `configured_name`

```elixir
@spec configured_name() :: binary()
```

Returns the short name (e.g. "pgflow", "oban") for the configured scheduler.
Used to populate `step_executions.scheduler_backend` so a later cancel/replay
routes to the correct backend even if the configured scheduler has been swapped.

# `module_for_backend`

```elixir
@spec module_for_backend(binary()) :: {:ok, module()} | {:error, :unknown_backend}
```

Resolves a stored scheduler-backend name to its module.

---

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