mavspec_rust_spec 0.6.7

Core interfaces for MAVSpec's Rust code generation toolchain.
Documentation
//! # MAVLib errors

use crate::types::{MavLinkVersion, MessageId};

/// Errors related to MAVLink message specification and encoding/decoding.
///
/// All errors except [`SpecError::InvalidV1PayloadSize`] are related to wrong user input like
/// incorrectly chosen MAVLink dialect or protocol version.
#[cfg_attr(feature = "specta", derive(specta::Type))]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Clone, Debug)]
pub enum SpecError {
    /// MAVLink version is not supported.
    UnsupportedMavLinkVersion {
        /// Actual requested version.
        actual: MavLinkVersion,
        /// Minimum supported MAVLink version,
        minimal: MavLinkVersion,
    },
    /// MAVLink message with the specified ID is not in dialect.
    NotInDialect(MessageId),
    /// Error during conversion to MAVLink enum.
    InvalidEnumValue {
        /// Enum name.
        #[cfg_attr(feature = "serde", serde(skip_deserializing))]
        enum_name: &'static str,
    },
    /// Invalid size of the `MAVLink 1` payload.
    InvalidV1PayloadSize {
        /// Actual payload size in bytes.
        actual: usize,
        /// Expected payload size.
        expected: usize,
    },
    /// Provided `MAVLink 2` payload exceeds the maximum expected size.
    V2PayloadIsTooLong {
        /// Actual payload size in bytes.
        actual: usize,
        /// Maximum expected payload size.
        maximum: usize,
    },
}