use clap::{Args, Parser, Subcommand};
#[derive(Parser, Clone)]
pub struct ReadCli {
#[command(subcommand)]
pub command: ReadCommands,
}
#[derive(Subcommand, Clone)]
pub enum ReadCommands {
#[command(name = "metadata")]
Metadata(MetadataArgs),
#[command(name = "num_subgrids")]
NumSubgrids(PdfNameArgs),
#[command(name = "subgrid_info")]
SubgridInfo(SubgridInfoArgs),
#[command(name = "git-version")]
GitVersion(PdfNameArgs),
}
#[derive(Args, Clone)]
pub struct MetadataArgs {
#[arg(short, long)]
pub pdf_name: String,
}
#[derive(Args, Clone)]
pub struct PdfNameArgs {
#[arg(short, long)]
pub pdf_name: String,
}
#[derive(Args, Clone)]
pub struct SubgridInfoArgs {
#[arg(short, long)]
pub pdf_name: String,
#[arg(short, long)]
pub member: usize,
#[arg(short, long)]
pub subgrid_index: usize,
}
#[allow(clippy::needless_pass_by_value)]
pub fn main(cli: ReadCli) {
match &cli.command {
ReadCommands::Metadata(args) => {
let pdf = neopdf::pdf::PDF::load(&args.pdf_name, 0);
println!("{}", pdf.metadata());
}
ReadCommands::NumSubgrids(args) => {
let pdf = neopdf::pdf::PDF::load(&args.pdf_name, 0);
println!("{}", pdf.num_subgrids());
}
ReadCommands::SubgridInfo(args) => {
let pdf = neopdf::pdf::PDF::load(&args.pdf_name, args.member);
let subgrid = pdf.subgrid(args.subgrid_index);
println!("Nucleon Numbers A: {:?}", subgrid.nucleons);
println!("Alphas values: {:?}", subgrid.alphas);
println!("kT values: {:?}", subgrid.kts);
println!("x values: {:?}", subgrid.xs);
println!("Q2 values: {:?}", subgrid.q2s);
}
ReadCommands::GitVersion(args) => {
let pdf = neopdf::pdf::PDF::load(&args.pdf_name, 0);
println!("{}", pdf.metadata().git_version);
}
}
}