# `MAVLink2.Codec`
[🔗](https://github.com/isaiahdw/mavlink2/blob/v0.1.0/lib/mavlink2/codec.ex#L1)

Message payloads from a wire layout (`MAVLink2.XML`): fields little
endian, in wire order.

| Field | Elixir value |
| --- | --- |
| integer, scalar `char` | integer |
| `float`, `double` | float, or `:nan`, `:infinity`, `:neg_infinity` |
| `char[n]` | binary, up to the first NUL; zero-padded or cut to `n` when encoded |
| other arrays | list of `n` values, zero-filled when shorter |

`decode/2` zero-extends a short payload first, as a v2 receiver must.
`encode/2` raises `ArgumentError` for an integer outside its type's range.

# `layout`

```elixir
@type layout() :: [{atom(), MAVLink2.XML.base_type(), pos_integer() | nil}]
```

# `decode`

```elixir
@spec decode(layout(), binary()) :: keyword()
```

The field values in `payload`, as a keyword list in wire order.

# `encode`

```elixir
@spec encode(layout(), map()) :: binary()
```

The payload for `values`, a map or struct holding every field in `layout`.

# `zero`

```elixir
@spec zero(MAVLink2.XML.base_type(), pos_integer() | nil) :: term()
```

A field's zero value.

---

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