use crate::actor::{Actor, ActorError};
use std::fmt::Debug;
use tokio::sync::mpsc;
#[derive(Clone)]
pub struct ActorRef<A: Actor> {
id: String, sender: mpsc::Sender<A::Event>,
}
impl<A: Actor> Debug for ActorRef<A> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("ActorRef")
.field("id", &self.id)
.field("sender", &"<mpsc::Sender>")
.finish()
}
}
impl<A: Actor> ActorRef<A> {
pub async fn send(&self, event: A::Event) -> Result<(), ActorError> {
self.sender.send(event).await.map_err(|_send_error| {
ActorError::Stopped
})
}
pub(crate) fn new(id: String, sender: mpsc::Sender<A::Event>) -> Self {
Self { id, sender }
}
pub fn id(&self) -> &str {
&self.id
}
}