mod aimd;
mod defaults;
mod fixed;
mod gradient;
mod vegas;
mod windowed;
use async_trait::async_trait;
use std::time::Duration;
use crate::limiter::Outcome;
pub use aimd::Aimd;
pub use fixed::Fixed;
pub use gradient::Gradient;
pub use vegas::Vegas;
pub use windowed::Windowed;
#[async_trait]
pub trait LimitAlgorithm {
fn limit(&self) -> usize;
async fn update(&self, sample: Sample) -> usize;
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Sample {
pub(crate) latency: Duration,
pub(crate) in_flight: usize,
pub(crate) outcome: Outcome,
}