prebuilt-down 0.1.3

A CLI tool for resolve prebuilt binary dependencies
mod app;
mod cli;
mod config;
mod core;
mod traits;
mod types;

use anyhow::Result;
use clap::Parser;

use app::App;
use cli::Cli;
use types::platform::Platform;

use crate::core::{
    cache::CacheManager,
    download::DownloadManager,
    lock_file::{DEFAULT_LOCKFILE_NAME, LockFile},
};

fn main() -> Result<()> {
    let cli = Cli::parse();
    let platform = cli.platform.unwrap_or_else(Platform::current);
    let configs = config::load_configs(&cli.config)?;

    let cache_manager = CacheManager::init(None)?;
    let download_manager = DownloadManager::init(cache_manager.clone())?;
    let lock_file = LockFile::load(&cache_manager.path_for(DEFAULT_LOCKFILE_NAME))?;
    let mut app = App::new(platform, lock_file, download_manager, cache_manager);

    for config in configs.into_iter() {
        let name = config.name.clone();
        match app.process_config(config) {
            Ok(_) => {}
            Err(e) => eprintln!("Failed to process '{}':\n{e:#}", name),
        }
    }
    app.save()?;
    return Ok(());
}