#[cfg(not(feature = "std"))]
use core::{
clone::Clone,
cmp::{Eq, PartialEq},
fmt::Debug,
prelude::rust_2021::derive,
result::Result::Ok,
};
use byteorder_cursor::{Cursor, LittleEndian};
use super::{Result, SmaSerde};
#[derive(Clone, Debug, Default, Eq, PartialEq)]
pub struct SmaInvMeterValue {
pub timestamp: u32,
pub energy_wh: u64,
}
impl SmaInvMeterValue {
pub const LENGTH: usize = 12;
pub fn is_valid(&self) -> bool {
self.energy_wh != 0xFFFF_FFFF_FFFF_FFFF
}
}
impl SmaSerde for SmaInvMeterValue {
fn serialize(&self, buffer: &mut Cursor<&mut [u8]>) -> Result<()> {
buffer.check_remaining(Self::LENGTH)?;
buffer.write_u32::<LittleEndian>(self.timestamp);
buffer.write_u64::<LittleEndian>(self.energy_wh);
Ok(())
}
fn deserialize(buffer: &mut Cursor<&[u8]>) -> Result<Self> {
buffer.check_remaining(Self::LENGTH)?;
let timestamp = buffer.read_u32::<LittleEndian>();
let energy_wh = buffer.read_u64::<LittleEndian>();
Ok(Self {
timestamp,
energy_wh,
})
}
}