pub struct OrderGate<A: Address, K, T, TargetRoute: DeliveryRoute<Protocol: Protocol<Addr = A, Msg = T>>, ReplyRoute: DeliveryRoute<Protocol: Protocol<Addr = A, Msg = OrderGateOutcome<K, T>>>> { /* private fields */ }Expand description
Deterministic explicit ordered-release policy.
Before a key is open, one value may be retained for it. Opening is strictly monotonic and atomically releases all retained keys at or below the new watermark in key order. Values submitted at an open key are delivered immediately. Duplicate holds return ownership and never overwrite. A stale opening changes nothing. Initialization is empty, no actors are created, and the host never terminates by policy. Inclusive watermark semantics and deterministic release order are Bombay policy; physical delivery remains a runtime responsibility. Transitions have no semantic panic condition.
Implementations§
Source§impl<A, K, T, TargetRoute, ReplyRoute> OrderGate<A, K, T, TargetRoute, ReplyRoute>where
A: Address,
K: Clone + Ord,
TargetRoute: DeliveryRoute<Protocol: Protocol<Addr = A, Msg = T>>,
ReplyRoute: DeliveryRoute<Protocol: Protocol<Addr = A, Msg = OrderGateOutcome<K, T>>>,
impl<A, K, T, TargetRoute, ReplyRoute> OrderGate<A, K, T, TargetRoute, ReplyRoute>where
A: Address,
K: Clone + Ord,
TargetRoute: DeliveryRoute<Protocol: Protocol<Addr = A, Msg = T>>,
ReplyRoute: DeliveryRoute<Protocol: Protocol<Addr = A, Msg = OrderGateOutcome<K, T>>>,
Sourcepub fn state(&self) -> OrderGateState<K>
pub fn state(&self) -> OrderGateState<K>
Return the complete observable gate state.
Trait Implementations§
Source§impl<A, K, T, TargetRoute, ReplyRoute> Behavior for OrderGate<A, K, T, TargetRoute, ReplyRoute>where
A: Address,
K: Clone + Ord,
TargetRoute: DeliveryRoute<Protocol: Protocol<Addr = A, Msg = T>>,
ReplyRoute: DeliveryRoute<Protocol: Protocol<Addr = A, Msg = OrderGateOutcome<K, T>>>,
TargetRoute::Sends: SendsFor<User<A, OrderGateMessage<K, T, TargetRoute, ReplyRoute>>>,
ReplyRoute::Sends: SendsFor<User<A, OrderGateMessage<K, T, TargetRoute, ReplyRoute>>>,
impl<A, K, T, TargetRoute, ReplyRoute> Behavior for OrderGate<A, K, T, TargetRoute, ReplyRoute>where
A: Address,
K: Clone + Ord,
TargetRoute: DeliveryRoute<Protocol: Protocol<Addr = A, Msg = T>>,
ReplyRoute: DeliveryRoute<Protocol: Protocol<Addr = A, Msg = OrderGateOutcome<K, T>>>,
TargetRoute::Sends: SendsFor<User<A, OrderGateMessage<K, T, TargetRoute, ReplyRoute>>>,
ReplyRoute::Sends: SendsFor<User<A, OrderGateMessage<K, T, TargetRoute, ReplyRoute>>>,
Source§type Protocol = OrderGate<A, K, T, TargetRoute, ReplyRoute>
type Protocol = OrderGate<A, K, T, TargetRoute, ReplyRoute>
Stable public communication identity owned by this actor template. Read more
type Event = User<A, <<OrderGate<A, K, T, TargetRoute, ReplyRoute> as Behavior>::Protocol as Protocol>::Msg>
type Sends = DeliveryOutcomes<<TargetRoute as DeliveryRoute>::Sends, <ReplyRoute as DeliveryRoute>::Sends>
type Ph = Never
type Error = Never
type Birth = NoBirths
Source§fn transition(
&mut self,
_: ActiveTurn,
event: Self::Event,
) -> BehaviorActed<Self>
fn transition( &mut self, _: ActiveTurn, event: Self::Event, ) -> BehaviorActed<Self>
Fold exactly one event into explicit actions and the next behavior. Read more
Source§fn init(
&mut self,
_turn: InitializationTurn,
) -> Result<Actions<<Self::Protocol as Protocol>::Addr, Self::Ph, Self::Sends, Self::Birth>, Self::Error>where
Self: Sized,
fn init(
&mut self,
_turn: InitializationTurn,
) -> Result<Actions<<Self::Protocol as Protocol>::Addr, Self::Ph, Self::Sends, Self::Birth>, Self::Error>where
Self: Sized,
Produce initialization actions before the first event is accepted. Read more
Source§fn layer<L>(self, layer: L) -> <L as BehaviorLayer<Self>>::Outputwhere
Self: Sized,
L: BehaviorLayer<Self>,
fn layer<L>(self, layer: L) -> <L as BehaviorLayer<Self>>::Outputwhere
Self: Sized,
L: BehaviorLayer<Self>,
Apply one statically dispatched construction layer. Read more
Source§impl<A, K, T, TargetRoute, ReplyRoute> BehaviorBase for OrderGate<A, K, T, TargetRoute, ReplyRoute>where
A: Address,
TargetRoute: DeliveryRoute<Protocol: Protocol<Addr = A, Msg = T>>,
ReplyRoute: DeliveryRoute<Protocol: Protocol<Addr = A, Msg = OrderGateOutcome<K, T>>>,
impl<A, K, T, TargetRoute, ReplyRoute> BehaviorBase for OrderGate<A, K, T, TargetRoute, ReplyRoute>where
A: Address,
TargetRoute: DeliveryRoute<Protocol: Protocol<Addr = A, Msg = T>>,
ReplyRoute: DeliveryRoute<Protocol: Protocol<Addr = A, Msg = OrderGateOutcome<K, T>>>,
Source§impl<A, K, T, TargetRoute, ReplyRoute> Default for OrderGate<A, K, T, TargetRoute, ReplyRoute>where
A: Address,
K: Clone + Ord,
TargetRoute: DeliveryRoute<Protocol: Protocol<Addr = A, Msg = T>>,
ReplyRoute: DeliveryRoute<Protocol: Protocol<Addr = A, Msg = OrderGateOutcome<K, T>>>,
impl<A, K, T, TargetRoute, ReplyRoute> Default for OrderGate<A, K, T, TargetRoute, ReplyRoute>where
A: Address,
K: Clone + Ord,
TargetRoute: DeliveryRoute<Protocol: Protocol<Addr = A, Msg = T>>,
ReplyRoute: DeliveryRoute<Protocol: Protocol<Addr = A, Msg = OrderGateOutcome<K, T>>>,
Source§impl<A, K, T, TargetRoute, ReplyRoute> Protocol for OrderGate<A, K, T, TargetRoute, ReplyRoute>where
A: Address,
TargetRoute: DeliveryRoute<Protocol: Protocol<Addr = A, Msg = T>>,
ReplyRoute: DeliveryRoute<Protocol: Protocol<Addr = A, Msg = OrderGateOutcome<K, T>>>,
impl<A, K, T, TargetRoute, ReplyRoute> Protocol for OrderGate<A, K, T, TargetRoute, ReplyRoute>where
A: Address,
TargetRoute: DeliveryRoute<Protocol: Protocol<Addr = A, Msg = T>>,
ReplyRoute: DeliveryRoute<Protocol: Protocol<Addr = A, Msg = OrderGateOutcome<K, T>>>,
Auto Trait Implementations§
impl<A, K, T, TargetRoute, ReplyRoute> Freeze for OrderGate<A, K, T, TargetRoute, ReplyRoute>where
K: Freeze,
impl<A, K, T, TargetRoute, ReplyRoute> RefUnwindSafe for OrderGate<A, K, T, TargetRoute, ReplyRoute>
impl<A, K, T, TargetRoute, ReplyRoute> Send for OrderGate<A, K, T, TargetRoute, ReplyRoute>
impl<A, K, T, TargetRoute, ReplyRoute> Sync for OrderGate<A, K, T, TargetRoute, ReplyRoute>
impl<A, K, T, TargetRoute, ReplyRoute> Unpin for OrderGate<A, K, T, TargetRoute, ReplyRoute>where
K: Unpin,
impl<A, K, T, TargetRoute, ReplyRoute> UnsafeUnpin for OrderGate<A, K, T, TargetRoute, ReplyRoute>where
K: UnsafeUnpin,
impl<A, K, T, TargetRoute, ReplyRoute> UnwindSafe for OrderGate<A, K, T, TargetRoute, ReplyRoute>
Blanket Implementations§
Source§impl<B> Activate for Bwhere
B: Behavior,
impl<B> Activate for Bwhere
B: Behavior,
Source§fn initialize(self) -> Result<Initialized<Self>, Self::Error>
fn initialize(self) -> Result<Initialized<Self>, Self::Error>
Consume this definition, perform its one initialization fold, and
return the active behavior together with the ordered initialization
effects. Read more
Source§impl<B> BeginShutdownPhases for B
impl<B> BeginShutdownPhases for B
type Output = ChildShutdownPhases<B, <<<B as Behavior>::Birth as BirthMode>::Child as ChildOccurrenceProduct<AvailableChildren>>::Product, NoPhases>
fn begin_shutdown_phases(self) -> <B as BeginShutdownPhases>::Output
Source§impl<Node> BirthNodeAppend<Never> for Nodewhere
Node: NonEmptyBirthNode,
impl<Node> BirthNodeAppend<Never> for Nodewhere
Node: NonEmptyBirthNode,
Source§type Output = Node
type Output = Node
Closed child algebra containing the complete prefix followed by the
complete appended tail.
Source§fn append_prefix(self) -> <Node as BirthNodeAppend<Never>>::Output
fn append_prefix(self) -> <Node as BirthNodeAppend<Never>>::Output
Inject one child from the existing prefix without changing its
structural occurrence.
Source§fn append_tail(tail: Never) -> <Node as BirthNodeAppend<Never>>::Output
fn append_tail(tail: Never) -> <Node as BirthNodeAppend<Never>>::Output
Inject one child from the appended tail after every prefix occurrence.
Source§fn append_creations<A>(
prefix: Creations<CreateChild<A, Self>>,
tail: Creations<CreateChild<A, Tail>>,
) -> Creations<CreateChild<A, Self::Output>>where
A: Address,
fn append_creations<A>(
prefix: Creations<CreateChild<A, Self>>,
tail: Creations<CreateChild<A, Tail>>,
) -> Creations<CreateChild<A, Self::Output>>where
A: Address,
Preserve and concatenate two ordered creation batches.
Source§impl<Child, Tail> BirthNodeAppend<Tail> for Childwhere
Child: Behavior,
Tail: NonEmptyBirthNode,
impl<Child, Tail> BirthNodeAppend<Tail> for Childwhere
Child: Behavior,
Tail: NonEmptyBirthNode,
Source§type Output = ChildChoice<Child, Tail>
type Output = ChildChoice<Child, Tail>
Closed child algebra containing the complete prefix followed by the
complete appended tail.
Source§fn append_prefix(self) -> <Child as BirthNodeAppend<Tail>>::Output
fn append_prefix(self) -> <Child as BirthNodeAppend<Tail>>::Output
Inject one child from the existing prefix without changing its
structural occurrence.
Source§fn append_tail(tail: Tail) -> <Child as BirthNodeAppend<Tail>>::Output
fn append_tail(tail: Tail) -> <Child as BirthNodeAppend<Tail>>::Output
Inject one child from the appended tail after every prefix occurrence.
Source§fn append_creations<A>(
prefix: Creations<CreateChild<A, Self>>,
tail: Creations<CreateChild<A, Tail>>,
) -> Creations<CreateChild<A, Self::Output>>where
A: Address,
fn append_creations<A>(
prefix: Creations<CreateChild<A, Self>>,
tail: Creations<CreateChild<A, Tail>>,
) -> Creations<CreateChild<A, Self::Output>>where
A: Address,
Preserve and concatenate two ordered creation batches.
Source§impl<B> BirthProtocols for B
impl<B> BirthProtocols for B
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
Source§impl<Node, Shape> ChildOccurrenceProduct<Shape> for Nodewhere
Node: ChildOccurrenceProductAt<ChildHead, Shape>,
Shape: ChildOccurrenceShape,
impl<Node, Shape> ChildOccurrenceProduct<Shape> for Nodewhere
Node: ChildOccurrenceProductAt<ChildHead, Shape>,
Shape: ChildOccurrenceShape,
Source§impl<A, Child, Host> DispatchBirth<A, Host> for Child
impl<A, Child, Host> DispatchBirth<A, Host> for Child
Source§fn dispatch_birth(
self,
id: CreationId,
route: <A as Address>::Nonce,
kind: CreationKind,
host: &mut Host,
) -> impl Future<Output = ItemSettlement<RoutedCreation<A, Child>, <Child as ChildCreationProduct<A, ChildHead>>::Result, CreationRejection, Never>> + Send
fn dispatch_birth( self, id: CreationId, route: <A as Address>::Nonce, kind: CreationKind, host: &mut Host, ) -> impl Future<Output = ItemSettlement<RoutedCreation<A, Child>, <Child as ChildCreationProduct<A, ChildHead>>::Result, CreationRejection, Never>> + Send
Select exactly one concrete child host while preserving creation data
in every non-accepted settlement.