use std::path::PathBuf;
use thiserror::Error;
#[derive(Error, Debug)]
pub enum AcbError {
#[error("Invalid magic bytes in file header")]
InvalidMagic,
#[error("Unsupported format version: {0}")]
UnsupportedVersion(u32),
#[error("Code unit ID {0} not found")]
UnitNotFound(u64),
#[error("Edge references invalid code unit: {0}")]
InvalidEdgeTarget(u64),
#[error("Self-edge not allowed on unit {0}")]
SelfEdge(u64),
#[error("Symbol name too long: {len} > {max}")]
NameTooLong {
len: usize,
max: usize,
},
#[error("Path too long: {len} > {max}")]
PathTooLong {
len: usize,
max: usize,
},
#[error("Feature vector dimension mismatch: expected {expected}, got {got}")]
DimensionMismatch {
expected: usize,
got: usize,
},
#[error("Maximum edges per unit exceeded: {0}")]
TooManyEdges(u32),
#[error("Path not found: {0}")]
PathNotFound(PathBuf),
#[error("Unsupported language: {0}")]
UnsupportedLanguage(String),
#[error("Parse error in {path}: {message}")]
ParseError {
path: PathBuf,
message: String,
},
#[error("Semantic error: {0}")]
SemanticError(String),
#[error("Git error: {0}")]
GitError(String),
#[error("IO error: {0}")]
Io(#[from] std::io::Error),
#[error("Compression error: {0}")]
Compression(String),
#[error("File is empty or truncated")]
Truncated,
#[error("Corrupt data at offset {0}")]
Corrupt(u64),
#[error("Query error: {0}")]
QueryError(String),
#[error("Collective sync error: {0}")]
CollectiveError(String),
#[error("Duplicate edge from {0} to {1}")]
DuplicateEdge(u64, u64),
}
pub type AcbResult<T> = Result<T, AcbError>;