use clap::{Parser, Subcommand};
use rusqlite::Connection;
use todoctl::{actions, db};
#[derive(Debug, Parser)]
#[command(name = "todoctl", version, about)]
struct Cli {
#[command(subcommand)]
command: Commands,
}
#[derive(Debug, Subcommand)]
enum Commands {
Add {
#[arg(short, long)]
title: Option<String>,
},
Show,
Update {
#[arg(short, long)]
id: Option<String>,
#[arg(short, long)]
title: Option<String>,
#[arg(long)]
completed: Option<bool>,
},
Complete {
#[arg(short, long)]
id: Option<String>,
},
Delete {
#[arg(short, long)]
id: Option<String>,
},
}
#[tokio::main]
async fn main() {
let cli = Cli::parse();
println!("todoctl [Built w/ ❤️ by mt0.dev]");
let conn: Connection = match db::init() {
Ok(c) => c,
Err(e) => {
eprintln!("Error initializing database: {}", e);
std::process::exit(1);
}
};
match cli.command {
Commands::Add { title } => actions::add_action(&conn, title).await,
Commands::Show => actions::show_action(&conn).await,
Commands::Update {
id,
title,
completed,
} => actions::update_action(&conn, id, title, completed).await,
Commands::Complete { id } => actions::complete_action(&conn, id).await,
Commands::Delete { id } => actions::delete_action(&conn, id).await,
}
}