Add a verbose/quiet pair of flags #23

Merged
kernald merged 1 commit from verbosity-flag into main 2024-11-06 17:10:01 +11:00
4 changed files with 24 additions and 4 deletions
Showing only changes of commit 8726a1c6bf - Show all commits

11
Cargo.lock generated
View file

@ -510,6 +510,16 @@ dependencies = [
"clap_derive",
]
[[package]]
name = "clap-verbosity-flag"
version = "2.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e099138e1807662ff75e2cebe4ae2287add879245574489f9b1588eb5e5564ed"
dependencies = [
"clap",
"log",
]
[[package]]
name = "clap_builder"
version = "4.5.20"
@ -1294,6 +1304,7 @@ dependencies = [
"bon",
"chrono",
"clap",
"clap-verbosity-flag",
"color-eyre",
"dialoguer",
"directories",

View file

@ -15,6 +15,7 @@ ignored = ["progenitor-client", "regress"]
bon = "2.3.0"
chrono = { version = "0.4.38", features = ["serde"] }
clap = { version = "4.5.20", features = ["derive"] }
clap-verbosity-flag = "2.2.2"
color-eyre = "0.6.3"
dialoguer = "0.11.0"
directories = "5.0.1"

View file

@ -1,6 +1,7 @@
use std::path::PathBuf;
use clap::{command, Parser, Subcommand};
use clap_verbosity_flag::{InfoLevel, Verbosity};
use serde::Serialize;
#[derive(Parser, Serialize)]
@ -27,6 +28,10 @@ pub(crate) struct Opts {
#[command(subcommand)]
#[serde(flatten)]
pub command: Commands,
#[command(flatten)]
#[serde(skip)]
pub verbose: Verbosity<InfoLevel>,
}
#[derive(Serialize, Subcommand)]
@ -78,7 +83,7 @@ pub(crate) enum PeopleCommands {
/// Synchronises date of births from a vcard file
#[serde(rename = "sync_date_of_births")]
SyncDateOfBirths {
#[arg(short, long)]
#[arg(long)]
#[serde(skip_serializing_if = "::std::option::Option::is_none")]
vcard: Option<PathBuf>,
},

View file

@ -39,7 +39,12 @@ mod utils;
#[tokio::main]
async fn main() -> Result<()> {
color_eyre::install()?;
pretty_env_logger::init();
let args = args::Opts::parse();
pretty_env_logger::formatted_timed_builder()
.filter_level(args.verbose.log_level_filter())
.init();
let mut conf_extractor = Figment::new();
if let Some(project_dirs) = ProjectDirs::from("fr", "enoent", "Immich Tools") {
@ -53,8 +58,6 @@ async fn main() -> Result<()> {
warn!("Unable to determine configuration file path");
}
let args = args::Opts::parse();
let conf: Config = conf_extractor
.merge(FileAdapter::wrap(Env::prefixed("IMMICH_TOOLS_")))
.merge(Serialized::defaults(&args))