1mod char_formatting;
2
3#[cfg(test)]
4mod tests;
5
6pub use char_formatting::*;
7
8#[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#[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};