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}