2个版本
0.1.2 | 2024年3月1日 |
---|---|
0.1.1 | 2024年3月1日 |
#23 在 #chars
在 typeslice 中使用
6KB
75 行
原始类型的类型级切片。
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.into_iter().copied().eq("salut".chars()) {
return "bonjour"
}
"¿que?"
}
assert_eq!(get_reply::<typeslice::from_str!("hi")>(), "hello");
依赖
~0.4–0.9MB
~20K SLoC