s2n_quic_core/transmission/
mod.rs1use crate::frame::ack_elicitation::{AckElicitable, AckElicitation};
5#[cfg(any(test, feature = "generator"))]
6use bolero_generator::*;
7use core::ops::AddAssign;
8
9pub mod constraint;
10pub mod interest;
11pub mod mode;
12pub mod writer;
13
14pub use constraint::Constraint;
15pub use interest::Interest;
16pub use mode::Mode;
17pub use writer::Writer;
18
19pub trait Provider {
20 fn on_transmit<W: Writer>(&mut self, context: &mut W);
21}
22
23#[derive(Clone, Copy, Debug, Default)]
24#[cfg_attr(any(test, feature = "generator"), derive(TypeGenerator))]
25pub struct Outcome {
26 pub ack_elicitation: AckElicitation,
27 pub is_congestion_controlled: bool,
28 #[cfg_attr(any(test, feature = "generator"), generator(0..=65_535))]
29 pub bytes_sent: usize,
30 #[cfg_attr(any(test, feature = "generator"), generator(0..=65_535))]
31 pub bytes_progressed: usize,
32}
33
34impl AckElicitable for Outcome {
35 fn ack_elicitation(&self) -> AckElicitation {
36 self.ack_elicitation
37 }
38}
39
40impl AddAssign for Outcome {
41 fn add_assign(&mut self, rhs: Self) {
42 self.ack_elicitation |= rhs.ack_elicitation;
43 self.is_congestion_controlled |= rhs.is_congestion_controlled;
44 self.bytes_sent += rhs.bytes_sent;
45 self.bytes_progressed += rhs.bytes_progressed;
46 }
47}