ps_util/
subarray.rs

1/// Get a subarray of length `S` at `index`.
2///
3/// # Safety
4///
5/// This function is safe if given a valid slice.
6///
7/// # Examples
8///
9/// ```
10/// use ps_util::subarray;
11/// let data = [1, 2, 3, 4, 5];
12/// let chunk: &[i32; 2] = subarray::<2, i32>(&data, 1);
13/// assert_eq!(chunk, &[2, 3]);
14/// ```
15///
16/// Works with vectors:
17///
18/// ```
19/// use ps_util::subarray;
20/// let vec = vec!["a", "b", "c", "d"];
21/// let chunk: &[&str; 3] = subarray::<3, &str>(&vec, 0);
22/// assert_eq!(chunk, &["a", "b", "c"]);
23/// ```
24///
25/// # Panics
26///
27/// Panics if `index + S` exceeds the slice length:
28///
29/// ```should_panic
30/// use ps_util::subarray;
31/// let data = [1, 2, 3];
32/// let _chunk: &[i32; 3] = subarray::<3, i32>(&data, 1);
33/// ```
34pub fn subarray<const S: usize, T>(slice: &[T], index: usize) -> &[T; S] {
35    unsafe { &*slice[index..index + S].as_ptr().cast::<[T; S]>() }
36}