rsiot/components/cmp_webstorage/
config.rs

1use crate::message::*;
2
3pub type FnInput<TMsg> = fn(Message<TMsg>) -> Option<Message<TMsg>>;
4
5pub type FnOutput<TMsg> = fn(Message<TMsg>) -> Option<Message<TMsg>>;
6
7/// Конфигуреция cmp_webstorage
8pub struct Config<TMsg>
9where
10    TMsg: MsgDataBound,
11{
12    /// Вид хранилища
13    pub storage_kind: ConfigStorageKind,
14
15    /// Сохранение сообщений в хранилище
16    ///
17    /// **Примеры**
18    ///
19    /// ```rust
20    #[doc = include_str!("test/config_fn_input.rs")]
21    /// ```
22    pub fn_input: FnInput<TMsg>,
23
24    /// Загрузка сообщений из хранилища
25    ///
26    /// **Примеры**
27    ///
28    /// ```rust
29    #[doc = include_str!("test/config_fn_output.rs")]
30    /// ```
31    pub fn_output: FnOutput<TMsg>,
32
33    /// Сообщения по-умолчанию, когда хранилище пустое
34    ///
35    /// **Примеры**
36    ///
37    /// ```rust
38    #[doc = include_str!("test/config_default_messages.rs")]
39    /// ```
40    pub default_messages: Vec<Message<TMsg>>,
41}
42
43impl<TMsg> Default for Config<TMsg>
44where
45    TMsg: MsgDataBound,
46{
47    fn default() -> Self {
48        Self {
49            storage_kind: ConfigStorageKind::LocalStorage,
50            fn_input: |_| None,
51            fn_output: |_| None,
52            default_messages: vec![],
53        }
54    }
55}
56
57/// Вид хранилища - localstorage или sessionStorage
58#[derive(Clone, Copy, Debug)]
59pub enum ConfigStorageKind {
60    /// Сохраняет данные при перезапуске браузера
61    LocalStorage,
62    /// Сохраняет данные. При перезапуске браузера данные теряются
63    SessionStorage,
64}