Skip to main content

rsiot/components/cmp_esp_nvs/
config.rs

1//! Тестирование документации:
2//!
3//! Нет тестируется - Exec format error (os error 8)
4//!
5//! ```bash
6//! cargo test components::cmp_storage_esp --features="cmp_storage_esp, single-thread" --target="riscv32imc-esp-espidf";
7//! ```
8
9use serde::{Serialize, de::DeserializeOwned};
10
11use crate::message::{Message, MsgDataBound};
12
13// ANCHOR: Config
14/// Конфигурация cmp_storage_esp
15#[derive(Debug)]
16pub struct Config<TMsg, TStorageData>
17where
18    TMsg: MsgDataBound,
19    TStorageData: std::fmt::Debug + Default + DeserializeOwned + PartialEq + Serialize,
20{
21    /// Функция для сохранения информации из входных сообщений в памяти ESP.
22    pub fn_input: fn(&TStorageData, &Message<TMsg>) -> Option<TStorageData>,
23
24    /// Функция для выдачи сообщений из сохраненных данных.
25    ///
26    /// Вызывается один раз, при запуске ESP.
27    pub fn_output: fn(&TStorageData) -> Vec<Message<TMsg>>,
28}
29// ANCHOR: Config
30
31#[cfg(test)]
32mod tests {
33
34    use super::Config;
35
36    #[test]
37    fn fn_input() {
38        use crate::message::{example_message::*, *};
39        use serde::{Deserialize, Serialize};
40
41        #[derive(Debug, Default, Deserialize, PartialEq, Serialize)]
42        struct StorageData {
43            pub test_f64: f64,
44            pub test_i32: i32,
45        }
46
47        let _ = Config {
48            fn_input: |data: &StorageData, msg: &Message<Custom>| match msg.data {
49                MsgData::Custom(Custom::ValueInstantF64(value)) => Some(StorageData {
50                    test_f64: value,
51                    ..*data
52                }),
53                _ => None,
54            },
55            fn_output: |_| vec![],
56        };
57    }
58
59    #[test]
60    fn fn_output() {
61        use crate::message::{example_message::*, *};
62        use serde::{Deserialize, Serialize};
63
64        #[derive(Debug, Default, Deserialize, PartialEq, Serialize)]
65        struct StorageData {
66            pub test_f64: f64,
67            pub test_i32: i32,
68        }
69
70        let _ = Config {
71            fn_input: |_, _| None,
72            fn_output: |data: &StorageData| {
73                vec![Message::new(MsgData::Custom(Custom::ValueInstantF64(
74                    data.test_f64,
75                )))]
76            },
77        };
78    }
79}