another-rxrust 0.0.46

A different implementation than `rxRust` for easier use of `ReactiveX` in `Rust`.
Documentation
use super::scheduler::IScheduler;

#[derive(Clone)]
pub struct DefaultScheduler {}

impl DefaultScheduler {
  pub fn new() -> DefaultScheduler {
    DefaultScheduler {}
  }
}

impl IScheduler<'_> for DefaultScheduler {
  fn post<F>(&self, f: F)
  where
    F: Fn() + Send + Sync,
  {
    f();
  }
  fn abort(&self) {}
}

pub fn default_scheduler() -> fn() -> DefaultScheduler {
  || DefaultScheduler::new()
}

#[cfg(test)]
mod test {
  use crate::prelude::*;
  use scheduler::IScheduler;
  use std::{thread, time};

  #[test]
  fn basic() {
    {
      let s = schedulers::default_scheduler()();

      s.post(|| {
        println!("#1 start");
        thread::sleep(time::Duration::from_millis(500));
        println!("#1 end");
      });

      s.post(|| {
        println!("#2 start");
        thread::sleep(time::Duration::from_millis(500));
        println!("#2 end");
      });

      s.post(|| {
        println!("#3 start");
        thread::sleep(time::Duration::from_millis(500));
        println!("#3 end");
      });
    }
  }
}