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