refactor: don't derive Default for ResolveVersion

This prevents a misuse of it.
This commit is contained in:
Weihang Lo 2024-01-30 16:56:19 -05:00
parent 9ae485df28
commit cd7cca369e
No known key found for this signature in database
GPG Key ID: D7DBF189825E82E7
2 changed files with 14 additions and 4 deletions

View File

@ -175,7 +175,7 @@ pub fn resolve_with_config_raw(
&[], &[],
&mut registry, &mut registry,
&version_prefs, &version_prefs,
ResolveVersion::default(), ResolveVersion::with_rust_version(None),
Some(config), Some(config),
); );

View File

@ -51,7 +51,7 @@ pub struct Resolve {
/// A version to indicate how a `Cargo.lock` should be serialized. /// A version to indicate how a `Cargo.lock` should be serialized.
/// ///
/// When creating a new lockfile, the version with `#[default]` is used. /// When creating a new lockfile, the version in [`ResolveVersion::default`] is used.
/// If an old version of lockfile already exists, it will stay as-is. /// If an old version of lockfile already exists, it will stay as-is.
/// ///
/// It's important that if a new version is added that this is not updated /// It's important that if a new version is added that this is not updated
@ -67,7 +67,7 @@ pub struct Resolve {
/// ///
/// It's theorized that we can add more here over time to track larger changes /// It's theorized that we can add more here over time to track larger changes
/// to the `Cargo.lock` format, but we've yet to see how that strategy pans out. /// to the `Cargo.lock` format, but we've yet to see how that strategy pans out.
#[derive(Default, PartialEq, Eq, Clone, Copy, Debug, PartialOrd, Ord)] #[derive(PartialEq, Eq, Clone, Copy, Debug, PartialOrd, Ord)]
pub enum ResolveVersion { pub enum ResolveVersion {
/// Historical baseline for when this abstraction was added. /// Historical baseline for when this abstraction was added.
V1, V1,
@ -81,7 +81,6 @@ pub enum ResolveVersion {
/// `branch = "master"` are no longer encoded the same way as those without /// `branch = "master"` are no longer encoded the same way as those without
/// branch specifiers. Introduced in 2020 in version 1.47. New lockfiles use /// branch specifiers. Introduced in 2020 in version 1.47. New lockfiles use
/// V3 by default staring in 1.53. /// V3 by default staring in 1.53.
#[default]
V3, V3,
/// SourceId URL serialization is aware of URL encoding. For example, /// SourceId URL serialization is aware of URL encoding. For example,
/// `?branch=foo bar` is now encoded as `?branch=foo+bar` and can be decoded /// `?branch=foo bar` is now encoded as `?branch=foo+bar` and can be decoded
@ -94,6 +93,17 @@ pub enum ResolveVersion {
} }
impl ResolveVersion { impl ResolveVersion {
/// Gets the default lockfile version.
///
/// This is intended to be private.
/// You shall use [`ResolveVersion::with_rust_version`] always.
///
/// Update this and the description of enum variants of [`ResolveVersion`]
/// when we're changing the default lockfile version.
fn default() -> ResolveVersion {
ResolveVersion::V3
}
/// The maximum version of lockfile made into the stable channel. /// The maximum version of lockfile made into the stable channel.
/// ///
/// Any version larger than this needs `-Znext-lockfile-bump` to enable. /// Any version larger than this needs `-Znext-lockfile-bump` to enable.