1 个不稳定版本
使用旧的 Rust 2015
0.1.0 | 2018 年 11 月 24 日 |
---|
#8 in #macro-use
8KB
85 行
e_num
将枚举序列化为数字。
警告
此库通过位操作将包含值的数字表示形式右移,以使标记可以放在数字的右侧,从而与具有变体字段(例如 Variant1(u64)
)的变体一起工作。如果您在字段中处理非常大的数字或有很多变体,值左侧的数据可能会丢失。
用法
#[macro_use]
extern crate e_num;
use e_num::ENum;
#[derive(ENum)]
enum A {
B,
C(u64),
}
fn main() {
let b: usize = A::B.to_num();
println!("b as a number: {:#b}", b);
let b = A::from_num(b);
assert!(match b {
A::B => true,
_ => false,
});
let c = A::C(85).to_num();
println!("c as a number: {:#b}", c);
let c = A::from_num(c);
assert!(match c {
A::C(inner) => {
assert_eq!(inner, 85);
true
}
_ => false,
});
}
许可证
本项目采用 MIT 许可证。有关更多详细信息,请参阅 LICENSE 文件。
lib.rs
:
E-Num(ber)
将枚举序列化为数字。
警告
此库通过位操作将包含值的数字表示形式右移,以使标记可以放在数字的右侧,从而与具有变体字段(例如 Variant1(u64)
)的变体一起工作。如果您在字段中处理非常大的数字或有很多变体,值左侧的数据可能会丢失。
基本用法
#[macro_use]
extern crate e_num;
use e_num::ENum;
#[derive(ENum)]
enum A {
B,
C(u64),
}
fn main() {
let b: usize = A::B.to_num();
println!("b as a number: {:#b}", b);
let b = A::from_num(b);
assert!(match b {
A::B => true,
_ => false,
});
let c = A::C(85).to_num();
println!("c as a number: {:#b}", c);
let c = A::from_num(c);
assert!(match c {
A::C(inner) => {
assert_eq!(inner, 85);
true
}
_ => false,
});
}
start_at
和常量变体
#[macro_use]
extern crate e_num;
use e_num::ENum;
#[derive(ENum)]
// where the non-constant variants will start counting from
#[e_num(start_at = 9)]
enum A {
// pulls the specified variant out from the rest of them
// and matches it against that number. constant variants
// can't have a field.
#[e_num(constant = 2)]
B,
C,
D,
E,
}
fn main() {
assert_eq!(A::B.to_num(), 2);
assert_eq!(A::C.to_num(), 9);
assert_eq!(A::D.to_num(), 10);
assert_eq!(A::E.to_num(), 11);
}
依赖关系
~2.5MB
~54K SLoC