45 lines
1.8 KiB
Rust
45 lines
1.8 KiB
Rust
use thiserror::Error;
|
|
|
|
/// Core error types used across services for consistent error handling.
|
|
///
|
|
/// This enum centralizes errors from database, I/O, validation, and other operations.
|
|
/// It implements Error and Debug for propagation and logging. Use this for all service-level errors.
|
|
///
|
|
/// # Variants
|
|
///
|
|
/// * `Database(rusqlite::Error)` - Wraps SQLite errors from queries or transactions.
|
|
/// * `Io(std::io::Error)` - Wraps I/O errors from file operations or streams.
|
|
/// * `ItemNotFound(i64)` - Specific item not found by ID.
|
|
/// * `ItemNotFoundGeneric` - Generic item not found (no ID specified).
|
|
/// * `InvalidInput(String)` - User or config input validation failure with message.
|
|
/// * `Compression(String)` - Compression/decompression errors with details.
|
|
/// * `Other(anyhow::Error)` - Catch-all for other anyhow-wrapped errors.
|
|
/// * `Migration(rusqlite_migration::Error)` - Database migration failures.
|
|
#[derive(Error, Debug)]
|
|
pub enum CoreError {
|
|
#[error("Database error: {0}")]
|
|
/// Database operation failed.
|
|
Database(#[from] rusqlite::Error),
|
|
#[error("I/O error: {0}")]
|
|
/// File or stream I/O operation failed.
|
|
Io(#[from] std::io::Error),
|
|
#[error("Item not found with id {0}")]
|
|
/// Item with the specified ID does not exist in the database.
|
|
ItemNotFound(i64),
|
|
#[error("Item not found")]
|
|
/// Item does not exist (no specific ID).
|
|
ItemNotFoundGeneric,
|
|
#[error("Invalid input: {0}")]
|
|
/// Input validation failed.
|
|
InvalidInput(String),
|
|
#[error("Compression error: {0}")]
|
|
/// Compression or decompression operation failed.
|
|
Compression(String),
|
|
#[error(transparent)]
|
|
/// Other unexpected error.
|
|
Other(#[from] anyhow::Error),
|
|
#[error("Migration error: {0}")]
|
|
/// Database schema migration failed.
|
|
Migration(#[from] rusqlite_migration::Error),
|
|
}
|