use std::{fs::File, sync::Arc}; use clap::Parser; use figment::{ providers::{Env, Format, Serialized, Toml}, Figment, }; use tmuxr::{Cli, Config, Result}; use tracing_subscriber::prelude::*; fn main() -> Result<()> { let cli = Cli::parse(); let figment = Figment::from(Serialized::defaults(Config::default())) .merge(Toml::file("tmuxr.toml")) .merge(Env::prefixed("TMUXR_")); let config = Config::try_from(figment)?; if let Err(err) = init_subscriber(&cli, &config) { eprintln!("Failed to initialize logging: {:?}", err) } tmuxr::run(&config) } fn init_subscriber(cli: &Cli, config: &Config) -> Result<()> { let mut layers = Vec::new(); 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); }; tracing_subscriber::registry() .with( tracing_subscriber::fmt::layer() .pretty() .with_filter(cli.verbose.as_filter()), ) .with(layers) .init(); Ok(()) }