# `DoubleDown.Contract.Dispatch.HandlerMeta`
[🔗](https://github.com/mccraigmccraig/double_down/blob/main/lib/double_down/contract/dispatch/handler_meta.ex#L1)

Structs describing the three handler types that can be installed for
a contract via `DoubleDown.Testing`.

Stored in `NimbleOwnership` under the contract module atom as key.
`DoubleDown.Contract.Dispatch.invoke_handler/5` pattern-matches on
the struct to select the dispatch strategy.

## Variants

* `HandlerMeta.Module` — delegate to a module implementing the contract behaviour
* `HandlerMeta.Stateless` — dispatch via a 3-arity `fn contract, operation, args -> result end`
* `HandlerMeta.Stateful` — dispatch via a 4/5-arity stateful function with
  mutable state stored inline in the `:state` field

---

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