use std::marker::PhantomData;
use acktor::{Actor, Address, Message, actor::RemoteAddressable};
use crate::actor_ref::ActorRef;
use crate::error::SessionError;
use crate::remote::RemoteSpawnable;
type Result<T> = std::result::Result<T, SessionError>;
#[derive(Debug)]
pub struct RemoteCreateActor<A>
where
A: Actor + RemoteSpawnable,
{
pub label: String,
pub config: Option<String>,
_marker: PhantomData<fn(A) -> A>,
}
impl<A> Message for RemoteCreateActor<A>
where
A: Actor + RemoteSpawnable,
{
type Result = Result<Address<A>>;
}
impl<A> RemoteCreateActor<A>
where
A: Actor + RemoteSpawnable,
{
pub fn new<S>(label: S, config: Option<String>) -> Self
where
S: AsRef<str>,
{
Self {
label: label.as_ref().to_string(),
config,
_marker: PhantomData,
}
}
}
#[derive(Debug)]
pub struct RemoteGetActor<A>
where
A: Actor + RemoteAddressable,
{
pub actor: ActorRef,
_marker: PhantomData<fn(A) -> A>,
}
impl<A> Message for RemoteGetActor<A>
where
A: Actor + RemoteAddressable,
{
type Result = Result<Address<A>>;
}
impl<A> RemoteGetActor<A>
where
A: Actor + RemoteAddressable,
{
pub fn new(actor: ActorRef) -> Self {
Self {
actor,
_marker: PhantomData,
}
}
}