From c30ee214118d2abf32da7f88c1038ace5ea8589f Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Thu, 2 Oct 2025 13:44:05 +0100 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20refactor(main):=20improve?= =?UTF-8?q?=20error=20handling=20and=20logging?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - replace panics with proper error handling using `Result` - enhance logging with error source information and initial log message - adjust default log level to Info --- src/main.rs | 59 ++++++++++++++++++++++++++--------------------------- 1 file changed, 29 insertions(+), 30 deletions(-) diff --git a/src/main.rs b/src/main.rs index 75e5510..9b10074 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,9 +2,9 @@ use clap::{Parser, Subcommand}; mod list_cli; -use cull_gmail::Credential; -use google_gmail1::{Gmail, yup_oauth2::ApplicationSecret}; +use cull_gmail::Error; use list_cli::ListCli; +use std::error::Error as stdError; #[derive(Parser, Debug)] #[clap(author, version, about, long_about = None)] @@ -28,40 +28,39 @@ async fn main() { let mut logging = get_logging(args.logging.log_level_filter()); logging.init(); + log::info!("Logging started."); - run(args).await; - // match run(args) { - // Ok(_) => {} - // Err(e) => { - // if let Some(src) = e.source() { - // log::error!("{e}: {src}"); - // eprintln!("{e}: {src}"); - // } else { - // log::error!("{e}"); - // eprintln!("{e}"); - // } - // std::process::exit(101); - // } - // } -} - -async fn run(args: Cli) { - let secret: ApplicationSecret = Credential::load_json_file("credential.json").into(); - - let auth = cull_gmail::get_auth(secret).await; - let client = cull_gmail::get_client(); - - let hub = Gmail::new(client, auth); - - if let Some(cmds) = args.command { - match cmds { - Commands::List(list_cli) => list_cli.run(hub).await, + match run(args).await { + Ok(_) => {} + Err(e) => { + if let Some(src) = e.source() { + log::error!("{e}: {src}"); + eprintln!("{e}: {src}"); + } else { + log::error!("{e}"); + eprintln!("{e}"); + } + std::process::exit(101); } } - // Ok(()) +} + +async fn run(args: Cli) -> Result<(), Error> { + if let Some(cmds) = args.command { + match cmds { + Commands::List(list_cli) => list_cli.run("credential.json").await?, + } + } + Ok(()) } fn get_logging(level: log::LevelFilter) -> env_logger::Builder { + let level = if level > log::LevelFilter::Info { + level + } else { + log::LevelFilter::Info + }; + let mut builder = env_logger::Builder::new(); builder.filter(None, level);