congestion_limiter/limits/
mod.rs1mod aimd;
4mod defaults;
5mod fixed;
6mod gradient;
7mod vegas;
8mod windowed;
9
10use async_trait::async_trait;
11use std::time::Duration;
12
13use crate::limiter::Outcome;
14
15pub use aimd::Aimd;
16pub use fixed::Fixed;
17pub use gradient::Gradient;
18pub use vegas::Vegas;
19pub use windowed::Windowed;
20
21#[async_trait]
23pub trait LimitAlgorithm {
24 fn limit(&self) -> usize;
26
27 async fn update(&self, sample: Sample) -> usize;
29}
30
31#[derive(Debug, Clone, PartialEq, Eq)]
33pub struct Sample {
34 pub(crate) latency: Duration,
35 pub(crate) in_flight: usize,
37 pub(crate) outcome: Outcome,
38}