summaryrefslogtreecommitdiffstats
path: root/futures/src/time.rs
diff options
context:
space:
mode:
Diffstat (limited to 'futures/src/time.rs')
-rw-r--r--futures/src/time.rs105
1 files changed, 0 insertions, 105 deletions
diff --git a/futures/src/time.rs b/futures/src/time.rs
deleted file mode 100644
index 0ece6f04..00000000
--- a/futures/src/time.rs
+++ /dev/null
@@ -1,105 +0,0 @@
-//! Listen and react to time.
-use crate::subscription::{self, Subscription};
-
-/// Returns a [`Subscription`] that produces messages at a set interval.
-///
-/// The first message is produced after a `duration`, and then continues to
-/// produce more messages every `duration` after that.
-pub fn every<H: std::hash::Hasher, E>(
- duration: std::time::Duration,
-) -> Subscription<H, E, std::time::Instant> {
- Subscription::from_recipe(Every(duration))
-}
-
-struct Every(std::time::Duration);
-
-#[cfg(all(
- not(any(feature = "tokio", feature = "async-std")),
- feature = "smol"
-))]
-impl<H, E> subscription::Recipe<H, E> for Every
-where
- H: std::hash::Hasher,
-{
- type Output = std::time::Instant;
-
- fn hash(&self, state: &mut H) {
- use std::hash::Hash;
-
- std::any::TypeId::of::<Self>().hash(state);
- self.0.hash(state);
- }
-
- fn stream(
- self: Box<Self>,
- _input: futures::stream::BoxStream<'static, E>,
- ) -> futures::stream::BoxStream<'static, Self::Output> {
- use futures::stream::StreamExt;
-
- smol::Timer::interval(self.0).boxed()
- }
-}
-
-#[cfg(feature = "async-std")]
-impl<H, E> subscription::Recipe<H, E> for Every
-where
- H: std::hash::Hasher,
-{
- type Output = std::time::Instant;
-
- fn hash(&self, state: &mut H) {
- use std::hash::Hash;
-
- std::any::TypeId::of::<Self>().hash(state);
- self.0.hash(state);
- }
-
- fn stream(
- self: Box<Self>,
- _input: futures::stream::BoxStream<'static, E>,
- ) -> futures::stream::BoxStream<'static, Self::Output> {
- use futures::stream::StreamExt;
-
- async_std::stream::interval(self.0)
- .map(|_| std::time::Instant::now())
- .boxed()
- }
-}
-
-#[cfg(all(
- feature = "tokio",
- not(any(feature = "async-std", feature = "smol"))
-))]
-impl<H, E> subscription::Recipe<H, E> for Every
-where
- H: std::hash::Hasher,
-{
- type Output = std::time::Instant;
-
- fn hash(&self, state: &mut H) {
- use std::hash::Hash;
-
- std::any::TypeId::of::<Self>().hash(state);
- self.0.hash(state);
- }
-
- fn stream(
- self: Box<Self>,
- _input: futures::stream::BoxStream<'static, E>,
- ) -> futures::stream::BoxStream<'static, Self::Output> {
- use futures::stream::StreamExt;
-
- let start = tokio::time::Instant::now() + self.0;
-
- let stream = {
- futures::stream::unfold(
- tokio::time::interval_at(start, self.0),
- |mut interval| async move {
- Some((interval.tick().await, interval))
- },
- )
- };
-
- stream.map(tokio::time::Instant::into_std).boxed()
- }
-}