clean up overwriting arch config

This commit is contained in:
steven-omaha
2023-02-23 15:32:02 +01:00
parent ee4fd5da37
commit 4a0ced581d
3 changed files with 15 additions and 15 deletions
@@ -1,3 +1,4 @@
use std::any::Any;
use std::collections::{HashMap, HashSet}; use std::collections::{HashMap, HashSet};
use std::fmt::Debug; use std::fmt::Debug;
use std::process::{Command, ExitStatus}; use std::process::{Command, ExitStatus};
@@ -114,6 +115,8 @@ pub trait Backend: Debug {
diff.sort_unstable(); diff.sort_unstable();
Ok(diff) Ok(diff)
} }
fn as_any(&mut self) -> &mut dyn Any;
} }
fn get_group_packages_map( fn get_group_packages_map(
+4
View File
@@ -49,5 +49,9 @@ macro_rules! impl_backend_constants {
self.packages.insert(p); self.packages.insert(p);
} }
} }
fn as_any(&mut self) -> &mut dyn std::any::Any {
self
}
}; };
} }
+6 -13
View File
@@ -1,4 +1,3 @@
use std::any::Any;
use std::collections::{HashMap, HashSet}; use std::collections::{HashMap, HashSet};
use std::fs::{remove_file, File}; use std::fs::{remove_file, File};
use std::os::unix::fs::symlink; use std::os::unix::fs::symlink;
@@ -94,8 +93,8 @@ impl Pacdef {
fn get_missing_packages(&mut self) -> ToDoPerBackend { fn get_missing_packages(&mut self) -> ToDoPerBackend {
let mut to_install = ToDoPerBackend::new(); let mut to_install = ToDoPerBackend::new();
for backend in Backends::iter() { for mut backend in Backends::iter() {
let mut backend = self.overwrite_values_from_config(backend); self.overwrite_values_from_config(&mut *backend);
backend.load(&self.groups); backend.load(&self.groups);
@@ -109,16 +108,10 @@ impl Pacdef {
} }
#[allow(clippy::as_conversions)] #[allow(clippy::as_conversions)]
fn overwrite_values_from_config(&mut self, backend: Box<dyn Backend>) -> Box<dyn Backend> { fn overwrite_values_from_config(&mut self, backend: &mut dyn Backend) {
let b = Box::new(&backend as &dyn Any); if let Some(arch) = backend.as_any().downcast_mut::<Arch>() {
match b.downcast_ref::<Arch>() {
Some(inner) => {
let mut arch = inner.clone();
arch.binary = self.config.aur_helper.clone(); arch.binary = self.config.aur_helper.clone();
arch.aur_rm_args = self.config.aur_rm_args.take(); arch.aur_rm_args = self.config.aur_rm_args.take();
Box::new(arch)
}
None => backend,
} }
} }
@@ -173,8 +166,8 @@ impl Pacdef {
fn get_unmanaged_packages(&mut self) -> ToDoPerBackend { fn get_unmanaged_packages(&mut self) -> ToDoPerBackend {
let mut result = ToDoPerBackend::new(); let mut result = ToDoPerBackend::new();
for backend in Backends::iter() { for mut backend in Backends::iter() {
let mut backend = self.overwrite_values_from_config(backend); self.overwrite_values_from_config(&mut *backend);
backend.load(&self.groups); backend.load(&self.groups);