#![cfg_attr(not(feature = "std"), no_std)]
#[cfg(feature = "std")]
pub mod manufacturers;
pub mod mbus_data;
pub use m_bus_application_layer as user_data;
pub use m_bus_core::decryption;
use m_bus_core::ApplicationLayerError;
pub use m_bus_core::{FrameError, Function};
pub use wired_mbus_link_layer::{Address, WiredFrame};
pub use wireless_mbus_link_layer::{ManufacturerId, WirelessFrame};
#[cfg(feature = "std")]
pub use mbus_data::serialize_mbus_data;
#[derive(Debug, Clone, Copy, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize))]
#[non_exhaustive]
pub enum MbusError {
FrameError(FrameError),
WirelessFrameError(wireless_mbus_link_layer::FrameError),
ApplicationLayerError(ApplicationLayerError),
DataRecordError(user_data::variable_user_data::DataRecordError),
}
#[cfg(feature = "std")]
impl std::fmt::Display for MbusError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
MbusError::FrameError(e) => write!(f, "{e}"),
MbusError::WirelessFrameError(e) => write!(f, "{:?}", e),
MbusError::ApplicationLayerError(e) => write!(f, "{e}"),
MbusError::DataRecordError(e) => write!(f, "{e}"),
}
}
}
#[cfg(feature = "std")]
impl std::error::Error for MbusError {}
impl From<FrameError> for MbusError {
fn from(error: FrameError) -> Self {
Self::FrameError(error)
}
}
impl From<ApplicationLayerError> for MbusError {
fn from(error: ApplicationLayerError) -> Self {
Self::ApplicationLayerError(error)
}
}
impl From<user_data::variable_user_data::DataRecordError> for MbusError {
fn from(error: user_data::variable_user_data::DataRecordError) -> Self {
Self::DataRecordError(error)
}
}
impl From<wireless_mbus_link_layer::FrameError> for MbusError {
fn from(error: wireless_mbus_link_layer::FrameError) -> Self {
Self::WirelessFrameError(error)
}
}