use std::fmt::Display;
use rxr::{subjects::BehaviorSubject, subscribe::Subscriber};
use rxr::{ObservableExt, Observer, Subscribeable};
pub fn create_subscriber<T: Display>(subscriber_id: i32) -> Subscriber<T> {
Subscriber::new(
move |v| println!("Subscriber #{} emitted: {}", subscriber_id, v),
|_| eprintln!("Error"),
move || println!("Completed {}", subscriber_id),
)
}
pub fn main() {
let (mut emitter, mut receiver) = BehaviorSubject::emitter_receiver(100);
receiver.subscribe(create_subscriber(1));
emitter.next(101); emitter.next(102);
receiver
.clone() .map(|v| format!("mapped {}", v))
.subscribe(create_subscriber(2));
receiver.subscribe(create_subscriber(3));
emitter.next(103);
emitter.complete();
receiver.subscribe(create_subscriber(4));
emitter.next(104);
}