pub trait Plugin<Ser, Op, T> {
    type Output;

    // Required method
    fn apply(&self, input: T) -> Self::Output;
}
Expand description

A mapping from one Service to another. This should be viewed as a Layer parameterized by the protocol and operation.

The generics Ser and Op allow the behavior to be parameterized by the Smithy service and operation it’s applied to.

See module documentation for more information.

Required Associated Types§

source

type Output

The type of the new Service.

Required Methods§

source

fn apply(&self, input: T) -> Self::Output

Maps a Service to another.

Implementations on Foreign Types§

source§

impl<'a, Ser, Op, T, Pl> Plugin<Ser, Op, T> for &'a Pl
where Pl: Plugin<Ser, Op, T>,

§

type Output = <Pl as Plugin<Ser, Op, T>>::Output

source§

fn apply(&self, inner: T) -> Self::Output

Implementors§

source§

impl<Ser, Op, S> Plugin<Ser, Op, S> for IdentityPlugin

§

type Output = S

source§

impl<Ser, Op, S, L> Plugin<Ser, Op, S> for LayerPlugin<L>
where L: Layer<S>,

§

type Output = <L as Layer<S>>::Service

source§

impl<Ser, Op, T> Plugin<Ser, Op, T> for OperationExtensionPlugin
where Op: OperationShape,

source§

impl<Ser, Op, T> Plugin<Ser, Op, T> for InstrumentPlugin

source§

impl<Ser, Op, T, Extractors> Plugin<Ser, Op, T> for UpgradePlugin<Extractors>
where Ser: ServiceShape, Op: OperationShape,

§

type Output = Upgrade<<Ser as ServiceShape>::Protocol, (<Op as OperationShape>::Input, Extractors), T>

source§

impl<Ser, Op, T, Inner, F> Plugin<Ser, Op, T> for FilterByOperation<Inner, F>
where Ser: ContainsOperation<Op>, F: Fn(Ser::Operations) -> bool, Inner: Plugin<Ser, Op, T>, Op: OperationShape,

§

type Output = Either<<Inner as Plugin<Ser, Op, T>>::Output, T>

source§

impl<Ser, Op, T, Inner, Outer> Plugin<Ser, Op, T> for PluginStack<Inner, Outer>
where Inner: Plugin<Ser, Op, T>, Outer: Plugin<Ser, Op, Inner::Output>,

§

type Output = <Outer as Plugin<Ser, Op, <Inner as Plugin<Ser, Op, T>>::Output>>::Output

source§

impl<Ser, Op, T, InnerPlugin> Plugin<Ser, Op, T> for HttpPlugins<InnerPlugin>
where InnerPlugin: Plugin<Ser, Op, T>,

§

type Output = <InnerPlugin as Plugin<Ser, Op, T>>::Output

source§

impl<Ser, Op, T, InnerPlugin> Plugin<Ser, Op, T> for ModelPlugins<InnerPlugin>
where InnerPlugin: Plugin<Ser, Op, T>,

§

type Output = <InnerPlugin as Plugin<Ser, Op, T>>::Output

source§

impl<Ser, Op, T, Le, Ri> Plugin<Ser, Op, T> for Either<Le, Ri>
where Le: Plugin<Ser, Op, T>, Ri: Plugin<Ser, Op, T>,

§

type Output = Either<<Le as Plugin<Ser, Op, T>>::Output, <Ri as Plugin<Ser, Op, T>>::Output>

source§

impl<Ser, Op, T, NewService, F> Plugin<Ser, Op, T> for OperationFn<F>
where Ser: ContainsOperation<Op>, F: Fn(Ser::Operations, T) -> NewService,

§

type Output = NewService

source§

impl<Ser, Op, T, Scope, Pl> Plugin<Ser, Op, T> for Scoped<Scope, Pl>
where Scope: Membership<Op>, Scope::Contains: ConditionalApply<Ser, Op, Pl, T>,

§

type Output = <<Scope as Membership<Op>>::Contains as ConditionalApply<Ser, Op, Pl, T>>::Service