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}