use crate::prelude::*;
pub fn throw<O, U, Item, Err>(
e: Err,
) -> Observable<impl FnOnce(Subscriber<O, U>) + Clone, Item, Err>
where
O: Observer<Item, Err>,
U: SubscriptionLike,
Err: Clone,
Item: Clone,
{
Observable::new(move |mut subscriber| {
subscriber.error(e);
})
}
pub fn empty<O, U, Item>()
-> Observable<impl FnOnce(Subscriber<O, U>) + Clone, Item, ()>
where
O: Observer<Item, ()>,
U: SubscriptionLike,
{
Observable::new(move |mut subscriber: Subscriber<O, U>| {
subscriber.complete();
})
}
pub fn never<O, U, Item>()
-> Observable<impl FnOnce(Subscriber<O, U>) + Clone, Item, ()>
where
O: Observer<Item, ()>,
U: SubscriptionLike,
{
Observable::new(move |_subscriber: Subscriber<O, U>| {
loop {
std::thread::sleep(std::time::Duration::from_secs(1));
}
})
}
#[cfg(test)]
mod test {
use crate::prelude::*;
#[test]
fn throw() {
let mut value_emitted = false;
let mut completed = false;
let mut error_emitted = String::new();
observable::throw(String::from("error")).subscribe_all(
|_: i32| value_emitted = true,
|e: String| error_emitted = e,
|| completed = true,
);
assert!(!value_emitted);
assert!(!completed);
assert_eq!(error_emitted, "error");
}
#[test]
fn empty() {
let mut hits = 0;
let mut completed = false;
observable::empty()
.subscribe_complete(|_: &()| hits += 1, || completed = true);
assert_eq!(hits, 0);
assert_eq!(completed, true);
}
}