use clap::{Parser, arg, command};
use lewn::{compute_check_digit, compute_checksum, compute_valid_sequence, validate_sequence};
#[derive(Parser, Default, Debug)]
#[command(author = "adharmic", version, about)]
pub struct Arguments {
sequence: String,
#[arg(short, long, action)]
validate: bool,
#[arg(short, long, action)]
checksum: bool,
#[arg(short, long, action)]
generate: bool,
#[arg(short, long, action)]
digit: bool,
}
fn main() {
let args = Arguments::parse();
if (!args.validate && !args.checksum && !args.generate && !args.digit) || args.validate {
let valid_sequence = validate_sequence(&args.sequence);
let mut message = "is";
if !valid_sequence {
message = "is not";
}
println!("{} {} a valid Luhn number.", args.sequence, message)
}
if args.checksum {
println!(
"Generated checksum for {}: {}",
args.sequence,
compute_checksum(&args.sequence, false)
);
}
if args.generate {
println!(
"Generated Luhn number from {}: {}",
args.sequence,
compute_valid_sequence(&args.sequence)
);
}
if args.digit {
println!(
"Generated check digit for {}: {}",
args.sequence,
compute_check_digit(&args.sequence)
);
}
}