diff --git a/binaries/linux-aarch64/dreamhost-ddns b/binaries/linux-aarch64/dreamhost-ddns index 0692496..e47dfc8 100644 Binary files a/binaries/linux-aarch64/dreamhost-ddns and b/binaries/linux-aarch64/dreamhost-ddns differ diff --git a/binaries/linux-rpi-armv7/dreamhost-ddns b/binaries/linux-rpi-armv7/dreamhost-ddns index 4aef866..5ddde79 100644 Binary files a/binaries/linux-rpi-armv7/dreamhost-ddns and b/binaries/linux-rpi-armv7/dreamhost-ddns differ diff --git a/binaries/linux-x86_64/dreamhost-ddns b/binaries/linux-x86_64/dreamhost-ddns index 4fe125b..b636252 100644 Binary files a/binaries/linux-x86_64/dreamhost-ddns and b/binaries/linux-x86_64/dreamhost-ddns differ diff --git a/binaries/windows/dreamhost-ddns.exe b/binaries/windows/dreamhost-ddns.exe index 167c1df..5bcc023 100644 Binary files a/binaries/windows/dreamhost-ddns.exe and b/binaries/windows/dreamhost-ddns.exe differ diff --git a/src/main.rs b/src/main.rs index 59b0e4f..494d7d4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,7 @@ use anyhow::{anyhow, Result}; use clap::Parser; -use log::{info, warn}; +use clap::ValueEnum; +use log::{info, warn, debug, trace}; use reqwest::blocking::Client; use serde::Deserialize; use std::net::IpAddr; @@ -18,6 +19,9 @@ struct Args { #[arg(short, long)] verbose: bool, + #[arg(long, value_enum)] + log_level: Option, + #[arg(short, long)] config: Option, @@ -31,6 +35,15 @@ struct Args { dry_run: bool, } +#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, ValueEnum)] +enum LogLevel { + Error, + Warn, + Info, + Debug, + Trace, +} + #[derive(Debug, Deserialize)] struct Record { record: String, @@ -52,6 +65,18 @@ struct DreamhostClient { api_key: String, } +impl From for log::LevelFilter { + fn from(level: LogLevel) -> Self { + match level { + LogLevel::Error => log::LevelFilter::Error, + LogLevel::Warn => log::LevelFilter::Warn, + LogLevel::Info => log::LevelFilter::Info, + LogLevel::Debug => log::LevelFilter::Debug, + LogLevel::Trace => log::LevelFilter::Trace, + } + } +} + impl DreamhostClient { fn call(&self, params: &[(&str, &str)]) -> Result { let mut query = vec![ @@ -85,6 +110,9 @@ impl DreamhostClient { let records: Vec = serde_json::from_value(resp["data"].clone())?; + debug!("All DNS records: {:?}", records); + trace!("Detailed DNS data: {:?}", resp); + records .into_iter() .find(|r| r.record == record_name && r.record_type == "A") @@ -123,13 +151,17 @@ fn main() -> Result<()> { let args = Args::parse(); - if args.verbose { - env_logger::Builder::from_default_env() - .filter_level(log::LevelFilter::Info) - .init(); + let level = if let Some(level) = args.log_level { + level.into() + } else if args.verbose { + log::LevelFilter::Info } else { - env_logger::init(); - } + log::LevelFilter::Warn + }; + + env_logger::Builder::from_default_env() + .filter_level(level) + .init(); let config = resolve_config(&args)?;