pub trait Sleeper { type Sleep: Future<Output = ()> + Send + 'static; fn sleep(&self, dur: Duration) -> Self::Sleep; }