use std::pin::Pin;
use std::task::Poll;
use crate::Waiter;
#[deprecated(note = "use kio::time::Deadline, which also works on wasm and can be re-armed in place")]
pub struct Sleep {
inner: Pin<Box<::tokio::time::Sleep>>,
}
#[allow(deprecated)]
impl Sleep {
pub fn new(sleep: ::tokio::time::Sleep) -> Self {
Self { inner: Box::pin(sleep) }
}
pub fn poll(&mut self, waiter: &Waiter) -> Poll<()> {
waiter.poll_future(self.inner.as_mut())
}
pub async fn wait(&mut self) {
crate::wait(|waiter| self.poll(waiter)).await
}
}
#[cfg(test)]
#[allow(deprecated)]
mod tests {
use super::*;
use ::tokio::time::Instant;
use std::time::Duration;
#[::tokio::test(start_paused = true)]
async fn sleep_fires_at_its_deadline() {
let deadline = Instant::now() + Duration::from_millis(50);
let mut sleep = Sleep::new(::tokio::time::sleep_until(deadline));
sleep.wait().await;
assert!(Instant::now() >= deadline, "returned before the deadline");
}
}