actix_broker/
subscribe.rs1use std::any::TypeId;
3
4use actix::{dev::ToEnvelope, prelude::*};
5
6use crate::{
7 broker::{ArbiterBroker, RegisteredBroker, SystemBroker},
8 msgs::*,
9};
10
11pub trait BrokerSubscribe
14where
15 Self: Actor,
16 <Self as Actor>::Context: AsyncContext<Self>,
17{
18 fn subscribe_async<T: RegisteredBroker, M: BrokerMsg>(&self, ctx: &mut Self::Context)
20 where
21 Self: Handler<M>,
22 <Self as Actor>::Context: ToEnvelope<Self, M>,
23 {
24 let broker = T::get_broker();
25 let recipient = ctx.address().recipient::<M>();
26 broker.do_send(SubscribeAsync(recipient, TypeId::of::<Self>()));
27 }
28
29 fn subscribe_sync<T: RegisteredBroker, M: BrokerMsg>(&self, ctx: &mut Self::Context)
34 where
35 Self: Handler<M>,
36 <Self as Actor>::Context: ToEnvelope<Self, M>,
37 {
38 let broker = T::get_broker();
39 let recipient = ctx.address().recipient::<M>();
40
41 broker
42 .send(SubscribeSync(recipient, TypeId::of::<Self>()))
43 .into_actor(self)
44 .map(move |m, _, ctx| {
45 if let Ok(Some(msg)) = m {
46 ctx.notify(msg);
47 }
48 })
49 .wait(ctx);
50 }
51
52 fn subscribe_system_async<M: BrokerMsg>(&self, ctx: &mut Self::Context)
55 where
56 Self: Handler<M>,
57 <Self as Actor>::Context: ToEnvelope<Self, M>,
58 {
59 self.subscribe_async::<SystemBroker, M>(ctx);
60 }
61
62 fn subscribe_system_sync<M: BrokerMsg>(&self, ctx: &mut Self::Context)
65 where
66 Self: Handler<M>,
67 <Self as Actor>::Context: ToEnvelope<Self, M>,
68 {
69 self.subscribe_sync::<SystemBroker, M>(ctx);
70 }
71
72 fn subscribe_arbiter_async<M: BrokerMsg>(&self, ctx: &mut Self::Context)
75 where
76 Self: Handler<M>,
77 <Self as Actor>::Context: ToEnvelope<Self, M>,
78 {
79 self.subscribe_async::<ArbiterBroker, M>(ctx);
80 }
81
82 fn subscribe_arbiter_sync<M: BrokerMsg>(&self, ctx: &mut Self::Context)
85 where
86 Self: Handler<M>,
87 <Self as Actor>::Context: ToEnvelope<Self, M>,
88 {
89 self.subscribe_sync::<ArbiterBroker, M>(ctx);
90 }
91}
92
93impl<A> BrokerSubscribe for A
94where
95 A: Actor,
96 <A as Actor>::Context: AsyncContext<A>,
97{
98}