use clap::ValueEnum;
#[derive(Clone, Copy, Debug, PartialEq, Eq, ValueEnum)]
pub enum StageMode {
All,
Tracked,
None,
}
#[derive(serde::Serialize)]
pub struct PushResult {
pub branch: String,
pub remote: String,
pub committed: Option<String>,
pub outcome: PushOutcome,
pub commits_pushed: usize,
}
#[derive(serde::Serialize, PartialEq, Eq, Debug)]
#[serde(rename_all = "kebab-case")]
pub enum PushOutcome {
Pushed,
UpToDate,
}
#[derive(serde::Serialize)]
pub struct PullResult {
pub branch: String,
pub remote: String,
pub outcome: PullOutcome,
pub commits_pulled: usize,
}
#[derive(serde::Serialize, PartialEq, Eq, Debug)]
#[serde(rename_all = "kebab-case")]
pub enum PullOutcome {
FastForwarded,
UpToDate,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn outcome_serialization_contract() {
assert_eq!(
serde_json::to_string(&PushOutcome::Pushed).unwrap(),
"\"pushed\""
);
assert_eq!(
serde_json::to_string(&PushOutcome::UpToDate).unwrap(),
"\"up-to-date\""
);
assert_eq!(
serde_json::to_string(&PullOutcome::FastForwarded).unwrap(),
"\"fast-forwarded\""
);
assert_eq!(
serde_json::to_string(&PullOutcome::UpToDate).unwrap(),
"\"up-to-date\""
);
}
}