summaryrefslogtreecommitdiffstats
path: root/src/cli.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/cli.rs')
-rw-r--r--src/cli.rs89
1 files changed, 35 insertions, 54 deletions
diff --git a/src/cli.rs b/src/cli.rs
index 657d05d..c9bd6b6 100644
--- a/src/cli.rs
+++ b/src/cli.rs
@@ -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);
- }
-}