diff --git a/src/loaders/sources.rs b/src/loaders/sources.rs index 5921c52..04a3459 100644 --- a/src/loaders/sources.rs +++ b/src/loaders/sources.rs @@ -54,3 +54,26 @@ pub fn load_sources(path: &str) -> io::Result> { Ok(sources) } + +use std::fs; +use std::error::Error; +use serde::Serialize; + +/// Save sources into a TOML file with a top-level `repositories` array-of-tables +pub fn save_sources_to_toml(sources: &[AptSource], path: &str) -> Result<(), Box> { + // tiny wrapper so toml serializes into: + // [[repositories]] + // ... + #[derive(Serialize)] + struct Repos<'a> { + repositories: &'a [AptSource], + } + + let wrapper = Repos { repositories: sources }; + + let toml_string = toml::to_string_pretty(&wrapper)?; + fs::write(path, toml_string)?; + + Ok(()) +} + diff --git a/src/main.rs b/src/main.rs index 8919045..bf15b72 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,12 +1,12 @@ -mod loaders; mod structs; +mod loaders; -use crate::loaders::sources::load_sources; +use crate::loaders::sources::{load_sources, save_sources_to_toml}; -fn main() -> std::io::Result<()> { +fn main() -> Result<(), Box> { let sources = load_sources("/etc/apt/sources.list")?; - for source in sources { - println!("{:?}", source); - } + save_sources_to_toml(&sources, "sources.toml")?; + println!("Saved sources to sources.toml"); Ok(()) } +