zon_core 0.0.4

part of a new WIP, very incomplete async http service stack
Documentation
use super::HttpMiddleware;

impl<S, M1> HttpMiddleware<S> for (M1,)
where
    M1: HttpMiddleware<S>,
{
    type Service = M1::Service;

    fn apply(self, service: S) -> Self::Service {
        let (m1,) = self;
        m1.apply(service)
    }
}

impl<S, M1, M2> HttpMiddleware<S> for (M1, M2)
where
    M1: HttpMiddleware<M2::Service>,
    M2: HttpMiddleware<S>,
{
    type Service = M1::Service;

    fn apply(self, service: S) -> Self::Service {
        let (m1, l2) = self;
        m1.apply(l2.apply(service))
    }
}

impl<S, M1, M2, M3> HttpMiddleware<S> for (M1, M2, M3)
where
    M1: HttpMiddleware<M2::Service>,
    M2: HttpMiddleware<M3::Service>,
    M3: HttpMiddleware<S>,
{
    type Service = M1::Service;

    fn apply(self, service: S) -> Self::Service {
        let (m1, m2, m3) = self;
        m1.apply((m2, m3).apply(service))
    }
}

impl<S, M1, M2, M3, M4> HttpMiddleware<S> for (M1, M2, M3, M4)
where
    M1: HttpMiddleware<M2::Service>,
    M2: HttpMiddleware<M3::Service>,
    M3: HttpMiddleware<M4::Service>,
    M4: HttpMiddleware<S>,
{
    type Service = M1::Service;

    fn apply(self, service: S) -> Self::Service {
        let (m1, m2, m3, m4) = self;
        m1.apply((m2, m3, m4).apply(service))
    }
}

impl<S, M1, M2, M3, M4, M5> HttpMiddleware<S> for (M1, M2, M3, M4, M5)
where
    M1: HttpMiddleware<M2::Service>,
    M2: HttpMiddleware<M3::Service>,
    M3: HttpMiddleware<M4::Service>,
    M4: HttpMiddleware<M5::Service>,
    M5: HttpMiddleware<S>,
{
    type Service = M1::Service;

    fn apply(self, service: S) -> Self::Service {
        let (m1, m2, m3, m4, m5) = self;
        m1.apply((m2, m3, m4, m5).apply(service))
    }
}

impl<S, M1, M2, M3, M4, M5, M6> HttpMiddleware<S> for (M1, M2, M3, M4, M5, M6)
where
    M1: HttpMiddleware<M2::Service>,
    M2: HttpMiddleware<M3::Service>,
    M3: HttpMiddleware<M4::Service>,
    M4: HttpMiddleware<M5::Service>,
    M5: HttpMiddleware<M6::Service>,
    M6: HttpMiddleware<S>,
{
    type Service = M1::Service;

    fn apply(self, service: S) -> Self::Service {
        let (m1, m2, m3, m4, m5, m6) = self;
        m1.apply((m2, m3, m4, m5, m6).apply(service))
    }
}

impl<S, M1, M2, M3, M4, M5, M6, M7> HttpMiddleware<S> for (M1, M2, M3, M4, M5, M6, M7)
where
    M1: HttpMiddleware<M2::Service>,
    M2: HttpMiddleware<M3::Service>,
    M3: HttpMiddleware<M4::Service>,
    M4: HttpMiddleware<M5::Service>,
    M5: HttpMiddleware<M6::Service>,
    M6: HttpMiddleware<M7::Service>,
    M7: HttpMiddleware<S>,
{
    type Service = M1::Service;

    fn apply(self, service: S) -> Self::Service {
        let (m1, m2, m3, m4, m5, m6, m7) = self;
        m1.apply((m2, m3, m4, m5, m6, m7).apply(service))
    }
}

