use std::error::Error;
use std::fmt::{Debug, Display, Formatter};
use std::str::FromStr;
#[derive(Debug, Clone, PartialEq)]
pub enum DeviceMessageType {
DBIRTH,
DDEATH,
DDATA,
DCMD,
}
impl ToString for DeviceMessageType {
fn to_string(&self) -> String {
match self {
DeviceMessageType::DBIRTH => "DBIRTH".to_string(),
DeviceMessageType::DDEATH => "DDEATH".to_string(),
DeviceMessageType::DDATA => "DDATA".to_string(),
DeviceMessageType::DCMD => "DCMD".to_string(),
}
}
}
pub struct DeviceMessageTypeParseError;
impl Debug for DeviceMessageTypeParseError {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
Display::fmt(self, f)
}
}
impl Display for DeviceMessageTypeParseError {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
f.write_str("Unknown DeviceMessageType")
}
}
impl Error for DeviceMessageTypeParseError {}
impl FromStr for DeviceMessageType {
type Err = DeviceMessageTypeParseError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
"DBIRTH" => Ok(DeviceMessageType::DBIRTH),
"DDEATH" => Ok(DeviceMessageType::DDEATH),
"DDATA" => Ok(DeviceMessageType::DDATA),
"DCMD" => Ok(DeviceMessageType::DCMD),
_ => Err(DeviceMessageTypeParseError),
}
}
}