2个版本

0.1.2 2024年3月1日
0.1.1 2024年3月1日

#23#chars


typeslice 中使用

MIT/Apache

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通过递归的typesTypeSlice特质来模拟上述功能。

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");

如果您喜欢这个crate,您可能也喜欢typenumfrunk

依赖

~0.4–0.9MB
~20K SLoC