summaryrefslogtreecommitdiffstats
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs53
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(())
}