use clap::Parser;
use clap::Subcommand;
use std::path::PathBuf;
#[derive(Parser, Debug)]
#[command(
name = "cargo-slide",
bin_name = "cargo-slide",
version,
about = "Modern code-driven presentation system in Rust + Typst"
)]
pub struct Cli {
#[command(subcommand)]
pub command: Option<Commands>,
#[arg(global = true)]
pub file: Option<PathBuf>,
#[arg(long, global = true, default_value = "human")]
pub log_format: String,
}
#[derive(Subcommand, Debug)]
pub enum Commands {
Init {
#[arg(default_value = ".")]
path: PathBuf,
#[arg(long)]
rust: bool,
},
New {
name: String,
#[arg(long)]
rust: bool,
},
Run {
#[arg(default_value = "slides.typ")]
file: PathBuf,
#[arg(short, long, default_value = "fade")]
animation: String,
#[arg(short, long)]
watch: bool,
#[arg(long)]
fullscreen: bool,
},
Dev {
#[arg(default_value = "slides.typ")]
file: PathBuf,
#[arg(short, long, default_value = "fade")]
animation: String,
#[arg(long)]
fullscreen: bool,
},
Build {
#[arg(default_value = "slides.typ")]
file: PathBuf,
#[arg(short, long)]
output: Option<PathBuf>,
#[arg(short, long, default_value = "fade")]
animation: String,
#[arg(long)]
target: Option<String>,
},
Export {
#[arg(default_value = "slides.typ")]
file: PathBuf,
#[arg(short, long, default_value = "pdf")]
format: String,
#[arg(short, long)]
output: Option<PathBuf>,
},
}