use super::{HttpMarker, ModelMarker, Plugin};
use std::fmt::Debug;
#[derive(Debug)]
pub struct PluginStack<Inner, Outer> {
inner: Inner,
outer: Outer,
}
impl<Inner, Outer> PluginStack<Inner, Outer> {
pub fn new(inner: Inner, outer: Outer) -> Self {
PluginStack { inner, outer }
}
}
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::Output;
fn apply(&self, input: T) -> Self::Output {
let svc = self.inner.apply(input);
self.outer.apply(svc)
}
}
impl<Inner, Outer> HttpMarker for PluginStack<Inner, Outer>
where
Inner: HttpMarker,
Outer: HttpMarker,
{
}
impl<Inner, Outer> ModelMarker for PluginStack<Inner, Outer>
where
Inner: ModelMarker,
Outer: ModelMarker,
{
}