use clap::{Parser, Subcommand}; use std::error::Error; use std::path::PathBuf; mod commit; mod end; mod init; mod next; mod prev; mod utils; const TOUR_DIR: &str = "./.tour"; const DEFAULT_SESSION: &str = "./.tour/session"; #[derive(Parser)] #[command(author, version, about, long_about = None)] struct Args { #[command(subcommand)] command: Option, } #[derive(Subcommand)] enum Commands { // Create a new tour Init { #[arg(value_name = "FILES")] files: Vec, #[arg(short, value_name = "MESSAGE")] message: String, }, // Add steps to the tour Commit { files: Vec, #[arg(short, long, value_name = "MESSAGE")] message: String, }, // Finish the tour End { #[arg(short, long, value_name = "MESSAGE")] message: String, }, // Go to next step of tour Next { #[arg(short, value_name = "NUM STEPS")] n: Option, }, // Go to previous step of tour Prev { #[arg(short, value_name = "NUM STEPS")] n: Option, }, } fn main() -> Result<(), Box> { let args = Args::parse(); match args.command { Some(Commands::Init { files, message }) => crate::init::init(files, message)?, Some(Commands::Commit { files, message }) => crate::commit::commit(files, message)?, Some(Commands::End { message }) => crate::end::end(message)?, Some(Commands::Next { n }) => crate::next::next(n)?, Some(Commands::Prev { n }) => crate::prev::prev(n)?, _ => println!("command not found"), } Ok(()) }