Skip to main content

serviceless/
reply_handle.rs

1use service_channel::oneshot;
2
3use crate::{Error, Message};
4
5pub struct ReplyHandle<M>
6where
7    M: Message,
8{
9    sender: Option<oneshot::Sender<M::Result>>,
10}
11
12impl<M> ReplyHandle<M>
13where
14    M: Message,
15{
16    pub(crate) fn new(sender: Option<oneshot::Sender<M::Result>>) -> Self {
17        Self { sender }
18    }
19
20    pub fn send(self, value: M::Result) -> std::result::Result<(), Error> {
21        if let Some(sender) = self.sender {
22            sender.send(value).map_err(|_| Error::ServiceStoped)
23        } else {
24            Ok(())
25        }
26    }
27
28    pub fn is_closed(&self) -> bool {
29        if let Some(sender) = &self.sender {
30            sender.is_canceled()
31        } else {
32            false
33        }
34    }
35}