# `Kinda.Wrapper.CallbackBridge`
[🔗](https://github.com/beaver-lodge/kinda/blob/main/lib/wrapper/callback_bridge.ex#L1)

Metadata for wrapper entries that require a callback-bridge layer.

Pending and runtime-backed entries share this contract, so callback-backed
declarations stay in the same resolved declaration surface as ordinary
generated NIFs while retaining their ownership and scheduler requirements.

# `destructor`

```elixir
@type destructor() ::
  :reply_token_resource | :consumer_callback | :native_owner | :unspecified
```

# `facet`

```elixir
@type facet() ::
  :beam_callback
  | :lifetime_contract
  | :scheduler_contract
  | :rich_input_decoder
```

# `function_name`

```elixir
@type function_name() :: atom()
```

# `lifetime`

```elixir
@type lifetime() :: :invocation | :registration | :native_owner | :unspecified
```

# `owner`

```elixir
@type owner() :: :beam_process | :native_owner | :unspecified
```

# `reason`

```elixir
@type reason() :: :callback_bridge_required | nil
```

# `runtime`

```elixir
@type runtime() :: :pending | :dispatcher
```

# `scheduler`

```elixir
@type scheduler() :: :normal | :dirty_cpu | :dirty_io | :foreign_thread | :unspecified
```

# `t`

```elixir
@type t() :: %Kinda.Wrapper.CallbackBridge{
  destructor: destructor(),
  facets: [facet()],
  function: function_name(),
  lifetime: lifetime(),
  owner: owner(),
  reason: reason(),
  runtime: runtime(),
  runtime_backed: boolean(),
  scheduler: scheduler(),
  timeout_ms: non_neg_integer() | nil,
  unblock_path: unblock_path()
}
```

# `unblock_path`

```elixir
@type unblock_path() :: :callback_bridge_runtime | nil
```

# `required`

```elixir
@spec required(
  function_name(),
  keyword()
) :: t()
```

# `runtime_backed`

```elixir
@spec runtime_backed(
  function_name(),
  keyword()
) :: t()
```

Marks a callback declaration as resolved by Kinda's dispatcher runtime.

Runtime-backed entries are not generation blockers. Consumers still own the
ABI trampoline and type projection named by their declaration variant.

---

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