use crate::core::PacketKey;
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub struct TimeoutEvent {
pub key: PacketKey,
pub elapsed_ticks: u64,
pub attempts: u8,
}
impl TimeoutEvent {
#[must_use]
pub const fn new(key: PacketKey, elapsed_ticks: u64, attempts: u8) -> Self {
Self {
key,
elapsed_ticks,
attempts,
}
}
}
pub trait TimeoutPolicy {
fn has_timed_out(&self, key: PacketKey, now_ticks: u64) -> bool;
fn timeout_event(&self, key: PacketKey, elapsed_ticks: u64, attempts: u8) -> TimeoutEvent {
TimeoutEvent::new(key, elapsed_ticks, attempts)
}
}