messagepack_core/encode/
timestamp.rs1use super::{Encode, Result};
2use crate::{
3 extension::FixedExtension,
4 io::IoWrite,
5 timestamp::{TIMESTAMP_EXTENSION_TYPE, Timestamp32, Timestamp64, Timestamp96},
6};
7
8impl<W: IoWrite> Encode<W> for Timestamp32 {
9 fn encode(&self, writer: &mut W) -> Result<usize, W::Error> {
10 let buf = self.to_buf();
11 FixedExtension::new_fixed(TIMESTAMP_EXTENSION_TYPE, buf).encode(writer)
12 }
13}
14
15impl<W: IoWrite> Encode<W> for Timestamp64 {
16 fn encode(&self, writer: &mut W) -> Result<usize, W::Error> {
17 let buf = self.to_buf();
18 FixedExtension::new_fixed(TIMESTAMP_EXTENSION_TYPE, buf).encode(writer)
19 }
20}
21
22impl<W: IoWrite> Encode<W> for Timestamp96 {
23 fn encode(&self, writer: &mut W) -> Result<usize, W::Error> {
24 let buf = self.to_buf();
25 FixedExtension::new_fixed(TIMESTAMP_EXTENSION_TYPE, buf).encode(writer)
26 }
27}
28
29#[cfg(test)]
30mod tests {
31 use super::*;
32
33 const TIMESTAMP_EXT_TYPE: u8 = 255; #[test]
36 fn encode_timestamp32() {
37 let ts = Timestamp32::new(123456);
38 let mut buf = vec![];
39
40 let n = ts.encode(&mut buf).unwrap();
41
42 let mut expected = vec![0xd6, TIMESTAMP_EXT_TYPE];
43 expected.extend_from_slice(&123456_u32.to_be_bytes());
44
45 assert_eq!(buf, expected);
46 assert_eq!(n, expected.len());
47 }
48
49 #[test]
50 fn encode_timestamp64() {
51 let ts = Timestamp64::new(123456, 789).unwrap();
52 let mut buf = vec![];
53
54 let n = ts.encode(&mut buf).unwrap();
55
56 let mut expected = vec![0xd7, TIMESTAMP_EXT_TYPE];
57 let data = (789u64 << 34) | 123456;
58 expected.extend_from_slice(&data.to_be_bytes());
59
60 assert_eq!(buf, expected);
61 assert_eq!(n, expected.len());
62 }
63
64 #[test]
65 fn encode_timestamp96() {
66 let ts = Timestamp96::new(123456, 789);
67 let mut buf = vec![];
68
69 let n = ts.encode(&mut buf).unwrap();
70
71 let mut expected = vec![0xc7, 12, TIMESTAMP_EXT_TYPE];
72 expected.extend_from_slice(&789_u32.to_be_bytes());
73 expected.extend_from_slice(&123456_u64.to_be_bytes());
74
75 assert_eq!(buf, expected);
76 assert_eq!(n, expected.len());
77 }
78}