pub enum LogicalDeliveryReason {
UnknownAddress,
ClosedRecipient,
}Expand description
One pure communication addressed to a concrete protocol signature.
Protocol identity is not inferred from the payload. Consequently, two protocols with the same address and message types still have distinct delivery types.
ⓘ
use behavior::{Actions, Behavior, Delivery, MailAddr, Never, NoBirths, Protocol, Recipient, User};
struct Queue;
struct Worker;
macro_rules! inert {
($actor:ty) => {
impl Protocol for $actor {
type Addr = MailAddr;
type Msg = u8;
}
impl Behavior for $actor {
type Event = User<MailAddr, u8>;
type Sends = Vec<Never>;
type Ph = Never;
type Error = Never;
type Birth = NoBirths;
fn init(&mut self, _: crate::InitializationTurn) -> behavior::BehaviorActed<Self> { Ok(Actions::cont()) }
fn transition(&mut self, _: crate::ActiveTurn, _: Self::Event) -> behavior::BehaviorActed<Self> {
Ok(Actions::cont())
}
}
};
}
inert!(Queue);
inert!(Worker);
let worker = Recipient::<Worker>::global(MailAddr(1));
let _: Delivery<Queue> = Delivery::new(worker, 7);A destination also fixes its message and address namespaces:
ⓘ
use behavior::{Actions, Address, Behavior, Delivery, MailAddr, Never, NoBirths, Protocol, Recipient, User};
#[derive(Clone, Copy, PartialEq, Eq)]
struct OtherAddr(u64);
impl Address for OtherAddr {
type Nonce = u64;
}
struct Worker;
impl Protocol for Worker {
type Addr = MailAddr;
type Msg = u8;
}
impl Behavior for Worker {
type Event = User<MailAddr, u8>;
type Sends = Vec<Never>;
type Ph = Never;
type Error = Never;
type Birth = NoBirths;
fn init(&mut self, _: crate::InitializationTurn) -> behavior::BehaviorActed<Self> { Ok(Actions::cont()) }
fn transition(&mut self, _: crate::ActiveTurn, _: Self::Event) -> behavior::BehaviorActed<Self> { Ok(Actions::cont()) }
}
let _ = Recipient::<Worker>::global(OtherAddr(1));ⓘ
let worker = Recipient::<Worker>::global(MailAddr(1));
let _ = Delivery::<Worker>::new(worker, "wrong payload");Exact reason one logical delivery was not accepted.
Variants§
Trait Implementations§
Source§impl Clone for LogicalDeliveryReason
impl Clone for LogicalDeliveryReason
Source§fn clone(&self) -> LogicalDeliveryReason
fn clone(&self) -> LogicalDeliveryReason
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreimpl Copy for LogicalDeliveryReason
Source§impl Debug for LogicalDeliveryReason
impl Debug for LogicalDeliveryReason
impl Eq for LogicalDeliveryReason
Source§impl PartialEq for LogicalDeliveryReason
impl PartialEq for LogicalDeliveryReason
impl StructuralPartialEq for LogicalDeliveryReason
Auto Trait Implementations§
impl Freeze for LogicalDeliveryReason
impl RefUnwindSafe for LogicalDeliveryReason
impl Send for LogicalDeliveryReason
impl Sync for LogicalDeliveryReason
impl Unpin for LogicalDeliveryReason
impl UnsafeUnpin for LogicalDeliveryReason
impl UnwindSafe for LogicalDeliveryReason
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more