# kiwi_codec v0.2.0 - Table of Contents

> Pure Elixir codec for Kiwi schema binary messages

## Pages

- [KiwiCodec](readme.md)
- [Changelog](changelog.md)

## Modules

- [KiwiCodec](KiwiCodec.md): Pure Elixir codec for Kiwi schema binary messages.
- [KiwiCodec.Container](KiwiCodec.Container.md): Helpers for Kiwi chunk containers with an 8-byte magic and little-endian chunk lengths.

- [KiwiCodec.Decoder](KiwiCodec.Decoder.md): Decodes Kiwi wire binaries into generated Kiwi structs.
- [KiwiCodec.Encoder](KiwiCodec.Encoder.md): Encodes generated Kiwi structs into Kiwi wire iodata.
- [KiwiCodec.Inspect](KiwiCodec.Inspect.md): Shared `Inspect` implementation for generated Kiwi structs.

- [KiwiCodec.TransformModule](KiwiCodec.TransformModule.md): Hook behaviour for custom Kiwi encode/decode normalization.

- Schema
  - [KiwiCodec.Metadata](KiwiCodec.Metadata.md): Compiled metadata attached to generated Kiwi modules.
  - [KiwiCodec.Metadata.Field](KiwiCodec.Metadata.Field.md): Compiled metadata for one field in a generated Kiwi module.

  - [KiwiCodec.Schema](KiwiCodec.Schema.md): Parsed Kiwi schema.

  - [KiwiCodec.Schema.Enum](KiwiCodec.Schema.Enum.md): Kiwi enum definition.

  - [KiwiCodec.Schema.EnumVariant](KiwiCodec.Schema.EnumVariant.md): Kiwi enum variant.

  - [KiwiCodec.Schema.Field](KiwiCodec.Schema.Field.md): Kiwi struct or message field.

  - [KiwiCodec.Schema.Message](KiwiCodec.Schema.Message.md): Kiwi message definition.

  - [KiwiCodec.Schema.Struct](KiwiCodec.Schema.Struct.md): Kiwi struct definition.

- Wire encoding
  - [KiwiCodec.Wire](KiwiCodec.Wire.md): Kiwi primitive wire encoders and decoders.
  - [KiwiCodec.Wire.VarFloat](KiwiCodec.Wire.VarFloat.md): Kiwi variable-length 32-bit float wire encoding.
  - [KiwiCodec.Wire.Varint](KiwiCodec.Wire.Varint.md): Kiwi integer wire encoding.

- Generation
  - [KiwiCodec.FileGenerator](KiwiCodec.FileGenerator.md): Writes generated Elixir source files from `.kiwi` schema text or parsed schemas.

  - [KiwiCodec.ModuleCompiler](KiwiCodec.ModuleCompiler.md): Compiles `.kiwi` schema text or parsed schemas into Elixir modules in memory.
  - [KiwiCodec.ModuleGenerator](KiwiCodec.ModuleGenerator.md): Generates Elixir source modules from parsed Kiwi schemas.

  - [KiwiCodec.RustlerGenerator](KiwiCodec.RustlerGenerator.md): Generates Rustler decoder code from Kiwi schemas for RustQ manifests.

- Implementation internals
  - [KiwiCodec.DSL](KiwiCodec.DSL.md): Compile-time DSL behind `use KiwiCodec`.
  - [KiwiCodec.GeneratedModule.Metadata](KiwiCodec.GeneratedModule.Metadata.md): Builds compiled metadata for modules generated with `use KiwiCodec`.

  - [KiwiCodec.GeneratedModule.Shape](KiwiCodec.GeneratedModule.Shape.md): Emits enum, struct, and message shape code for modules generated with `use KiwiCodec`.

  - [KiwiCodec.GeneratedModule.TypeSpec](KiwiCodec.GeneratedModule.TypeSpec.md): Builds typespec AST for generated Kiwi modules.

  - [KiwiCodec.PrimitiveType](KiwiCodec.PrimitiveType.md): Kiwi primitive type metadata.
  - [KiwiCodec.RustlerGenerator.DecoderMacro](KiwiCodec.RustlerGenerator.DecoderMacro.md): Rusty-Elixir macros that emit Rustler decoder functions.
  - [KiwiCodec.RustlerGenerator.Definition](KiwiCodec.RustlerGenerator.Definition.md): Generates Rust items for Kiwi schema definitions.

  - [KiwiCodec.RustlerGenerator.Entrypoint](KiwiCodec.RustlerGenerator.Entrypoint.md): Generates Rustler NIF entrypoint items for Kiwi decoders.

  - [KiwiCodec.RustlerGenerator.FieldExpr](KiwiCodec.RustlerGenerator.FieldExpr.md): Builds Rusty-Elixir expressions for decoding Kiwi fields in generated Rustler code.

  - [KiwiCodec.RustlerGenerator.Name](KiwiCodec.RustlerGenerator.Name.md): Naming helpers for Rustler decoder code generated from Kiwi schemas.

  - [KiwiCodec.RustlerGenerator.Selection](KiwiCodec.RustlerGenerator.Selection.md): Selects schema definitions and their dependencies for Rustler generation.

  - [KiwiCodec.RustlerGenerator.Splice](KiwiCodec.RustlerGenerator.Splice.md): Static RustQ splice fragments required by generated Rustler decoders.

  - [KiwiCodec.Schema.Binary](KiwiCodec.Schema.Binary.md): Encoder and decoder for Kiwi's compact binary schema format.

  - [KiwiCodec.Schema.Binary.TypeIndex](KiwiCodec.Schema.Binary.TypeIndex.md): Encodes and decodes type references in Kiwi's compact binary schema format.
  - [KiwiCodec.Schema.Parser](KiwiCodec.Schema.Parser.md): Parser for `.kiwi` schema text.

  - [KiwiCodec.Schema.Token](KiwiCodec.Schema.Token.md): Source token with line and column information for schema parse errors.

  - [KiwiCodec.Schema.Tokenizer](KiwiCodec.Schema.Tokenizer.md): Tokenizes `.kiwi` schema text with source positions.

  - [KiwiCodec.Schema.Validator](KiwiCodec.Schema.Validator.md): Validates parsed Kiwi schemas after grammar parsing.

  - [KiwiCodec.SchemaInterpreter](KiwiCodec.SchemaInterpreter.md): Interpreter for parsed Kiwi schemas without generated modules.

- Exceptions
  - [KiwiCodec.DecodeError](KiwiCodec.DecodeError.md): Raised when Kiwi wire data or binary schema data cannot be decoded.

  - [KiwiCodec.EncodeError](KiwiCodec.EncodeError.md): Raised when a value cannot be encoded as Kiwi wire data.

## Mix Tasks

- [mix kiwi.gen](Mix.Tasks.Kiwi.Gen.md): Generates Elixir modules from a `.kiwi` schema.

