# `Mutare.Extension.Spec`
[🔗](https://github.com/foxbenjaminfox/mutare/blob/v0.2.1/lib/mutare/extension/spec.ex#L1)

A resolved non-mutating extension module and its per-instance options.

A bare module in `:extensions` resolves with empty options. A `{module, opts}` entry carries configuration to `c:Mutare.UseExpansion.expand_use/3` through `context.opts`. `Mutare.CallRouting` callbacks never receive these options.

# `t`

```elixir
@type t() :: %Mutare.Extension.Spec{module: module(), opts: keyword()}
```

# `new`

```elixir
@spec new(t() | module() | {module(), keyword()}) :: t()
```

Resolve one `:extensions` entry to a spec. Capability validation is performed by
`Mutare.Extension.validate!/1`.

## Examples

    iex> Mutare.Extension.Spec.new(Enum)
    %Mutare.Extension.Spec{module: Enum, opts: []}

    iex> Mutare.Extension.Spec.new({Enum, [domain: "errors"]}).opts
    [domain: "errors"]

---

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