This commit is contained in:
shibazaki 2025-10-05 20:03:58 +02:00
parent 96713d5110
commit 5baadcf6bb
2 changed files with 29 additions and 6 deletions

View File

@ -54,3 +54,26 @@ pub fn load_sources(path: &str) -> io::Result<Vec<AptSource>> {
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<dyn Error>> {
// 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(())
}

View File

@ -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<dyn std::error::Error>> {
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(())
}