mavspec_rust_spec/
error.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//! # 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 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,
    },
}