agner_init_ack/
context_ext.rs

1use 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}