#枚举 #宏推导 #c-str #字符串 #c-style #特性 #cstr-enum

cstr-enum-derive

为cstr-enum crate提供推导宏

1个不稳定版本

0.1.0 2021年2月12日

#8 in #c-style

Download history 27/week @ 2024-03-25 47/week @ 2024-04-01 13/week @ 2024-04-08 31/week @ 2024-04-15 22/week @ 2024-04-22 16/week @ 2024-04-29 25/week @ 2024-05-06 34/week @ 2024-05-13 30/week @ 2024-05-20 16/week @ 2024-05-27 21/week @ 2024-06-03 15/week @ 2024-06-10 47/week @ 2024-06-17 23/week @ 2024-06-24 10/week @ 2024-07-08

83 每月下载量
4 个crate中(通过 cstr-enum)使用

MIT 许可协议

8KB
142

cstr-enum GitHub标签(最新SemVer)

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

C API有时需要字符串常量。可以使用constr_cstr crate定义许多&CStr常量,但这在大批量的常量中变得不直观。它也不允许Rust枚举提供的类型检查。

此crate提供两个特性,用于在&CStr之间进行转换:AsCStrFromCStr。它还提供了用于在枚举上实现这些特性的推导宏。推导宏提供的实现不进行任何分配,仅使用静态[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
~35K SLoC