#[derive(Debug, PartialEq)]
pub enum Printable {
Space,
Exclamation,
DoubleQuote,
Octothorpe,
Dollar,
Percent,
Ampersand,
SingleQuote,
OpenParen,
CloseParen,
Asterisk,
Plus,
Comma,
Minus,
Dot,
Slash,
D0,
D1,
D2,
D3,
D4,
D5,
D6,
D7,
D8,
D9,
Colon,
Semicolon,
LessThan,
Equal,
GreaterThan,
Question,
At,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z,
OpenBracket,
Backslash,
CloseBracket,
Caret,
Underscore,
Backtick,
LowerA,
LowerB,
LowerC,
LowerD,
LowerE,
LowerF,
LowerG,
LowerH,
LowerI,
LowerJ,
LowerK,
LowerL,
LowerM,
LowerN,
LowerO,
LowerP,
LowerQ,
LowerR,
LowerS,
LowerT,
LowerU,
LowerV,
LowerW,
LowerX,
LowerY,
LowerZ,
OpenBrace,
Bar,
CloseBrace,
Tilde,
}
impl Printable {
pub fn digits() -> Vec<Printable> {
vec![
Self::D0,
Self::D1,
Self::D2,
Self::D3,
Self::D4,
Self::D5,
Self::D6,
Self::D7,
Self::D8,
Self::D9,
]
}
pub fn non_zero_digits() -> Vec<Printable> {
vec![
Self::D1,
Self::D2,
Self::D3,
Self::D4,
Self::D5,
Self::D6,
Self::D7,
Self::D8,
Self::D9,
]
}
pub fn from_byte(byte: u8) -> Option<Self> {
match byte {
0x20 => Some(Self::Space),
0x21 => Some(Self::Exclamation),
0x22 => Some(Self::DoubleQuote),
0x23 => Some(Self::Octothorpe),
0x24 => Some(Self::Dollar),
0x25 => Some(Self::Percent),
0x26 => Some(Self::Ampersand),
0x27 => Some(Self::SingleQuote),
0x28 => Some(Self::OpenParen),
0x29 => Some(Self::CloseParen),
0x2a => Some(Self::Asterisk),
0x2b => Some(Self::Plus),
0x2c => Some(Self::Comma),
0x2d => Some(Self::Minus),
0x2e => Some(Self::Dot),
0x2f => Some(Self::Slash),
0x30 => Some(Self::D0),
0x31 => Some(Self::D1),
0x32 => Some(Self::D2),
0x33 => Some(Self::D3),
0x34 => Some(Self::D4),
0x35 => Some(Self::D5),
0x36 => Some(Self::D6),
0x37 => Some(Self::D7),
0x38 => Some(Self::D8),
0x39 => Some(Self::D9),
0x3a => Some(Self::Colon),
0x3b => Some(Self::Semicolon),
0x3c => Some(Self::LessThan),
0x3d => Some(Self::Equal),
0x3e => Some(Self::GreaterThan),
0x3f => Some(Self::Question),
0x40 => Some(Self::At),
0x41 => Some(Self::A),
0x42 => Some(Self::B),
0x43 => Some(Self::C),
0x44 => Some(Self::D),
0x45 => Some(Self::E),
0x46 => Some(Self::F),
0x47 => Some(Self::G),
0x48 => Some(Self::H),
0x49 => Some(Self::I),
0x4a => Some(Self::J),
0x4b => Some(Self::K),
0x4c => Some(Self::L),
0x4d => Some(Self::M),
0x4e => Some(Self::N),
0x4f => Some(Self::O),
0x50 => Some(Self::P),
0x51 => Some(Self::Q),
0x52 => Some(Self::R),
0x53 => Some(Self::S),
0x54 => Some(Self::T),
0x55 => Some(Self::U),
0x56 => Some(Self::V),
0x57 => Some(Self::W),
0x58 => Some(Self::X),
0x59 => Some(Self::Y),
0x5a => Some(Self::Z),
0x5b => Some(Self::OpenBracket),
0x5c => Some(Self::Backslash),
0x5d => Some(Self::CloseBracket),
0x5e => Some(Self::Caret),
0x5f => Some(Self::Underscore),
0x60 => Some(Self::Backtick),
0x61 => Some(Self::LowerA),
0x62 => Some(Self::LowerB),
0x63 => Some(Self::LowerC),
0x64 => Some(Self::LowerD),
0x65 => Some(Self::LowerE),
0x66 => Some(Self::LowerF),
0x67 => Some(Self::LowerG),
0x68 => Some(Self::LowerH),
0x69 => Some(Self::LowerI),
0x6a => Some(Self::LowerJ),
0x6b => Some(Self::LowerK),
0x6c => Some(Self::LowerL),
0x6d => Some(Self::LowerM),
0x6e => Some(Self::LowerN),
0x6f => Some(Self::LowerO),
0x70 => Some(Self::LowerP),
0x71 => Some(Self::LowerQ),
0x72 => Some(Self::LowerR),
0x73 => Some(Self::LowerS),
0x74 => Some(Self::LowerT),
0x75 => Some(Self::LowerU),
0x76 => Some(Self::LowerV),
0x77 => Some(Self::LowerW),
0x78 => Some(Self::LowerX),
0x79 => Some(Self::LowerY),
0x7a => Some(Self::LowerZ),
0x7b => Some(Self::OpenBrace),
0x7c => Some(Self::Bar),
0x7d => Some(Self::CloseBrace),
0x7e => Some(Self::Tilde),
_ => None,
}
}
}