use std::path::PathBuf;
use clap::Parser;
#[derive(Parser, Debug)]
#[command(name = "wickra-xray", version, about)]
pub struct Args {
#[arg(long)]
pub spec: PathBuf,
#[arg(long, conflicts_with = "stdin")]
pub data: Option<PathBuf>,
#[arg(long, conflicts_with = "data")]
pub stdin: bool,
#[arg(long)]
pub at: Option<i64>,
#[arg(long, value_enum, default_value_t = Format::Text)]
pub format: Format,
}
#[derive(clap::ValueEnum, Clone, Copy, Debug, PartialEq, Eq)]
pub enum Format {
Text,
Json,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn parses_all_options() {
let args = Args::try_parse_from([
"wickra-xray",
"--spec",
"s.json",
"--data",
"d",
"--at",
"1500",
"--format",
"json",
])
.unwrap();
assert_eq!(args.spec, PathBuf::from("s.json"));
assert_eq!(args.data, Some(PathBuf::from("d")));
assert!(!args.stdin);
assert_eq!(args.at, Some(1500));
assert_eq!(args.format, Format::Json);
}
#[test]
fn format_defaults_to_text() {
let args = Args::try_parse_from(["wickra-xray", "--spec", "s.json", "--stdin"]).unwrap();
assert_eq!(args.format, Format::Text);
assert!(args.stdin);
}
#[test]
fn data_and_stdin_conflict() {
let err =
Args::try_parse_from(["wickra-xray", "--spec", "s.json", "--data", "d", "--stdin"]);
assert!(err.is_err());
}
}