1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
use std::{fmt, ops::Deref, time::Duration};
use crate::{CookieOptions, Storage};
pub struct Config<S: Storage> {
pub cookie: CookieOptions,
pub storage: S,
pub generate: Box<dyn Send + Sync + 'static + Fn() -> String>,
pub verify: Box<dyn Send + Sync + 'static + Fn(&str) -> bool>,
}
impl<S: Storage> Config<S> {
pub fn storage(&self) -> &S {
&self.storage
}
pub fn cookie(&self) -> &CookieOptions {
&self.cookie
}
pub fn max_age(&self) -> Duration {
self.cookie.max_age
}
pub fn generate(&self) -> String {
(self.generate)()
}
pub fn verify(&self, key: &str) -> bool {
(self.verify)(key)
}
}
impl<S: Storage> fmt::Debug for Config<S> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_struct("Config")
.field("cookie", &self.cookie)
.field("storage", &self.storage)
.finish()
}
}
impl<S: Storage> AsRef<S> for Config<S> {
fn as_ref(&self) -> &S {
&self.storage
}
}
impl<S: Storage> Deref for Config<S> {
type Target = S;
fn deref(&self) -> &S {
&self.storage
}
}