KiwiCodec.RustlerGenerator (kiwi_codec v0.2.0)

Copy Markdown View Source

Generates Rustler decoder code from Kiwi schemas for RustQ manifests.

This is an experimental bridge for optional native backends. It generates a complete Rust source file for schema-dependent decoder functions and NIF entrypoints; rustq.exs owns writing and freshness checks.

The generated source includes the Rustler imports, RustQ Rustler term helpers, schema decoders, and requested entrypoints. The caller only needs to provide a Decoder<'a> type with Kiwi primitive reader methods.

Summary

Functions

Returns a complete Rust source file for generated Rustler decoders.

Types

entrypoint()

Functions

source(schema, opts)

@spec source(
  KiwiCodec.Schema.t(),
  keyword()
) :: String.t()

Returns a complete Rust source file for generated Rustler decoders.

generate :native_decoders, "native/my_nif/src/generated.rs" do
  schema = KiwiCodec.parse_schema!(File.read!("priv/schema.kiwi"))

  content KiwiCodec.RustlerGenerator.source(schema,
    entrypoints: ["Node"],
    module_prefix: "Example.Schema"
  )
end

Options:

  • :definitions - schema definition names to generate, including their dependencies. Defaults to the requested entrypoint definitions, or all definitions when no entrypoints are requested.
  • :entrypoints - :all, {:nif_stubs, module}, a NIF stub module, definition names, or {nif_name, definition_name} entries for generated NIFs. Definition names infer decode_<definition_name> NIFs. :all generates one inferred NIF for every schema definition. A NIF stub module infers entries from one-arity decode_* stubs whose suffix matches a schema definition. For {:nif_stubs, module}, the module must expose stubs/0.
  • :module_prefix - Elixir module prefix for decoded structs.
  • :decoder - Rust path imported as Decoder. Defaults to "crate::runtime::Decoder".