use clap::{Args, Parser, Subcommand};
use std::process;
#[derive(Parser, Clone)]
#[command(author, version, about, long_about = None)]
pub struct PdfCli {
#[command(subcommand)]
pub command: PdfCommands,
}
#[derive(Subcommand, Clone)]
pub enum PdfCommands {
#[command(name = "xfx_q2")]
XfxQ2(XfxQ2Args),
#[command(name = "alphas_q2")]
AlphasQ2(AlphasQ2Args),
}
#[derive(Args, Clone)]
pub struct XfxQ2Args {
#[arg(short, long)]
pub pdf_name: String,
#[arg(short, long)]
pub member: usize,
#[arg(short = 'i', long)]
pub pid: i32,
#[arg(required = true)]
pub inputs: Vec<f64>,
}
#[derive(Args, Clone)]
pub struct AlphasQ2Args {
#[arg(short, long)]
pub pdf_name: String,
#[arg(short, long)]
pub member: usize,
#[arg(short, long)]
pub q2: f64,
}
#[allow(clippy::needless_pass_by_value)]
pub fn main(cli: PdfCli) {
match &cli.command {
PdfCommands::XfxQ2(args) => {
let pdf = neopdf::pdf::PDF::load(&args.pdf_name, args.member);
if args.inputs.len() < 2 {
eprintln!("Error: At least [x, Q2] must be provided as input.");
process::exit(1);
}
let val = pdf.xfxq2(args.pid, &args.inputs);
println!("{val}");
}
PdfCommands::AlphasQ2(args) => {
let pdf = neopdf::pdf::PDF::load(&args.pdf_name, args.member);
let val = pdf.alphas_q2(args.q2);
println!("{val}");
}
}
}