use semver::Version;
pub const MAX_RETRY_ATTEMPTS: u32 = 3;
pub const RETRY_DELAY_MS: u64 = 2000;
pub const VERSION_UPDATE_DELAY_MS: u64 = 1000;
pub const PROGRESS_TICK_MS: u64 = 100;
pub const PROGRESS_BAR_WIDTH: usize = 40;
#[derive(Debug)]
pub struct PackageInfo {
pub name: String,
pub current_version: Option<String>,
pub latest_version: Option<String>,
}
#[derive(Debug, Clone)]
pub struct UpdateResult {
pub package_name: String,
pub old_version: Option<String>,
pub new_version: Option<String>,
pub success: bool,
}
impl PackageInfo {
pub fn new(name: String, current_version: Option<String>) -> Self {
Self {
name,
current_version,
latest_version: None,
}
}
pub fn has_update(&self) -> bool {
match (&self.current_version, &self.latest_version) {
(Some(current), Some(latest)) => {
match (Version::parse(current), Version::parse(latest)) {
(Ok(c), Ok(l)) => l > c,
_ => current != latest,
}
}
_ => false,
}
}
pub fn is_prerelease(&self) -> bool {
self.latest_version
.as_ref()
.and_then(|v| Version::parse(v).ok())
.map(|v| !v.pre.is_empty())
.unwrap_or(false)
}
}
impl UpdateResult {
pub fn new(
package_name: String,
old_version: Option<String>,
new_version: Option<String>,
success: bool,
) -> Self {
Self {
package_name,
old_version,
new_version,
success,
}
}
}