]> git.lizzy.rs Git - bit-set.git/commitdiff
Add serde support master
authorLizzy Fleckenstein <eliasfleckenstein@web.de>
Wed, 1 Feb 2023 17:32:06 +0000 (18:32 +0100)
committerLizzy Fleckenstein <eliasfleckenstein@web.de>
Wed, 1 Feb 2023 17:32:06 +0000 (18:32 +0100)
Cargo.toml
src/lib.rs

index f200cbedb9d4ec563f049dc13c4fbae9fd9474a0..b7db85dfe621116184eaac4e3b62933e33cca29c 100644 (file)
@@ -13,6 +13,9 @@ readme = "README.md"
 [dev-dependencies]
 rand = "0.3"
 
+[dependencies]
+serde2 = { package = "serde", version = "1", default-features = true, optional = true }
+
 [dependencies.bit-vec]
 version = "0.6.1"
 default-features = false
@@ -20,3 +23,4 @@ default-features = false
 [features]
 default = ["std"]
 std = ["bit-vec/std"]
+serde = ["serde2", "bit-vec/serde"]
index 80ee6245f83a86a33eea1ad962dcfbe279b254fc..bd3835f0602c04232eb819633254c23afc1f3728 100644 (file)
@@ -52,6 +52,8 @@
 extern crate bit_vec;
 #[cfg(all(test, feature = "nightly"))]
 extern crate rand;
+#[cfg(feature = "serde")]
+extern crate serde2;
 #[cfg(all(test, feature = "nightly"))]
 extern crate test;
 
@@ -66,6 +68,9 @@ use core::fmt;
 use core::hash;
 use core::iter::{self, Chain, Enumerate, FromIterator, Repeat, Skip, Take};
 
+#[cfg(feature = "serde")]
+use serde2::{Deserialize, Deserializer, Serialize, Serializer};
+
 type MatchWords<'a, B> = Chain<Enumerate<Blocks<'a, B>>, Skip<Take<Enumerate<Repeat<B>>>>>;
 
 /// Computes how many blocks are needed to store that many bits
@@ -847,6 +852,22 @@ impl<B: BitBlock> hash::Hash for BitSet<B> {
     }
 }
 
+#[cfg(feature = "serde")]
+impl<B: BitBlock + Serialize> Serialize for BitSet<B> {
+    fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
+        self.bit_vec.serialize(serializer)
+    }
+}
+
+#[cfg(feature = "serde")]
+impl<'de, B: BitBlock + Deserialize<'de>> Deserialize<'de> for BitSet<B> {
+    fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
+        Ok(Self {
+            bit_vec: BitVec::deserialize(deserializer)?,
+        })
+    }
+}
+
 #[derive(Clone)]
 struct BlockIter<T, B> {
     head: B,