Skip to content

Commit

Permalink
Merge pull request #57 from mre/serialization-support
Browse files Browse the repository at this point in the history
Add support for serialization of BitVec using serde
  • Loading branch information
pczarn authored May 16, 2019
2 parents 0eb2d9a + 9e41a0e commit befa723
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 1 deletion.
6 changes: 5 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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 = []
21 changes: 21 additions & 0 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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<B=u32> {
/// Internal representation of the bit vector
storage: Vec<B>,
Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit befa723

Please sign in to comment.