mirror of
https://github.com/rust-lang/cargo
synced 2024-10-13 19:22:33 +00:00
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.
This commit is contained in:
parent
71cd3a926f
commit
7bd5aa3fe8
|
@ -661,9 +661,7 @@ impl schema::TomlManifest {
|
||||||
|
|
||||||
let mut deps: BTreeMap<String, schema::InheritableDependency> = BTreeMap::new();
|
let mut deps: BTreeMap<String, schema::InheritableDependency> = BTreeMap::new();
|
||||||
for (n, v) in dependencies.iter() {
|
for (n, v) in dependencies.iter() {
|
||||||
let resolved = v
|
let resolved = v.clone().inherit_with(n, inheritable, cx)?;
|
||||||
.clone()
|
|
||||||
.inherit_with(n, |dep| dep.inherit_with(n, inheritable, cx))?;
|
|
||||||
let dep = resolved.to_dependency(n, cx, kind)?;
|
let dep = resolved.to_dependency(n, cx, kind)?;
|
||||||
let name_in_toml = dep.name_in_toml().as_str();
|
let name_in_toml = dep.name_in_toml().as_str();
|
||||||
validate_package_name(name_in_toml, "dependency name", "")?;
|
validate_package_name(name_in_toml, "dependency name", "")?;
|
||||||
|
@ -1573,15 +1571,16 @@ impl<T> schema::InheritableField<T> {
|
||||||
impl schema::InheritableDependency {
|
impl schema::InheritableDependency {
|
||||||
fn inherit_with<'a>(
|
fn inherit_with<'a>(
|
||||||
self,
|
self,
|
||||||
label: &str,
|
name: &str,
|
||||||
get_ws_inheritable: impl FnOnce(&schema::TomlInheritedDependency) -> CargoResult<TomlDependency>,
|
inheritable: impl FnOnce() -> CargoResult<&'a InheritableFields>,
|
||||||
|
cx: &mut Context<'_, '_>,
|
||||||
) -> CargoResult<TomlDependency> {
|
) -> CargoResult<TomlDependency> {
|
||||||
match self {
|
match self {
|
||||||
schema::InheritableDependency::Value(value) => Ok(value),
|
schema::InheritableDependency::Value(value) => Ok(value),
|
||||||
schema::InheritableDependency::Inherit(w) => {
|
schema::InheritableDependency::Inherit(w) => {
|
||||||
get_ws_inheritable(&w).with_context(|| {
|
w.inherit_with(name, inheritable, cx).with_context(|| {
|
||||||
format!(
|
format!(
|
||||||
"error inheriting `{label}` from workspace root manifest's `workspace.dependencies.{label}`",
|
"error inheriting `{name}` from workspace root manifest's `workspace.dependencies.{name}`",
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue