mavinspect 0.1.0-alpha2

MAVInspect is a CLI tool and a library to parse and inspect MAVLink protocol XML definitions
Documentation
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),
}