atros 0.1.0

Automation for the Rest of Us
Documentation
use std::io::Write;

use atros::{
    args::CliArgs, cache::Cache, executor::Executor, get_active_system, get_step_file_paths,
    initialize::initialize, system_pacman::PackageManager,
};

use clap::Parser;

fn main() -> anyhow::Result<()> {
    let args = CliArgs::parse();

    match args {
        CliArgs::Init => {
            initialize()?;
        }
        CliArgs::Run => {
            let mut cache = Cache::get()?;

            let system = get_active_system()?;
            let package_manager = PackageManager::get_by_system(&system);
            let executor = Executor::try_get()?;

            let step_file_paths = get_step_file_paths()?;

            for path in step_file_paths {
                let file_cache = cache.files.entry(path.clone()).or_default();

                executor
                    .parse(&path)?
                    .run(&system, &package_manager, file_cache)?;
                std::io::stdout().write_all(b"\n")?;
            }

            cache.save()?;
        }
    }

    Ok(())
}