6次发布

0.2.5 2024年3月1日
0.2.4 2024年3月1日

#253编程语言

Download history 1/week @ 2024-03-26 27/week @ 2024-04-02 115/week @ 2024-04-16

每月68次下载

MIT/Apache

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通过递归的 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.str_eq("👋👋") {
        return "😎😎"
    }
    if T::LIST.into_iter().copied().eq("salut".chars()) {
        return "bonjour"
    }
    "¿que?"
}

assert_eq!(get_reply::<typeslice::from_str!("hi")>(), "hello");

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

依赖项

~120KB