1use thiserror::Error;
6
7pub mod context;
9pub mod data;
11pub mod database;
13pub mod models;
15
16pub type CCDBResult<T> = Result<T, CCDBError>;
18
19#[derive(Error, Debug)]
21pub enum CCDBError {
22 #[error(transparent)]
24 SqliteError(#[from] rusqlite::Error),
25 #[error("directory not found: {0}")]
27 DirectoryNotFoundError(String),
28 #[error("table not found: {0}")]
30 TableNotFoundError(String),
31 #[error(transparent)]
33 PathResolutionError(#[from] std::io::Error),
34 #[error("invalid path: {0}")]
36 InvalidPathError(String),
37 #[error("variation not found: {0}")]
39 VariationNotFoundError(String),
40 #[error("path \"{0}\" is not absolute (must start with '/')")]
42 NotAbsolutePath(String),
43 #[error("illegal character encountered in path \"{0}\"")]
45 IllegalCharacter(String),
46 #[error("invalid run number: {0}")]
48 InvalidRunNumberError(String),
49 #[error("column count mismatch (expected {expected}, found {found})")]
51 ColumnCountMismatch {
52 expected: usize,
54 found: usize,
56 },
57 #[error("parse error at row {row}, column {column} ({column_type}): {text:?}")]
59 ParseError {
60 column: usize,
62 row: usize,
64 column_type: crate::models::ColumnType,
66 text: String,
68 },
69 #[error("row index {requested} out of bounds (n_rows={n_rows})")]
71 RowOutOfBounds {
72 requested: usize,
74 n_rows: usize,
76 },
77 #[error(transparent)]
79 GlueXCoreError(#[from] gluex_core::GlueXCoreError),
80 #[error("missing {0} environment variable for CCDB connection")]
82 MissingConnectionEnv(String),
83}
84
85pub use crate::context::{CCDBContext, NamePath, Request};
86pub use crate::data::{Column, ColumnDef, ColumnLayout, Data, RowView, Value};
87pub use crate::database::CCDB;
88pub use crate::models::{
89 AssignmentMeta, AssignmentMetaLite, ColumnMeta, ColumnType, ConstantSetMeta, DirectoryMeta,
90 EventRangeMeta, RunRangeMeta, TypeTableMeta, VariationMeta,
91};
92pub use gluex_core::{run_periods::RunPeriod, GlueXCoreError, RESTVersion, RunNumber};