From 74f131f4be12860e82852b58926647b858df1821 Mon Sep 17 00:00:00 2001 From: Kaan Genc Date: Sun, 3 Apr 2022 23:54:26 -0400 Subject: [PATCH] add the config option for the flag --- Cargo.lock | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 3 +++ src/opts.rs | 46 ++++++++++++++++++++++++++++++++++++++- 3 files changed, 110 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index e21cc7b..aea0a86 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,15 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "ansi_term" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +dependencies = [ + "winapi", +] + [[package]] name = "anyhow" version = "1.0.56" @@ -272,8 +281,11 @@ dependencies = [ "json", "reqwest", "serde", + "thiserror", "tokio", "toml", + "tracing", + "tracing-subscriber", ] [[package]] @@ -893,6 +905,15 @@ dependencies = [ "serde", ] +[[package]] +name = "sharded-slab" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" +dependencies = [ + "lazy_static", +] + [[package]] name = "signal-hook-registry" version = "1.4.0" @@ -996,6 +1017,15 @@ dependencies = [ "syn", ] +[[package]] +name = "thread_local" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" +dependencies = [ + "once_cell", +] + [[package]] name = "tinyvec" version = "1.5.1" @@ -1112,6 +1142,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90442985ee2f57c9e1b548ee72ae842f4a9a20e3f417cc38dbc5dc684d9bb4ee" dependencies = [ "lazy_static", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6923477a48e41c1951f1999ef8bb5a3023eb723ceadafe78ffb65dc366761e3" +dependencies = [ + "lazy_static", + "log", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9df98b037d039d03400d9dd06b0f8ce05486b5f25e9a2d7d36196e142ebbc52" +dependencies = [ + "ansi_term", + "sharded-slab", + "smallvec", + "thread_local", + "tracing-core", + "tracing-log", ] [[package]] @@ -1174,6 +1230,12 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + [[package]] name = "version_check" version = "0.9.4" diff --git a/Cargo.toml b/Cargo.toml index f87fe32..8d6cb48 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,3 +21,6 @@ anyhow = "1.0" governor = "0.4" # TODO: Relies on a yet-unreleased interface. Switch to an actual crate release once available die-exit = { git = "https://github.com/Xavientois/die.git", rev = "31d3801f4e21654b0b28430987b1e21fc7728676" } +thiserror = "1.0.30" +tracing = "0.1" +tracing-subscriber = "0.3" diff --git a/src/opts.rs b/src/opts.rs index 6b0bb22..436109d 100644 --- a/src/opts.rs +++ b/src/opts.rs @@ -1,4 +1,46 @@ -use clap::{Parser, ArgEnum}; +use clap::{ArgEnum, Parser}; +use std::{fmt::Display, str::FromStr}; +use thiserror::Error; + +#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, ArgEnum)] +pub enum SilenceLevel { + All, + Domains, +} + +impl Display for SilenceLevel { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.write_str(match self { + SilenceLevel::All => "all", + SilenceLevel::Domains => "domains", + }) + } +} + +#[derive(Debug, Clone, Error)] +pub struct SilenceLevelError { + pub message: String, +} + +impl FromStr for SilenceLevel { + type Err = SilenceLevelError; + + fn from_str(s: &str) -> Result { + match s.to_lowercase().as_str() { + "all" => Ok(SilenceLevel::All), + "domains" => Ok(SilenceLevel::Domains), + option => Err(SilenceLevelError { + message: format!("Bad option {}, should be `{}` or `{}`", option, SilenceLevel::All, SilenceLevel::Domains), + }), + } + } +} + +impl Display for SilenceLevelError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.write_str(self.message.as_str()) + } +} /// A tool to automatically update DNS entries on Gandi, using it as a dynamic DNS system. #[derive(Parser, Debug)] @@ -8,4 +50,6 @@ pub struct Opts { #[clap(long)] pub config: Option, + #[clap(long)] + pub silent: Option, }