7个版本

新版本 0.3.0 2024年8月8日
0.2.0 2023年7月19日
0.1.4 2021年9月17日
0.1.3 2020年1月31日
0.1.2 2018年3月10日

#195编码

Download history 13456/week @ 2024-04-24 14117/week @ 2024-05-01 14985/week @ 2024-05-08 11518/week @ 2024-05-15 12931/week @ 2024-05-22 12987/week @ 2024-05-29 12058/week @ 2024-06-05 13245/week @ 2024-06-12 12218/week @ 2024-06-19 11143/week @ 2024-06-26 11743/week @ 2024-07-03 11443/week @ 2024-07-10 11817/week @ 2024-07-17 14188/week @ 2024-07-24 17244/week @ 2024-07-31 15436/week @ 2024-08-07

60,931 每月下载量
ron 中使用

MIT 许可证

15KB
251

内置Serde支持的选项集

option_set on crates.io option_set on docs.rs option_set Downloads option_set License Lines of Code Twitter

此crate实现了一个宏option_set,该宏知道如何将自身序列化/反序列化为一系列字符串。宏调用看起来与bitflags!()非常相似,增加了一些有用的功能。实际上,底层类型是由bitflags!()宏生成的,因此如果您使用此库,则需要bitflags crate。

用法

#[macro_use]
extern crate option_set;
#[macro_use]
extern crate bitflags;
extern crate serde;
extern crate serde_json;

option_set! {
    struct FooOptions: UpperCamel + u16 {
        const BAR_FIRST        = 0x0001;
        const QUX_SECOND_THING = 0x0080;
        const LOL_3RD          = 0x4000;
    }
}

fn main() {
    let opts_in = FooOptions::BAR_FIRST | FooOptions::LOL_3RD;
    let json = serde_json::to_string_pretty(&opts_in).unwrap();

    println!("{}", json);

    let opts_out: FooOptions = serde_json::from_str(&json).unwrap();

    println!("{:?}", opts_out);
    assert!(opts_out == opts_in);
}

在结构体声明中,冒号(在上面的例子中为UpperCamel)后面的第一个标识符控制了在序列化之前如何转换每个标志的名称。这是必要的,因为标志不是真正的struct字段或enum变体,所以#[serde)]和类似的内容不能在它们上使用。

可能的名字转换是CaseTransform枚举的变体。

第二个类型,在加号(+)之后,是位掩码的底层类型,通常是一个精确宽度的整数。

许可证

MIT

依赖项

~135–375KB