use libapt::{Architecture, Distro, Key, PackageIndex, Release, SourceIndex};
#[tokio::main]
async fn main() {
let key = Key::key("/etc/apt/trusted.gpg.d/ubuntu-keyring-2018-archive.gpg");
let distro = Distro::repo("http://archive.ubuntu.com/ubuntu", "jammy", key.clone());
let release = Release::from_distro(&distro).await.unwrap();
match release.check_compliance() {
Ok(_) => println!("The Ubuntu Jammy release is compliant with the standard."),
Err(e) => println!("The Ubuntu Jammy release violates the standard: {e}"),
};
let main_amd64 = PackageIndex::new(&release, "main", &Architecture::Amd64)
.await
.unwrap();
println!(
"Ubuntu Jammy main provides {} packages for amd64.",
main_amd64.package_count()
);
let busybox = main_amd64.get("busybox-static", None).unwrap();
println!(
"Ubuntu Jammy main provides busybox-static version {:?}.",
busybox.version
);
let key = Key::key("/etc/apt/trusted.gpg.d/ubuntu-keyring-2018-archive.gpg");
let distro = Distro::repo("http://archive.ubuntu.com/ubuntu", "jammy", key);
let release = Release::from_distro(&distro).await.unwrap();
let main_sources = SourceIndex::new(&release, "main").await.unwrap();
println!(
"Ubuntu Jammy main provides {} source packages.",
main_sources.package_count()
);
let busybox = main_sources.get("busybox", None).unwrap();
println!(
"Ubuntu Jammy main provides busybox version {:?}.",
busybox.version
);
}
#[cfg(test)]
mod tests {
use assert_cmd::prelude::*;
use std::process::Command;
#[test]
fn hello() -> Result<(), Box<dyn std::error::Error>> {
let mut cmd = Command::cargo_bin("hello")?;
let output = cmd.output()?;
let stdout = output.stdout;
let stdout = String::from_utf8_lossy(&stdout).to_string();
assert!(stdout.contains("The Ubuntu Jammy release is compliant with the standard."));
Ok(())
}
}