1个不稳定版本
0.1.1 | 2024年4月7日 |
---|---|
0.1.0 |
|
#1275 in 过程宏
11KB
202 行
C Defines To Enum
将C风格的#define
语句转换为Rust中的enum
。
使用方法
提供确切的枚举名称。以及具有名称content
的字符串字面量,用于从C定义生成枚举。
内容可以通过宏如include_str!
进行评估。
此库旨在在no_std
环境下使用。
use c_defines_to_enum::parse_c_defines_to_enum;
use std::convert::TryFrom;
parse_c_defines_to_enum!(
TestEnum,
to_lower = true,
content = include_str!("test.h")
);
fn it_works() {
println!("{:?}", TestEnum::try_from(1234));
let value: usize = TestEnum::test1.into();
println!("{:?} = {}", TestEnum::test1, value);
}
结果
Ok(test1)
test1 = 1234
支持属性
- to_lower
- bool,将C定义的名称转换为小写。
- to_upper
- bool,将C定义的名称转换为大写。
- remove_prefix
- str,删除C定义名称的前缀。
- remove_suffix
- str,删除C定义名称的后缀。
已知问题
- 不支持级联前向如
#define A B
#define B 1000
- 如果检测到任何重复的值,Rust将不会按实际值存储枚举。您应使用
Into<usize>
的特性。 #[repr(usize)]
和TryFrom<usize>
/Into<usize>
已修复。- 生成的枚举始终为
pub
依赖关系
~1.5MB
~35K SLoC