ender 0.5.2

An encoding library to work with any binary data format
Documentation
const ENC_TO_DEC: [Option<char>; 256] = [
    Some('\u{0}'),
    Some('\u{1}'),
    Some('\u{2}'),
    Some('\u{3}'),
    Some('\u{4}'),
    Some('\u{5}'),
    Some('\u{6}'),
    Some('\u{7}'),
    Some('\u{8}'),
    Some('\u{9}'),
    Some('\u{A}'),
    Some('\u{B}'),
    Some('\u{C}'),
    Some('\u{D}'),
    Some('\u{E}'),
    Some('\u{F}'),
    Some('\u{10}'),
    Some('\u{11}'),
    Some('\u{12}'),
    Some('\u{13}'),
    Some('\u{14}'),
    Some('\u{15}'),
    Some('\u{16}'),
    Some('\u{17}'),
    Some('\u{18}'),
    Some('\u{19}'),
    Some('\u{1A}'),
    Some('\u{1B}'),
    Some('\u{1C}'),
    Some('\u{1D}'),
    Some('\u{1E}'),
    Some('\u{1F}'),
    Some('\u{20}'),
    Some('\u{21}'),
    Some('\u{22}'),
    Some('\u{23}'),
    Some('\u{24}'),
    Some('\u{25}'),
    Some('\u{26}'),
    Some('\u{27}'),
    Some('\u{28}'),
    Some('\u{29}'),
    Some('\u{2A}'),
    Some('\u{2B}'),
    Some('\u{2C}'),
    Some('\u{2D}'),
    Some('\u{2E}'),
    Some('\u{2F}'),
    Some('\u{30}'),
    Some('\u{31}'),
    Some('\u{32}'),
    Some('\u{33}'),
    Some('\u{34}'),
    Some('\u{35}'),
    Some('\u{36}'),
    Some('\u{37}'),
    Some('\u{38}'),
    Some('\u{39}'),
    Some('\u{3A}'),
    Some('\u{3B}'),
    Some('\u{3C}'),
    Some('\u{3D}'),
    Some('\u{3E}'),
    Some('\u{3F}'),
    Some('\u{40}'),
    Some('\u{41}'),
    Some('\u{42}'),
    Some('\u{43}'),
    Some('\u{44}'),
    Some('\u{45}'),
    Some('\u{46}'),
    Some('\u{47}'),
    Some('\u{48}'),
    Some('\u{49}'),
    Some('\u{4A}'),
    Some('\u{4B}'),
    Some('\u{4C}'),
    Some('\u{4D}'),
    Some('\u{4E}'),
    Some('\u{4F}'),
    Some('\u{50}'),
    Some('\u{51}'),
    Some('\u{52}'),
    Some('\u{53}'),
    Some('\u{54}'),
    Some('\u{55}'),
    Some('\u{56}'),
    Some('\u{57}'),
    Some('\u{58}'),
    Some('\u{59}'),
    Some('\u{5A}'),
    Some('\u{5B}'),
    Some('\u{5C}'),
    Some('\u{5D}'),
    Some('\u{5E}'),
    Some('\u{5F}'),
    Some('\u{60}'),
    Some('\u{61}'),
    Some('\u{62}'),
    Some('\u{63}'),
    Some('\u{64}'),
    Some('\u{65}'),
    Some('\u{66}'),
    Some('\u{67}'),
    Some('\u{68}'),
    Some('\u{69}'),
    Some('\u{6A}'),
    Some('\u{6B}'),
    Some('\u{6C}'),
    Some('\u{6D}'),
    Some('\u{6E}'),
    Some('\u{6F}'),
    Some('\u{70}'),
    Some('\u{71}'),
    Some('\u{72}'),
    Some('\u{73}'),
    Some('\u{74}'),
    Some('\u{75}'),
    Some('\u{76}'),
    Some('\u{77}'),
    Some('\u{78}'),
    Some('\u{79}'),
    Some('\u{7A}'),
    Some('\u{7B}'),
    Some('\u{7C}'),
    Some('\u{7D}'),
    Some('\u{7E}'),
    Some('\u{7F}'),
    Some('\u{20AC}'),
    None,
    Some('\u{201A}'),
    Some('\u{192}'),
    Some('\u{201E}'),
    Some('\u{2026}'),
    Some('\u{2020}'),
    Some('\u{2021}'),
    Some('\u{2C6}'),
    Some('\u{2030}'),
    Some('\u{160}'),
    Some('\u{2039}'),
    Some('\u{152}'),
    None,
    Some('\u{17D}'),
    None,
    None,
    Some('\u{2018}'),
    Some('\u{2019}'),
    Some('\u{201C}'),
    Some('\u{201D}'),
    Some('\u{2022}'),
    Some('\u{2013}'),
    Some('\u{2014}'),
    Some('\u{2DC}'),
    Some('\u{2122}'),
    Some('\u{161}'),
    Some('\u{203A}'),
    Some('\u{153}'),
    None,
    Some('\u{17E}'),
    Some('\u{178}'),
    Some('\u{A0}'),
    Some('\u{A1}'),
    Some('\u{A2}'),
    Some('\u{A3}'),
    Some('\u{A4}'),
    Some('\u{A5}'),
    Some('\u{A6}'),
    Some('\u{A7}'),
    Some('\u{A8}'),
    Some('\u{A9}'),
    Some('\u{AA}'),
    Some('\u{AB}'),
    Some('\u{AC}'),
    Some('\u{FFFD}'),
    Some('\u{AE}'),
    Some('\u{AF}'),
    Some('\u{B0}'),
    Some('\u{B1}'),
    Some('\u{B2}'),
    Some('\u{B3}'),
    Some('\u{B4}'),
    Some('\u{B5}'),
    Some('\u{B6}'),
    Some('\u{B7}'),
    Some('\u{B8}'),
    Some('\u{B9}'),
    Some('\u{BA}'),
    Some('\u{BB}'),
    Some('\u{BC}'),
    Some('\u{BD}'),
    Some('\u{BE}'),
    Some('\u{BF}'),
    Some('\u{C0}'),
    Some('\u{C1}'),
    Some('\u{C2}'),
    Some('\u{C3}'),
    Some('\u{C4}'),
    Some('\u{C5}'),
    Some('\u{C6}'),
    Some('\u{C7}'),
    Some('\u{C8}'),
    Some('\u{C9}'),
    Some('\u{CA}'),
    Some('\u{CB}'),
    Some('\u{CC}'),
    Some('\u{CD}'),
    Some('\u{CE}'),
    Some('\u{CF}'),
    Some('\u{D0}'),
    Some('\u{D1}'),
    Some('\u{D2}'),
    Some('\u{D3}'),
    Some('\u{D4}'),
    Some('\u{D5}'),
    Some('\u{D6}'),
    Some('\u{D7}'),
    Some('\u{D8}'),
    Some('\u{D9}'),
    Some('\u{DA}'),
    Some('\u{DB}'),
    Some('\u{DC}'),
    Some('\u{DD}'),
    Some('\u{DE}'),
    Some('\u{DF}'),
    Some('\u{E0}'),
    Some('\u{E1}'),
    Some('\u{E2}'),
    Some('\u{E3}'),
    Some('\u{E4}'),
    Some('\u{E5}'),
    Some('\u{E6}'),
    Some('\u{E7}'),
    Some('\u{E8}'),
    Some('\u{E9}'),
    Some('\u{EA}'),
    Some('\u{EB}'),
    Some('\u{EC}'),
    Some('\u{ED}'),
    Some('\u{EE}'),
    Some('\u{EF}'),
    Some('\u{F0}'),
    Some('\u{F1}'),
    Some('\u{F2}'),
    Some('\u{F3}'),
    Some('\u{F4}'),
    Some('\u{F5}'),
    Some('\u{F6}'),
    Some('\u{F7}'),
    Some('\u{F8}'),
    Some('\u{F9}'),
    Some('\u{FA}'),
    Some('\u{FB}'),
    Some('\u{FC}'),
    Some('\u{FD}'),
    Some('\u{FE}'),
    Some('\u{FF}'),
];

