desert_core 0.1.5

Binary serialization library for Rust (core crate)
Documentation
use crate::binary_output::BinaryOutput;
use crate::deserializer::DeserializationContext;
use crate::serializer::SerializationContext;
use crate::{BinaryDeserializer, BinarySerializer, Result};
use bit_vec::BitVec;

impl BinarySerializer for BitVec {
    fn serialize<Output: BinaryOutput>(
        &self,
        context: &mut SerializationContext<Output>,
    ) -> Result<()> {
        let bytes = self.to_bytes();
        bytes.serialize(context)
    }
}

impl BinaryDeserializer for BitVec {
    fn deserialize(context: &mut DeserializationContext<'_>) -> Result<Self> {
        let bytes: Vec<u8> = Vec::deserialize(context)?;
        Ok(BitVec::from_bytes(&bytes))
    }
}

#[cfg(test)]
mod tests {
    use crate::tests::roundtrip;
    use bit_vec::BitVec;
    use proptest::prelude::*;
    use test_r::test;

    fn bitvec_strategy() -> impl Strategy<Value = BitVec> {
        any::<Vec<u8>>().prop_map(|bytes| BitVec::from_bytes(&bytes))
    }

    proptest! {
        #[test]
        fn test_bit_vec(value in bitvec_strategy()) {
            roundtrip(value);
        }
    }
}