Skip to main content

Deduplicator

Struct Deduplicator 

Source
pub struct Deduplicator<A: Address, K, T, TargetRoute: DeliveryRoute<Protocol: Protocol<Addr = A, Msg = T>>, ReplyRoute: DeliveryRoute<Protocol: Protocol<Addr = A, Msg = DeduplicatorOutcome<K, T>>>> { /* private fields */ }
Expand description

Bounded, deterministic first-seen delivery behavior.

A retained key rejects delivery and returns the owned payload. A new key is committed before its delivery is emitted; when retention is full, the oldest key is returned in the result before the new key becomes newest. Duplicate attempts do not refresh retention. Initialization is empty, the fold creates no actors, and it never terminates by policy. The finite FIFO retention window is deliberate Bombay policy and makes the limitation of deduplication explicit: an evicted key can be accepted again. Physical mailbox delivery remains a runtime responsibility. Construction rejects zero capacity and transitions have no panic path.

Implementations§

Source§

impl<A, K, T, TargetRoute, ReplyRoute> Deduplicator<A, K, T, TargetRoute, ReplyRoute>
where A: Address, K: Clone + Eq, TargetRoute: DeliveryRoute<Protocol: Protocol<Addr = A, Msg = T>>, ReplyRoute: DeliveryRoute<Protocol: Protocol<Addr = A, Msg = DeduplicatorOutcome<K, T>>>,

Source

pub fn new(capacity: usize) -> Result<Self, DeduplicatorConfigError>

Construct empty positive bounded retention.

§Errors

Returns DeduplicatorConfigError::ZeroCapacity for zero capacity.

Source

pub fn state(&self) -> DeduplicatorState<K>

Return a snapshot of the complete retention policy state.

Trait Implementations§

Source§

impl<A, K, T, TargetRoute, ReplyRoute> Behavior for Deduplicator<A, K, T, TargetRoute, ReplyRoute>
where A: Address, K: Clone + Eq, TargetRoute: DeliveryRoute<Protocol: Protocol<Addr = A, Msg = T>>, ReplyRoute: DeliveryRoute<Protocol: Protocol<Addr = A, Msg = DeduplicatorOutcome<K, T>>>, TargetRoute::Sends: SendsFor<User<A, DeduplicatorMessage<K, T, TargetRoute, ReplyRoute>>>, ReplyRoute::Sends: SendsFor<User<A, DeduplicatorMessage<K, T, TargetRoute, ReplyRoute>>>,

Source§

type Protocol = Deduplicator<A, K, T, TargetRoute, ReplyRoute>

Stable public communication identity owned by this actor template. Read more
Source§

type Event = User<A, <<Deduplicator<A, K, T, TargetRoute, ReplyRoute> as Behavior>::Protocol as Protocol>::Msg>

Source§

type Sends = DeliveryOutcomes<<TargetRoute as DeliveryRoute>::Sends, <ReplyRoute as DeliveryRoute>::Sends>

Source§

type Ph = Never

Source§

type Error = Never

Source§

type Birth = NoBirths

Source§

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,

Produce initialization actions before the first event is accepted. Read more
Source§

fn layer<L>(self, layer: L) -> <L as BehaviorLayer<Self>>::Output
where Self: Sized, L: BehaviorLayer<Self>,

Apply one statically dispatched construction layer. Read more
Source§

impl<A, K, T, TargetRoute, ReplyRoute> BehaviorBase for Deduplicator<A, K, T, TargetRoute, ReplyRoute>
where A: Address, TargetRoute: DeliveryRoute<Protocol: Protocol<Addr = A, Msg = T>>, ReplyRoute: DeliveryRoute<Protocol: Protocol<Addr = A, Msg = DeduplicatorOutcome<K, T>>>,

Source§

type Base = Deduplicator<A, K, T, TargetRoute, ReplyRoute>

Source§

fn base(&self) -> &Self

Source§

impl<A, K, T, TargetRoute, ReplyRoute> Protocol for Deduplicator<A, K, T, TargetRoute, ReplyRoute>
where A: Address, TargetRoute: DeliveryRoute<Protocol: Protocol<Addr = A, Msg = T>>, ReplyRoute: DeliveryRoute<Protocol: Protocol<Addr = A, Msg = DeduplicatorOutcome<K, T>>>,

Source§

type Addr = A

Source§

type Msg = DeduplicatorMessage<K, T, TargetRoute, ReplyRoute>

Auto Trait Implementations§

§

impl<A, K, T, TargetRoute, ReplyRoute> Freeze for Deduplicator<A, K, T, TargetRoute, ReplyRoute>

§

impl<A, K, T, TargetRoute, ReplyRoute> RefUnwindSafe for Deduplicator<A, K, T, TargetRoute, ReplyRoute>
where K: RefUnwindSafe,

§

impl<A, K, T, TargetRoute, ReplyRoute> Send for Deduplicator<A, K, T, TargetRoute, ReplyRoute>
where K: Send,

§

impl<A, K, T, TargetRoute, ReplyRoute> Sync for Deduplicator<A, K, T, TargetRoute, ReplyRoute>
where K: Sync,

§

impl<A, K, T, TargetRoute, ReplyRoute> Unpin for Deduplicator<A, K, T, TargetRoute, ReplyRoute>
where K: Unpin,

§

impl<A, K, T, TargetRoute, ReplyRoute> UnsafeUnpin for Deduplicator<A, K, T, TargetRoute, ReplyRoute>

§

impl<A, K, T, TargetRoute, ReplyRoute> UnwindSafe for Deduplicator<A, K, T, TargetRoute, ReplyRoute>
where K: UnwindSafe,

Blanket Implementations§

Source§

impl<B> Activate for B
where B: Behavior,

Source§

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<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<B> BeginShutdownPhases for B
where B: Behavior, <<B as Behavior>::Birth as BirthMode>::Child: ChildOccurrenceProduct<AvailableChildren>,

Source§

impl<Node> BirthNodeAppend<Never> for Node
where Node: NonEmptyBirthNode,

Source§

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

Inject one child from the existing prefix without changing its structural occurrence.
Source§

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,

Preserve and concatenate two ordered creation batches.
Source§

impl<Child, Tail> BirthNodeAppend<Tail> for Child
where Child: Behavior, Tail: NonEmptyBirthNode,

Source§

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

Inject one child from the existing prefix without changing its structural occurrence.
Source§

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,

Preserve and concatenate two ordered creation batches.
Source§

impl<B> BirthProtocols for B
where B: Behavior, <B as Behavior>::Birth: BirthModeProtocols,

Source§

type Protocols = BirthProtocol<<B as Behavior>::Protocol, <<B as Behavior>::Birth as BirthModeProtocols>::Protocols>

Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<Node, Shape> ChildOccurrenceProduct<Shape> for Node
where Node: ChildOccurrenceProductAt<ChildHead, Shape>, Shape: ChildOccurrenceShape,

Source§

type Product = <Node as ChildOccurrenceProductAt<ChildHead, Shape>>::Product

Complete shape-owned representation of this closed birth node.
Source§

impl<A, Child, Host> DispatchBirth<A, Host> for Child
where A: Address, Child: CreateSelectedChild<A, ChildHead, Host>,

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

Select exactly one concrete child host while preserving creation data in every non-accepted settlement.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.