refactor(toml): Rely on resolved edition

Returning a `&String` is unusual but this keeps things easier on both
sides.
This commit is contained in:
Ed Page 2024-03-19 13:22:28 -05:00
parent b3183596cc
commit 102b5890be
2 changed files with 12 additions and 3 deletions

View File

@ -195,6 +195,10 @@ pub struct TomlPackage {
}
impl TomlPackage {
pub fn resolved_edition(&self) -> Result<Option<&String>, UnresolvedError> {
self.edition.as_ref().map(|v| v.resolved()).transpose()
}
pub fn resolved_rust_version(&self) -> Result<Option<&RustVersion>, UnresolvedError> {
self.rust_version.as_ref().map(|v| v.resolved()).transpose()
}

View File

@ -544,6 +544,12 @@ pub fn to_real_manifest(
features.require(Feature::open_namespaces())?;
}
package.edition = package
.edition
.clone()
.map(|value| field_inherit_with(value, "edition", || inherit()?.edition()))
.transpose()?
.map(manifest::InheritableField::Value);
package.rust_version = package
.rust_version
.clone()
@ -562,11 +568,10 @@ pub fn to_real_manifest(
.expect("previously resolved")
.cloned();
let edition = if let Some(edition) = package.edition.clone() {
let edition: Edition = field_inherit_with(edition, "edition", || inherit()?.edition())?
let edition = if let Some(edition) = package.resolved_edition().expect("previously resolved") {
let edition: Edition = edition
.parse()
.with_context(|| "failed to parse the `edition` key")?;
package.edition = Some(manifest::InheritableField::Value(edition.to_string()));
if let Some(pkg_msrv) = &rust_version {
if let Some(edition_msrv) = edition.first_version() {
let edition_msrv = RustVersion::try_from(edition_msrv).unwrap();