diff options
| author | 2022-01-28 18:43:20 +0700 | |
|---|---|---|
| committer | 2022-01-28 21:37:17 +0700 | |
| commit | e730d97f61bc2edc77d2f061b6a763c4d0a948df (patch) | |
| tree | 8966e2ad3b093c83295b3ad0c5b8d1c460a1c158 /futures/src | |
| parent | 167be45a7db7c1f60a79116766bdf38300429c6a (diff) | |
| download | iced-e730d97f61bc2edc77d2f061b6a763c4d0a948df.tar.gz iced-e730d97f61bc2edc77d2f061b6a763c4d0a948df.tar.bz2 iced-e730d97f61bc2edc77d2f061b6a763c4d0a948df.zip | |
Implement `time` module for `wasm-bindgen` backend in `iced_futures`
Diffstat (limited to '')
| -rw-r--r-- | futures/src/backend/wasm/wasm_bindgen.rs | 44 | 
1 files changed, 44 insertions, 0 deletions
| diff --git a/futures/src/backend/wasm/wasm_bindgen.rs b/futures/src/backend/wasm/wasm_bindgen.rs index e914aeba..b726501a 100644 --- a/futures/src/backend/wasm/wasm_bindgen.rs +++ b/futures/src/backend/wasm/wasm_bindgen.rs @@ -13,3 +13,47 @@ impl crate::Executor for Executor {          wasm_bindgen_futures::spawn_local(future);      }  } + +pub mod time { +    //! Listen and react to time. +    use crate::subscription::{self, Subscription}; +    use crate::BoxStream; + +    /// 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, wasm_timer::Instant> { +        Subscription::from_recipe(Every(duration)) +    } + +    #[derive(Debug)] +    struct Every(std::time::Duration); + +    impl<H, E> subscription::Recipe<H, E> for Every +    where +        H: std::hash::Hasher, +    { +        type Output = wasm_timer::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: BoxStream<E>, +        ) -> BoxStream<Self::Output> { +            use futures::stream::StreamExt; + +            wasm_timer::Interval::new(self.0) +                .map(|_| wasm_timer::Instant::now()) +                .boxed_local() +        } +    } +} | 
