Skip to main content

gapsmith_db/
common.rs

1//! Shared error type plus tiny helpers used across loaders.
2
3use 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}