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
use std::{fmt, ops::Deref};

/// Sessions Config
pub struct Store<S, G, V> {
    /// Current Storage
    pub storage: S,
    /// Generates session id
    pub generate: G,
    /// Verifes session id
    pub verify: V,
}

impl<S, G, V> Store<S, G, V> {
    pub fn new(storage: S, generate: G, verify: V) -> Self {
        Self {
            storage,
            generate,
            verify,
        }
    }

    /// Gets current storage
    pub fn storage(&self) -> &S {
        &self.storage
    }
}

impl<S, G, V> AsRef<S> for Store<S, G, V> {
    fn as_ref(&self) -> &S {
        &self.storage
    }
}

impl<S, G, V> Deref for Store<S, G, V> {
    type Target = S;

    fn deref(&self) -> &S {
        &self.storage
    }
}

impl<S, G, V> fmt::Debug for Store<S, G, V> {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        f.debug_struct("Store").finish()
    }
}