use heapless::Vec;
use crate::common::parse::PackBytes;
pub enum TemperatureMeasurement {
Measured(i16),
MinMeasuredValue(i16),
MaxMeasuredValue(i16),
Tolerance(u16),
Unknown,
}
impl PackBytes for TemperatureMeasurement {
fn unpack_from_iter(src: impl IntoIterator<Item = u8>) -> Option<Self> {
let b = src.into_iter().next()?;
match b {
0x0000 => Some(Self::Measured(0)),
0x0001 => Some(Self::MinMeasuredValue(0)),
0x0002 => Some(Self::MaxMeasuredValue(0)),
0x0003 => Some(Self::Tolerance(0)),
_ => None
}
}
}
impl TemperatureMeasurement {
pub fn to_bytes(&self) -> Vec<u8, 8> {
let mut bytes = Vec::new();
bytes
}
pub fn from_bytes(bytes: &[u8]) -> Result<Self, &'static str> {
if bytes.len() != 8 {
return Err("Invalid byte slice length");
}
Err("TODO")
}
pub fn unpack_from_iter(src: impl IntoIterator<Item = u8>) -> Option<Self> {
let bytes: Vec<u8, 8> = src.into_iter().collect();
Self::from_bytes(&bytes).ok()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_binary_as_measured_value() {
let data = [0x0b, 0x8a];
}
#[test]
fn test_serialize_temperature_measurement() {
let temp_measurement = TemperatureMeasurement::Measured(2345);
let serialized = temp_measurement.to_bytes();
assert_eq!(serialized, [0x00, 0x00]);
}
#[test]
fn test_deserialize_temperature_measurement() {
let serialized = [0x00, 0x00];
let deserialized = TemperatureMeasurement::from_bytes(&serialized).expect("Deserialization failed");
}
}