1use thiserror::Error;
3
4#[derive(Error, Debug)]
5pub enum AilakeError {
6 #[error("unsupported format version: {0}")]
7 UnsupportedFormatVersion(u16),
8
9 #[error("AI-Lake footer magic mismatch: expected AILK, got {0:?}")]
10 InvalidAilakeMagic([u8; 4]),
11
12 #[error("Parquet footer magic mismatch: expected PAR1, got {0:?}")]
13 InvalidParquetMagic([u8; 4]),
14
15 #[error("positional invariant violated: parquet rows {parquet} != HNSW nodes {hnsw}")]
16 RowCountMismatch { parquet: u64, hnsw: u64 },
17
18 #[error("vector dimension mismatch: expected {expected}, got {actual}")]
19 DimensionMismatch { expected: u32, actual: u32 },
20
21 #[error("centroid length mismatch: expected dim={expected_dim}, got {actual} bytes")]
22 InvalidCentroidLength { expected_dim: u32, actual: usize },
23
24 #[error("file is not a valid AI-Lake file (no AILK trailer)")]
25 NotAnAilakeFile,
26
27 #[error("invalid argument: {0}")]
28 InvalidArgument(String),
29
30 #[error("catalog error: {0}")]
31 Catalog(String),
32
33 #[error("store error: {0}")]
34 Store(String),
35
36 #[error("I/O error: {0}")]
37 Io(#[from] std::io::Error),
38
39 #[error("Parquet error: {0}")]
40 Parquet(String),
41
42 #[error("bincode error: {0}")]
43 Bincode(String),
44
45 #[error("Arrow error: {0}")]
46 Arrow(String),
47
48 #[error("JSON error: {0}")]
49 Json(#[from] serde_json::Error),
50}
51
52pub type AilakeResult<T> = Result<T, AilakeError>;