extract review module

This commit is contained in:
steven-omaha
2023-02-02 14:35:18 +01:00
parent 0e8d942416
commit 4b59b70dba
3 changed files with 125 additions and 110 deletions
+79
View File
@@ -0,0 +1,79 @@
use std::rc::Rc;
use anyhow::Result;
use crate::backend::Backend;
use crate::{Group, Package};
#[derive(Debug)]
pub(super) struct Strategy {
backend: Box<dyn Backend>,
delete: Vec<Package>,
as_dependency: Vec<Package>,
assign_group: Vec<(Package, Rc<Group>)>,
}
impl Strategy {
pub(super) fn new(
backend: Box<dyn Backend>,
delete: Vec<Package>,
as_dependency: Vec<Package>,
assign_group: Vec<(Package, Rc<Group>)>,
) -> Self {
Self {
backend,
delete,
as_dependency,
assign_group,
}
}
pub(super) fn execute(self) -> Result<()> {
if !self.delete.is_empty() {
self.backend.remove_packages(&self.delete)?;
}
if !self.as_dependency.is_empty() {
self.backend.make_dependency(&self.as_dependency)?;
}
if !self.assign_group.is_empty() {
self.backend.assign_group(self.assign_group);
}
Ok(())
}
pub(super) fn show(&self) {
if self.nothing_to_do() {
return;
}
println!("[{}]", self.backend.get_section());
if !self.delete.is_empty() {
println!("delete:");
for p in &self.delete {
println!(" {p}");
}
}
if !self.as_dependency.is_empty() {
println!("as depdendency:");
for p in &self.as_dependency {
println!(" {p}");
}
}
if !self.assign_group.is_empty() {
println!("assign groups:");
for (p, g) in &self.assign_group {
println!(" {p} -> {}", g.name);
}
}
}
pub(super) fn nothing_to_do(&self) -> bool {
self.delete.is_empty() && self.as_dependency.is_empty() && self.assign_group.is_empty()
}
}