diff options
Diffstat (limited to 'src/cli.rs')
-rw-r--r-- | src/cli.rs | 89 |
1 files changed, 35 insertions, 54 deletions
@@ -1,10 +1,9 @@ +use crate::{paths::PathEntry, Config}; use clap::{Args, Parser}; use figment::{providers::Serialized, value, Metadata, Profile, Provider}; use serde::Serialize; use std::path::PathBuf; -use tracing_subscriber::{filter::LevelFilter, Layer, Registry}; - -use crate::{paths::PathEntry, Config}; +use tracing::Level; /// Simple program to manage projects and ssh hosts using tmux #[derive(Debug, Clone, Default, Parser, Serialize)] @@ -36,47 +35,43 @@ pub struct Cli { pub ssh: Option<String>, } -impl Cli { - pub fn as_layer(&self) -> Vec<Box<dyn Layer<Registry> + Send + Sync>> { - let fmt_layer = tracing_subscriber::fmt::layer() - .pretty() - .with_filter(self.verbose.as_filter()) - .boxed(); +impl Provider for Cli { + fn metadata(&self) -> Metadata { + Metadata::named("Tmuxr cli provider") + } - vec![fmt_layer] + fn data(&self) -> figment::error::Result<value::Map<Profile, value::Dict>> { + Serialized::defaults(Self::default()).data() } } impl From<Cli> for Config { fn from(value: Cli) -> Self { + let paths = value + .paths + .iter() + .cloned() + .map(|p| PathEntry { + path: p, + hidden: value.hidden, + recurse: value.max_depth, + }) + .collect(); + + let paths = crate::paths::Config { paths }; + let logging = crate::logging::Config { + stdout: value.verbose.into(), + ..Default::default() + }; + Config { - paths: crate::paths::Config { - paths: value - .paths - .iter() - .cloned() - .map(|p| PathEntry { - path: p, - hidden: value.hidden, - recurse: value.max_depth, - }) - .collect(), - }, + paths, + logging, ..Default::default() } } } -impl Provider for Cli { - fn metadata(&self) -> Metadata { - Metadata::named("Tmuxr cli provider") - } - - fn data(&self) -> figment::error::Result<value::Map<Profile, value::Dict>> { - Serialized::defaults(Self::default()).data() - } -} - #[derive(Debug, Default, Clone, Args)] pub struct Verbosity { /// Print additional information per occurrence @@ -88,29 +83,15 @@ pub struct Verbosity { pub quiet: bool, } -impl Verbosity { - pub fn as_filter(&self) -> LevelFilter { - self.into() - } -} - -impl From<&Verbosity> for LevelFilter { - fn from(value: &Verbosity) -> Self { +impl From<Verbosity> for Option<Level> { + fn from(value: Verbosity) -> Self { match value.verbose + 1 - u8::from(value.quiet) { - 0 => LevelFilter::OFF, - 1 => LevelFilter::ERROR, - 2 => LevelFilter::WARN, - 3 => LevelFilter::INFO, - 4 => LevelFilter::DEBUG, - _ => LevelFilter::TRACE, + 0 => None, + 1 => Some(Level::ERROR), + 2 => Some(Level::WARN), + 3 => Some(Level::INFO), + 4 => Some(Level::DEBUG), + _ => Some(Level::TRACE), } } } - -#[cfg(test)] -mod tests { - #[test] - fn test_cli_parse() { - assert_eq!(1, 1); - } -} |