use std::fmt;
#[derive(Debug, Clone, PartialEq, Eq)]
#[non_exhaustive]
pub enum Error {
UnknownLanguage(String),
UnknownTheme(String),
Grammar(String),
Theme(String),
Bundle(String),
Diagnostic(String),
Render(String),
StateMismatch,
InvalidLine,
}
impl fmt::Display for Error {
fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::UnknownLanguage(language) => {
write!(formatter, "unknown TextMate language `{language}`")
}
Self::UnknownTheme(theme) => write!(formatter, "unknown TextMate theme `{theme}`"),
Self::Grammar(message) | Self::Theme(message) => formatter.write_str(message),
Self::Bundle(message) | Self::Diagnostic(message) | Self::Render(message) => {
formatter.write_str(message)
}
Self::StateMismatch => {
formatter.write_str("tokenizer state belongs to a different Syntaxmate tokenizer")
}
Self::InvalidLine => formatter
.write_str("tokenize_line expects one logical line without a newline terminator"),
}
}
}
impl std::error::Error for Error {}
pub type Result<T> = std::result::Result<T, Error>;