# `QuackDB.Protocol.Codec`
[🔗](https://github.com/elixir-vibe/quackdb/blob/main/lib/quack_db/protocol/codec.ex#L1)

Encoder and decoder for top-level Quack protocol messages.

This module converts between message structs and wire-format binaries. It is
kept independent from HTTP, DBConnection, and public client APIs so protocol
compatibility can be tested in isolation.

# `decoded_message`

```elixir
@type decoded_message() :: {QuackDB.Protocol.Message.Header.t(), struct()}
```

# `decode`

```elixir
@spec decode(binary()) :: {:ok, decoded_message()} | {:error, QuackDB.Error.t()}
```

# `decode_header`

```elixir
@spec decode_header(binary()) ::
  QuackDB.Protocol.Reader.read_result(QuackDB.Protocol.Message.Header.t())
```

# `encode`

```elixir
@spec encode(
  struct(),
  Keyword.t()
) :: iodata()
```

# `encode_header`

```elixir
@spec encode_header(QuackDB.Protocol.Message.Header.t()) :: iodata()
```

---

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