1个稳定版本
1.0.0 | 2021年2月12日 |
---|
#232 在 FFI 中
每月 57 次下载
在 3 个crate中使用(通过 grb)
8KB
cstr-enum
一个用于定义C风格字符串枚举的crate。
C语言API有时需要字符串常量。可以使用constr_cstr
crate定义一大堆&CStr
常量,但这在常量数量较多时变得不便利。它也不允许使用Rust枚举提供的类型检查。
这个crate提供了两个用于在&CStr
之间转换的特质:AsCStr
和FromCStr
。它还提供了用于在枚举上实现这些特质的derive宏。由derive宏提供的实现不进行任何分配,仅使用静态的[u8]
缓冲区。
示例用法
use cstr_enum::*;
use std::ffi::CStr;
use std::os::raw::c_char;
#[derive(Debug, Eq, PartialEq, FromCStr, AsCStr)]
enum Constants {
Apple,
Bacon,
Cat = 1337, // user discriminants supported
}
assert_eq!(Constants::Apple.as_cstr().to_bytes_with_nul(), b"Apple\0");
let returned_from_c_api = CStr::from_bytes_with_nul(b"Cat\0").unwrap();
assert_eq!(Constants::from_cstr(returned_from_c_api), Ok(Constants::Cat));
let returned_from_c_api = CStr::from_bytes_with_nul(b"unknown\0").unwrap();
assert_eq!(
Constants::from_cstr(returned_from_c_api),
Err("unexpected string while parsing for Constants variant")
);
许可证
许可协议为MIT
。
依赖关系
约1.5MB
约36K SLoC