use crate::{
endpoint,
event::{self, IntoEvent},
frame::{ack::AckRanges as AckRangesTrait, ack_elicitation::AckElicitation, Ack, FrameTrait},
packet::number::PacketNumber,
time::Timestamp,
transmission,
};
use s2n_codec::encoder::EncoderValue;
#[cfg(any(test, feature = "testing"))]
pub mod testing;
pub trait Writer {
fn current_time(&self) -> Timestamp;
fn transmission_constraint(&self) -> transmission::Constraint;
fn transmission_mode(&self) -> transmission::Mode;
fn remaining_capacity(&self) -> usize;
#[inline]
fn write_ack_frame<AckRanges: AckRangesTrait>(
&mut self,
ack_frame: &Ack<AckRanges>,
) -> Option<PacketNumber> {
self.write_frame(ack_frame)
}
fn write_frame<Frame>(&mut self, frame: &Frame) -> Option<PacketNumber>
where
Frame: EncoderValue + FrameTrait,
for<'frame> &'frame Frame: IntoEvent<event::builder::Frame>;
fn write_fitted_frame<Frame>(&mut self, frame: &Frame) -> PacketNumber
where
Frame: EncoderValue + FrameTrait,
for<'frame> &'frame Frame: IntoEvent<event::builder::Frame>;
fn write_frame_forced<Frame>(&mut self, frame: &Frame) -> Option<PacketNumber>
where
Frame: EncoderValue + FrameTrait,
for<'frame> &'frame Frame: IntoEvent<event::builder::Frame>;
fn ack_elicitation(&self) -> AckElicitation;
fn packet_number(&self) -> PacketNumber;
fn local_endpoint_type(&self) -> endpoint::Type;
fn header_len(&self) -> usize;
fn tag_len(&self) -> usize;
}