protosocket_messagepack/
serializer.rs1use std::marker::PhantomData;
2
3#[derive(Debug)]
7pub struct MessagePackSerializer<T> {
8 _phantom: std::marker::PhantomData<T>,
9}
10
11impl<T> Default for MessagePackSerializer<T> {
12 fn default() -> Self {
13 Self {
14 _phantom: PhantomData,
15 }
16 }
17}
18
19impl<T> protosocket::Serialize for MessagePackSerializer<T>
20where
21 T: serde::Serialize + std::fmt::Debug,
22{
23 type Message = T;
24
25 fn serialize_into_buffer(&mut self, message: Self::Message, buffer: &mut Vec<u8>) {
26 log::debug!("encoding {message:?}");
27 buffer.extend_from_slice(&[0; 5]);
29 rmp_serde::encode::write(buffer, &message).expect("messages must be encodable");
30 let len = buffer.len();
31 unsafe {
32 buffer.set_len(0);
33 }
34 rmp::encode::write_u32(buffer, len as u32 - 5).expect("message length is encodable");
35 unsafe {
36 buffer.set_len(len);
37 }
38 }
39}