humidity_core/sample/
summary.rs1use crate::{
2 sensors::{self},
3 serde::{self, Deserializable, Serializable},
4};
5
6#[derive(Clone, Copy, Debug, PartialEq)]
8pub struct Summary<SENSOR>
9where
10 SENSOR: sensors::Sensor,
11{
12 pub n: u8,
14 pub avg: u16,
16 pub min: u16,
18 pub max: u16,
20 pub sensor: SENSOR,
22}
23
24impl<S> Serializable for Summary<S>
25where
26 S: sensors::Sensor,
27{
28 fn serialize(&self, ser: &mut serde::Serializer) -> Result<usize, serde::Error> {
29 let mut n = ser.write_u8(self.n)?;
30 n += ser.write_u16(self.avg)?;
31 n += ser.write_u16(self.min)?;
32 n += ser.write_u16(self.max)?;
33 n += self.sensor.serialize(ser)?;
34 Ok(n)
35 }
36}
37
38impl<S> Deserializable for Summary<S>
39where
40 S: sensors::Sensor,
41{
42 fn deserialize(de: &mut serde::Deserializer) -> Result<Self, serde::Error> {
43 let n = de.read_u8()?;
44 let avg = de.read_u16()?;
45 let min = de.read_u16()?;
46 let max = de.read_u16()?;
47 let sensor = S::deserialize(de)?;
48 Ok(Self { n, avg, min, max, sensor })
49 }
50}
51
52#[cfg(test)]
53mod test {
54 use sensors::Hygrometer;
55
56 use super::*;
57
58 #[test]
59 fn sample_result_serde() {
60 let input =
61 Summary::<Hygrometer> { n: 1, avg: 990, min: 813, max: 1238, sensor: Hygrometer::YL69 };
62
63 let mut buffer = [0u8; 60];
64 let n = serde::serialize(&input, &mut buffer).unwrap();
65
66 let output = serde::deserialize::<Summary<Hygrometer>>(&buffer[..n]).unwrap();
67 assert_eq!(input, output);
68 }
69}