1use std::path::{Path, PathBuf};
4
5#[derive(Debug, thiserror::Error)]
6pub enum DbError {
7 #[error("i/o error on `{path}`: {source}")]
8 Io {
9 path: PathBuf,
10 #[source]
11 source: std::io::Error,
12 },
13 #[error("CSV error on `{path}` at line {line:?}: {source}")]
14 Csv {
15 path: PathBuf,
16 line: Option<u64>,
17 #[source]
18 source: csv::Error,
19 },
20 #[error("JSON error on `{path}`: {source}")]
21 Json {
22 path: PathBuf,
23 #[source]
24 source: serde_json::Error,
25 },
26 #[error("parse error on `{path}` line {line}: {msg}")]
27 Parse { path: PathBuf, line: u64, msg: String },
28 #[error("stoichiometry parse error: {0}")]
29 Stoich(#[from] crate::stoich_parse::StoichParseError),
30 #[error("biomass error: {0}")]
31 Biomass(#[from] crate::biomass::BiomassError),
32 #[error("file not found: `{0}`")]
33 NotFound(PathBuf),
34}
35
36pub(crate) fn io_err(path: &Path, source: std::io::Error) -> DbError {
37 DbError::Io { path: path.to_path_buf(), source }
38}
39
40pub(crate) fn csv_err(path: &Path, source: csv::Error) -> DbError {
41 let line = source.position().map(|p| p.line());
42 DbError::Csv { path: path.to_path_buf(), line, source }
43}