[−][src]Trait pharos::Observable
Indicate that a type is observable. You can call observe
to get a
stream of events.
Generally used with a Pharos object which manages the observers for you.
use pharos::*; use futures::stream::StreamExt; // The event we want to broadcast // #[ derive( Debug, Clone ) ] // enum Steps { Step1 , Step2 , Done , // Data is possible, but it has to be clone and will be cloned for each observer // except observers that filter this event out. // Error(u8) , } impl Steps { fn is_err( &self ) -> bool { match self { Self::Error(_) => true , _ => false , } } } // The object we want to be observable // struct Foo { pharos: Pharos<Steps> }; impl Observable<Steps> for Foo { // Pharos implements observable, so we just forward the call. // fn observe( &mut self, options: ObserveConfig<Steps> ) -> Events<Steps> { self.pharos.observe( options ) } } // use in async context // async fn task() { let mut foo = Foo { pharos: Pharos::default() }; let mut errors = foo.observe( Filter::pointer( Steps::is_err ).into() ); // will only be notified on errors now // let next_error = errors.next().await; }
Required methods
fn observe(&mut self, options: ObserveConfig<Event>) -> Events<Event>
Add an observer to the observable. Options can be in order to choose channel type and to filter events with a predicate.
Implementors
impl<Event> Observable<Event> for Pharos<Event> where
Event: 'static + Clone + Send,
[src]
Event: 'static + Clone + Send,