use std::collections::BTreeMap;
use std::fmt;
use std::path::PathBuf;
use serde::Serialize;
use crate::manifest::ManifestRow;
#[derive(Debug)]
pub enum Change {
Modified(ManifestRow), Added(ManifestRow), Removed(ManifestRow), }
pub type ChangeSet = BTreeMap<PathBuf, Change>;
#[derive(Debug, PartialEq, Eq, Default, Serialize)]
pub enum UpstreamState {
#[default]
UpToDate,
Behind,
Ahead,
Diverged,
Local,
Error,
}
impl fmt::Display for UpstreamState {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let s = match self {
UpstreamState::Ahead => "ahead",
UpstreamState::Behind => "behind",
UpstreamState::Diverged => "diverged",
UpstreamState::UpToDate => "up_to_date",
UpstreamState::Local => "local",
UpstreamState::Error => "error",
};
f.write_str(s)
}
}
#[derive(Debug, Default)]
pub struct InstalledPackageStatus {
pub upstream_state: UpstreamState,
pub changes: ChangeSet,
pub ignored_files: Vec<(PathBuf, String, u64)>,
pub junky_changes: Vec<(PathBuf, String)>,
}
impl InstalledPackageStatus {
pub fn new(upstream_state: UpstreamState, changes: ChangeSet) -> Self {
Self {
upstream_state,
changes,
ignored_files: Vec::new(),
junky_changes: Vec::new(),
}
}
pub fn error() -> Self {
Self {
upstream_state: UpstreamState::Error,
..Default::default()
}
}
pub fn local() -> Self {
Self {
upstream_state: UpstreamState::Local,
..Default::default()
}
}
}