Skip to main content

rsiot/components/cmp_webstorage/
config.rs

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