View Source Kinda.Wrapper.Policy behaviour (kinda v0.11.0)
Consumer-facing policy contract for wrapper generation.
Kinda.Wrapper.Extract and Kinda.Wrapper.Generate stay generic.
Downstream projects provide the policy that decides:
- which extracted functions are generation-blocked
- which extracted functions require a future callback-bridge layer
- which public variants are emitted
- how Elixir arities and Zig NIF entries are derived
- how raw C param/return facts and record fields project into public types
The older unsupported_* callbacks remain as compatibility aliases, but they
are no longer the preferred public vocabulary for new policy code.
Summary
Types
Callbacks
@callback callback_bridge(function_name()) :: Kinda.Wrapper.CallbackBridge.t() | nil
@callback callback_bridge?(function_name()) :: boolean()
@callback callback_bridge_entries() :: %{ optional(function_name()) => Kinda.Wrapper.CallbackBridge.t() }
@callback dirty(variant()) :: Kinda.CodeGen.NIFDecl.dirty()
@callback doc(variant(), Kinda.Wrapper.Function.t()) :: String.t() | nil
@callback generation_blocked?(function_name()) :: boolean()
@callback generation_blocker_entries() :: %{ optional(function_name()) => generation_blocker_reason() }
@callback generation_blocker_reason(function_name()) :: generation_blocker_reason() | nil
@callback typespec_field(Kinda.Wrapper.CRecord.t(), Kinda.Wrapper.CField.t()) :: Kinda.CodeGen.TypeSpecRef.t()
@callback typespec_params(variant(), Kinda.Wrapper.Function.t()) :: [ Kinda.CodeGen.TypeSpecRef.t() ]
@callback typespec_record(Kinda.Wrapper.CRecord.t()) :: Kinda.CodeGen.TypeSpecRef.t()
@callback typespec_return(variant(), Kinda.Wrapper.Function.t()) :: Kinda.CodeGen.TypeSpecRef.t()
@callback unsupported?(function_name()) :: boolean()
@callback unsupported_entries() :: %{optional(function_name()) => unsupported_reason()}
@callback unsupported_reason(function_name()) :: unsupported_reason() | nil
@callback variants(function_name()) :: [variant()]