use serde::Serialize;
#[derive(Serialize, Clone, Copy, Debug, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
pub(crate) enum NextStepStatus {
Continue,
ReviewRequired,
NoChangeDetected,
NoChange,
}
#[derive(Serialize, Clone, Copy, Debug, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
pub(crate) enum MemoryStatus {
Loaded,
NoCliSignal,
ReviewRequired,
NoChange,
}
#[derive(Serialize, Clone, Copy, Debug, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
pub(crate) enum WrapUpStatus {
Clean,
ReadyToCommit,
ReadyToPush,
NeedsReview,
NoChange,
}
impl WrapUpStatus {
pub(crate) fn as_str(self) -> &'static str {
match self {
Self::Clean => "clean",
Self::ReadyToCommit => "ready_to_commit",
Self::ReadyToPush => "ready_to_push",
Self::NeedsReview => "needs_review",
Self::NoChange => "no_change",
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn next_step_serializes_to_snake_case_contract() {
assert_eq!(
serde_json::to_string(&NextStepStatus::Continue).unwrap(),
"\"continue\""
);
assert_eq!(
serde_json::to_string(&NextStepStatus::ReviewRequired).unwrap(),
"\"review_required\""
);
assert_eq!(
serde_json::to_string(&NextStepStatus::NoChangeDetected).unwrap(),
"\"no_change_detected\""
);
assert_eq!(
serde_json::to_string(&NextStepStatus::NoChange).unwrap(),
"\"no_change\""
);
}
#[test]
fn memory_serializes_to_snake_case_contract() {
assert_eq!(
serde_json::to_string(&MemoryStatus::Loaded).unwrap(),
"\"loaded\""
);
assert_eq!(
serde_json::to_string(&MemoryStatus::NoCliSignal).unwrap(),
"\"no_cli_signal\""
);
assert_eq!(
serde_json::to_string(&MemoryStatus::ReviewRequired).unwrap(),
"\"review_required\""
);
assert_eq!(
serde_json::to_string(&MemoryStatus::NoChange).unwrap(),
"\"no_change\""
);
}
#[test]
fn wrap_up_serializes_to_snake_case_contract() {
assert_eq!(
serde_json::to_string(&WrapUpStatus::Clean).unwrap(),
"\"clean\""
);
assert_eq!(
serde_json::to_string(&WrapUpStatus::ReadyToCommit).unwrap(),
"\"ready_to_commit\""
);
assert_eq!(
serde_json::to_string(&WrapUpStatus::ReadyToPush).unwrap(),
"\"ready_to_push\""
);
assert_eq!(
serde_json::to_string(&WrapUpStatus::NeedsReview).unwrap(),
"\"needs_review\""
);
assert_eq!(
serde_json::to_string(&WrapUpStatus::NoChange).unwrap(),
"\"no_change\""
);
}
#[test]
fn wrap_up_as_str_matches_serde_output() {
for s in [
WrapUpStatus::Clean,
WrapUpStatus::ReadyToCommit,
WrapUpStatus::ReadyToPush,
WrapUpStatus::NeedsReview,
WrapUpStatus::NoChange,
] {
assert_eq!(
serde_json::to_string(&s).unwrap(),
format!("\"{}\"", s.as_str())
);
}
}
}