From c2bc1b087a56a81bf108b77812f8143c3cabd39f Mon Sep 17 00:00:00 2001 From: Doug Goldstein Date: Tue, 3 Dec 2019 08:19:52 -0600 Subject: [PATCH] switch to the Into trait to use move semantics Switched from using the custom ToPackageConfig trait to using the Into trait (by implementing From) which allows the code to use move sematics instead of having to clone data everywhere. --- src/config/arch.rs | 66 +++++++++++++++++++++++----------------------- src/config/core.rs | 6 ----- 2 files changed, 33 insertions(+), 39 deletions(-) diff --git a/src/config/arch.rs b/src/config/arch.rs index 775cbe1..327d267 100644 --- a/src/config/arch.rs +++ b/src/config/arch.rs @@ -5,7 +5,7 @@ use std::io::prelude::*; use toml; -use super::core::{Cargo, ToPackageConfig, GeneratePackageConfig}; +use super::core::{Cargo, GeneratePackageConfig}; /// default arch in Arch Linux is x86_64 @@ -193,7 +193,7 @@ impl ArchConfig { .expect("cargo-arch: invalid or missing Cargo.toml options"); toml::from_str::(&content) .expect("cargo-arch: could not decode manifest") - .to_config() + .into() } pub fn generate_pkgbuild(&self) { @@ -267,23 +267,23 @@ impl ArchConfig { } } -impl ToPackageConfig for Cargo { - fn to_config(&self) -> ArchConfig { - let arch_config = &self.package.metadata.arch; +impl From for ArchConfig { + fn from(cargo: Cargo) -> Self { + let arch_config = cargo.package.metadata.arch; - let maintainers = arch_config.maintainers.as_ref().unwrap_or(&self.package.authors).clone(); - let pkgname = arch_config.pkgname.as_ref().unwrap_or(&self.package.name).clone(); - let pkgver = arch_config.pkgver.as_ref().unwrap_or(&self.package.version).clone(); + let maintainers = arch_config.maintainers.as_ref().unwrap_or(&cargo.package.authors).clone(); + let pkgname = arch_config.pkgname.as_ref().unwrap_or(&cargo.package.name).clone(); + let pkgver = arch_config.pkgver.as_ref().unwrap_or(&cargo.package.version).clone(); let pkgrel = arch_config.pkgrel.as_ref().unwrap_or(&"1".to_string()).clone(); let epoch = arch_config.epoch.as_ref().unwrap_or(&"0".to_string()).clone(); - let pkgdesc = arch_config.pkgdesc.as_ref().unwrap_or(&self.package.description).clone(); + let pkgdesc = arch_config.pkgdesc.as_ref().unwrap_or(&cargo.package.description).clone(); let url = arch_config.url.as_ref() - .or(self.package.homepage.as_ref()) - .or(self.package.repository.as_ref()) + .or(cargo.package.homepage.as_ref()) + .or(cargo.package.repository.as_ref()) .unwrap_or(&String::new()) .clone(); let license = arch_config.license.as_ref().unwrap_or( - &self.package.license.split("/") + &cargo.package.license.split("/") .map(|s| s.to_string()) .collect::>() ).clone(); @@ -297,27 +297,27 @@ impl ToPackageConfig for Cargo { pkgdesc: pkgdesc, url: url, license: license, - install: arch_config.install.to_string(), - changelog: arch_config.changelog.to_string(), - source: arch_config.source.to_vec(), - validpgpkeys: arch_config.validpgpkeys.to_vec(), - noextract: arch_config.noextract.to_vec(), - md5sums: arch_config.md5sums.to_vec(), - sha1sums: arch_config.sha1sums.to_vec(), - sha256sums: arch_config.sha256sums.to_vec(), - sha384sums: arch_config.sha384sums.to_vec(), - sha512sums: arch_config.sha512sums.to_vec(), - groups: arch_config.groups.to_vec(), - arch: arch_config.arch.to_vec(), - backup: arch_config.backup.to_vec(), - depends: arch_config.depends.to_vec(), - makedepends: arch_config.makedepends.to_vec(), - checkdepends: arch_config.checkdepends.to_vec(), - optdepends: arch_config.optdepends.to_vec(), - conflicts: arch_config.conflicts.to_vec(), - provides: arch_config.provides.to_vec(), - replaces: arch_config.replaces.to_vec(), - options: arch_config.options.to_vec(), + install: arch_config.install, + changelog: arch_config.changelog, + source: arch_config.source, + validpgpkeys: arch_config.validpgpkeys, + noextract: arch_config.noextract, + md5sums: arch_config.md5sums, + sha1sums: arch_config.sha1sums, + sha256sums: arch_config.sha256sums, + sha384sums: arch_config.sha384sums, + sha512sums: arch_config.sha512sums, + groups: arch_config.groups, + arch: arch_config.arch, + backup: arch_config.backup, + depends: arch_config.depends, + makedepends: arch_config.makedepends, + checkdepends: arch_config.checkdepends, + optdepends: arch_config.optdepends, + conflicts: arch_config.conflicts, + provides: arch_config.provides, + replaces: arch_config.replaces, + options: arch_config.options, } } } diff --git a/src/config/core.rs b/src/config/core.rs index 9d08812..f5821dd 100644 --- a/src/config/core.rs +++ b/src/config/core.rs @@ -26,12 +26,6 @@ pub struct CargoPackage { pub metadata: CargoMetadata, } - -/// A trait for making specific platform package config's settings -pub trait ToPackageConfig { - fn to_config(&self) -> T; -} - /// A trait for generate specific platform package's config pub trait GeneratePackageConfig { fn generate_package_config(&self);