pub(crate) const fn enc_to_dec(byte: u8) -> Option<char> {
    ENC_TO_DEC[byte as usize]
}

pub(crate) const fn dec_to_enc(ch: char) -> Option<u8> {
    match ch {
        '\0'..='\u{7F}' | '\u{A0}'..='\u{AC}' | '\u{AF}'..='\u{FF}' => Some(ch as u8),
        '\u{20AC}' => Some(128),
        '\u{201A}' => Some(130),
        '\u{192}' => Some(131),
        '\u{201E}' => Some(132),
        '\u{2026}' => Some(133),
        '\u{2020}' => Some(134),
        '\u{2021}' => Some(135),
        '\u{2C6}' => Some(136),
        '\u{2030}' => Some(137),
        '\u{160}' => Some(138),
        '\u{2039}' => Some(139),
        '\u{152}' => Some(140),
        '\u{17D}' => Some(142),
        '\u{2018}' => Some(145),
        '\u{2019}' => Some(146),
        '\u{201C}' => Some(147),
        '\u{201D}' => Some(148),
        '\u{2022}' => Some(149),
        '\u{2013}' => Some(150),
        '\u{2014}' => Some(151),
        '\u{2DC}' => Some(152),
        '\u{2122}' => Some(153),
        '\u{161}' => Some(154),
        '\u{203A}' => Some(155),
        '\u{153}' => Some(156),
        '\u{17E}' => Some(158),
        '\u{178}' => Some(159),
        '\u{FFFD}' => Some(173),
        _ => None
    }
}