use std::fmt::{self, Debug};
use std::marker::PhantomData;
use acktor::{ActorId, Address, Message};
use crate::actor_handle::ActorHandle;
use crate::errors::NodeError;
use crate::ipc_method::{IpcConnection, IpcListener};
use crate::remote_actor::RemoteActor;
use crate::remote_address::RemoteAddress;
use crate::session::{Session, SessionHandle};
type Result<T> = std::result::Result<T, NodeError>;
#[derive(Message)]
#[result_type(bool)]
pub struct AddListener<L>(pub L)
where
L: IpcListener;
impl<L> Debug for AddListener<L>
where
L: IpcListener,
{
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_tuple(&format!("{}", acktor::utils::ShortName::of::<Self>()))
.field(&format_args!("{}", self.0.local_endpoint()))
.finish()
}
}
#[derive(Debug, Message)]
#[result_type(bool)]
pub struct RemoveListener(pub String);
#[derive(Message)]
#[result_type(bool)]
pub struct AddActor<A>(pub Address<A>)
where
A: RemoteActor;
impl<A> Debug for AddActor<A>
where
A: RemoteActor,
{
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_tuple(&format!("{}", acktor::utils::ShortName::of::<Self>()))
.field(&format_args!("{}", self.0.index()))
.finish()
}
}
#[derive(Debug, Message)]
#[result_type(bool)]
pub struct RemoveActor(pub ActorId);
#[derive(Message)]
#[result_type(Result<Address<Session>>)]
pub struct Connect<C>
where
C: IpcConnection,
{
pub endpoint: String,
pub session_label: Option<String>,
pub _phantom: PhantomData<fn() -> C>,
}
impl<C> Debug for Connect<C>
where
C: IpcConnection,
{
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_tuple(&format!("{}", acktor::utils::ShortName::of::<Self>()))
.field(&self.endpoint)
.field(&self.session_label)
.finish()
}
}
impl<C> Connect<C>
where
C: IpcConnection,
{
pub fn new(endpoint: String, session_label: Option<String>) -> Self {
Self {
endpoint,
session_label,
_phantom: PhantomData,
}
}
}
#[derive(Debug, Message)]
#[result_type(Result<RemoteAddress>)]
pub struct CreateRemoteActor {
pub session: SessionHandle,
pub label: String,
pub r#type: String,
pub config: String,
}
#[derive(Debug, Message)]
#[result_type(Result<RemoteAddress>)]
pub struct GetRemoteActor {
pub session: SessionHandle,
pub actor: ActorHandle,
}