Expand description

MAVSpec Rust Procedural Macros

🇺🇦 repository crates.io docs.rs issues

This crate provides proc macros for MAVLink MAVLink entities generated by MAVSpec.

§Usage

In most cases marcos defined here will be used by autogenerated code. However, it is possible to use them for creating custom MAVLink entities.

Custom MAVLink message:

use mavspec::rust::derive::Message;

#[derive(Clone, Debug, Message)]
#[message_id(255)] // Specify message ID
struct CustomMessage {
    scalar_u8: u8,
    array_u8_4: [u8; 4],
    #[extension] // This marks an extension fields
    ext_array_u32_4: [u32; 4],
}

Custom MAVLink enum:

use mavspec::rust::derive::Enum;

#[repr(u8)] // Define enum representation
#[derive(Clone, Copy, Debug, Default, Enum)]
enum Variants {
    #[default]
    OptionA = 0,
    OptionB = 1,
    OptionC = 2,
}

Custom MAVLink dialect:

use mavspec::rust::derive::{Dialect, Message};

#[derive(Clone, Debug, Message)]
#[message_id(255)] // Specify message ID
struct CustomMessage {
    scalar_u8: u8,
    array_u8_4: [u8; 4],
    #[extension] // This marks an extension fields
    ext_array_u32_4: [u32; 4],
}

#[derive(Clone, Debug, Dialect)]
#[dialect(1099)] // Specify unique dialect `ID`
#[version(99)]   // Specify dialect version
enum CustomDialect {
    Custom(CustomMessage),
}

Derive Macros§

  • Derive MAVLink dialect from enum.
  • Derive MAVLink enum from enum.
  • Derive MAVLink message from struct.