wasmrs_rx/flux/
observer.rs1use wasmrs_runtime::ConditionallySendSync;
2
3use super::Signal;
4use crate::Error;
5
6pub trait Observer<Item, Err>
8where
9 Item: ConditionallySendSync,
10 Err: ConditionallySendSync,
11{
12 fn send_signal(&self, signal: Signal<Item, Err>) -> Result<(), Error>;
14
15 fn send_result(&self, result: Result<Item, Err>) -> Result<(), Error> {
17 self.send_signal(match result {
18 Ok(ok) => Signal::Ok(ok),
19 Err(err) => Signal::Err(err),
20 })
21 }
22
23 fn send(&self, item: Item) -> Result<(), Error> {
25 self.send_signal(Signal::Ok(item))
26 }
27
28 fn error(&self, err: Err) -> Result<(), Error> {
30 self.send_signal(Signal::Err(err))
31 }
32
33 fn complete(&self) {
35 let _ = self.send_signal(Signal::Complete);
36 }
37
38 fn is_complete(&self) -> bool;
40}
41
42impl<Item, Err, F> Observer<Item, Err> for F
43where
44 Item: ConditionallySendSync,
45 Err: ConditionallySendSync,
46 F: Fn(Signal<Item, Err>) -> Result<(), Error>,
47{
48 fn send_signal(&self, signal: Signal<Item, Err>) -> Result<(), Error> {
49 self(signal)
50 }
51
52 fn is_complete(&self) -> bool {
53 false
54 }
55}