Skip to main content

ailake_core/
error.rs

1// SPDX-License-Identifier: MIT OR Apache-2.0
2use 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(
22        "embedding model mismatch: table uses '{table_model}' (dim={table_dim}), \
23         batch uses '{batch_model}' (dim={batch_dim})"
24    )]
25    ModelMismatch {
26        table_model: String,
27        table_dim: u32,
28        batch_model: String,
29        batch_dim: u32,
30    },
31
32    #[error("centroid length mismatch: expected dim={expected_dim}, got {actual} bytes")]
33    InvalidCentroidLength { expected_dim: u32, actual: usize },
34
35    #[error("file is not a valid AI-Lake file (no AILK trailer)")]
36    NotAnAilakeFile,
37
38    #[error("invalid argument: {0}")]
39    InvalidArgument(String),
40
41    #[error("catalog error: {0}")]
42    Catalog(String),
43
44    #[error("store error: {0}")]
45    Store(String),
46
47    #[error("I/O error: {0}")]
48    Io(#[from] std::io::Error),
49
50    #[error("Parquet error: {0}")]
51    Parquet(String),
52
53    #[error("bincode error: {0}")]
54    Bincode(String),
55
56    #[error("Arrow error: {0}")]
57    Arrow(String),
58
59    #[error("JSON error: {0}")]
60    Json(#[from] serde_json::Error),
61}
62
63pub type AilakeResult<T> = Result<T, AilakeError>;