Crates.io | typeslice-macros |
lib.rs | typeslice-macros |
version | 0.1.2 |
source | src |
created_at | 2024-03-01 17:25:37.424271 |
updated_at | 2024-03-01 20:14:07.301468 |
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");