use anyhow::{Context, Result}; use clap::Parser; use figment::{ providers::{Env, Format, Serialized, Toml}, Figment, }; use projectr::{project::ProjectItem, search::Search, Cli, Config}; #[tracing::instrument] fn main() -> Result<()> { let cli = Cli::parse(); let config: Config = Figment::new() .merge(Figment::from(Serialized::defaults(&cli.projects))) .merge(Toml::file("projectr.toml")) .merge(Env::prefixed("PROJECTR_")) .extract() .context("Failed to extract config")?; tracing_subscriber::fmt::fmt() .pretty() .with_writer(std::io::stderr) .with_max_level(cli.verbosity) .init(); run(&config).context("Failed to run projectr") } #[tracing::instrument] pub fn run(config: &Config) -> Result<()> { let mut projects: Vec = Search::from(config.paths.to_owned()).collect(); projects.sort_unstable_by_key(|p| *p.timestamp()); for project in projects { println!("{}", project.to_path_buf().to_string_lossy()) } Ok(()) }