From 7bd5aa3fe8e47f683a47638d3eb1f81326ba940f Mon Sep 17 00:00:00 2001 From: Ed Page Date: Tue, 21 Nov 2023 20:41:31 -0600 Subject: [PATCH] refactor(toml): Better abstract inheritance details There is no reason that the caller for inheriting needs to know the details of the inner types doing inheritance. --- src/cargo/util/toml/mod.rs | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/cargo/util/toml/mod.rs b/src/cargo/util/toml/mod.rs index 3352a697160..419e55ae4f9 100644 --- a/src/cargo/util/toml/mod.rs +++ b/src/cargo/util/toml/mod.rs @@ -661,9 +661,7 @@ impl schema::TomlManifest { let mut deps: BTreeMap = BTreeMap::new(); for (n, v) in dependencies.iter() { - let resolved = v - .clone() - .inherit_with(n, |dep| dep.inherit_with(n, inheritable, cx))?; + let resolved = v.clone().inherit_with(n, inheritable, cx)?; let dep = resolved.to_dependency(n, cx, kind)?; let name_in_toml = dep.name_in_toml().as_str(); validate_package_name(name_in_toml, "dependency name", "")?; @@ -1573,15 +1571,16 @@ impl schema::InheritableField { impl schema::InheritableDependency { fn inherit_with<'a>( self, - label: &str, - get_ws_inheritable: impl FnOnce(&schema::TomlInheritedDependency) -> CargoResult, + name: &str, + inheritable: impl FnOnce() -> CargoResult<&'a InheritableFields>, + cx: &mut Context<'_, '_>, ) -> CargoResult { match self { schema::InheritableDependency::Value(value) => Ok(value), schema::InheritableDependency::Inherit(w) => { - get_ws_inheritable(&w).with_context(|| { + w.inherit_with(name, inheritable, cx).with_context(|| { format!( - "error inheriting `{label}` from workspace root manifest's `workspace.dependencies.{label}`", + "error inheriting `{name}` from workspace root manifest's `workspace.dependencies.{name}`", ) }) }