use crate::cli::Cli;
use anyhow::{anyhow, Result};
pub(super) fn validate_cli_options(cli: &Cli) -> Result<()> {
if cli.output_file.is_some() && cli.paste {
return Err(anyhow!(
"Cannot use --output <FILE> (-o) and --paste (-p) simultaneously."
));
}
Ok(())
}
#[cfg(test)]
mod tests {
use super::*;
use crate::cli::Cli;
use clap::Parser;
#[test]
fn test_output_conflict_validation() {
let cli = Cli::parse_from(["dircat", ".", "-o", "out.txt", "-p"]);
let result = validate_cli_options(&cli);
assert!(result.is_err());
assert!(result.unwrap_err().to_string().contains("simultaneously"));
}
#[test]
fn test_valid_options_pass() -> Result<()> {
let cli_stdout = Cli::parse_from(["dircat", "."]);
validate_cli_options(&cli_stdout)?;
let cli_file = Cli::parse_from(["dircat", ".", "-o", "out.txt"]);
validate_cli_options(&cli_file)?;
#[cfg(feature = "clipboard")]
{
let cli_paste = Cli::parse_from(["dircat", ".", "-p"]);
validate_cli_options(&cli_paste)?;
}
Ok(())
}
}