TITLE: How to Use Serde with MessagePack and CBOR
Add the rmp-serde crate for MessagePack and ciborium for CBOR to your Cargo.toml, then use their respective to_vec and from_slice functions to serialize and deserialize your data.
[dependencies]
serde = { version = "1.0", features = ["derive"] }
rmp-serde = "1.3"
ciborium = "0.2"
use serde::{Serialize, Deserialize};
use std::io::Cursor;
#[derive(Serialize, Deserialize, Debug, PartialEq)]
struct Data { value: i32 }
fn main() {
let data = Data { value: 42 };
// MessagePack
let msgpack_bytes = rmp_serde::to_vec(&data).unwrap();
let msgpack_data: Data = rmp_serde::from_slice(&msgpack_bytes).unwrap();
// CBOR
let mut cbor_vec = Vec::new();
ciborium::into_writer(&data, &mut cbor_vec).unwrap();
let cbor_data: Data = ciborium::from_reader(Cursor::new(&cbor_vec)).unwrap();
assert_eq!(data, msgpack_data);
assert_eq!(data, cbor_data);
}