axum_session_manager/
layer.rs1use std::marker::PhantomData;
2
3use tower::Layer;
4
5use crate::{manager::SessionManage, service::SessionManagerService};
6#[derive(Debug, Clone)]
10pub struct SessionManagerLayer<'a, P, T>
11where
12 P: SessionManage<T>,
13{
14 sessions: P,
15 session_id_key: &'a str,
16 phantome: PhantomData<T>,
17}
18
19impl<'a, P, T> SessionManagerLayer<'a, P, T>
21where
22P: SessionManage<T>,
23{
24 pub fn new(sessions: P, session_id_key: &'a str, phantome: PhantomData<T>) -> Self {
27 Self {
28 sessions,
29 session_id_key,
30 phantome,
31 }
32 }
33}
34
35impl<'a, S, P, T> Layer<S> for SessionManagerLayer<'a, P, T>
37where
38 P: SessionManage<T>,
39{
40 type Service = SessionManagerService<'a, S, P, T>;
41
42 fn layer(&self, inner: S) -> Self::Service {
43 SessionManagerService::new(
44 inner,
45 self.sessions.clone(),
46 self.session_id_key,
47 self.phantome.clone(),
48 )
49 }
50}