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 在 编码
60,931 每月下载量
在 ron 中使用
15KB
251 行
内置Serde支持的选项集
此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