diff --git a/Cargo.toml b/Cargo.toml index 6e4f6cd..289dc27 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,6 +14,7 @@ readme = "README.md" borsh = { version = "1.5.0", default-features = false, features = ["derive"], optional = true } serde = { version = "1.0", default-features = false, features = ["derive"], optional = true } miniserde = { version = "0.1", optional = true } +nanoserde = { version = "0.1", optional = true } [dev-dependencies] serde_json = "1.0" diff --git a/src/lib.rs b/src/lib.rs index e72b46b..9919b42 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -99,6 +99,10 @@ use serde::{Deserialize, Serialize}; extern crate borsh; #[cfg(feature = "miniserde")] extern crate miniserde; +#[cfg(feature = "nanoserde")] +extern crate nanoserde; +#[cfg(feature = "nanoserde")] +use nanoserde::{DeBin, DeJson, DeRon, SerBin, SerJson, SerRon}; #[cfg(not(feature = "std"))] #[macro_use] @@ -230,6 +234,10 @@ static FALSE: bool = false; feature = "miniserde", derive(miniserde::Deserialize, miniserde::Serialize) )] +#[cfg_attr( + feature = "nanoserde", + derive(DeBin, DeJson, DeRon, SerBin, SerJson, SerRon) +)] pub struct BitVec { /// Internal representation of the bit vector storage: Vec, @@ -2669,6 +2677,23 @@ mod tests { assert_eq!(bit_vec, unserialized); } + #[cfg(feature = "nanoserde")] + #[test] + fn test_nanoserde_json_serialization() { + use nanoserde::{DeJson, SerJson}; + + let bit_vec: BitVec = BitVec::new(); + let serialized = bit_vec.serialize_json(); + let unserialized: BitVec = BitVec::deserialize_json(&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 = bit_vec.serialize_json(); + let unserialized = BitVec::deserialize_json(&serialized[..]).unwrap(); + assert_eq!(bit_vec, unserialized); + } + #[cfg(feature = "borsh")] #[test] fn test_borsh_serialization() {