Skip to main content

MessageAdapterWithRoute

Struct MessageAdapterWithRoute 

Source
pub struct MessageAdapterWithRoute<Input, Route>
where Route: DeliveryRoute,
{ /* private fields */ }
Expand description

A pure actor that maps one input protocol into one destination protocol.

For every accepted Input, the adapter invokes its function pointer exactly once. If that invocation returns normally, the transition emits exactly one effect selected by DeliveryRoute and continues with the same behavior. A logical recipient produces Delivery and an established recipient produces EstablishedDelivery. Initialization emits no effects; the adapter cannot create actors, enter another phase, stop itself, or return a controlled error. In particular, it cannot address a creator-local child: its behavior::NoBirths algebra supplies no local binding for an interpreter to resolve.

This is a derived Bombay protocol composition, not an additional actor-model primitive. Delivery is interpreted as an ordinary actor communication, so the destination observes the adapter actor as the sender. The adapter has no channel, runtime handle, task, I/O, or hidden effect.

The mapper is deliberately a function pointer rather than a closure or erased callable. Consequently, the complete adapter type remains nameable in birth products, child products, supervisors, and topology evidence. If the mapper panics, unwinding follows the same runtime policy as a panic from any other Behavior fold; no successful Actions value is returned.

A creator-local child route is not a valid standalone adapter destination:

struct Destination;
impl behavior::Protocol for Destination {
    type Addr = behavior::MailAddr;
    type Msg = u16;
}
fn adapt(value: u8) -> u16 { u16::from(value) }
let destination = behavior::Recipient::<Destination>::global(behavior::MailAddr(1));
let _ = behavior_actors::MessageAdapterWithRoute::new(destination, adapt);
ⓘ
struct Destination;
impl behavior::Protocol for Destination {
    type Addr = behavior::MailAddr;
    type Msg = u16;
}
fn adapt(value: u8) -> u16 { u16::from(value) }
let mut sequence = behavior::CreationSequence::new();
let creation = sequence.issue().expect("fixture creation ID");
let child = behavior::ChildDelivery::<Destination, behavior::ChildHead>::after(creation, 1);
let _ = behavior_actors::MessageAdapterWithRoute::new(child, adapt);

Implementations§

Source§

impl<Input, Route> MessageAdapterWithRoute<Input, Route>
where Route: DeliveryRoute,

Source

pub const fn new( destination: Route, adapt: fn(Input) -> <Route::Protocol as Protocol>::Msg, ) -> Self

Construct an adapter for one concrete destination protocol.

Source

pub const fn destination(&self) -> &Route

Return the destination routing intent.

Trait Implementations§

Source§

impl<Input, Route> Behavior for MessageAdapterWithRoute<Input, Route>
where Route: DeliveryRoute + Clone, Route::Sends: SendsFor<User<<Route::Protocol as Protocol>::Addr, Input>>,

Source§

type Protocol = MessageAdapterWithRoute<Input, Route>

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

type Event = User<<<Route as DeliveryRoute>::Protocol as Protocol>::Addr, Input>

Source§

type Sends = <Route 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<Input, Route> BehaviorBase for MessageAdapterWithRoute<Input, Route>
where Route: DeliveryRoute,

Source§

type Base = MessageAdapterWithRoute<Input, Route>

Source§

fn base(&self) -> &Self

Source§

impl<Input, Route> Protocol for MessageAdapterWithRoute<Input, Route>
where Route: DeliveryRoute,

Source§

type Addr = <<Route as DeliveryRoute>::Protocol as Protocol>::Addr

Source§

type Msg = Input

Auto Trait Implementations§

§

impl<Input, Route> Freeze for MessageAdapterWithRoute<Input, Route>
where Route: Freeze,

§

impl<Input, Route> RefUnwindSafe for MessageAdapterWithRoute<Input, Route>
where Route: RefUnwindSafe,

§

impl<Input, Route> Send for MessageAdapterWithRoute<Input, Route>
where Route: Send,

§

impl<Input, Route> Sync for MessageAdapterWithRoute<Input, Route>
where Route: Sync,

§

impl<Input, Route> Unpin for MessageAdapterWithRoute<Input, Route>
where Route: Unpin,

§

impl<Input, Route> UnsafeUnpin for MessageAdapterWithRoute<Input, Route>
where Route: UnsafeUnpin,

§

impl<Input, Route> UnwindSafe for MessageAdapterWithRoute<Input, Route>
where Route: 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.