mod structs; mod loaders; use crate::loaders::sources::{load_sources, save_sources_to_toml}; use crate::loaders::packages::{get_installed_packages, save_packages_to_toml}; use clap::Parser; #[derive(Parser)] struct Cli { #[arg(long, required = true)] main_option: String, } fn main() -> Result<(), Box> { let cli = Cli::parse(); let user_option = cli.main_option; match user_option.as_str() { "load" => sources_fn()?, "sync" => packages_sync_fn()?, "apply" => packages_apply_fn(), "compare" => packages_compare_fn(), _ => println!("Invalid option"), } Ok(()) } fn sources_fn() -> Result<(), Box>{ // Sources let sources = load_sources("/etc/apt/sources.list")?; save_sources_to_toml(&sources, "sources.toml")?; println!("Saved sources to sources.toml"); Ok(()) } fn packages_sync_fn() -> Result<(), Box> { // Packages let packages = get_installed_packages()?; save_packages_to_toml(&packages, "packages.toml")?; println!("Saved packages to packages.toml"); Ok(()) } fn packages_apply_fn() { println!("Applying current configuration..."); } fn packages_compare_fn() { println!("Which packages are missing/exceeding compared to your configuration"); }