# PB v0.1.0 - Table of Contents

Data-driven protobuf toolkit for Elixir.

## Pages

- [PB](readme.md)

- Tutorials
  - [Getting started](getting-started.md)

- How-to guides
  - [Generating a descriptor set](descriptor-sets.md)
  - [Embedding a schema at compile time](schema-modules.md)
  - [Decoding into structs and sum types](structs-and-representation.md)
  - [Adapters and well-known types](adapters-and-well-known-types.md)
  - [Encoding and decoding JSON](json.md)
  - [Validating with protovalidate](validation.md)
  - [Extensions and unknown fields](extensions-and-unknown-fields.md)
  - [Introspecting a schema](introspection.md)

- Reference
  - [Data representation](data-representation.md)
  - [Options reference](options.md)
  - [Conformance status](conformance.md)
  - [Benchmarks](benchmarks.md)

- Explanation
  - [Why data-driven (no code generation)](why-data-driven.md)
  - [Encoding and decoding semantics](encoding-semantics.md)
  - [Representation vs adapters](representation-vs-adapters.md)

## Modules

- [PB.Schema.Info.Enum](PB.Schema.Info.Enum.md): Public projection of a compiled protobuf enum.
- [PB.Schema.Info.EnumValue](PB.Schema.Info.EnumValue.md): Public projection of a single enum value.
- [PB.Schema.Info.ExtensionRange](PB.Schema.Info.ExtensionRange.md): Public projection of a single extension range declaration.
- [PB.Schema.Info.Field](PB.Schema.Info.Field.md): Public projection of a compiled protobuf field or extension.
- [PB.Schema.Info.Message](PB.Schema.Info.Message.md): Public projection of a compiled protobuf message.
- [PB.Schema.Info.Method](PB.Schema.Info.Method.md): Public projection of a single service method.
- [PB.Schema.Info.Oneof](PB.Schema.Info.Oneof.md): Public projection of a compiled oneof declaration.
- [PB.Schema.Info.Service](PB.Schema.Info.Service.md): Public projection of a compiled protobuf service.

- Core
  - [PB](PB.md): Data-driven protobuf toolkit for Elixir.
Runtime usage needs no code generation or build step. A schema is a plain
Elixir data structure produced by `compile/1`.
  - [PB.JSON](PB.JSON.md): ProtoJSON encoder/decoder for PB.
  - [PB.UnknownField](PB.UnknownField.md): Preserved protobuf wire field that is not represented by the compiled schema.

- Schema &amp; introspection
  - [PB.Schema](PB.Schema.md): Embeds a compiled PB schema into a module at compile time.
  - [PB.Schema.Info](PB.Schema.Info.md): Public introspection structs returned by `PB.Schema.fetch_message/2` and
friends.
  - [PB.Schema.Projection](PB.Schema.Projection.md): Compiled projection metadata attached to a message in the schema.

- Representation &amp; adapters
  - [PB.Adapter](PB.Adapter.md): Message-level app/proto conversion spec.
  - [PB.WellKnownTypes](PB.WellKnownTypes.md): Native adapters for protobuf well-known types.

- Validation
  - [PB.Validate](PB.Validate.md): Runtime protovalidate validation.
  - [PB.Validate.Error](PB.Validate.Error.md): Structured validation failure.
  - [PB.Validate.Violation](PB.Validate.Violation.md): Rich application-facing protovalidate violation.

- Errors
  - [PB.AdapterError](PB.AdapterError.md): An adapter `to_proto`/`from_proto` callback returned `{:error, reason}` or
raised. `:fqn` names the message, `:direction` is `:to_proto` or
`:from_proto`, and `:reason` carries the callback's reason. See `PB.Error`.

  - [PB.DecodeError](PB.DecodeError.md): Structurally invalid serialized input: protobuf wire bytes that are truncated
or malformed, or JSON text that is not well-formed for the target. The
`:format` field discriminates `:wire` from `:json`. See `PB.Error`.

  - [PB.Error](PB.Error.md): Shared toolkit and umbrella type for PB's structured errors.
  - [PB.OptionError](PB.OptionError.md): Option failure: the caller passed options the API does not accept, a known
option carried an invalid value, or options were not a keyword list. See
`PB.Error` for the error model.

  - [PB.SchemaError](PB.SchemaError.md): Schema-resolution and introspection failure.
  - [PB.ValueError](PB.ValueError.md): Input value or shape failure: a caller-supplied term does not fit the field's
declared type, presence, or message structure.
  - [PB.CEL.Error](PB.CEL.Error.md): Unified error raised by CEL evaluation, including protovalidate `cel` rules.
  - [PB.Validate.CompileError](PB.Validate.CompileError.md): Error raised when protovalidate rules fail to compile.

