From 576f8030684cb3bb6e598d47433a46374b60e7d2 Mon Sep 17 00:00:00 2001 From: Marek Kaput Date: Tue, 3 Oct 2023 17:24:34 +0200 Subject: [PATCH] Move large struct `DetailedTomlDependency` into a `Box` and use `Cow` to avoid cloning it commit-id:42d7d77a --- scarb/src/core/manifest/toml_manifest.rs | 11 ++++++----- scarb/src/core/publishing/manifest_normalization.rs | 4 ++-- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/scarb/src/core/manifest/toml_manifest.rs b/scarb/src/core/manifest/toml_manifest.rs index baceb0336..3050e0b9d 100644 --- a/scarb/src/core/manifest/toml_manifest.rs +++ b/scarb/src/core/manifest/toml_manifest.rs @@ -1,3 +1,4 @@ +use std::borrow::Cow; use std::collections::BTreeMap; use std::default::Default; use std::fs; @@ -245,7 +246,7 @@ pub enum TomlDependency { /// [`VersionReq`] specified as a string, e.g. `package = ""`. Simple(VersionReq), /// Detailed specification as a table, e.g. `package = { version = "" }`. - Detailed(DetailedTomlDependency), + Detailed(Box), } #[derive(Clone, Debug, Default, Deserialize, Serialize)] @@ -331,13 +332,13 @@ impl TomlManifest { } impl TomlDependency { - fn resolve(&self) -> DetailedTomlDependency { + fn resolve(&self) -> Cow<'_, DetailedTomlDependency> { match self { - TomlDependency::Simple(version) => DetailedTomlDependency { + TomlDependency::Simple(version) => Cow::Owned(DetailedTomlDependency { version: Some(version.clone()), ..Default::default() - }, - TomlDependency::Detailed(detailed) => detailed.clone(), + }), + TomlDependency::Detailed(detailed) => Cow::Borrowed(detailed), } } } diff --git a/scarb/src/core/publishing/manifest_normalization.rs b/scarb/src/core/publishing/manifest_normalization.rs index 1234f9cd5..7ac784d72 100644 --- a/scarb/src/core/publishing/manifest_normalization.rs +++ b/scarb/src/core/publishing/manifest_normalization.rs @@ -110,14 +110,14 @@ fn generate_dependency(dep: &ManifestDependency) -> Result { } }); - Ok(TomlDependency::Detailed(DetailedTomlDependency { + Ok(TomlDependency::Detailed(Box::new(DetailedTomlDependency { version, path: None, git: None, branch: None, tag: None, rev: None, - })) + }))) } fn map_metadata_file_path(