use core::time::Duration;
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(
feature = "le-stream",
derive(le_stream::FromLeStream, le_stream::ToLeStream)
)]
#[derive(Clone, Debug, Eq, Hash, PartialEq)]
pub struct ApsKeyMetadata {
bitmask: u16,
outgoing_frame_counter: u32,
incoming_frame_counter: u32,
ttl_in_seconds: u16,
}
impl ApsKeyMetadata {
#[must_use]
pub const fn new(
bitmask: u16,
outgoing_frame_counter: u32,
incoming_frame_counter: u32,
ttl_in_seconds: u16,
) -> Self {
Self {
bitmask,
outgoing_frame_counter,
incoming_frame_counter,
ttl_in_seconds,
}
}
#[must_use]
pub const fn bitmask(&self) -> u16 {
self.bitmask
}
#[must_use]
pub const fn outgoing_frame_counter(&self) -> u32 {
self.outgoing_frame_counter
}
#[must_use]
pub const fn incoming_frame_counter(&self) -> u32 {
self.incoming_frame_counter
}
#[must_use]
pub const fn ttl_in_seconds(&self) -> u16 {
self.ttl_in_seconds
}
#[must_use]
pub fn ttl(&self) -> Duration {
Duration::from_secs(self.ttl_in_seconds.into())
}
}