From 53ffda70ce8109fe321c8a01f1d709b0fa2d16b2 Mon Sep 17 00:00:00 2001 From: steven-omaha <35634100+steven-omaha@users.noreply.github.com> Date: Thu, 5 Jan 2023 16:25:47 +0100 Subject: [PATCH] convert pacman to first backend --- benches/bench.rs | 4 ++-- src/{db.rs => backend.rs} | 21 +++++++++++++++------ src/core.rs | 6 +++--- src/lib.rs | 2 +- 4 files changed, 21 insertions(+), 12 deletions(-) rename src/{db.rs => backend.rs} (55%) diff --git a/benches/bench.rs b/benches/bench.rs index b9c2744..314f188 100644 --- a/benches/bench.rs +++ b/benches/bench.rs @@ -3,7 +3,7 @@ use criterion::{black_box, criterion_group, criterion_main, Criterion}; fn get_all_installed_packages(c: &mut Criterion) { c.bench_function("get_all_installed_packages", |b| { b.iter(|| { - black_box(pacdef::db::get_all_installed_packages()); + black_box(pacdef::backend::get_all_installed_packages()); }) }); } @@ -11,7 +11,7 @@ fn get_all_installed_packages(c: &mut Criterion) { fn get_explicitly_installed_packages(c: &mut Criterion) { c.bench_function("get_explicitly_installed_packages", |b| { b.iter(|| { - black_box(pacdef::db::get_explicitly_installed_packages()); + black_box(pacdef::backend::get_explicitly_installed_packages()); }) }); } diff --git a/src/db.rs b/src/backend.rs similarity index 55% rename from src/db.rs rename to src/backend.rs index 646e2ea..57314e3 100644 --- a/src/db.rs +++ b/src/backend.rs @@ -5,14 +5,23 @@ use alpm::PackageReason::Explicit; use crate::Package; -/// Get all packages that are installed in the system. -pub fn get_all_installed_packages() -> HashSet { - convert_to_pacdef_packages(get_all_installed_packages_from_alpm()) +pub trait Backend { + /// Get all packages that are installed in the system. + fn get_all_installed_packages() -> HashSet; + /// Get all packages that were installed in the system explicitly. + fn get_explicitly_installed_packages() -> HashSet; } -/// Get all packages that were installed in the system explicitly. -pub fn get_explicitly_installed_packages() -> HashSet { - convert_to_pacdef_packages(get_explicitly_installed_packages_from_alpm()) +pub struct Pacman; + +impl Backend for Pacman { + fn get_all_installed_packages() -> HashSet { + convert_to_pacdef_packages(get_all_installed_packages_from_alpm()) + } + + fn get_explicitly_installed_packages() -> HashSet { + convert_to_pacdef_packages(get_explicitly_installed_packages_from_alpm()) + } } fn get_all_installed_packages_from_alpm() -> HashSet { diff --git a/src/core.rs b/src/core.rs index 5fb0d97..4e4f518 100644 --- a/src/core.rs +++ b/src/core.rs @@ -5,8 +5,8 @@ use anyhow::{bail, Context, Result}; use clap::ArgMatches; use crate::action; +use crate::backend::{Backend, Pacman}; use crate::cmd::{run_edit_command, run_install_command, run_remove_command}; -use crate::db::{get_all_installed_packages, get_explicitly_installed_packages}; use crate::ui::get_user_confirmation; use crate::Group; use crate::Package; @@ -37,7 +37,7 @@ impl Pacdef { pub(crate) fn get_packages_to_install(&mut self) -> Vec { let managed = self.take_packages_as_set(); - let local_packages = get_all_installed_packages(); + let local_packages = Pacman::get_all_installed_packages(); let mut diff: Vec<_> = managed .into_iter() .filter(|p| !local_packages.contains(p)) @@ -108,7 +108,7 @@ impl Pacdef { /// Returns a `Vec` of alphabetically sorted unmanaged packages. pub(crate) fn get_unmanaged_packages(&mut self) -> Vec { let managed = self.take_packages_as_set(); - let explicitly_installed = get_explicitly_installed_packages(); + let explicitly_installed = Pacman::get_explicitly_installed_packages(); let mut result: Vec<_> = explicitly_installed .into_iter() .filter(|p| !managed.contains(p)) diff --git a/src/lib.rs b/src/lib.rs index bab3e45..5da3a48 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,8 +1,8 @@ mod action; pub mod args; +pub mod backend; mod cmd; mod core; -pub mod db; mod env; mod group; mod package;