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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
use std::num::{ParseFloatError, ParseIntError};
use prost::DecodeError;
use thiserror::Error;
/// Protobuf definitions parsing errors.
#[derive(Debug, Clone, Error)]
pub enum ProtoImportError {
/// Deprecation specs are missing deprecated since field.
///
/// See: [`crate::proto::mavlink_messages_v1::Deprecated`].
#[error("deprecation specs are missing `since` field")]
DeprecatedSinceIsNone,
/// Message field is missing mandatory `type` field.
///
/// See: [`crate::proto::mavlink_messages_v1::MessageField`].
#[error("message field is missing `type` field.")]
MessageFieldTypeIsNone,
/// Message field type does not contain type field.
///
/// See: [`crate::proto::mavlink_messages_v1::MessageFieldType`].
#[error("message field type does not contain `type` field")]
MessageFieldTypeTypeIsNone,
/// Message field invalid value specs are missing `value` field.
///
/// See: [`crate::proto::mavlink_messages_v1::MessageFieldInvalidValue`].
#[error("message field invalid value specs are missing `value` field")]
MessageFieldInvalidValueValueIsNone,
/// Invalid units enum value.
///
/// See: [`crate::proto::mavlink_messages_v1::Units`].
#[error("invalid units enum value: {0:?}")]
InvalidUnitsNumericEnumValue(DecodeError),
/// Unspecified units are not allowed.
///
/// See: [`crate::proto::mavlink_messages_v1::Units::Unspecified`].
#[error("unspecified units are not allowed")]
UnspecifiedUnitsAreNotSupported,
/// Value is missing `value` field.
///
/// See: [`crate::proto::mavlink_messages_v1::Value`].
#[error("value is missing `value` field")]
ValueValueIsNone,
/// Value has a floating point type but exact value is not specified.
///
/// See:
/// * [`crate::proto::mavlink_messages_v1::Value`],
/// * [`crate::proto::mavlink_messages_v1::value::FloatValue`].
#[error("value has a floating point type but exact value is not specified")]
ValueFloatValueIsNone,
}
/// Parse errors
#[derive(Debug, Clone, Error)]
pub enum ParseError {
/// Invalid value.
///
/// See: [`crate::protocol::Value`].
#[error("invalid value: {0}")]
InvalidValue(String),
/// Value has incorrect integer value.
///
/// See:
/// * [`crate::protocol::Value`],
/// * [`crate::protocol::Value::IntValue`].
#[error("incorrect integer value: {0:?}")]
ValueIntError(ParseIntError),
/// Value has incorrect floating point value.
///
/// See:
/// * [`crate::protocol::Value`],
/// * [`crate::protocol::Value::FloatValue`].
#[error("incorrect floating point value: {0:?}")]
ValueFloatError(ParseFloatError),
/// Invalid units.
///
/// See: [`crate::protocol::Units`].
#[error("invalid units")]
UnitsError(String),
}