another_rxrust/observables/
start.rs

1use crate::prelude::*;
2
3pub fn start<'a, Item, F>(f: F) -> Observable<'a, Item>
4where
5  Item: Clone + Send + Sync,
6  F: Fn() -> Item + Send + Sync + 'a,
7{
8  Observable::create(move |s| {
9    s.next(f());
10    s.complete();
11  })
12}
13
14#[cfg(test)]
15mod test {
16  use crate::prelude::*;
17  use std::sync::{Arc, RwLock};
18
19  #[test]
20  fn basic() {
21    let n = Arc::new(RwLock::new(0));
22    let f = move || {
23      let x = *n.read().unwrap();
24      *n.write().unwrap() += 1;
25      x
26    };
27
28    observables::start(f.clone()).subscribe(
29      print_next_fmt!("{}"),
30      print_error!(),
31      print_complete!(),
32    );
33
34    observables::start(f.clone()).subscribe(
35      print_next_fmt!("{}"),
36      print_error!(),
37      print_complete!(),
38    );
39  }
40}