rsiot/components/cmp_esp_nvs/
config.rs1use serde::{Serialize, de::DeserializeOwned};
10
11use crate::message::{Message, MsgDataBound};
12
13#[derive(Debug)]
16pub struct Config<TMsg, TStorageData>
17where
18 TMsg: MsgDataBound,
19 TStorageData: std::fmt::Debug + Default + DeserializeOwned + PartialEq + Serialize,
20{
21 pub fn_input: fn(&TStorageData, &Message<TMsg>) -> Option<TStorageData>,
23
24 pub fn_output: fn(&TStorageData) -> Vec<Message<TMsg>>,
28}
29#[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}