summaryrefslogtreecommitdiffstats
path: root/src/main.rs
blob: c85bf2f0e1bd8cdf5857dbbc500fdf91b4a1f30e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
use clap::Parser;
use figment::{
    providers::{Env, Format, Toml},
    Figment,
};
use std::error::Error;
use tmuxr::{logging, Cli, Config, Finder, Paths, Result};
use tracing::info;

fn main() -> Result<()> {
    let cli = Cli::parse();

    let config = Figment::from(Config::default())
        .merge(cli)
        .merge(Toml::file("tmuxr.toml"))
        .merge(Env::prefixed("TMUXR_"))
        .extract()
        .map_err(eprintln)?;

    logging::init_from_provider(&config).map_err(eprintln)?;

    run(&config).map_err(eprintln)
}

fn eprintln<E: Error>(err: E) -> E {
    eprintln!("{}", err);
    err
}

#[tracing::instrument()]
pub fn run(config: &Config) -> Result<()> {
    let paths = Paths::from_provider(config)?;
    let selected = Finder::from_provider(config)?.spawn()?.find(paths)?;

    info!("{:?}", selected);

    Ok(())
}