From ee4fd5da373eea83b6c57a9e0cd7c50faea98844 Mon Sep 17 00:00:00 2001 From: steven-omaha <35634100+steven-omaha@users.noreply.github.com> Date: Thu, 23 Feb 2023 14:23:04 +0100 Subject: [PATCH] use downcasting for configuring backend objects --- crates/pacdef_core/src/backend/actual/arch.rs | 2 +- crates/pacdef_core/src/backend/actual/rust.rs | 2 +- crates/pacdef_core/src/core.rs | 21 +++++++++++-------- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/crates/pacdef_core/src/backend/actual/arch.rs b/crates/pacdef_core/src/backend/actual/arch.rs index 35f2f50..f031a37 100644 --- a/crates/pacdef_core/src/backend/actual/arch.rs +++ b/crates/pacdef_core/src/backend/actual/arch.rs @@ -8,7 +8,7 @@ use anyhow::{Context, Result}; use crate::backend::backend_trait::{Backend, Switches, Text}; use crate::{impl_backend_constants, Group, Package}; -#[derive(Debug)] +#[derive(Debug, Clone)] pub struct Arch { pub(crate) binary: String, pub(crate) aur_rm_args: Option>, diff --git a/crates/pacdef_core/src/backend/actual/rust.rs b/crates/pacdef_core/src/backend/actual/rust.rs index b07f30c..1b99105 100644 --- a/crates/pacdef_core/src/backend/actual/rust.rs +++ b/crates/pacdef_core/src/backend/actual/rust.rs @@ -9,7 +9,7 @@ use serde_json::Value; use crate::backend::backend_trait::{Backend, Switches, Text}; use crate::{impl_backend_constants, Group, Package}; -#[derive(Debug)] +#[derive(Debug, Clone)] pub struct Rust { pub(crate) packages: HashSet, } diff --git a/crates/pacdef_core/src/core.rs b/crates/pacdef_core/src/core.rs index eb7d7dd..88673f8 100644 --- a/crates/pacdef_core/src/core.rs +++ b/crates/pacdef_core/src/core.rs @@ -1,3 +1,4 @@ +use std::any::Any; use std::collections::{HashMap, HashSet}; use std::fs::{remove_file, File}; use std::os::unix::fs::symlink; @@ -9,7 +10,7 @@ use const_format::formatcp; use crate::action::*; use crate::args; -use crate::backend::{Backend, Backends, ToDoPerBackend}; +use crate::backend::{Arch, Backend, Backends, ToDoPerBackend}; use crate::cmd::run_edit_command; use crate::env::get_single_var; use crate::path::get_group_dir; @@ -107,15 +108,17 @@ impl Pacdef { to_install } + #[allow(clippy::as_conversions)] fn overwrite_values_from_config(&mut self, backend: Box) -> Box { - if backend.get_section() == "arch" { - Box::new(crate::backend::Arch { - binary: self.config.aur_helper.clone(), - aur_rm_args: self.config.aur_rm_args.take(), - packages: HashSet::new(), - }) - } else { - backend + let b = Box::new(&backend as &dyn Any); + match b.downcast_ref::() { + Some(inner) => { + let mut arch = inner.clone(); + arch.binary = self.config.aur_helper.clone(); + arch.aur_rm_args = self.config.aur_rm_args.take(); + Box::new(arch) + } + None => backend, } }