1use core::fmt::Write;
2
3#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, bytemuck::Zeroable, bytemuck::Pod)]
16#[repr(transparent)]
17pub struct AsciiArray<const N: usize>(pub [u8; N]);
18impl<const N: usize> Default for AsciiArray<N> {
19 #[inline]
20 #[must_use]
21 fn default() -> Self {
22 Self([0_u8; N])
23 }
24}
25impl<const N: usize> core::fmt::Debug for AsciiArray<N> {
26 #[inline]
27 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
28 f.write_char('\"')?;
29 for ch in self.0.iter().copied().map(|u| u as char) {
30 f.write_char(ch)?;
31 }
32 f.write_char('\"')?;
33 Ok(())
34 }
35}
36impl<const N: usize> core::fmt::Display for AsciiArray<N> {
37 #[inline]
38 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
39 for ch in self.0.iter().copied().map(|u| u as char) {
40 f.write_char(ch)?;
41 }
42 Ok(())
43 }
44}
45impl<const N: usize> From<[u8; N]> for AsciiArray<N> {
46 #[inline]
47 #[must_use]
48 fn from(array: [u8; N]) -> Self {
49 Self(array)
50 }
51}
52impl<const N: usize> PartialEq<&str> for AsciiArray<N> {
53 #[inline]
54 #[must_use]
55 fn eq(&self, other: &&str) -> bool {
56 self.0.as_slice() == other.as_bytes()
57 }
58}