agner_init_ack/
context_ext.rs1use agner_actors::{ActorID, Exit, Never};
2
3use crate::channel::InitAckTx;
4
5pub trait ContextInitAckExt {
6 fn init_ack<E>(&mut self, result: Result<ActorID, E>)
7 where
8 E: Into<Exit>;
9
10 fn init_ack_ok(&mut self, actor_id_opt: Option<ActorID>);
11
12 fn init_ack_err<E>(&mut self, err: E)
13 where
14 E: Into<Exit>,
15 {
16 self.init_ack(Err(err))
17 }
18}
19
20impl<M> ContextInitAckExt for agner_actors::Context<M> {
21 fn init_ack<E>(&mut self, result: Result<ActorID, E>)
22 where
23 E: Into<Exit>,
24 {
25 if let Some(init_ack_tx) = self.take::<InitAckTx>() {
26 init_ack_tx.ack(result)
27 }
28 }
29
30 fn init_ack_ok(&mut self, actor_id_opt: Option<ActorID>) {
31 let actor_id = actor_id_opt.unwrap_or_else(|| self.actor_id());
32 self.init_ack::<Never>(Ok(actor_id))
33 }
34}