palladium_transport/
traits.rs1use crate::errors::TransportError;
2use crate::mailbox::MailboxSender;
3use palladium_actor::{ActorPath, AddrHash, EngineId, Envelope, MessagePayload};
4use std::future::Future;
5use std::pin::Pin;
6
7pub type TransportFuture<'a> =
8 Pin<Box<dyn Future<Output = Result<(), TransportError>> + Send + 'a>>;
9
10pub trait Transport: Send + Sync + 'static {
16 fn try_send(&self, envelope: Envelope, payload: MessagePayload) -> Result<(), TransportError>;
19
20 fn send<'a>(&'a self, envelope: Envelope, payload: MessagePayload) -> TransportFuture<'a> {
21 Box::pin(async move { self.try_send(envelope, payload) })
22 }
23 fn register(&self, addr: AddrHash, mailbox: MailboxSender) -> Result<(), TransportError>;
24 fn unregister(&self, addr: AddrHash) -> Result<(), TransportError>;
25 fn advertise_path(&self, _addr: AddrHash, _path: &ActorPath) -> Result<(), TransportError> {
26 Ok(())
27 }
28 fn withdraw_path(&self, _addr: AddrHash, _path: &ActorPath) -> Result<(), TransportError> {
29 Ok(())
30 }
31 fn declare_remote_path(
32 &self,
33 _owner: EngineId,
34 _path: &ActorPath,
35 ) -> Result<(), TransportError> {
36 Ok(())
37 }
38 fn undeclare_remote_path(&self, _path: &ActorPath) -> Result<(), TransportError> {
39 Ok(())
40 }
41 fn can_route(&self, destination: AddrHash) -> bool;
42}