#bitflags #flags #bit #bitmask

无std bitflags-serde-legacy

为bitflags 2.x类型实现serde特性,以兼容1.x版本

2个版本

0.1.1 2023年5月17日
0.1.0 2023年2月8日

#1577 in 编码

Download history 732/week @ 2024-03-13 545/week @ 2024-03-20 314/week @ 2024-03-27 331/week @ 2024-04-03 1131/week @ 2024-04-10 1492/week @ 2024-04-17 1109/week @ 2024-04-24 1476/week @ 2024-05-01 773/week @ 2024-05-08 1726/week @ 2024-05-15 568/week @ 2024-05-22 421/week @ 2024-05-29 964/week @ 2024-06-05 1454/week @ 2024-06-12 1043/week @ 2024-06-19 725/week @ 2024-06-26

4,366每月下载量
11个crate中使用(通过zebra-chain

MIT/Apache

10KB
117 代码行

bitflags-serde-legacy

用于bitflags!的序列化格式在1.x和2.x之间发生了变化。如果您之前使用过#[derive(Serialize, Deserialize)],那么您可以使用这个库在升级时保持兼容性。

使用方法

您可以将此作为常规依赖项使用,或者将源代码拉入项目中的私有模块。

bitflags-serde-legacy添加到您的Cargo.toml

[dependencies.bitflags_serde_legacy]
version = "0.1.1"

然后,将现有#[derive(Serialize, Deserialize)]在您的bitflags!生成的类型上替换为以下手动实现

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)
    }
}

依赖

~190–460KB
~10K SLoC