use crate::config::{Config, ReviewDepth};
use crate::logger::Colors;
use clap::ValueEnum;
trait StdIoWriteCompat {
fn write_fmt(&mut self, args: std::fmt::Arguments<'_>) -> std::io::Result<()>;
}
impl<T: std::io::Write> StdIoWriteCompat for T {
fn write_fmt(&mut self, args: std::fmt::Arguments<'_>) -> std::io::Result<()> {
std::io::Write::write_fmt(self, args)
}
}
#[derive(Clone, Debug, ValueEnum)]
pub enum Preset {
Default,
Opencode,
}
#[must_use]
pub fn apply_args_to_config(args: &super::Args, config: Config, colors: Colors) -> Config {
use crate::cli::reducer::{apply_cli_state_to_config, args_to_events, reduce, CliState};
if let Some(ref depth) = args.review_depth {
if ReviewDepth::from_str(depth).is_none() {
let _ = writeln!(
std::io::stderr(),
"{}{}Warning:{} Unknown review depth '{}'. Using default (standard).",
colors.bold(),
colors.yellow(),
colors.reset(),
depth
);
let _ = writeln!(
std::io::stderr(),
"Valid options: standard, comprehensive, security, incremental"
);
}
}
let events = args_to_events(args);
let state = events.into_iter().fold(CliState::initial(), reduce);
apply_cli_state_to_config(&state, &config)
}