rsiot/components/cmp_filesystem/config.rs
1use std::fmt::Debug;
2
3use serde::{de::DeserializeOwned, Serialize};
4
5use crate::{message::MsgDataBound, serde_utils::SerdeAlgKind};
6
7/// Функция преобразования сообщений в текстовые файлы.
8///
9/// Возращает кортеж из двух значений:
10/// - название файла для сохранения
11/// - содержимое файла
12pub type FnInput<TMsg, TBuffer> = fn(&TMsg, &TBuffer) -> Option<TBuffer>;
13
14/// Функция преобразования текстовых файлов в сообщения
15pub type FnOutput<TMsg, TBuffer> = fn(&TBuffer) -> Vec<TMsg>;
16
17// ANCHOR: Config
18/// Конфигурация cmp_filesystem
19#[derive(Clone)]
20pub struct Config<TMsg, TBuffer>
21where
22 TMsg: MsgDataBound,
23 TBuffer: BufferBound,
24{
25 /// Алгоритм сериализации/десериализации
26 pub serde_alg: SerdeAlgKind,
27
28 /// Название файла
29 pub filename: String,
30
31 /// Частота вызова функции создания исходящих сообщений
32 pub call_fn_output_kind: CallFnOutputKind,
33
34 /// Функция преобразования сообщений в текстовые файлы
35 pub fn_input: FnInput<TMsg, TBuffer>,
36
37 /// Функция преобразования текстовых файлов в сообщения
38 pub fn_output: FnOutput<TMsg, TBuffer>,
39}
40// ANCHOR: Config
41
42// ANCHOR: CallFnOutputKind
43/// Частота вызова функции создания исходящих сообщений
44#[derive(Clone, Debug)]
45pub enum CallFnOutputKind {
46 /// Один раз при запуске
47 OnStartup,
48 /// Каждый раз при изменении буфера
49 Always,
50}
51// ANCHOR: CallFnOutputKind
52
53// ANCHOR: BufferBound
54/// Ограничения на структуру буфера
55///
56/// На структуре необходимо релизовать:
57///
58/// ```no_run
59/// #[derive(Clone, Debug, Default, Deserialize,PartialEq, Serialize)]
60/// ```
61pub trait BufferBound:
62 Clone + Debug + Default + DeserializeOwned + PartialEq + Send + Serialize + Sync
63{
64}
65// ANCHOR: BufferBound