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>
impl<C, K, S> Context<C, K, S>
Sourcepub fn with<S1>(self, source: S1) -> Context<C, K, Combined<S, S1>>
pub fn with<S1>(self, source: S1) -> Context<C, K, Combined<S, S1>>
Transforms the context to another one with the provided source.
Sourcepub fn set_status(&self, status: ActorStatus)
pub fn set_status(&self, status: ActorStatus)
Updates the actor’s status.
ctx.set_status(ActorStatus::ALARMING.with_details("something wrong"));
Sourcepub fn close(&self) -> bool
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.
Sourcepub async fn send<M: Message>(&self, message: M) -> Result<(), SendError<M>>
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);
}
Sourcepub fn try_send<M: Message>(&self, message: M) -> Result<(), TrySendError<M>>
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);
}
Sourcepub fn request<R: Request>(
&self,
request: R,
) -> RequestBuilder<'_, C, K, S, R, Any>
pub fn request<R: Request>( &self, request: R, ) -> RequestBuilder<'_, C, K, S, R, Any>
Sourcepub fn request_to<R: Request>(
&self,
recipient: Addr,
request: R,
) -> RequestBuilder<'_, C, K, S, R, Any>
pub fn request_to<R: Request>( &self, recipient: Addr, request: R, ) -> RequestBuilder<'_, C, K, S, R, Any>
Sourcepub async fn send_to<M: Message>(
&self,
recipient: Addr,
message: M,
) -> Result<(), SendError<M>>
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);
}
Sourcepub fn try_send_to<M: Message>(
&self,
recipient: Addr,
message: M,
) -> Result<(), TrySendError<M>>
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);
}
Sourcepub fn respond<R: Request>(&self, token: ResponseToken<R>, message: R::Response)
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);
}
})
Sourcepub fn try_recv(&mut self) -> Result<Envelope, TryRecvError>where
C: 'static,
pub fn try_recv(&mut self) -> Result<Envelope, TryRecvError>where
C: 'static,
Sourcepub fn unpack_config<'c>(&self, config: &'c AnyConfig) -> &'c Cwhere
C: for<'de> Deserialize<'de> + 'static,
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()));
}
})