use derive_more::{Display, IsVariant};
use crate::lexer::DelimiterToken;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, IsVariant, Display)]
pub enum Delimiter {
#[display("{{}}")]
Brace,
#[display("()")]
Paren,
#[display("[]")]
Bracket,
#[display("<>")]
Angle,
}
impl Delimiter {
#[cfg_attr(not(tarpaulin), inline(always))]
pub fn is_open<'a, T: DelimiterToken<'a>>(&self, token: &T) -> bool {
match self {
Delimiter::Brace => token.is_open_brace(),
Delimiter::Paren => token.is_open_paren(),
Delimiter::Bracket => token.is_open_bracket(),
Delimiter::Angle => token.is_open_angle(),
}
}
#[cfg_attr(not(tarpaulin), inline(always))]
pub fn is_close<'a, T: DelimiterToken<'a>>(&self, token: &T) -> bool {
match self {
Delimiter::Brace => token.is_close_brace(),
Delimiter::Paren => token.is_close_paren(),
Delimiter::Bracket => token.is_close_bracket(),
Delimiter::Angle => token.is_close_angle(),
}
}
}