netsim 0.3.0

Run tests in network-isolated threads. Intercept and meddle with their packets.
Documentation
//! `Sink`/`Stream` adapters.
//!
//! Intended for use with `Sink`s and `Stream`s transporting packets.

use crate::priv_prelude::*;

mod delay;
mod loss;

pub use self::{
    delay::Delay,
    loss::Loss,
};

pub(crate) fn expovariate_duration<R>(
    mean_duration: Duration,
    rng: &mut R,
) -> Duration
where
    R: Rng,
{
    let mean_duration = mean_duration.as_secs_f64();
    loop {
        let duration = mean_duration * -rng.gen::<f64>().ln();
        match Duration::try_from_secs_f64(duration) {
            Ok(duration) => break duration,
            Err(_) => continue,
        }
    }
}