rmp-serde 0.8.2

Serde bindings for RMP
#![cfg_attr(feature = "serde_macros", feature(custom_derive, plugin))]
#![cfg_attr(feature = "serde_macros", plugin(serde_macros))]

#![cfg(feature = "serde_macros")]

extern crate serde;
extern crate rmp_serde;

#[test]
fn round_trip_option() {
    use std::io::Cursor;
    use serde::Serialize;

    #[derive(Debug, PartialEq, Serialize, Deserialize)]
    struct Foo {
        v: Option<Vec<u8>>,
    }

    let expected = Foo { v: None };

    let mut data = vec![];
    expected.serialize(&mut rmp_serde::encode::Serializer::new(&mut data)).unwrap();

    let mut de = rmp_serde::decode::Deserializer::new(Cursor::new(&data[..]));
    let actual: Foo = serde::Deserialize::deserialize(&mut de).unwrap();

    assert_eq!(expected, actual);
}

#[test]
fn round_trip_cow() {
    use std::borrow::Cow;
    use std::io::Cursor;
    use serde::Serialize;

    #[derive(Serialize, Deserialize, Debug, PartialEq)]
    struct Foo<'a> {
        v: Cow<'a, [u8]>,
    }

    let expected = Foo { v : Cow::Borrowed(&[]) };

    let mut data = vec![];
    expected.serialize(&mut rmp_serde::encode::Serializer::new(&mut data)).unwrap();

    let mut de = rmp_serde::decode::Deserializer::new(Cursor::new(&data[..]));
    let actual: Foo = serde::Deserialize::deserialize(&mut de).unwrap();

    assert_eq!(expected, actual);
}

#[test]
fn round_trip_option_cow() {
    use std::borrow::Cow;
    use std::io::Cursor;
    use serde::Serialize;

    #[derive(Serialize, Deserialize, Debug, PartialEq)]
    struct Foo<'a> {
        v: Option<Cow<'a, [u8]>>,
    }

    let expected = Foo { v : None };

    let mut data = vec![];
    expected.serialize(&mut rmp_serde::encode::Serializer::new(&mut data)).unwrap();

    let mut de = rmp_serde::decode::Deserializer::new(Cursor::new(&data[..]));
    let actual: Foo = serde::Deserialize::deserialize(&mut de).unwrap();

    assert_eq!(expected, actual);
}