use std::fmt;
use std::io;
#[derive(Debug)]
#[non_exhaustive]
pub enum Error {
UnsupportedLanguage {
language: String,
},
ParseError {
language: String,
message: String,
},
QueryError {
language: String,
message: String,
},
Io(io::Error),
}
impl fmt::Display for Error {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Error::UnsupportedLanguage { language } => {
write!(f, "unsupported language: {}", language)
}
Error::ParseError { language, message } => {
write!(f, "parse error for {}: {}", language, message)
}
Error::QueryError { language, message } => {
write!(f, "query error for {}: {}", language, message)
}
Error::Io(e) => write!(f, "I/O error: {}", e),
}
}
}
impl std::error::Error for Error {
fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
match self {
Error::Io(e) => Some(e),
_ => None,
}
}
}
impl From<io::Error> for Error {
fn from(e: io::Error) -> Self {
Error::Io(e)
}
}
impl From<arborium_highlight::HighlightError> for Error {
fn from(e: arborium_highlight::HighlightError) -> Self {
match e {
arborium_highlight::HighlightError::UnsupportedLanguage(language) => {
Error::UnsupportedLanguage { language }
}
arborium_highlight::HighlightError::ParseError(message) => Error::ParseError {
language: String::new(), message,
},
}
}
}