pub trait Worker: 'static + Send {
type Message: Message;
type Context: 'static + Send;
fn initialize<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_context: &'life1 mut Self::Context
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait, Global>>ⓘNotable traits for Pin<P>impl<P> Future for Pin<P> where
P: DerefMut,
<P as Deref>::Target: Future, type Output = <<P as Deref>::Target as Future>::Output;
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<(), Error>> + Send + 'async_trait, Global>>ⓘNotable traits for Pin<P>impl<P> Future for Pin<P> where
P: DerefMut,
<P as Deref>::Target: Future, type Output = <<P as Deref>::Target as Future>::Output;
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, Error>> + Send + 'async_trait, Global>>ⓘNotable traits for Pin<P>impl<P> Future for Pin<P> where
P: DerefMut,
<P as Deref>::Target: Future, type Output = <<P as Deref>::Target as Future>::Output;
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<(), Error>> + Send + 'async_trait, Global>>ⓘNotable traits for Pin<P>impl<P> Future for Pin<P> where
P: DerefMut,
<P as Deref>::Target: Future, type Output = <<P as Deref>::Target as Future>::Output;
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
fn initialize<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_context: &'life1 mut Self::Context
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait, Global>>ⓘNotable traits for Pin<P>impl<P> Future for Pin<P> where
P: DerefMut,
<P as Deref>::Target: Future, type Output = <<P as Deref>::Target as Future>::Output;
where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
fn initialize<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_context: &'life1 mut Self::Context
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait, Global>>ⓘNotable traits for Pin<P>impl<P> Future for Pin<P> where
P: DerefMut,
<P as Deref>::Target: Future, type Output = <<P as Deref>::Target as Future>::Output;
where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
P: DerefMut,
<P as Deref>::Target: Future, type Output = <<P as Deref>::Target as Future>::Output;
Override initialisation behaviour.
fn shutdown<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_context: &'life1 mut Self::Context
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait, Global>>ⓘNotable traits for Pin<P>impl<P> Future for Pin<P> where
P: DerefMut,
<P as Deref>::Target: Future, type Output = <<P as Deref>::Target as Future>::Output;
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<(), Error>> + Send + 'async_trait, Global>>ⓘNotable traits for Pin<P>impl<P> Future for Pin<P> where
P: DerefMut,
<P as Deref>::Target: Future, type Output = <<P as Deref>::Target as Future>::Output;
where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
P: DerefMut,
<P as Deref>::Target: Future, type Output = <<P as Deref>::Target as Future>::Output;
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.
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<(), Error>> + Send + 'async_trait, Global>>ⓘNotable traits for Pin<P>impl<P> Future for Pin<P> where
P: DerefMut,
<P as Deref>::Target: Future, type Output = <<P as Deref>::Target as Future>::Output;
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<(), Error>> + Send + 'async_trait, Global>>ⓘNotable traits for Pin<P>impl<P> Future for Pin<P> where
P: DerefMut,
<P as Deref>::Target: Future, type Output = <<P as Deref>::Target as Future>::Output;
where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
P: DerefMut,
<P as Deref>::Target: Future, type Output = <<P as Deref>::Target as Future>::Output;
Try to open and handle a typed message.
Implementations on Foreign Types
sourceimpl<V, N> Worker for SecureChannelListener<V, N> where
V: SecureChannelVault,
N: SecureChannelNewKeyExchanger,
impl<V, N> Worker for SecureChannelListener<V, N> where
V: SecureChannelVault,
N: SecureChannelNewKeyExchanger,
type Message = CreateResponderChannelMessage
type Context = Context
fn handle_message<'life0, 'life1, 'async_trait>(
&'life0 mut self,
ctx: &'life1 mut <SecureChannelListener<V, N> as Worker>::Context,
msg: Routed<<SecureChannelListener<V, N> as Worker>::Message>
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait, Global>>ⓘNotable traits for Pin<P>impl<P> Future for Pin<P> where
P: DerefMut,
<P as Deref>::Target: Future, type Output = <<P as Deref>::Target as Future>::Output;
where
'life0: 'async_trait,
'life1: 'async_trait,
SecureChannelListener<V, N>: 'async_trait,
P: DerefMut,
<P as Deref>::Target: Future, type Output = <<P as Deref>::Target as Future>::Output;
sourceimpl<V, K> Worker for SecureChannelDecryptor<V, K> where
V: SecureChannelVault,
K: SecureChannelKeyExchanger,
impl<V, K> Worker for SecureChannelDecryptor<V, K> where
V: SecureChannelVault,
K: SecureChannelKeyExchanger,
type Message = Any
type Context = Context
fn initialize<'life0, 'life1, 'async_trait>(
&'life0 mut self,
ctx: &'life1 mut <SecureChannelDecryptor<V, K> as Worker>::Context
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait, Global>>ⓘNotable traits for Pin<P>impl<P> Future for Pin<P> where
P: DerefMut,
<P as Deref>::Target: Future, type Output = <<P as Deref>::Target as Future>::Output;
where
'life0: 'async_trait,
'life1: 'async_trait,
SecureChannelDecryptor<V, K>: 'async_trait,
P: DerefMut,
<P as Deref>::Target: Future, type Output = <<P as Deref>::Target as Future>::Output;
fn handle_message<'life0, 'life1, 'async_trait>(
&'life0 mut self,
ctx: &'life1 mut <SecureChannelDecryptor<V, K> as Worker>::Context,
msg: Routed<<SecureChannelDecryptor<V, K> as Worker>::Message>
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait, Global>>ⓘNotable traits for Pin<P>impl<P> Future for Pin<P> where
P: DerefMut,
<P as Deref>::Target: Future, type Output = <<P as Deref>::Target as Future>::Output;
where
'life0: 'async_trait,
'life1: 'async_trait,
SecureChannelDecryptor<V, K>: 'async_trait,
P: DerefMut,
<P as Deref>::Target: Future, type Output = <<P as Deref>::Target as Future>::Output;