Trait ockam_core::Worker
source · [−]pub trait Worker: Send + 'static {
type Message: Message;
type Context: Send + 'static;
fn initialize<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_context: &'life1 mut Self::Context
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
{ ... }
fn shutdown<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_context: &'life1 mut Self::Context
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
{ ... }
fn is_authorized<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_context: &'life1 mut Self::Context,
_msg: Routed<Self::Message>
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>
where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
{ ... }
fn handle_message<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_context: &'life1 mut Self::Context,
_msg: Routed<Self::Message>
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
{ ... }
}
Expand description
Defines the core interface shared by all Ockam Workers.
While all methods do not need to be implemented, at the very
least, the Context
and Message
types need to be specified
before a worker can be used in any call to a Context
API such as
context.start_worker(...)
.
Required Associated Types
The type of Message the Worker is sent in Self::handle_message
.
Provided Methods
Override initialisation behaviour.
Override shutdown behaviour.
Try to authorize an incoming message
The authorization flow of an incoming message looks like this:
- [
WorkerRelay::recv_message
] requests the next message from its associatedContext
. - [
Context::receiver_next
] pulls the incoming message from its [SmallReceiver
] channel. - [
Context::receiver_next
] then verifies theAccessControl
rules associated with its [Mailboxes
] are valid before returning the message toWorkerRelay
. - [
WorkerRelay::recv_message
] invokes thisis_authorized
function and only invokesWorker::handle_message
ifockam_core::allowed()
is returned. - If the message is not authorized it will be silently dropped and a warning message output to the worker log.
Try to open and handle a typed message.