Expand description

This crate connects Rust MessagePack library with serde providing an ability to easily serialize and deserialize both Rust built-in types, the standard library and custom data structures.

Motivating example

let buf = rmp_serde::to_vec(&(42, "the Answer")).unwrap();

    vec![0x92, 0x2a, 0xaa, 0x74, 0x68, 0x65, 0x20, 0x41, 0x6e, 0x73, 0x77, 0x65, 0x72],

assert_eq!((42, "the Answer"), rmp_serde::from_read_ref(&buf).unwrap());

Type-based Serialization and Deserialization

Serde provides a mechanism for low boilerplate serialization & deserialization of values to and from MessagePack via the serialization API.

To be able to serialize a piece of data, it must implement the serde::Serialize trait. To be able to deserialize a piece of data, it must implement the serde::Deserialize trait. Serde provides an annotation to automatically generate the code for these traits: #[derive(Serialize, Deserialize)].


extern crate serde;
extern crate serde_derive;
extern crate rmp_serde as rmps;

use std::collections::HashMap;
use serde::{Deserialize, Serialize};
use rmps::{Deserializer, Serializer};

#[derive(Debug, PartialEq, Deserialize, Serialize)]
struct Human {
    age: u32,
    name: String,

fn main() {
    let mut buf = Vec::new();
    let val = Human {
        age: 42,
        name: "John".into(),

    val.serialize(&mut Serializer::new(&mut buf)).unwrap();


pub use crate::decode::from_read;
pub use crate::decode::Deserializer;
pub use crate::decode::from_read_ref;
pub use crate::encode::to_vec;
pub use crate::encode::to_vec_named;
pub use crate::encode::Serializer;
pub use crate::decode::from_slice;


Change MessagePack behavior with configuration wrappers.
Generic MessagePack deserialization.
Serialize a Rust data structure into MessagePack data.


Name of Serde newtype struct to Represent Msgpack’s Ext Msgpack Ext: Ext(tag, binary) Serde data model: _ExtStruct((tag, binary)) Example Serde impl for custom type: