1pub const fn parse_usize(s: &str) -> Option<usize> {
9 let bytes = s.as_bytes();
10 if bytes.is_empty() {
11 return None;
12 }
13 let mut val: usize = 0;
14 let mut i = 0;
15 while i < bytes.len() {
16 let b = bytes[i];
17 if b < b'0' || b > b'9' {
18 return None;
19 }
20 let digit = (b - b'0') as usize;
21 match val.checked_mul(10) {
22 Some(v) => match v.checked_add(digit) {
23 Some(final_val) => val = final_val,
24 None => return None,
25 },
26 None => return None,
27 }
28 i += 1;
29 }
30 Some(val)
31}
32
33pub const fn to_array<const N: usize>(s: &str) -> [u8; N] {
36 assert!(N > 0, "N must be non-zero");
37 let bytes = s.as_bytes();
38 let mut arr = [0; N];
39 let mut i = 0;
40 while i < bytes.len() && i < N - 1 {
41 arr[i] = bytes[i];
42 i += 1;
43 }
44 arr
45}