desert_core 0.1.5

Binary serialization library for Rust (core crate)
Documentation
use crate::{
    BinaryDeserializer, BinaryOutput, BinarySerializer, DeserializationContext,
    SerializationContext,
};
use serde_json::Value;

impl BinarySerializer for Value {
    fn serialize<Output: BinaryOutput>(
        &self,
        context: &mut SerializationContext<Output>,
    ) -> crate::Result<()> {
        let bytes = serde_json::to_vec(self)
            .map_err(|err| crate::Error::SerializationFailure(err.to_string()))?;
        bytes.serialize(context)
    }
}

impl BinaryDeserializer for Value {
    fn deserialize(context: &mut DeserializationContext<'_>) -> crate::Result<Self> {
        let bytes = Vec::<u8>::deserialize(context)?;
        let value: Value = serde_json::from_slice(&bytes)
            .map_err(|err| crate::Error::DeserializationFailure(err.to_string()))?;
        Ok(value)
    }
}

#[cfg(test)]
mod tests {
    use serde_json::{json, Value};
    use test_r::test;

    #[test]
    fn roundtrip_example1() {
        let input = json!({
            "hello": "world",
            "other": 10,
            "inner": [{"x": 1, "y": 0.5}, {"x": -1, "y": 100}]
        });
        let serialized = crate::serialize_to_bytes(&input).unwrap();
        let deserialized: Value = crate::deserialize(&serialized).unwrap();
        assert_eq!(input, deserialized);
    }
}