myutil 7.3.0

Rust Util Collections
Documentation
use crate::*;
use std::io::Write;

pub fn convert_json_to_msgpack(json: &[u8]) -> Result<Vec<u8>> {
    let mut ret = vec![];

    let mut deserializer = serde_json::Deserializer::from_slice(json);
    let mut serializer = rmp::Serializer::new(&mut ret);

    serde_transcode::transcode(&mut deserializer, &mut serializer)
        .c(d!())
        .and_then(|_| serializer.into_inner().flush().c(d!()))
        .map(|_| ret)
}

#[cfg(test)]
mod tests {
    use super::*;
    use crate::ende::msgpack;
    use serde::{Deserialize, Serialize};

    #[derive(Default, Debug, Eq, PartialEq, Deserialize, Serialize)]
    struct Foo {
        a: u32,
        b: String,
        c: (),
        d: Option<Vec<u8>>,
        e: bool,
    }

    #[test]
    fn t_convert_json_to_msgpack() {
        let foo = pnk!(do_convert_json_to_msgpack());
        assert_eq!(foo, Foo::default());
    }

    fn do_convert_json_to_msgpack() -> Result<Foo> {
        let json_str = serde_json::to_string(&Foo::default()).c(d!())?;
        let msgpack_bytes =
            super::convert_json_to_msgpack(json_str.as_bytes()).c(d!())?;
        msgpack::decode(&msgpack_bytes).c(d!())
    }
}