#枚举 #字符串 #转换 #derive

cstr-enum

一个用于定义C风格字符串枚举的crate

1个稳定版本

1.0.0 2021年2月12日

#232FFI

Download history 38/week @ 2024-03-30 17/week @ 2024-04-06 27/week @ 2024-04-13 17/week @ 2024-04-20 14/week @ 2024-04-27 15/week @ 2024-05-04 31/week @ 2024-05-11 27/week @ 2024-05-18 14/week @ 2024-05-25 17/week @ 2024-06-01 13/week @ 2024-06-08 36/week @ 2024-06-15 31/week @ 2024-06-22 4/week @ 2024-06-29 5/week @ 2024-07-06 9/week @ 2024-07-13

每月 57 次下载
3 个crate中使用(通过 grb

MIT 协议

8KB

cstr-enum GitHub标签(最新SemVer)

一个用于定义C风格字符串枚举的crate。

C语言API有时需要字符串常量。可以使用constr_cstr crate定义一大堆&CStr常量,但这在常量数量较多时变得不便利。它也不允许使用Rust枚举提供的类型检查。

这个crate提供了两个用于在&CStr之间转换的特质:AsCStrFromCStr。它还提供了用于在枚举上实现这些特质的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