use crate::{Actor, ActorWrapper, Delegate, Handler, Message, MessageSendError};
use alloc::boxed::Box;
pub trait ActorRef<A: Actor> {}
#[async_trait::async_trait]
pub trait MessageSender<M: Message>: Send + Sync + 'static {
async fn send(&self, message: M) -> Result<M::Result, MessageSendError>;
}
pub struct LocalRef<A: Actor, D: Delegate>(pub(crate) slacktor::ActorHandle<ActorWrapper<A, D>>, pub(crate) u64);
impl<A: Actor, D: Delegate> LocalRef<A, D> {
#[must_use]
pub fn get_id(&self) -> u64 {
self.1
}
}
impl<A: Actor, D: Delegate> Clone for LocalRef<A, D> {
fn clone(&self) -> Self {
Self(self.0.clone(), self.1)
}
}
#[async_trait::async_trait]
impl<A: Handler<M>, M: Message, D: Delegate> MessageSender<M> for LocalRef<A, D> {
#[inline]
async fn send(&self, message: M) -> Result<M::Result, MessageSendError> {
Ok(self.0.send(message).await)
}
}