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