Struct ActorRef

Source
pub struct ActorRef<T: Actor> { /* private fields */ }
Expand description

A type-safe reference to an actor of type T.

ActorRef<T> provides type-safe message passing to actors, ensuring that only messages that the actor can handle are sent, and that reply types are correctly typed. It wraps an UntypedActorRef and provides compile-time type safety through Rust’s type system and trait bounds.

§Type Safety Benefits

  • Compile-Time Message Validation: Only messages implementing Message<M> for actor T are accepted
  • Automatic Reply Type Inference: Return types are inferred from trait implementations
  • Zero Runtime Overhead: Type safety is enforced at compile time with no performance cost
  • IDE Support: Full autocomplete and type checking support
  • Prevention of Runtime Type Errors: Eliminates downcasting failures and type mismatches

§Message Passing Methods

  • Asynchronous Methods:

    • ask: Send a message and await a typed reply.
    • ask_with_timeout: Send a message and await a typed reply with a timeout.
    • tell: Send a message without waiting for a reply.
    • tell_with_timeout: Send a message without waiting for a reply with a timeout.
  • Blocking Methods for Tokio Blocking Contexts:

    • ask_blocking: Send a message and block until a typed reply is received.
    • tell_blocking: Send a message and block until it is sent.

    These methods are for use within tokio::task::spawn_blocking contexts.

  • Control Methods:

    • stop: Gracefully stop the actor.
    • kill: Immediately terminate the actor.
  • Utility Methods:

Use ActorRef<T> by default for all actor communication. It provides the same functionality as UntypedActorRef but with compile-time guarantees that prevent type-related runtime errors.

When to use ActorRef<T>:

  • Default choice for actor communication
  • When you know the actor type at compile time
  • When you want compile-time message validation
  • When working with strongly-typed actor systems

When to use UntypedActorRef:

  • Collections of heterogeneous actors (Vec<UntypedActorRef>, HashMap<String, UntypedActorRef>)
  • Plugin systems with dynamically loaded actors
  • Generic actor management interfaces
  • When you need type erasure for dynamic scenarios

Implementations§

Source§

impl<T: Actor> ActorRef<T>

Source

pub fn untyped_actor_ref(&self) -> &UntypedActorRef

Returns a reference to the underlying UntypedActorRef for cloning or other operations.

Source

pub fn identity(&self) -> Identity

Returns the unique ID of the actor.

Source

pub fn is_alive(&self) -> bool

Checks if the actor is still alive by verifying if its channels are open.

Source

pub async fn tell<M>(&self, msg: M) -> Result<()>
where T: Message<M>, M: Send + 'static,

Sends a message to the actor without awaiting a reply (fire-and-forget).

The message is sent to the actor’s mailbox for processing. This method returns immediately.

Type safety: Only messages that the actor T can handle via Message<M> trait are accepted.

Source

pub async fn tell_with_timeout<M>( &self, msg: M, timeout: Duration, ) -> Result<()>
where T: Message<M>, M: Send + 'static,

Sends a message to the actor without awaiting a reply (fire-and-forget) with a timeout.

Similar to ActorRef::tell, but allows specifying a timeout for the send operation. The message is sent to the actor’s mailbox, and this method will return once the message is sent or timeout if the send operation doesn’t complete within the specified duration.

Source

pub async fn ask<M>(&self, msg: M) -> Result<T::Reply>
where T: Message<M>, M: Send + 'static, T::Reply: Send + 'static,

Sends a message to the actor and awaits a reply.

The message is sent to the actor’s mailbox, and this method will wait for the actor to process the message and send a reply.

Type safety: The return type R is automatically inferred from the Message<M> trait implementation, ensuring compile-time type safety for replies.

Source

pub async fn ask_with_timeout<M>( &self, msg: M, timeout: Duration, ) -> Result<T::Reply>
where T: Message<M>, M: Send + 'static, T::Reply: Send + 'static,

Sends a message to the actor and awaits a reply with a timeout.

Similar to ActorRef::ask, but allows specifying a timeout for the operation. The message is sent to the actor’s mailbox, and this method will wait for the actor to process the message and send a reply, or timeout if the reply doesn’t arrive within the specified duration.

Source

pub fn kill(&self) -> Result<()>

Sends an immediate termination signal to the actor.

The actor will stop processing messages and shut down as soon as possible. The actor’s final result will indicate it was killed.

Source

pub async fn stop(&self) -> Result<()>

Sends a graceful stop signal to the actor.

The actor will process all messages currently in its mailbox and then stop. New messages sent after this call might be ignored or fail. The actor’s final result will indicate normal completion.

Source

pub fn tell_blocking<M>(&self, msg: M, timeout: Option<Duration>) -> Result<()>
where T: Message<M>, M: Send + 'static,

Synchronous version of ActorRef::tell that blocks until the message is sent.

This method is intended for use within tokio::task::spawn_blocking contexts.

Source

pub fn ask_blocking<M>( &self, msg: M, timeout: Option<Duration>, ) -> Result<T::Reply>
where T: Message<M>, M: Send + 'static, T::Reply: Send + 'static,

Synchronous version of ActorRef::ask that blocks until the reply is received.

This method is intended for use within tokio::task::spawn_blocking contexts.

Trait Implementations§

Source§

impl<T: Actor> Clone for ActorRef<T>

Source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<T: Debug + Actor> Debug for ActorRef<T>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<T> Freeze for ActorRef<T>

§

impl<T> RefUnwindSafe for ActorRef<T>

§

impl<T> Send for ActorRef<T>

§

impl<T> Sync for ActorRef<T>

§

impl<T> Unpin for ActorRef<T>

§

impl<T> UnwindSafe for ActorRef<T>

Blanket Implementations§

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<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<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.