use core::fmt::Display;
use le_stream::{FromLeStream, ToLeStream};
use num_traits::FromPrimitive;
use crate::ezsp::Status;
use crate::frame::Parameter;
const ID: u16 = 0x0058;
#[derive(Clone, Debug, Eq, PartialEq, FromLeStream, ToLeStream)]
pub struct Response {
reason: u8,
}
impl Response {
pub const ID: u16 = ID;
pub fn reason(&self) -> Result<Status, u8> {
Status::from_u8(self.reason).ok_or(self.reason)
}
}
impl Display for Response {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self.reason() {
Ok(status) => write!(f, "{status} ({status:#04X})"),
Err(reason) => write!(f, "Unknown reason: {reason:#04X}"),
}
}
}
impl Parameter for Response {
const ID: u16 = ID;
}