| Crates.io | typeslice-macros |
| lib.rs | typeslice-macros |
| version | 0.1.2 |
| created_at | 2024-03-01 17:25:37.424271+00 |
| updated_at | 2024-03-01 20:14:07.301468+00 |
| description | type-level slices |
| homepage | https://github.com/aatifsyed/typeslice |
| repository | https://github.com/aatifsyed/typeslice |
| max_upload_size | |
| id | 1159097 |
| size | 5,702 |
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.into_iter().copied().eq("salut".chars()) {
return "bonjour"
}
"¿que?"
}
assert_eq!(get_reply::<typeslice::from_str!("hi")>(), "hello");