impl<S, M1, M2, M3, M4, M5, M6, M7, M8> HttpMiddleware<S> for (M1, M2, M3, M4, M5, M6, M7, M8)
where
    M1: HttpMiddleware<M2::Service>,
    M2: HttpMiddleware<M3::Service>,
    M3: HttpMiddleware<M4::Service>,
    M4: HttpMiddleware<M5::Service>,
    M5: HttpMiddleware<M6::Service>,
    M6: HttpMiddleware<M7::Service>,
    M7: HttpMiddleware<M8::Service>,
    M8: HttpMiddleware<S>,
{
    type Service = M1::Service;

    fn apply(self, service: S) -> Self::Service {
        let (m1, m2, m3, m4, m5, m6, m7, m8) = self;
        m1.apply((m2, m3, m4, m5, m6, m7, m8).apply(service))
    }
}

impl<S, M1, M2, M3, M4, M5, M6, M7, M8, M9> HttpMiddleware<S>
    for (M1, M2, M3, M4, M5, M6, M7, M8, M9)
where
    M1: HttpMiddleware<M2::Service>,
    M2: HttpMiddleware<M3::Service>,
    M3: HttpMiddleware<M4::Service>,
    M4: HttpMiddleware<M5::Service>,
    M5: HttpMiddleware<M6::Service>,
    M6: HttpMiddleware<M7::Service>,
    M7: HttpMiddleware<M8::Service>,
    M8: HttpMiddleware<M9::Service>,
    M9: HttpMiddleware<S>,
{
    type Service = M1::Service;

    fn apply(self, service: S) -> Self::Service {
        let (m1, m2, m3, m4, m5, m6, m7, m8, m9) = self;
        m1.apply((m2, m3, m4, m5, m6, m7, m8, m9).apply(service))
    }
}

impl<S, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10> HttpMiddleware<S>
    for (M1, M2, M3, M4, M5, M6, M7, M8, M9, M10)
where
    M1: HttpMiddleware<M2::Service>,
    M2: HttpMiddleware<M3::Service>,
    M3: HttpMiddleware<M4::Service>,
    M4: HttpMiddleware<M5::Service>,
    M5: HttpMiddleware<M6::Service>,
    M6: HttpMiddleware<M7::Service>,
    M7: HttpMiddleware<M8::Service>,
    M8: HttpMiddleware<M9::Service>,
    M9: HttpMiddleware<M10::Service>,
    M10: HttpMiddleware<S>,
{
    type Service = M1::Service;

    fn apply(self, service: S) -> Self::Service {
        let (m1, m2, m3, m4, m5, m6, m7, m8, m9, m10) = self;
        m1.apply((m2, m3, m4, m5, m6, m7, m8, m9, m10).apply(service))
    }
}

impl<S, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11> HttpMiddleware<S>
    for (M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11)
where
    M1: HttpMiddleware<M2::Service>,
    M2: HttpMiddleware<M3::Service>,
    M3: HttpMiddleware<M4::Service>,
    M4: HttpMiddleware<M5::Service>,
    M5: HttpMiddleware<M6::Service>,
    M6: HttpMiddleware<M7::Service>,
    M7: HttpMiddleware<M8::Service>,
    M8: HttpMiddleware<M9::Service>,
    M9: HttpMiddleware<M10::Service>,
    M10: HttpMiddleware<M11::Service>,
    M11: HttpMiddleware<S>,
{
    type Service = M1::Service;

    fn apply(self, service: S) -> Self::Service {
        let (m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11) = self;
        m1.apply((m2, m3, m4, m5, m6, m7, m8, m9, m10, m11).apply(service))
    }
}

impl<S, M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12> HttpMiddleware<S>
    for (M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12)
where
    M1: HttpMiddleware<M2::Service>,
    M2: HttpMiddleware<M3::Service>,
    M3: HttpMiddleware<M4::Service>,
    M4: HttpMiddleware<M5::Service>,
    M5: HttpMiddleware<M6::Service>,
    M6: HttpMiddleware<M7::Service>,
    M7: HttpMiddleware<M8::Service>,
    M8: HttpMiddleware<M9::Service>,
    M9: HttpMiddleware<M10::Service>,
    M10: HttpMiddleware<M11::Service>,
    M11: HttpMiddleware<M12::Service>,
    M12: HttpMiddleware<S>,
{
    type Service = M1::Service;

    fn apply(self, service: S) -> Self::Service {
        let (m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12) = self;
        m1.apply((m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12).apply(service))
    }
}