diff --git a/src/loaders/packages.rs b/src/loaders/packages.rs index e69de29..17fa98f 100644 --- a/src/loaders/packages.rs +++ b/src/loaders/packages.rs @@ -0,0 +1,36 @@ +use crate::structs::Package; + +fn parse_dpkg_output(output: &str) -> Vec { + output + .lines() + .filter_map(|line| { + let mut parts = line.split('\t'); + let name = parts.next()?.to_string(); + let version = parts.next()?.to_string(); + Some(Package { name, version }) + }) + .collect() +} + +use std::collections::HashMap; + +fn packages_to_hashmap(packages: &[Package]) -> HashMap { + packages.iter().map(|p| (p.name.clone(), p.version.clone())).collect() +} + +#[derive(serde::Serialize)] +struct PackagesWrapper<'a> { + packages: &'a HashMap, +} + +use std::fs; +use std::error::Error; +use serde::Serialize; + +/// Save any serializable struct or collection into a TOML file. +pub fn save_to_toml(data: &T, path: &str) -> Result<(), Box> { + let toml_string = toml::to_string_pretty(data)?; + fs::write(path, toml_string)?; + Ok(()) +} + diff --git a/src/main.rs b/src/main.rs index bf15b72..5365054 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,6 +7,11 @@ fn main() -> Result<(), Box> { let sources = load_sources("/etc/apt/sources.list")?; save_sources_to_toml(&sources, "sources.toml")?; println!("Saved sources to sources.toml"); + + let pkg_map = packages_to_hashmap(&packages); + let wrapper = PackagesWrapper { packages: &pkg_map }; + save_to_toml(&wrapper, "packages.toml")?; + Ok(()) }