# `XMAVLink.Dialect`
[🔗](https://github.com/fancydrones/xmavlink/blob/main/lib/mavlink/dialect.ex#L1)

Behaviour implemented by generated MAVLink dialect modules.

The generator already emits these functions for each dialect. This behaviour
makes the runtime contract explicit without changing generated module names
or message structs.

# `target`

```elixir
@type target() :: :broadcast | :system | :system_component | :component
```

# `decode`

```elixir
@callback decode(integer(), atom()) :: atom() | integer()
```

# `describe`

```elixir
@callback describe(atom()) :: String.t()
```

# `describe_params`

```elixir
@callback describe_params(atom()) :: XMAVLink.Types.param_description_list()
```

# `encode`

```elixir
@callback encode(atom() | integer(), atom()) :: integer()
```

# `mavlink_dialect`

```elixir
@callback mavlink_dialect() :: non_neg_integer()
```

# `mavlink_version`

```elixir
@callback mavlink_version() :: non_neg_integer()
```

# `msg_attributes`

```elixir
@callback msg_attributes(XMAVLink.Types.message_id()) ::
  {:ok, XMAVLink.Types.crc_extra(), pos_integer(), target()}
  | {:error, :unknown_message_id}
```

# `unpack`

```elixir
@callback unpack(XMAVLink.Types.message_id(), XMAVLink.Types.version(), binary()) ::
  {:ok, XMAVLink.Message.t()} | {:error, :unknown_message}
```

---

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