gclone/src/pgd.rs

49 lines
1.1 KiB
Rust

use std::process::exit;
use colored::*;
use gclone::{first_arg, Cache, Error, Result};
fn main() {
if let Err(e) = main_result() {
eprintln!("{}", e);
exit(1);
}
}
fn main_result() -> Result<()> {
let request = first_arg()?;
main_with_cache(&request, true)
}
fn main_with_cache(request: &str, regen: bool) -> Result<()> {
let (cache, just_generated) = match Cache::read() {
Ok(c) => (c, false),
Err(_) => {
let cache = Cache::generate();
cache.write()?;
(cache, true)
}
};
let only_match = match cache.find_interactive(&request) {
Err(Error::NoSuchDirectory) if regen && !just_generated => {
eprintln!(
"{} {}",
"warning:".bold().yellow(),
"directory not found, regenerating cache...".bold()
);
let cache = Cache::generate();
cache.write()?;
return main_with_cache(request, false);
}
Err(e) => return Err(e),
Ok(x) => x,
};
println!("{}", only_match);
Ok(())
}