From 9e41a0e8a43c0cd1695ba2c6a1a20ea3dd5dfb54 Mon Sep 17 00:00:00 2001 From: Matthias Endler Date: Sun, 31 Mar 2019 14:34:38 +0200 Subject: [PATCH] Add support for serialization of BitVec using serde --- Cargo.toml | 6 +++++- src/lib.rs | 21 +++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 67bb44b..2120f24 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,12 +10,16 @@ documentation = "https://contain-rs.github.io/bit-vec/bit_vec" keywords = ["data-structures", "bitvec", "bitmask", "bitmap", "bit"] readme = "README.md" +[dependencies] +serde = { version = "1.0", features = ["derive"], optional = true} + [dev-dependencies] rand = "0.3.15" +serde_json = "1.0" [features] default = ["std"] - +serialize = ["serde"] nightly = [] std = [] diff --git a/src/lib.rs b/src/lib.rs index f087036..6c3b6c7 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -96,6 +96,11 @@ extern crate std; #[cfg(feature="std")] use std::vec::Vec; +#[cfg(feature="serialize")] +extern crate serde; +#[cfg(feature="serialize")] +use serde::{Serialize, Deserialize}; + #[cfg(not(feature="std"))] #[macro_use] extern crate alloc; @@ -212,6 +217,7 @@ static FALSE: bool = false; /// println!("{:?}", bv); /// println!("total bits set to true: {}", bv.iter().filter(|x| *x).count()); /// ``` +#[cfg_attr(feature="serialize", derive(Serialize, Deserialize))] pub struct BitVec { /// Internal representation of the bit vector storage: Vec, @@ -2133,6 +2139,21 @@ mod tests { let b = BitVec::with_capacity(10); let _a: Iter = b.iter(); } + + #[cfg(feature="serialize")] + #[test] + fn test_serialization() { + let bit_vec: BitVec = BitVec::new(); + let serialized = serde_json::to_string(&bit_vec).unwrap(); + let unserialized: BitVec = serde_json::from_str(&serialized).unwrap(); + assert_eq!(bit_vec, unserialized); + + let bools = vec![true, false, true, true]; + let bit_vec: BitVec = bools.iter().map(|n| *n).collect(); + let serialized = serde_json::to_string(&bit_vec).unwrap(); + let unserialized = serde_json::from_str(&serialized).unwrap(); + assert_eq!(bit_vec, unserialized); + } } #[cfg(all(test, feature = "nightly"))] mod bench;