another_rxrust/observables/
start.rs1use 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}