use embassy_time::{Duration, Instant};
use crate::im::IM_REVISION;
use crate::tlv::{FromTLV, ToTLV};
#[derive(Debug, Clone, PartialEq, Eq, Hash, FromTLV, ToTLV)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub struct TimedReq {
pub timeout: u16,
#[tagval(crate::im::encoding::IM_REVISION_TAG)]
pub interaction_model_revision: Option<u8>,
}
impl TimedReq {
pub const fn new(timeout: u16) -> Self {
Self {
timeout,
interaction_model_revision: Some(IM_REVISION),
}
}
pub fn timeout_instant(&self) -> Instant {
Instant::now().saturating_add(Duration::from_millis(self.timeout as _))
}
}