konst_kernel/
chr.rs

1mod char_formatting;
2
3#[cfg(test)]
4mod tests;
5
6pub use char_formatting::*;
7
8// this isn't documented at all, so this lint seems redundant here <_<
9#[allow(clippy::missing_safety_doc)]
10pub const unsafe fn from_u32_unchecked(n: u32) -> char {
11    core::mem::transmute(n)
12}
13pub const fn from_u32(n: u32) -> Option<char> {
14    if n < 0xD800 || 0xE000 <= n && n <= 0x10FFFF {
15        unsafe { Some(from_u32_unchecked(n)) }
16    } else {
17        None
18    }
19}
20
21// this isn't really dead though, it's used for the static assertion below
22#[allow(dead_code)]
23#[track_caller]
24const fn assert_char_repr_as_u32(c: char) {
25    let num = unsafe { core::mem::transmute::<char, u32>(c) };
26    assert!(c as u32 == num);
27}
28
29const _: () = {
30    assert_char_repr_as_u32('\0');
31    assert_char_repr_as_u32('\u{D7FF}');
32    assert_char_repr_as_u32('\u{E000}');
33    assert_char_repr_as_u32('\u{10FFFF}');
34    assert_char_repr_as_u32(char::MAX);
35};