use clap::ValueEnum;
use std::path::PathBuf;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default, ValueEnum)]
pub enum OutputModeArg {
#[default]
Streaming,
Batch,
Silent,
}
pub struct UnifiedArgs {
pub task: Option<String>,
pub config_file: String,
pub working_dir: Option<PathBuf>,
pub max_steps: Option<u32>,
pub verbose: bool,
pub non_interactive: bool,
pub resume_session_id: Option<String>,
pub continue_recent: bool,
pub stream_json: bool,
pub output_mode: OutputModeArg,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_unified_args_defaults() {
let args = UnifiedArgs {
task: None,
config_file: "sage_config.json".to_string(),
working_dir: None,
max_steps: None,
verbose: false,
non_interactive: false,
resume_session_id: None,
continue_recent: false,
stream_json: false,
output_mode: OutputModeArg::default(),
};
assert!(!args.non_interactive);
assert!(!args.verbose);
assert!(!args.continue_recent);
assert!(!args.stream_json);
assert_eq!(args.output_mode, OutputModeArg::Streaming);
}
#[test]
fn test_output_mode_value_enum() {
use clap::ValueEnum;
assert_eq!(OutputModeArg::value_variants().len(), 3);
let streaming = OutputModeArg::Streaming.to_possible_value();
assert!(streaming.is_some());
if let Some(streaming) = streaming {
assert_eq!(streaming.get_name(), "streaming");
}
let batch = OutputModeArg::Batch.to_possible_value();
assert!(batch.is_some());
if let Some(batch) = batch {
assert_eq!(batch.get_name(), "batch");
}
let silent = OutputModeArg::Silent.to_possible_value();
assert!(silent.is_some());
if let Some(silent) = silent {
assert_eq!(silent.get_name(), "silent");
}
}
}