mirror of
https://github.com/rust-lang/cargo
synced 2024-10-05 23:39:47 +00:00
refactor(toml): Rely on resolved version
This commit is contained in:
parent
631b077003
commit
6ad976912d
|
@ -194,6 +194,12 @@ pub struct TomlPackage {
|
|||
pub _invalid_cargo_features: Option<InvalidCargoFeatures>,
|
||||
}
|
||||
|
||||
impl TomlPackage {
|
||||
pub fn resolved_version(&self) -> Result<Option<&semver::Version>, UnresolvedError> {
|
||||
self.version.as_ref().map(|v| v.resolved()).transpose()
|
||||
}
|
||||
}
|
||||
|
||||
/// An enum that allows for inheriting keys from a workspace in a Cargo.toml.
|
||||
#[derive(Serialize, Copy, Clone, Debug)]
|
||||
#[serde(untagged)]
|
||||
|
@ -205,6 +211,10 @@ pub enum InheritableField<T> {
|
|||
}
|
||||
|
||||
impl<T> InheritableField<T> {
|
||||
pub fn resolved(&self) -> Result<&T, UnresolvedError> {
|
||||
self.as_value().ok_or(UnresolvedError)
|
||||
}
|
||||
|
||||
pub fn as_value(&self) -> Option<&T> {
|
||||
match self {
|
||||
InheritableField::Inherit(_) => None,
|
||||
|
@ -1512,3 +1522,9 @@ impl<'de> de::Deserialize<'de> for PathValue {
|
|||
Ok(PathValue(String::deserialize(deserializer)?.into()))
|
||||
}
|
||||
}
|
||||
|
||||
/// Error validating names in Cargo.
|
||||
#[derive(Debug, thiserror::Error)]
|
||||
#[error("manifest field was not resolved")]
|
||||
#[non_exhaustive]
|
||||
pub struct UnresolvedError;
|
||||
|
|
|
@ -544,13 +544,12 @@ pub fn to_real_manifest(
|
|||
features.require(Feature::open_namespaces())?;
|
||||
}
|
||||
|
||||
let version = package
|
||||
package.version = package
|
||||
.version
|
||||
.clone()
|
||||
.map(|version| field_inherit_with(version, "version", || inherit()?.version()))
|
||||
.transpose()?;
|
||||
|
||||
package.version = version.clone().map(manifest::InheritableField::Value);
|
||||
.map(|value| field_inherit_with(value, "version", || inherit()?.version()))
|
||||
.transpose()?
|
||||
.map(manifest::InheritableField::Value);
|
||||
|
||||
let rust_version = if let Some(rust_version) = &package.rust_version {
|
||||
let rust_version = field_inherit_with(rust_version.clone(), "rust_version", || {
|
||||
|
@ -990,6 +989,7 @@ pub fn to_real_manifest(
|
|||
.clone()
|
||||
.map(|p| manifest::InheritableField::Value(p));
|
||||
|
||||
let version = package.resolved_version().expect("previously resolved");
|
||||
let publish = match publish {
|
||||
Some(manifest::VecStringOrBool::VecString(ref vecstring)) => Some(vecstring.clone()),
|
||||
Some(manifest::VecStringOrBool::Bool(false)) => Some(vec![]),
|
||||
|
@ -1004,7 +1004,7 @@ pub fn to_real_manifest(
|
|||
let pkgid = PackageId::new(
|
||||
package.name.as_str().into(),
|
||||
version
|
||||
.clone()
|
||||
.cloned()
|
||||
.unwrap_or_else(|| semver::Version::new(0, 0, 0)),
|
||||
source_id,
|
||||
);
|
||||
|
|
Loading…
Reference in a new issue