use rusqlite;
use std::env;
use std::io;
use thiserror::Error;
#[derive(Error, Debug)]
pub enum DecapodError {
#[error("SQLite error: {0}")]
RusqliteError(#[from] rusqlite::Error),
#[error("I/O error: {0}")]
IoError(#[from] io::Error),
#[error("Failed to initialize database: {0}")]
DatabaseInitializationError(String),
#[error("Path error: {0}")]
PathError(String),
#[error("Environment variable error: {0}")]
EnvVarError(#[from] env::VarError),
#[error("Validation error: {0}")]
ValidationError(String),
#[error("Not found: {0}")]
NotFound(String),
#[error("Not implemented: {0}")]
NotImplemented(String),
#[error("Context pack error: {0}")]
ContextPackError(String),
#[error("Session error: {0}")]
SessionError(String),
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_validation_error_display() {
let err = DecapodError::ValidationError("test failed".to_string());
assert_eq!(format!("{}", err), "Validation error: test failed");
}
#[test]
fn test_not_found_error_display() {
let err = DecapodError::NotFound("file.txt not found".to_string());
assert_eq!(format!("{}", err), "Not found: file.txt not found");
}
#[test]
fn test_not_implemented_error_display() {
let err = DecapodError::NotImplemented("feature X".to_string());
assert_eq!(format!("{}", err), "Not implemented: feature X");
}
#[test]
fn test_session_error_display() {
let err = DecapodError::SessionError("token expired".to_string());
assert_eq!(format!("{}", err), "Session error: token expired");
}
#[test]
fn test_path_error_display() {
let err = DecapodError::PathError("invalid path".to_string());
assert_eq!(format!("{}", err), "Path error: invalid path");
}
}