use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
pub enum CliEvent {
VerbositySet {
level: u8,
},
QuietModeEnabled,
FullModeEnabled,
DebugModeEnabled,
QuickPresetApplied,
RapidPresetApplied,
LongPresetApplied,
StandardPresetApplied,
ThoroughPresetApplied,
DeveloperItersSet {
value: u32,
},
ReviewerReviewsSet {
value: u32,
},
DeveloperAgentSet {
agent: String,
},
ReviewerAgentSet {
agent: String,
},
DeveloperModelSet {
model: String,
},
ReviewerModelSet {
model: String,
},
DeveloperProviderSet {
provider: String,
},
ReviewerProviderSet {
provider: String,
},
ReviewerJsonParserSet {
parser: String,
},
IsolationModeDisabled,
ReviewDepthSet {
depth: String,
},
GitUserNameSet {
name: String,
},
GitUserEmailSet {
email: String,
},
StreamingMetricsEnabled,
AgentPresetSet {
preset: String,
},
CliProcessingComplete,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_event_serialization() {
let event = CliEvent::QuickPresetApplied;
let json = serde_json::to_string(&event).unwrap();
let deserialized: CliEvent = serde_json::from_str(&json).unwrap();
assert_eq!(event, deserialized);
}
#[test]
fn test_event_with_data_serialization() {
let event = CliEvent::DeveloperItersSet { value: 10 };
let json = serde_json::to_string(&event).unwrap();
assert!(json.contains("10"));
let deserialized: CliEvent = serde_json::from_str(&json).unwrap();
assert_eq!(event, deserialized);
}
#[test]
fn test_all_preset_events_distinct() {
let presets = [
CliEvent::QuickPresetApplied,
CliEvent::RapidPresetApplied,
CliEvent::LongPresetApplied,
CliEvent::StandardPresetApplied,
CliEvent::ThoroughPresetApplied,
];
assert!(presets
.iter()
.enumerate()
.all(|(i, p1)| { presets.iter().position(|p| p == p1) == Some(i) }));
}
}