aws_smithy_http_server/plugin/
stack.rs1use super::{HttpMarker, ModelMarker, Plugin};
7use std::fmt::Debug;
8
9#[derive(Debug)]
18pub struct PluginStack<Inner, Outer> {
19 inner: Inner,
20 outer: Outer,
21}
22
23impl<Inner, Outer> PluginStack<Inner, Outer> {
24 pub fn new(inner: Inner, outer: Outer) -> Self {
26 PluginStack { inner, outer }
27 }
28}
29
30impl<Ser, Op, T, Inner, Outer> Plugin<Ser, Op, T> for PluginStack<Inner, Outer>
31where
32 Inner: Plugin<Ser, Op, T>,
33 Outer: Plugin<Ser, Op, Inner::Output>,
34{
35 type Output = Outer::Output;
36
37 fn apply(&self, input: T) -> Self::Output {
38 let svc = self.inner.apply(input);
39 self.outer.apply(svc)
40 }
41}
42
43impl<Inner, Outer> HttpMarker for PluginStack<Inner, Outer>
44where
45 Inner: HttpMarker,
46 Outer: HttpMarker,
47{
48}
49
50impl<Inner, Outer> ModelMarker for PluginStack<Inner, Outer>
51where
52 Inner: ModelMarker,
53 Outer: ModelMarker,
54{
55}