snops_common/format/
impl_chrono.rs1use chrono::{DateTime, Utc};
2
3use super::{DataFormat, DataReadError};
4
5impl DataFormat for DateTime<Utc> {
6 type Header = ();
7 const LATEST_HEADER: Self::Header = ();
8
9 fn write_data<W: std::io::Write>(
10 &self,
11 writer: &mut W,
12 ) -> Result<usize, super::DataWriteError> {
13 Ok(self.timestamp().write_data(writer)?
14 + self.timestamp_subsec_nanos().write_data(writer)?)
15 }
16
17 fn read_data<R: std::io::Read>(
18 reader: &mut R,
19 _header: &Self::Header,
20 ) -> Result<Self, super::DataReadError> {
21 let timestamp = i64::read_data(reader, &())?;
22 let subsec_nanos = u32::read_data(reader, &())?;
23 DateTime::from_timestamp(timestamp, subsec_nanos).ok_or_else(|| {
24 DataReadError::custom(format!(
25 "Invalid timestamp in datetime: {timestamp}.{subsec_nanos}"
26 ))
27 })
28 }
29}