mm1_core/context/
tell.rs

1use std::future::Future;
2
3use mm1_address::address::Address;
4use mm1_common::errors::error_of::ErrorOf;
5use mm1_common::impl_error_kind;
6use mm1_proto::Message;
7
8use crate::context::Call;
9use crate::message::AnyMessage;
10
11#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
12pub enum TellErrorKind {
13    InternalError,
14    NotFound,
15    Closed,
16    Full,
17}
18
19pub trait Tell: Call<Address, AnyMessage, Outcome = Result<(), ErrorOf<TellErrorKind>>> {
20    fn tell<M>(
21        &mut self,
22        to: Address,
23        msg: M,
24    ) -> impl Future<Output = Result<(), ErrorOf<TellErrorKind>>> + Send
25    where
26        M: Message,
27    {
28        async move {
29            let message = AnyMessage::new(msg);
30            self.call(to, message).await
31        }
32    }
33}
34
35impl<T> Tell for T where T: Call<Address, AnyMessage, Outcome = Result<(), ErrorOf<TellErrorKind>>> {}
36
37impl_error_kind!(TellErrorKind);