#[derive(Clone, Copy, PartialEq, Eq)]
pub enum Delimiter {
Brace,
Bang,
Percent,
Quest,
Hash,
}
impl Delimiter {
pub fn match_open(ch: u8) -> Option<Self> {
match ch {
b'{' => Some(Self::Brace),
b'!' => Some(Self::Bang),
b'%' => Some(Self::Percent),
b'?' => Some(Self::Quest),
b'#' => Some(Self::Hash),
_ => None,
}
}
pub fn match_close(ch: u8) -> Option<Self> {
match ch {
b'}' => Some(Self::Brace),
b'!' => Some(Self::Bang),
b'%' => Some(Self::Percent),
b'?' => Some(Self::Quest),
b'#' => Some(Self::Hash),
_ => None,
}
}
}
impl std::fmt::Display for Delimiter {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
match self {
Self::Brace => f.write_str("brace"),
Self::Bang => f.write_str("!"),
Self::Percent => f.write_str("%"),
Self::Quest => f.write_str("?"),
Self::Hash => f.write_str("#"),
}
}
}