use crate::tina::server::application::{AppConfig, Application};
use crate::tina::server::session::Session;
pub use super::request_ext::{AnyType, RequestExt};
pub trait RequestAttribute {
fn application(&self) -> Application;
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()
}
}