# `Quic.Codec`
[🔗](https://github.com/gsmlg-dev/http_fetch/blob/v1.0.0-rc.9/apps/elixir_quic/lib/quic/codec.ex#L1)

Bounded QUIC v1 wire helpers.

# `build_initial`

```elixir
@spec build_initial(map()) :: {:ok, binary()} | {:error, atom()}
```

# `decode_frames`

```elixir
@spec decode_frames(binary(), keyword()) ::
  {:ok, [map()], binary()} | {:error, atom()}
```

# `decode_varint`

```elixir
@spec decode_varint(binary()) :: {:ok, non_neg_integer(), binary()} | {:error, atom()}
```

# `encode_frames`

```elixir
@spec encode_frames([map()]) :: {:ok, binary()} | {:error, atom()}
```

# `encode_varint`

```elixir
@spec encode_varint(non_neg_integer()) :: {:ok, binary()} | {:error, :varint_overflow}
```

# `parse_initial`

```elixir
@spec parse_initial(binary()) :: {:ok, map()} | {:error, atom()}
```

# `reconstruct_packet_number`

```elixir
@spec reconstruct_packet_number(non_neg_integer(), non_neg_integer(), pos_integer()) ::
  {:ok, non_neg_integer()} | {:error, atom()}
```

# `split_datagram`

```elixir
@spec split_datagram(binary()) :: {:ok, [binary()]} | {:error, atom()}
```

# `validate_frame_levels`

```elixir
@spec validate_frame_levels([map()], :initial | :handshake | :application) ::
  :ok | {:error, term()} | {:wrong_encryption_level, atom(), atom()}
```

Validate encryption-level constraints that cannot be inferred from frame bytes.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
