use std::path::PathBuf;
use clap::{Parser, Subcommand, ValueEnum};
#[derive(Copy, Clone, Debug, ValueEnum)]
pub enum FlipType {
#[value(name = "rr")]
RR,
#[value(name = "nn")]
NN,
#[value(name = "rn")]
RN,
#[value(name = "nr")]
NR,
}
#[derive(Copy, Clone, Debug, ValueEnum)]
pub enum OddEven {
#[value(name = "odd")]
Odd,
#[value(name = "even")]
Even,
}
#[derive(Copy, Clone, Debug, ValueEnum)]
pub enum LayoutType {
#[value(name = "two-up")]
TwoUp,
#[value(name = "four-up")]
FourUp,
}
#[derive(Debug, Parser)]
pub struct BaseOptions {
#[arg(value_hint = clap::ValueHint::FilePath)]
pub input: PathBuf,
#[arg(short, long, value_hint = clap::ValueHint::FilePath)]
pub output: Option<PathBuf>,
#[arg(short, long, default_value = "false")]
pub temp: bool,
}
#[derive(Debug, Parser)]
pub struct BookletOptions {
#[command(flatten)]
pub base: BaseOptions,
#[arg(long, value_enum, default_value = "four-up")]
pub layout: LayoutType,
}
#[derive(Debug, Parser)]
pub struct DoubleSidedOptions {
#[command(flatten)]
pub base: BaseOptions,
#[arg(long, value_enum, default_value = "rr")]
pub flip_type: FlipType,
#[arg(long, value_enum, default_value = "odd")]
pub odd_even: OddEven,
}
#[derive(Parser, Debug)]
#[command(author, version, about, long_about = None)]
pub struct Cli {
#[command(subcommand)]
pub command: Commands,
}
#[derive(Subcommand, Debug)]
pub enum Commands {
#[command(name = "booklet")]
Booklet(BookletOptions),
#[command(name = "double-sided")]
DoubleSided(DoubleSidedOptions),
}