serviceless/
reply_handle.rs1use 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}