Operator

Trait Operator 

Source
pub trait Operator<UpIn: PipelineIO, UpOut: PipelineIO, DownIn: PipelineIO, DownOut: PipelineIO>: Data {
    // Required method
    fn generate<'life0, 'async_trait>(
        &'life0 self,
        req: UpIn,
        next: Arc<dyn AsyncEngine<DownIn, DownOut, Error>>,
    ) -> Pin<Box<dyn Future<Output = Result<UpOut, Error>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait;

    // Provided method
    fn into_operator(
        self: &Arc<Self>,
    ) -> Arc<PipelineOperator<UpIn, UpOut, DownIn, DownOut>>
       where Self: Sized { ... }
}
Expand description

An Operator is a trait that defines the behavior of how two AsyncEngine can be chained together. An Operator is not quite an AsyncEngine because its generate method requires both the upstream request, but also the downstream AsyncEngine to which it will pass the transformed request. The Operator logic must transform the upstream request UpIn to the downstream request DownIn, then transform the downstream response DownOut to the upstream response UpOut.

A PipelineOperator accepts an Operator and presents itself as an AsyncEngine for the upstream AsyncEngine<UpIn, UpOut, Error>.

§Example of type transformation and data flow

... --> <UpIn> ---> [Operator] --> <DownIn> ---> ...
... <-- <UpOut> --> [Operator] <-- <DownOut> <-- ...

Required Methods§

Source

fn generate<'life0, 'async_trait>( &'life0 self, req: UpIn, next: Arc<dyn AsyncEngine<DownIn, DownOut, Error>>, ) -> Pin<Box<dyn Future<Output = Result<UpOut, Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

This method is expected to transform the upstream request UpIn to the downstream request DownIn, call the next AsyncEngine with the transformed request, then transform the downstream response DownOut to the upstream response UpOut.

Provided Methods§

Source

fn into_operator( self: &Arc<Self>, ) -> Arc<PipelineOperator<UpIn, UpOut, DownIn, DownOut>>
where Self: Sized,

Implementors§