1#[derive(Debug, Clone, PartialEq, Eq)]
5pub enum MolParseError {
6 InvalidHeader { line: usize, detail: String },
8 InvalidCountLine { line: usize, detail: String },
10 InvalidAtomLine { line: usize, detail: String },
12 InvalidBondLine { line: usize, detail: String },
14 UnknownElement { symbol: String, line: usize },
16 UnexpectedEnd,
18 V3000ParseError { line: usize, msg: String },
20}
21
22impl std::fmt::Display for MolParseError {
23 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
24 match self {
25 Self::InvalidHeader { line, detail } => {
26 write!(f, "invalid header at line {line}: {detail}")
27 }
28 Self::InvalidCountLine { line, detail } => {
29 write!(f, "invalid counts line at line {line}: {detail}")
30 }
31 Self::InvalidAtomLine { line, detail } => {
32 write!(f, "invalid atom line at line {line}: {detail}")
33 }
34 Self::InvalidBondLine { line, detail } => {
35 write!(f, "invalid bond line at line {line}: {detail}")
36 }
37 Self::UnknownElement { symbol, line } => {
38 write!(f, "unknown element symbol '{symbol}' at line {line}")
39 }
40 Self::UnexpectedEnd => {
41 write!(f, "unexpected end of input")
42 }
43 Self::V3000ParseError { line, msg } => {
44 write!(f, "V3000 parse error at line {line}: {msg}")
45 }
46 }
47 }
48}
49
50impl std::error::Error for MolParseError {}