use thiserror::Error;
#[derive(Error, Debug)]
pub enum TriviumError {
#[error("I/O error: {0}")]
Io(#[from] std::io::Error),
#[error("Serialization error: {0}")]
Serialization(#[from] bincode::Error),
#[error("Vector dimension mismatch: expected {expected}, got {got}")]
DimensionMismatch { expected: usize, got: usize },
#[error("Node not found: {0}")]
NodeNotFound(u64),
#[error("Invalid vector: {reason}")]
InvalidVector { reason: String },
#[error("Payload too large: {size_bytes} bytes (max {max_bytes} bytes)")]
PayloadTooLarge { size_bytes: usize, max_bytes: usize },
#[error("Node already exists: {0}")]
NodeAlreadyExists(u64),
#[error("Database locked: {0}")]
DatabaseLocked(String),
#[error("Corrupted file: {0}")]
CorruptedFile(String),
#[error("Query parse error: {0}")]
QueryParse(String),
#[error("Query execution error: {0}")]
QueryExecution(String),
#[error("Hook load error: {0}")]
HookLoadError(String),
#[error("WAL writer is closed, cannot perform write operations")]
WalClosed,
#[error("Invalid input: {0}")]
InvalidInput(String),
#[error("Database error: {0}")]
Generic(String),
}
pub type Result<T> = std::result::Result<T, TriviumError>;