From: Lizzy Fleckenstein Date: Wed, 1 Feb 2023 17:32:06 +0000 (+0100) Subject: Add serde support X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=HEAD;p=bit-set.git Add serde support --- diff --git a/Cargo.toml b/Cargo.toml index f200cbe..b7db85d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -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"] diff --git a/src/lib.rs b/src/lib.rs index 80ee624..bd3835f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -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>, Skip>>>>; /// Computes how many blocks are needed to store that many bits @@ -847,6 +852,22 @@ impl hash::Hash for BitSet { } } +#[cfg(feature = "serde")] +impl Serialize for BitSet { + fn serialize(&self, serializer: S) -> Result { + self.bit_vec.serialize(serializer) + } +} + +#[cfg(feature = "serde")] +impl<'de, B: BitBlock + Deserialize<'de>> Deserialize<'de> for BitSet { + fn deserialize>(deserializer: D) -> Result { + Ok(Self { + bit_vec: BitVec::deserialize(deserializer)?, + }) + } +} + #[derive(Clone)] struct BlockIter { head: B,