Struct elfo_core::Context

source ·
pub struct Context<C = (), K = Singleton, S = ()> { /* private fields */ }
Expand description

An actor execution context.

Implementations§

source§

impl<C, K, S> Context<C, K, S>

source

pub fn addr(&self) -> Addr

Returns the actor’s address.

source

pub fn group(&self) -> Addr

Returns the current group’s address.

source

pub fn config(&self) -> &C

Returns the actual config.

source

pub fn key(&self) -> &K

Returns the actor’s key.

source

pub fn with<S1>(self, source: S1) -> Context<C, K, Combined<S, S1>>

Transforms the context to another one with the provided source.

source

pub fn set_status(&self, status: ActorStatus)

Updates the actor’s status.

ctx.set_status(ActorStatus::ALARMING.with_details("something wrong"));
source

pub fn close(&self) -> bool

Closes the mailbox, that leads to returning None from recv() and try_recv() after handling all available messages in the mailbox.

Returns true if the mailbox has just been closed.

source

pub async fn send<M: Message>(&self, message: M) -> Result<(), SendError<M>>

Sends a message using the routing system.

Returns Err if the message hasn’t reached any mailboxes.

Example
// Fire and forget.
let _ = ctx.send(SomethingHappened).await;

// Fire or fail.
ctx.send(SomethingHappened).await?;

// Fire or log.
if let Ok(err) = ctx.send(SomethingHappened).await {
    warn!("...", error = err);
}
source

pub fn try_send<M: Message>(&self, message: M) -> Result<(), TrySendError<M>>

Tries to send a message using the routing system.

Returns

  • Ok(()) if the message has been added to any mailbox.
  • Err(Full(_)) if some mailboxes are full.
  • Err(Closed(_)) otherwise.
Example
// Fire and forget.
let _ = ctx.try_send(SomethingHappened);

// Fire or fail.
ctx.try_send(SomethingHappened)?;

// Fire or log.
if let Err(err) = ctx.try_send(SomethingHappened) {
    warn!("...", error = err);
}
source

pub fn request<R: Request>( &self, request: R ) -> RequestBuilder<'_, C, K, S, R, Any>

Returns a request builder.

Example
// Request and wait for a response.
let response = ctx.request(SomeCommand).resolve().await?;

// Request and wait for all responses.
for result in ctx.request(SomeCommand).all().resolve().await {
    // ...
}
source

pub fn request_to<R: Request>( &self, recipient: Addr, request: R ) -> RequestBuilder<'_, C, K, S, R, Any>

Returns a request builder to the specified recipient.

Example
// Request and wait for a response.
let response = ctx.request_to(addr, SomeCommand).resolve().await?;

// Request and wait for all responses.
for result in ctx.request_to(addr, SomeCommand).all().resolve().await {
    // ...
}
source

pub async fn send_to<M: Message>( &self, recipient: Addr, message: M ) -> Result<(), SendError<M>>

Sends a message to the specified recipient.

Returns Err if the message hasn’t reached any mailboxes.

Example
// Fire and forget.
let _ = ctx.send_to(addr, SomethingHappened).await;

// Fire or fail.
ctx.send_to(addr, SomethingHappened).await?;

// Fire or log.
if let Some(err) = ctx.send_to(addr, SomethingHappened).await {
    warn!("...", error = err);
}
source

pub fn try_send_to<M: Message>( &self, recipient: Addr, message: M ) -> Result<(), TrySendError<M>>

Tries to send a message to the specified recipient.

Returns Err if the message hasn’t reached mailboxes or they are full.

Example
// Fire and forget.
let _ = ctx.send(SomethingHappened).await;

// Fire or fail.
ctx.send(SomethingHappened).await?;

// Fire or log.
if let Some(err) = ctx.send(SomethingHappened).await {
    warn!("...", error = err);
}
source

pub fn respond<R: Request>(&self, token: ResponseToken<R>, message: R::Response)

Responds to the requester with the provided response.

The token can be used only once.

msg!(match envelope {
    (SomeRequest, token) => {
        ctx.respond(token, SomeResponse);
    }
})
source

pub async fn recv(&mut self) -> Option<Envelope>where C: 'static, S: Source,

Receives the next envelope.

Panics

If the method is called again after returning None.

Examples
while let Some(envelope) = ctx.recv().await {
    msg!(match envelope {
        SomethingHappened => /* ... */,
    })
}
source

pub fn try_recv(&mut self) -> Result<Envelope, TryRecvError>where C: 'static,

Receives the next envelope without waiting.

Panics

If the method is called again after returning Err(TryRecvError::Closed).

Examples
// Iterate over all available messages.
while let Ok(envelope) = ctx.try_recv() {
    msg!(match envelope {
        SomethingHappened => /* ... */,
    })
}
source

pub fn unpack_config<'c>(&self, config: &'c AnyConfig) -> &'c Cwhere C: for<'de> Deserialize<'de> + 'static,

Used to get the typed config from ValidateConfig.

msg!(match envelope {
    (ValidateConfig { config, .. }, token) => {
        let new_config = ctx.unpack_config(&config);
        ctx.respond(token, Err("oops".into()));
    }
})
source

pub fn pruned(&self) -> Context

Produces a new context that can be used for sending messages only.

Pruned contexts are likely to be removed in favor of Output.

Trait Implementations§

source§

impl<C, K: Clone> Clone for Context<C, K>

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

Auto Trait Implementations§

§

impl<C = (), K = Singleton, S = ()> !RefUnwindSafe for Context<C, K, S>

§

impl<C, K, S> Send for Context<C, K, S>where C: Send + Sync, K: Send, S: Send,

§

impl<C, K, S> Sync for Context<C, K, S>where C: Send + Sync, K: Sync, S: Sync,

§

impl<C, K, S> Unpin for Context<C, K, S>where K: Unpin, S: Unpin,

§

impl<C = (), K = Singleton, S = ()> !UnwindSafe for Context<C, K, S>

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

const: unstable · source§

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

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

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

const: unstable · 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 Twhere T: Clone,

§

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 Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

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

Performs the conversion.
source§

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

§

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

The type returned in the event of a conversion error.
const: unstable · source§

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

Performs the conversion.
source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more