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: 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(label: String, config: String) -> Self {
Self {
label,
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,
}
}
}