#[cfg(feature="foreign")]
use alloc::sync::Arc;
#[cfg(feature="foreign")]
use crate::{Handler, Identifier, MessageSender, IndeterminateMessage};
pub trait Delegate: Send + Sync + 'static {
#[cfg(all(feature="foreign", not(feature="serde")))]
fn get_actor<A: Handler<M>, M: IndeterminateMessage>(&self, id: Identifier) -> impl core::future::Future<Output = Option<Arc<dyn MessageSender<M>>>> + Send;
#[cfg(all(feature="foreign", feature="serde"))]
fn get_actor<A: Handler<M>, M: IndeterminateMessage>(&self, id: Identifier) -> impl core::future::Future<Output = Option<Arc<dyn MessageSender<M>>>> + Send
where M::Result: serde::Serialize + for<'a> serde::Deserialize<'a>;
}
impl Delegate for () {
#[cfg(all(feature="foreign", not(feature="serde")))]
async fn get_actor<A: Handler<M>, M: IndeterminateMessage>(&self, id: Identifier<'_>) -> Option<Arc<dyn MessageSender<M>>> {
let _ = id;
None
}
#[cfg(all(feature="foreign", feature="serde"))]
async fn get_actor<A: Handler<M>, M: IndeterminateMessage>(&self, id: Identifier<'_>) -> Option<Arc<dyn MessageSender<M>>>
where M::Result: serde::Serialize + for<'a> serde::Deserialize<'a> {
let _ = id;
None
}
}
impl<D: Delegate> Delegate for alloc::sync::Arc<D> {
#[cfg(all(feature="foreign", feature="serde"))]
fn get_actor<A: Handler<M>, M: IndeterminateMessage>(&self, id: Identifier) -> impl core::future::Future<Output = Option<Arc<dyn MessageSender<M>>>> + Send
where M::Result: serde::Serialize + for<'a> serde::Deserialize<'a> {
D::get_actor::<A, M>(self, id)
}
#[cfg(all(feature="foreign", not(feature="serde")))]
fn get_actor<A: Handler<M>, M: IndeterminateMessage>(&self, id: Identifier) -> impl core::future::Future<Output = Option<Arc<dyn MessageSender<M>>>> + Send {
D::get_actor::<A, M>(self, id)
}
}