use thiserror::Error;
#[derive(Error, Debug)]
pub enum PkgError {
#[error("Network error: {0}")]
NetworkError(String),
#[error("IO error: {0}")]
IoError(String),
#[error("Database error: {0}")]
DatabaseError(String),
#[error("Parse error: {0}")]
ParseError(String),
#[error("Package not found: {0}")]
PackageNotFound(String),
#[error("Repository error: {0}")]
RepoError(String),
#[error("Compression error: {0}")]
CompressionError(String),
#[error("XML error: {0}")]
XmlError(String),
#[error("Invalid argument: {0}")]
InvalidArgument(String),
}
impl From<std::io::Error> for PkgError {
fn from(e: std::io::Error) -> Self {
PkgError::IoError(e.to_string())
}
}
impl From<rusqlite::Error> for PkgError {
fn from(e: rusqlite::Error) -> Self {
PkgError::DatabaseError(e.to_string())
}
}
impl From<quick_xml::Error> for PkgError {
fn from(e: quick_xml::Error) -> Self {
PkgError::XmlError(e.to_string())
}
}
impl From<serde_json::Error> for PkgError {
fn from(e: serde_json::Error) -> Self {
PkgError::ParseError(format!("JSON: {}", e))
}
}
pub type Result<T> = std::result::Result<T, PkgError>;