rx-rust 0.3.0

Reactive Programming in Rust inspired by ReactiveX https://reactivex.io/
Documentation
use super::Scheduler;
use crate::{disposable::Disposable, utils::types::NecessarySendSync};
use futures::{
    executor::ThreadPool,
    stream::{AbortHandle, Abortable},
    task::SpawnExt,
};
use std::time::Duration;

/// Exposes `ThreadPool` as a multithreaded `Scheduler`.
impl Scheduler for ThreadPool {
    fn schedule_future(
        &self,
        future: impl Future<Output = ()> + NecessarySendSync + 'static,
    ) -> impl Disposable + NecessarySendSync + 'static {
        let (abort_handle, abort_registration) = AbortHandle::new_pair();
        let future = Abortable::new(future, abort_registration);
        self.spawn(async {
            _ = future.await;
        })
        .expect("failed to spawn future");
        abort_handle
    }

    fn sleep(&self, duration: Duration) -> impl Future + NecessarySendSync + 'static {
        async_io::Timer::after(duration)
    }
}