use thiserror::Error;
pub type Result<T> = std::result::Result<T, EgError>;
#[derive(Debug, Error)]
pub enum EgError {
#[error("Project error: {0}")]
ProjectError(#[from] cargo_metadata::Error),
#[error("Version error: {0}")]
VersionError(#[from] semver::Error),
#[error("Could not determine CARGO_HOME directory")]
CargoHomeNotFound(#[source] std::io::Error),
#[error("Download error: {0}")]
DownloadError(#[from] reqwest::Error),
#[error("Extraction error: {0}")]
ExtractionError(String),
#[error("I/O error: {0}")]
IoError(#[from] std::io::Error),
#[error("Crate '{0}' not found")]
CrateNotFound(String),
#[error("No versions of '{crate_name}' match constraint '{constraint}'")]
NoMatchingVersions { crate_name: String, constraint: String },
#[error("Error: {0}")]
Other(String),
}