use base62_uuid::{base62_uuid, decode, decode_u128, encode, encode_u128, u128_uuid};
use clap::Parser;
use std::io::stdin;
#[derive(Parser)]
struct Args {
#[clap(short, long, default_value_t = 1)]
count: usize,
#[clap(short, long)]
decode: bool,
#[clap(short, long)]
encode: bool,
#[clap(short, long)]
pad: bool,
#[clap(short)]
u: bool,
}
fn main() -> Result<(), String> {
let args = Args::parse();
if args.decode && args.encode {
return Err(String::from(
"Decode and encode options are mutually exclusive.",
));
}
if args.decode {
let mut line = String::new();
while stdin().read_line(&mut line).is_ok() {
let s = line.trim();
if s.is_empty() {
break;
}
if args.u {
println!("{}", decode_u128(s));
} else {
println!("{}", decode(s));
}
line = String::new();
}
} else if args.encode {
let mut line = String::new();
while stdin().read_line(&mut line).is_ok() {
let s = line.trim();
if s.is_empty() {
break;
}
if args.u {
println!("{}", encode_u128(s, args.pad));
} else {
println!("{}", encode(s, args.pad));
}
line = String::new();
}
} else if args.u {
for _ in 0..args.count {
println!("{}", u128_uuid(args.pad));
}
} else {
for _ in 0..args.count {
println!("{}", base62_uuid(args.pad));
}
}
Ok(())
}