#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Rune {
Absolute, Relative, LiteralNumber,
Parent, Child, RawAscii,
LiteralRelative, RawRelative, CommentOpen, CommentClose, LiteralZeroPage, RawZeroPage, AnonymousOpen, AnonymousClose, LiteralAbsolute, RawAbsolute, IgnoredOpen, IgnoredClose,
Jmi, Jci,
MacroOpen, MacroClose,
None, }
impl From<char> for Rune {
fn from(c: char) -> Self {
match c {
'|' => Rune::Absolute,
'$' => Rune::Relative,
'#' => Rune::LiteralNumber,
'@' => Rune::Parent,
'&' => Rune::Child,
'"' => Rune::RawAscii,
',' => Rune::LiteralRelative,
'_' => Rune::RawRelative,
'(' => Rune::CommentOpen,
')' => Rune::CommentClose,
'.' => Rune::LiteralZeroPage,
'-' => Rune::RawZeroPage,
'{' => Rune::AnonymousOpen,
'}' => Rune::AnonymousClose,
';' => Rune::LiteralAbsolute,
'=' => Rune::RawAbsolute,
'[' => Rune::IgnoredOpen,
']' => Rune::IgnoredClose,
'!' => Rune::Jmi,
'?' => Rune::Jci,
'%' => Rune::MacroOpen,
_ => Rune::None,
}
}
}
impl ToString for Rune {
fn to_string(&self) -> String {
match self {
Rune::Absolute => "|",
Rune::Relative => "$",
Rune::LiteralNumber => "#",
Rune::Parent => "@",
Rune::Child => "&",
Rune::RawAscii => "\"",
Rune::LiteralRelative => ",",
Rune::RawRelative => "_",
Rune::CommentOpen => "(",
Rune::CommentClose => ")",
Rune::LiteralZeroPage => ".",
Rune::RawZeroPage => "-",
Rune::AnonymousOpen => "{",
Rune::AnonymousClose => "}",
Rune::LiteralAbsolute => ";",
Rune::RawAbsolute => "=",
Rune::IgnoredOpen => "[",
Rune::IgnoredClose => "]",
Rune::Jmi => "!",
Rune::Jci => "?",
Rune::MacroOpen => "%",
Rune::MacroClose => "}",
Rune::None => " ",
}
.to_string()
}
}