✨ feat(cli): add delete subcommand
- introduce delete_cli module for handling message deletion - implement delete subcommand to permanently remove messages - refactor subcommands to use non-optional enum for improved handling
This commit is contained in:
committed by
Jeremiah Russell
parent
7c5b3c807f
commit
bca235a2e7
@@ -1,13 +1,15 @@
|
|||||||
use clap::{Parser, Subcommand};
|
use clap::{Parser, Subcommand};
|
||||||
|
|
||||||
mod config_cli;
|
mod config_cli;
|
||||||
|
mod delete_cli;
|
||||||
mod label_cli;
|
mod label_cli;
|
||||||
mod message_cli;
|
mod message_cli;
|
||||||
mod trash_cli;
|
mod trash_cli;
|
||||||
|
|
||||||
use cull_gmail::{Config, Error};
|
use cull_gmail::{Config, Result};
|
||||||
|
|
||||||
use config_cli::ConfigCli;
|
use config_cli::ConfigCli;
|
||||||
|
use delete_cli::DeleteCli;
|
||||||
use label_cli::LabelCli;
|
use label_cli::LabelCli;
|
||||||
use message_cli::MessageCli;
|
use message_cli::MessageCli;
|
||||||
use trash_cli::TrashCli;
|
use trash_cli::TrashCli;
|
||||||
@@ -20,11 +22,14 @@ struct Cli {
|
|||||||
#[clap(flatten)]
|
#[clap(flatten)]
|
||||||
logging: clap_verbosity_flag::Verbosity,
|
logging: clap_verbosity_flag::Verbosity,
|
||||||
#[command(subcommand)]
|
#[command(subcommand)]
|
||||||
sub_command: Option<SubCmds>,
|
sub_command: SubCmds,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Subcommand, Debug)]
|
#[derive(Subcommand, Debug)]
|
||||||
enum SubCmds {
|
enum SubCmds {
|
||||||
|
/// Configure rules and labels
|
||||||
|
#[clap(name = "config")]
|
||||||
|
Config(ConfigCli),
|
||||||
/// List messages
|
/// List messages
|
||||||
#[clap(name = "message")]
|
#[clap(name = "message")]
|
||||||
Message(MessageCli),
|
Message(MessageCli),
|
||||||
@@ -34,9 +39,9 @@ enum SubCmds {
|
|||||||
/// Move messages to trash
|
/// Move messages to trash
|
||||||
#[clap(name = "trash")]
|
#[clap(name = "trash")]
|
||||||
Trash(TrashCli),
|
Trash(TrashCli),
|
||||||
/// Configure rules and labels
|
/// Move messages to trash
|
||||||
#[clap(name = "config")]
|
#[clap(name = "delete")]
|
||||||
Config(ConfigCli),
|
Delete(DeleteCli),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
@@ -62,18 +67,16 @@ async fn main() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn run(args: Cli) -> Result<(), Error> {
|
async fn run(args: Cli) -> Result<()> {
|
||||||
let config = get_config()?;
|
let config = get_config()?;
|
||||||
log::trace!("Configuration loaded: {config:#?}");
|
log::trace!("Configuration loaded: {config:#?}");
|
||||||
if let Some(cmds) = args.sub_command {
|
match args.sub_command {
|
||||||
match cmds {
|
SubCmds::Config(config_cli) => config_cli.run(config),
|
||||||
SubCmds::Message(list_cli) => list_cli.run(config.credential_file()).await?,
|
SubCmds::Message(list_cli) => list_cli.run(config.credential_file()).await,
|
||||||
SubCmds::Labels(label_cli) => label_cli.run(config.credential_file()).await?,
|
SubCmds::Labels(label_cli) => label_cli.run(config.credential_file()).await,
|
||||||
SubCmds::Trash(trash_cli) => trash_cli.run(config.credential_file()).await?,
|
SubCmds::Trash(trash_cli) => trash_cli.run(config.credential_file()).await,
|
||||||
SubCmds::Config(config_cli) => config_cli.run(config)?,
|
SubCmds::Delete(delete_cli) => delete_cli.run(config.credential_file()).await,
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Ok(())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_logging(level: log::LevelFilter) -> env_logger::Builder {
|
fn get_logging(level: log::LevelFilter) -> env_logger::Builder {
|
||||||
@@ -93,7 +96,7 @@ fn get_logging(level: log::LevelFilter) -> env_logger::Builder {
|
|||||||
builder
|
builder
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_config() -> Result<Config, Error> {
|
fn get_config() -> Result<Config> {
|
||||||
match Config::load() {
|
match Config::load() {
|
||||||
Ok(c) => Ok(c),
|
Ok(c) => Ok(c),
|
||||||
Err(_) => {
|
Err(_) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user