razor_rpc_codec/
msgpack.rs1use crate::Codec;
2use serde::{Deserialize, Serialize};
3
4#[derive(Default)]
5pub struct MsgpCodec();
6
7impl Codec for MsgpCodec {
8 #[inline(always)]
9 fn encode<T: Serialize>(&self, task: &T) -> Result<Vec<u8>, ()> {
10 match rmp_serde::encode::to_vec_named(task) {
11 Ok(buf) => return Ok(buf),
12 Err(e) => {
13 log::error!("encode error: {:?}", e);
14 return Err(());
15 }
16 }
17 }
18
19 fn encode_into<T: Serialize>(&self, task: &T, buf: &mut Vec<u8>) -> Result<usize, ()> {
21 let pre_len = buf.len();
22 if let Err(e) = rmp_serde::encode::write_named(buf, task) {
23 log::error!("encode error: {:?}", e);
24 return Err(());
25 } else {
26 Ok(buf.len() - pre_len)
27 }
28 }
29
30 #[inline(always)]
31 fn decode<'a, T: Deserialize<'a>>(&self, buf: &'a [u8]) -> Result<T, ()> {
32 match rmp_serde::decode::from_slice::<T>(buf) {
33 Err(e) => {
34 log::warn!("decode error: {:?}", e);
35 return Err(());
36 }
37 Ok(s) => return Ok(s),
38 }
39 }
40}
41
42#[cfg(test)]
43mod tests {
44 use super::*;
45 use crate::*;
46
47 #[test]
48 fn test_msgp() {
49 let codec = MsgpCodec::default();
50 let encoded = codec.encode(&()).expect("encode");
51 println!("encoded () size :{}", encoded.len());
52 let _decoded: () = codec.decode(&encoded).expect("decode");
53 }
54}