use thiserror::Error;
use crate::FoundationError;
#[derive(Error, Debug)]
pub enum LoaderError {
#[error("Package not found: {package}@{version}")]
PackageNotFound { package: String, version: String },
#[error("Invalid package manifest: {message}")]
InvalidManifest { message: String },
#[error("Archive extraction failed: {message}")]
ArchiveError { message: String },
#[error(
"Package already exists: {package}@{version} at {path}. Use --overwrite to replace it."
)]
PackageExists {
package: String,
version: String,
path: String,
},
#[error(transparent)]
Foundation(#[from] FoundationError),
#[error("URL parsing failed: {0}")]
UrlParse(#[from] url::ParseError),
}
impl From<std::io::Error> for LoaderError {
fn from(err: std::io::Error) -> Self {
Self::Foundation(FoundationError::Io(err))
}
}
impl From<serde_json::Error> for LoaderError {
fn from(err: serde_json::Error) -> Self {
Self::Foundation(FoundationError::Serialization(err))
}
}
pub type LoaderResult<T> = std::result::Result<T, LoaderError>;