diff options
Diffstat (limited to 'src/main.rs')
-rw-r--r-- | src/main.rs | 53 |
1 files changed, 25 insertions, 28 deletions
diff --git a/src/main.rs b/src/main.rs index ff29b97..8ec7006 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,7 +3,7 @@ use figment::{ providers::{Env, Format, Serialized, Toml}, Figment, }; -use std::{fs::File, sync::Arc}; +use std::{error::Error, fs::File, sync::Arc}; use tmuxr::{Cli, Config, Finder, Paths, Result}; use tracing::info; use tracing_subscriber::prelude::*; @@ -11,37 +11,38 @@ use tracing_subscriber::prelude::*; fn main() -> Result<()> { let cli = Cli::parse(); - let figment = Figment::from(Serialized::defaults(Config::default())) + let config = Figment::from(Serialized::defaults(Config::default())) + .merge(Serialized::defaults(&cli)) .merge(Toml::file("tmuxr.toml")) - .merge(Env::prefixed("TMUXR_")); + .merge(Env::prefixed("TMUXR_")) + .extract() + .map_err(eprintln)?; - let config = Config::try_from(figment)?; - - if let Err(err) = init_subscriber(&cli, &config) { - eprintln!("Failed to initialize logging: {:?}", err) - } + init_subscriber(&cli, &config).map_err(eprintln)?; + run(&config).map_err(eprintln) +} - run(&config) +fn eprintln<E: Error>(err: E) -> E { + eprintln!("{}", err); + err } fn init_subscriber(cli: &Cli, config: &Config) -> Result<()> { - let mut layers = Vec::new(); + let stdout_layer = tracing_subscriber::fmt::layer() + .pretty() + .with_filter(cli.verbose.as_filter()); - if config.log_enabled { + let log_layer = if config.log_enabled { let file = File::create(&config.log_file)?; - let log_layer = tracing_subscriber::fmt::layer() - .with_writer(Arc::new(file)) - .boxed(); - layers.push(log_layer); + let log_layer = tracing_subscriber::fmt::layer().with_writer(Arc::new(file)); + Some(log_layer) + } else { + None }; tracing_subscriber::registry() - .with( - tracing_subscriber::fmt::layer() - .pretty() - .with_filter(cli.verbose.as_filter()), - ) - .with(layers) + .with(stdout_layer) + .with(log_layer) .init(); Ok(()) @@ -49,14 +50,10 @@ fn init_subscriber(cli: &Cli, config: &Config) -> Result<()> { #[tracing::instrument()] pub fn run(config: &Config) -> Result<()> { - let directories = Paths::from(&config.paths); - let mut finder = Finder::new(&config.finder)?; - - finder.write_path_buf_vectored(directories)?; - - let output = finder.wait_with_output()?; + let paths = Paths::from_provider(config)?; + let selected = Finder::from_provider(config)?.spawn()?.find(paths)?; - info!("{:?}", output); + info!("{:?}", selected); Ok(()) } |