//! MAVLink protocol entities.
//!
//! The key entities are:
//!
//! * [`Protocol`] — contains dialects.
//! * [`Dialect`] — represents a particular MAVLink dialect.
//! * [`Message`] — MAVLink message.
//! * [`Enum`] — MAVLink enum.
//!
//! Builders for entities which utilise [builder](https://rust-unofficial.github.io/patterns/patterns/creational/builder.html)
//! pattern can be found in the [`builders`] module.
#![warn(missing_docs)]

#[allow(clippy::module_inception)]
mod protocol;
pub use protocol::Protocol;

mod dialect;
pub use dialect::Dialect;

mod enums;
pub use enums::{Enum, EnumEntry, EnumEntryMavCmdFlags, EnumEntryMavCmdParam};

mod messages;
pub use messages::{Message, MessageField, MessageFieldInvalidValue, MessageId};

mod common;
pub use common::deprecated::{Deprecated, DeprecatedSince};
pub use common::mav_type::MavType;
pub use common::units::Units;
pub use common::value::Value;
pub use common::{DialectId, DialectVersion};

// Errors
pub mod errors;

/// Builders.
///
/// Builders available for [`protocol`](self) entities.
///
/// See: [`Builder`](crate::utils::Builder).
pub mod builders {
    pub use super::enums::{
        EnumBuilder, EnumEntryBuilder, EnumEntryMavCmdFlagsBuilder, EnumEntryMavCmdParamBuilder,
    };
    pub use super::messages::{MessageBuilder, MessageFieldBuilder};
}
