use crate::error::Error;
use crate::tlv::{FromTLV, TagType, ToTLV};
use crate::utils::storage::WriteBuf;
use super::{IMStatusCode, IM_REVISION};
#[derive(Debug, Clone, PartialEq, Eq, Hash, FromTLV, ToTLV)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub struct Status {
pub status: IMStatusCode,
pub cluster_status: Option<u16>,
}
impl Status {
pub const fn new(status: IMStatusCode, cluster_status: Option<u16>) -> Status {
Status {
status,
cluster_status,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, FromTLV, ToTLV)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub struct StatusResp {
pub status: IMStatusCode,
#[tagval(crate::im::encoding::IM_REVISION_TAG)]
pub interaction_model_revision: Option<u8>,
}
impl Default for StatusResp {
fn default() -> Self {
Self {
status: IMStatusCode::Success,
interaction_model_revision: Some(IM_REVISION),
}
}
}
impl StatusResp {
pub fn write(wb: &mut WriteBuf, status: IMStatusCode) -> Result<(), Error> {
Self {
status,
..Default::default()
}
.to_tlv(&TagType::Anonymous, &mut *wb)
}
}