# Protox v2.0.9 - Table of Contents

> A fast, easy to use and 100% conformant Elixir library for Google Protocol Buffers (aka protobuf)

## Pages

- [Repository Guidelines](agents.md)
- [Changelog](changelog.md)
- [How to contribute to protox](contributing.md)
- [Protox](readme.md)
- [Protox Benchmark](launch_benchmark.md)
- [Generated code reference](reference.md)
- [Types mapping](types_mapping.md)
- [Migration guide (v1 to v2)](v1_to_v2_migration.md)

## Modules

- [Protox](Protox.md): Use this module to generate the Elixir structs corresponding to a set of protobuf definitions
and to encode/decode instances of these structures.
- [Protox.Default](Protox.Default.md): Default values of Protocol Buffers types.
- [Protox.Field](Protox.Field.md): The definition of a protobuf field (e.g. tag, type, etc.).

- [Protox.Kind](Protox.Kind.md): Defines the kind of a field.
- [Protox.MergeMessage](Protox.MergeMessage.md): This module provides a helper function to merge messages.
- [Protox.MessageSchema](Protox.MessageSchema.md): Represents the schema of a Protocol Buffers message once it has been processed by Protox.
- [Protox.OneOf](Protox.OneOf.md): Represents a [oneof field](https://protobuf.dev/programming-guides/proto3/#oneof) in protobuf.
- [Protox.Scalar](Protox.Scalar.md): Represents a scalar field in a Protocol Buffer message.
- [Protox.Types](Protox.Types.md): This module describes the types that define a protobuf message.

- Exceptions
  - [Protox.DecodingError](Protox.DecodingError.md): This error is thrown when a data could not be decoded.

  - [Protox.EncodingError](Protox.EncodingError.md): This error is thrown when a message could not be encoded.

  - [Protox.IllegalTagError](Protox.IllegalTagError.md): This error is thrown when decoding data with a field which tag is 0.

  - [Protox.InvalidFieldAttributeError](Protox.InvalidFieldAttributeError.md): This error is thrown when a field is constructed with an invalid atribute.

  - [Protox.RequiredFieldsError](Protox.RequiredFieldsError.md): This error is thrown when encoding or decoding a Protobuf 2 message
with unset required fields (that is, that have the value `nil`).

## Mix Tasks

- [mix protox.generate](Mix.Tasks.Protox.Generate.md): Generate Elixir code from `.proto` files.

