#bit-flags #serialize-deserialize #flags #bitmask #bit

no-std bitflags-serde-legacy

Implement serde traits for bitflags 2.x types compatibly with 1.x

2 releases

0.1.1 May 17, 2023
0.1.0 Feb 8, 2023

#446 in No standard library

Download history 1199/week @ 2024-07-23 1406/week @ 2024-07-30 1190/week @ 2024-08-06 1434/week @ 2024-08-13 1454/week @ 2024-08-20 1644/week @ 2024-08-27 1411/week @ 2024-09-03 1593/week @ 2024-09-10 1048/week @ 2024-09-17 620/week @ 2024-09-24 931/week @ 2024-10-01 981/week @ 2024-10-08 825/week @ 2024-10-15 1484/week @ 2024-10-22 1132/week @ 2024-10-29 1476/week @ 2024-11-05

5,002 downloads per month
Used in 11 crates (via zebra-chain)

MIT/Apache

10KB
117 lines

bitflags-serde-legacy

The serialization format used by bitflags! has changed between 1.x and 2.x. If you previously #[derive(Serialize, Deserialize], then you can use this library to maintain compatibility while upgrading.

Usage

You can either use this as a regular dependency, or pull the source into a private module in your project.

Add bitflags-serde-legacy to your Cargo.toml:

[dependencies.bitflags_serde_legacy]
version = "0.1.1"

Then, replace an existing #[derive(Serialize, Deserialize)] on your bitflags! generated types with the following manual implementations:

use bitflags::bitflags;

bitflags! {
    // #[derive(Serialize, Deserialize)]
    struct Flags: u32 {
        const A = 0b00000001;
        const B = 0b00000010;
        const C = 0b00000100;
        const ABC = Self::A.bits() | Self::B.bits() | Self::C.bits();
    }
}

impl serde::Serialize for Flags {
    fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
        bitflags_serde_legacy::serialize(self, "Flags", serializer)
    }
}

impl<'de> serde::Deserialize<'de> for Flags {
    fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
        bitflags_serde_legacy::deserialize("Flags", deserializer)
    }
}

Dependencies

~175–430KB