use semver::Version;

/// Enum which represents the update status of a package
#[derive(Debug)]
pub enum Status {
    Unchanged,
    Removed,
    Version(Version),
}

impl Status {
    pub fn from_versions(from: &Version, to: Option<&Version>) -> Status {
        if let Some(to) = to {
            if from == to {
                Status::Unchanged
            } else {
                Status::Version(to.clone())
            }
        } else {
            Status::Removed
        }
    }

    pub fn is_changed(&self) -> bool { !matches!(*self, Status::Unchanged) }
}

impl ::std::string::ToString for Status {
    fn to_string(&self) -> String {
        match *self {
            Status::Unchanged => "---".to_owned(),
            Status::Removed => "Removed".to_owned(),
            Status::Version(ref v) => v.to_string(),
        }
    }
}

#[derive(Debug)]
pub struct PkgStatus {
    pub compat: Status,
    pub latest: Status,
}
