s2n_quic_core/transmission/
mod.rs

1// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2// SPDX-License-Identifier: Apache-2.0
3
4use 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}