tina-core 0.0.2

Tina platform
Documentation
//! Request属性
use crate::tina::server::application::{AppConfig, Application};
use crate::tina::server::session::Session;

pub use super::request_ext::{AnyType, RequestExt};

/// Request属性
pub trait RequestAttribute {
    /// 获取Request的Application
    fn application(&self) -> Application;
    /// 获取Request的Session
    fn session(&self) -> Session;
}

impl RequestAttribute for () {
    fn application(&self) -> Application {
        AppConfig::new().into()
    }

    fn session(&self) -> Session {
        Session::default()
    }
}

impl<T> RequestAttribute for (T,)
where
    T: RequestAttribute,
{
    fn application(&self) -> Application {
        self.0.application()
    }

    fn session(&self) -> Session {
        self.0.session()
    }
}

impl<T1, T2> RequestAttribute for (T1, T2)
where
    T1: RequestAttribute,
    T2: RequestAttribute,
{
    fn application(&self) -> Application {
        self.0.application()
    }

    fn session(&self) -> Session {
        self.0.session()
    }
}

impl<T1, T2, T3> RequestAttribute for (T1, T2, T3)
where
    T1: RequestAttribute,
    T2: RequestAttribute,
    T3: RequestAttribute,
{
    fn application(&self) -> Application {
        self.0.application()
    }

    fn session(&self) -> Session {
        self.0.session()
    }
}

impl<T1, T2, T3, T4> RequestAttribute for (T1, T2, T3, T4)
where
    T1: RequestAttribute,
    T2: RequestAttribute,
    T3: RequestAttribute,
    T4: RequestAttribute,
{
    fn application(&self) -> Application {
        self.0.application()
    }

    fn session(&self) -> Session {
        self.0.session()
    }
}

impl<T1, T2, T3, T4, T5> RequestAttribute for (T1, T2, T3, T4, T5)
where
    T1: RequestAttribute,
    T2: RequestAttribute,
    T3: RequestAttribute,
    T4: RequestAttribute,
    T5: RequestAttribute,
{
    fn application(&self) -> Application {
        self.0.application()
    }

    fn session(&self) -> Session {
        self.0.session()
    }
}