6 releases
0.2.5 | Mar 1, 2024 |
---|---|
0.2.4 | Mar 1, 2024 |
#799 in Data structures
68 downloads per month
28KB
509 lines
Type-level slices of primitives.
Rust permits certain constant parameters in generics:
struct Foo<const CHAR: char>;
Presently these are limited to the primitive integers, [prim@char
] and [prim@bool
],
so e.g slices of different chars cannot be represented.
struct Fails<const CHARS: [char]>;
type Message = Fails<['h', 'e', 'l', 'l', 'o']>;
This crate emulates the above with recursive types
,
and the TypeSlice
trait.
type Message = typeslice::char!['h', 'e', 'l', 'l', 'o'];
// or, equivalently
type Message = typeslice::from_str!("hello");
You can inspect the message at const
time or runtime through the List
in TypeSlice::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");
Dependencies
~100KB