6次发布
0.2.5 | 2024年3月1日 |
---|---|
0.2.4 | 2024年3月1日 |
#253 在 编程语言
每月68次下载
28KB
509 行
原语的类型级别切片。
Rust允许泛型中存在某些常量参数
struct Foo<const CHAR: char>;
目前这些限制为原生整数,[prim@char
] 和 [prim@bool
],所以例如不同字符的切片无法表示。
struct Fails<const CHARS: [char]>;
type Message = Fails<['h', 'e', 'l', 'l', 'o']>;
此crate通过递归的 types
和 TypeSlice
特性来模拟上述功能。
type Message = typeslice::char!['h', 'e', 'l', 'l', 'o'];
// or, equivalently
type Message = typeslice::from_str!("hello");
您可以通过 const
时代或运行时代码 TypeSlice::LIST
中的 List
来检查信息。
use typeslice::TypeSlice;
fn get_reply<T: TypeSlice<char>>() -> &'static str {
if T::LIST.slice_eq(&['h', 'i']) {
return "hello"
}
if T::LIST.str_eq("👋👋") {
return "😎😎"
}
if T::LIST.into_iter().copied().eq("salut".chars()) {
return "bonjour"
}
"¿que?"
}
assert_eq!(get_reply::<typeslice::from_str!("hi")>(), "hello");
依赖项
~120KB