use clap::{Parser, ValueEnum};
use std::path::PathBuf;
use crate::PageSize;
#[derive(Parser, Debug)]
#[command(name = "carbonpdf")]
#[command(about = "Convert HTML to PDF using Headless Chrome")]
#[command(version)]
pub struct Cli {
pub input: String,
#[arg(short, long)]
pub output: PathBuf,
#[arg(long, value_enum, default_value_t = PageSizeArg::A4)]
pub page_size: PageSizeArg,
#[arg(long, requires = "custom_height")]
pub custom_width: Option<f64>,
#[arg(long, requires = "custom_width")]
pub custom_height: Option<f64>,
#[arg(long)]
pub landscape: bool,
#[arg(short, long)]
pub margin: Option<f64>,
#[arg(long)]
pub margin_top: Option<f64>,
#[arg(long)]
pub margin_bottom: Option<f64>,
#[arg(long)]
pub margin_left: Option<f64>,
#[arg(long)]
pub margin_right: Option<f64>,
#[arg(long, default_value_t = 1.0)]
pub scale: f64,
#[arg(long)]
pub no_background: bool,
#[arg(long)]
pub chrome_path: Option<String>,
#[arg(long)]
pub no_sandbox: bool,
#[arg(long, default_value_t = 30)]
pub timeout: u64,
#[arg(short, long)]
pub verbose: bool,
}
#[derive(Debug, Clone, Copy, ValueEnum)]
pub enum PageSizeArg {
A4,
Letter,
Legal,
Tabloid,
Custom,
}
impl From<PageSizeArg> for PageSize {
fn from(arg: PageSizeArg) -> Self {
match arg {
PageSizeArg::A4 => PageSize::A4,
PageSizeArg::Letter => PageSize::Letter,
PageSizeArg::Legal => PageSize::Legal,
PageSizeArg::Tabloid => PageSize::Tabloid,
PageSizeArg::Custom => PageSize::A4,
}
}
}