# `Beaver.Pattern.Native.Descriptor`

A native rewrite declaration ready to be added to an MLIR rewrite pattern set.

Build descriptors with a function generated by
`Beaver.Pattern.Native.defrewrite/3` rather than constructing this struct
directly.

# `callback`

```elixir
@type callback(state) :: (Beaver.MLIR.RewritePattern.t(),
                    Beaver.MLIR.Operation.t(),
                    Beaver.MLIR.PatternRewriter.t(),
                    state -&gt;
                      outcome(state))
```

# `outcome`

```elixir
@type outcome(state) :: {:ok, state} | {:error, state}
```

# `t`

```elixir
@type t() :: t(any())
```

# `t`

```elixir
@type t(state) :: %Beaver.Pattern.Native.Descriptor{
  benefit: non_neg_integer(),
  construct: (state -&gt; state),
  destruct: (state -&gt; any()),
  init_state: state,
  match_and_rewrite: callback(state),
  name: atom(),
  root: String.t()
}
```

