#![cfg_attr(not(feature = "std"), no_std)]
#![doc = document_features::document_features!()]
#[cfg(all(feature = "alloc", not(feature = "std")))]
extern crate alloc;
#[cfg(feature = "std")]
extern crate std as alloc;
use crate::error::Error;
use core::any::Any;
pub mod error;
pub mod option;
pub mod parser;
pub mod tree;
pub mod prelude {
pub use crate::{
error::{Error, ErrorCode},
Context, Device,
};
}
#[cfg(feature = "uom")]
pub mod units {
#[doc(no_inline)]
pub use uom;
#[cfg(feature = "unit-angle")]
pub use uom::si::f32::Angle;
#[cfg(feature = "unit-capacitance")]
pub use uom::si::f32::Capacitance;
#[cfg(feature = "unit-electric-charge")]
pub use uom::si::f32::ElectricCharge;
#[cfg(feature = "unit-electric-current")]
pub use uom::si::f32::ElectricCurrent;
#[cfg(feature = "unit-electric-potential")]
pub use uom::si::f32::ElectricPotential;
#[cfg(feature = "unit-electrical-conductance")]
pub use uom::si::f32::ElectricalConductance;
#[cfg(feature = "unit-electrical-resistance")]
pub use uom::si::f32::ElectricalResistance;
#[cfg(feature = "unit-energy")]
pub use uom::si::f32::Energy;
#[cfg(feature = "unit-frequency")]
pub use uom::si::f32::Frequency;
#[cfg(feature = "unit-inductance")]
pub use uom::si::f32::Inductance;
#[cfg(feature = "unit-power")]
pub use uom::si::f32::Power;
#[cfg(feature = "unit-ratio")]
pub use uom::si::f32::Ratio;
#[cfg(feature = "unit-thermodynamic-temperature")]
pub use uom::si::f32::ThermodynamicTemperature;
#[cfg(feature = "unit-time")]
pub use uom::si::f32::Time;
}
pub trait Device {
fn handle_error(&mut self, err: Error);
}
#[derive(Debug)]
pub struct Context<'a> {
pub mav: bool,
pub user: &'a dyn Any,
}
impl<'a> Default for Context<'a> {
fn default() -> Self {
Self::new()
}
}
impl<'a> Context<'a> {
pub fn new() -> Self {
Context {
mav: false,
user: &(),
}
}
pub fn new_with_user(user: &'a dyn Any) -> Self {
Context { mav: false, user }
}
pub fn user<U: Any>(&'a self) -> Option<&'a U> {
self.user.downcast_ref()
}
pub fn mav(&self) -> bool {
self.mav
}
}
#[cfg(test)]
mod tests {
macro_rules! fixture_device {
($dev:ident) => {
impl $crate::Device for $dev {
fn handle_error(&mut self, _err: $crate::error::Error) {}
}
};
}
pub(crate) use fixture_device;
}