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>(
&self,
message: M
) -> impl Future<Output = Result<(), SendError<M>>>where
M: Message,
pub async fn send<M>( &self, message: M ) -> impl Future<Output = Result<(), SendError<M>>>where M: Message,
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>(&self, message: M) -> Result<(), TrySendError<M>>where
M: Message,
pub fn try_send<M>(&self, message: M) -> Result<(), TrySendError<M>>where M: Message,
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>(&self, request: R) -> RequestBuilder<'_, C, K, S, R, Any>where
R: Request,
pub fn request<R>(&self, request: R) -> RequestBuilder<'_, C, K, S, R, Any>where R: Request,
sourcepub fn request_to<R>(
&self,
recipient: Addr,
request: R
) -> RequestBuilder<'_, C, K, S, R, Any>where
R: Request,
pub fn request_to<R>( &self, recipient: Addr, request: R ) -> RequestBuilder<'_, C, K, S, R, Any>where R: Request,
sourcepub async fn send_to<M>(
&self,
recipient: Addr,
message: M
) -> impl Future<Output = Result<(), SendError<M>>>where
M: Message,
pub async fn send_to<M>( &self, recipient: Addr, message: M ) -> impl Future<Output = Result<(), SendError<M>>>where M: Message,
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>(
&self,
recipient: Addr,
message: M
) -> Result<(), TrySendError<M>>where
M: Message,
pub fn try_send_to<M>( &self, recipient: Addr, message: M ) -> Result<(), TrySendError<M>>where M: Message,
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>(
&self,
token: ResponseToken<R>,
message: <R as Request>::Response
)where
R: Request,
pub fn respond<R>( &self, token: ResponseToken<R>, message: <R as Request>::Response )where R: Request,
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 async fn recv(
&mut self
) -> impl Future<Output = Option<Envelope<AnyMessage>>>where
C: 'static,
S: Source,
pub async fn recv( &mut self ) -> impl Future<Output = Option<Envelope<AnyMessage>>>where C: 'static, S: Source,
sourcepub fn try_recv(&mut self) -> Result<Envelope<AnyMessage>, TryRecvError>where
C: 'static,
pub fn try_recv(&mut self) -> Result<Envelope<AnyMessage>, 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()));
}
})