use crate::prelude::*;
use log::{debug, error};
use serde::{Deserialize, Serialize};
use uuid::Uuid;
pub(crate) struct SystemActor;
impl SystemActor {
pub(crate) async fn processor(self, context: Context, message: Message) -> ActorResult<Self> {
if let Some(msg) = message.content_as::<SystemActorMessage>() {
if let SystemActorMessage::FindByName { reply_to, name } = &*msg {
debug!("Attempting to locate Actor by name: {}", name);
let found = context.system.find_aid_by_name(&name);
let reply = Message::new(SystemActorMessage::FindByNameResult {
system_uuid: context.system.uuid(),
name: name.clone(),
aid: found,
});
reply_to.send(reply).unwrap_or_else(|error| {
error!(
"Could not send reply to FindByName to actor {}. Error: {:?}",
reply_to, error
)
});
}
Ok(Status::done(self))
} else if let Some(_) = message.content_as::<SystemMsg>() {
Ok(Status::done(self))
} else {
error!("Unhandled message received.");
Ok(Status::done(self))
}
}
}
#[derive(Serialize, Deserialize, Debug)]
pub(crate) enum SystemActorMessage {
FindByName { reply_to: Aid, name: String },
FindByNameResult {
system_uuid: Uuid,
name: String,
aid: Option<Aid>,
},
}