rsiot/components/cmp_webstorage/
config.rs

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
use crate::message::*;

pub type FnInput<TMsg> = fn(Message<TMsg>) -> Option<Message<TMsg>>;

pub type FnOutput<TMsg> = fn(Message<TMsg>) -> Option<Message<TMsg>>;

/// Конфигуреция cmp_webstorage
pub struct Config<TMsg>
where
    TMsg: MsgDataBound,
{
    /// Вид хранилища
    pub storage_kind: ConfigStorageKind,

    /// Сохранение сообщений в хранилище
    ///
    /// **Примеры**
    ///
    /// ```rust
    #[doc = include_str!("test/config_fn_input.rs")]
    /// ```
    pub fn_input: FnInput<TMsg>,

    /// Загрузка сообщений из хранилища
    ///
    /// **Примеры**
    ///
    /// ```rust
    #[doc = include_str!("test/config_fn_output.rs")]
    /// ```
    pub fn_output: FnOutput<TMsg>,

    /// Сообщения по-умолчанию, когда хранилище пустое
    ///
    /// **Примеры**
    ///
    /// ```rust
    #[doc = include_str!("test/config_default_messages.rs")]
    /// ```
    pub default_messages: Vec<Message<TMsg>>,
}

impl<TMsg> Default for Config<TMsg>
where
    TMsg: MsgDataBound,
{
    fn default() -> Self {
        Self {
            storage_kind: ConfigStorageKind::LocalStorage,
            fn_input: |_| None,
            fn_output: |_| None,
            default_messages: vec![],
        }
    }
}

/// Вид хранилища - localstorage или sessionStorage
#[derive(Clone, Copy)]
pub enum ConfigStorageKind {
    /// Сохраняет данные при перезапуске браузера
    LocalStorage,
    /// Сохраняет данные. При перезапуске браузера данные теряются
    SessionStorage,
}