#[derive(Debug, Clone, PartialEq, Eq)]
pub enum MolParseError {
InvalidHeader { line: usize, detail: String },
InvalidCountLine { line: usize, detail: String },
InvalidAtomLine { line: usize, detail: String },
InvalidBondLine { line: usize, detail: String },
UnknownElement { symbol: String, line: usize },
UnexpectedEnd,
V3000ParseError { line: usize, msg: String },
}
impl std::fmt::Display for MolParseError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::InvalidHeader { line, detail } => {
write!(f, "invalid header at line {line}: {detail}")
}
Self::InvalidCountLine { line, detail } => {
write!(f, "invalid counts line at line {line}: {detail}")
}
Self::InvalidAtomLine { line, detail } => {
write!(f, "invalid atom line at line {line}: {detail}")
}
Self::InvalidBondLine { line, detail } => {
write!(f, "invalid bond line at line {line}: {detail}")
}
Self::UnknownElement { symbol, line } => {
write!(f, "unknown element symbol '{symbol}' at line {line}")
}
Self::UnexpectedEnd => {
write!(f, "unexpected end of input")
}
Self::V3000ParseError { line, msg } => {
write!(f, "V3000 parse error at line {line}: {msg}")
}
}
}
}
impl std::error::Error for MolParseError {}