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