hdf5_reader/messages/
modification_time.rs1use crate::error::{Error, Result};
8use crate::io::Cursor;
9
10#[derive(Debug, Clone)]
12pub struct ModificationTimeMessage {
13 pub seconds_since_epoch: u32,
15}
16
17pub fn parse_old(
23 cursor: &mut Cursor<'_>,
24 _offset_size: u8,
25 _length_size: u8,
26 msg_size: usize,
27) -> Result<ModificationTimeMessage> {
28 if msg_size > 0 {
31 cursor.skip(msg_size)?;
32 }
33 Ok(ModificationTimeMessage {
34 seconds_since_epoch: 0,
35 })
36}
37
38pub fn parse_new(
40 cursor: &mut Cursor<'_>,
41 _offset_size: u8,
42 _length_size: u8,
43 msg_size: usize,
44) -> Result<ModificationTimeMessage> {
45 let start = cursor.position();
46 let version = cursor.read_u8()?;
47 if version != 1 {
48 return Err(Error::InvalidData(format!(
49 "unsupported modification time version: {}",
50 version
51 )));
52 }
53
54 let _reserved = cursor.read_bytes(3)?;
55 let seconds_since_epoch = cursor.read_u32_le()?;
56
57 let consumed = (cursor.position() - start) as usize;
58 if consumed < msg_size {
59 cursor.skip(msg_size - consumed)?;
60 }
61
62 Ok(ModificationTimeMessage {
63 seconds_since_epoch,
64 })
65}
66
67#[cfg(test)]
68mod tests {
69 use super::*;
70
71 #[test]
72 fn test_parse_new_modification_time() {
73 let mut data = vec![
74 0x01, 0x00, 0x00, 0x00, ];
77 data.extend_from_slice(&1700000000u32.to_le_bytes());
78
79 let mut cursor = Cursor::new(&data);
80 let msg = parse_new(&mut cursor, 8, 8, data.len()).unwrap();
81 assert_eq!(msg.seconds_since_epoch, 1700000000);
82 }
83}