mavspec_rust_spec/
error.rs

1//! # MAVLib errors
2
3use crate::types::{MavLinkVersion, MessageId};
4
5/// Errors related to MAVLink message specification and encoding/decoding.
6///
7/// All errors except [`SpecError::InvalidV1PayloadSize`] are related to wrong user input like
8/// incorrectly chosen MAVLink dialect or protocol version.
9#[cfg_attr(feature = "specta", derive(specta::Type))]
10#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
11#[derive(Clone, Debug)]
12pub enum SpecError {
13    /// MAVLink version is not supported.
14    UnsupportedMavLinkVersion {
15        /// Actual requested version.
16        actual: MavLinkVersion,
17        /// Minimum supported MAVLink version,
18        minimal: MavLinkVersion,
19    },
20    /// MAVLink message with specified ID is not in dialect.
21    NotInDialect(MessageId),
22    /// Error during conversion to MAVLink enum.
23    InvalidEnumValue {
24        /// Enum name.
25        #[cfg_attr(feature = "serde", serde(skip_deserializing))]
26        enum_name: &'static str,
27    },
28    /// Invalid size of the `MAVLink 1` payload.
29    InvalidV1PayloadSize {
30        /// Actual payload size in bytes.
31        actual: usize,
32        /// Expected payload size.
33        expected: usize,
34    },
35}