MessageIterator

Trait MessageIterator 

Source
pub trait MessageIterator: Iterator<Item = Arc<dyn Message>> {
    // Provided methods
    fn handle<'f, M, H>(
        self,
        f: impl IntoMessageHandler<M, Handler = H>,
    ) -> HandleMessage<'f, Self> 
       where Self: Sized,
             M: Message + ?Sized,
             H: ErasedMessageHandler + 'f { ... }
    fn run(self)
       where Self: Sized { ... }
}
Expand description

An iterator which yields messages.

Provided Methods§

Source

fn handle<'f, M, H>( self, f: impl IntoMessageHandler<M, Handler = H>, ) -> HandleMessage<'f, Self>
where Self: Sized, M: Message + ?Sized, H: ErasedMessageHandler + 'f,

Takes a message handler and creates an iterator which calls that message handler on each received message

Examples found in repository?
examples/simple.rs (lines 66-68)
63    fn process_messages(&mut self) {
64        self.sub
65            .message_iter()
66            .handle(|msg: Arc<TestMsg0>| {
67                println!("test_sub0.sub: {:?}", msg);
68            })
69            .run();
70    }
71}
72
73struct TestSubsciber1 {
74    sub: MultiSubscription,
75}
76
77impl TestSubsciber1 {
78    fn new() -> Self {
79        let mut multi_sub = MultiSubscription::unregistered();
80        multi_sub.add::<TestMsg0>().add::<TestMsg1>();
81
82        Self { sub: multi_sub }
83    }
84}
85
86impl Subscriber for TestSubsciber1 {
87    fn subscribe(&mut self, msg_broker: Arc<dyn MessageBroker>) {
88        let _ = self.sub.register(Arc::clone(&msg_broker));
89    }
90
91    fn unsubscribe(&mut self) {
92        let _ = self.sub.unregister();
93    }
94
95    fn activate(&self) {
96        let _ = self.sub.activate();
97    }
98
99    fn deactivate(&self) {
100        let _ = self.sub.deactivate();
101    }
102
103    fn process_messages(&mut self) {
104        self.sub
105            .message_iter()
106            .handle(|msg: Arc<TestMsg0>| {
107                println!("test_sub1.sub0: {:?}", msg);
108            })
109            .handle(|msg: Arc<TestMsg1>| {
110                println!("test_sub1.sub1: {:?}", msg);
111            })
112            .run();
113    }
Source

fn run(self)
where Self: Sized,

Runs an iterator.

Examples found in repository?
examples/simple.rs (line 69)
63    fn process_messages(&mut self) {
64        self.sub
65            .message_iter()
66            .handle(|msg: Arc<TestMsg0>| {
67                println!("test_sub0.sub: {:?}", msg);
68            })
69            .run();
70    }
71}
72
73struct TestSubsciber1 {
74    sub: MultiSubscription,
75}
76
77impl TestSubsciber1 {
78    fn new() -> Self {
79        let mut multi_sub = MultiSubscription::unregistered();
80        multi_sub.add::<TestMsg0>().add::<TestMsg1>();
81
82        Self { sub: multi_sub }
83    }
84}
85
86impl Subscriber for TestSubsciber1 {
87    fn subscribe(&mut self, msg_broker: Arc<dyn MessageBroker>) {
88        let _ = self.sub.register(Arc::clone(&msg_broker));
89    }
90
91    fn unsubscribe(&mut self) {
92        let _ = self.sub.unregister();
93    }
94
95    fn activate(&self) {
96        let _ = self.sub.activate();
97    }
98
99    fn deactivate(&self) {
100        let _ = self.sub.deactivate();
101    }
102
103    fn process_messages(&mut self) {
104        self.sub
105            .message_iter()
106            .handle(|msg: Arc<TestMsg0>| {
107                println!("test_sub1.sub0: {:?}", msg);
108            })
109            .handle(|msg: Arc<TestMsg1>| {
110                println!("test_sub1.sub1: {:?}", msg);
111            })
112            .run();
113    }

Implementations on Foreign Types§

Source§

impl<I: MessageIterator + ?Sized> MessageIterator for &mut I

Source§

impl<I: MessageIterator + ?Sized> MessageIterator for Box<I>

Implementors§