pub enum ResolveVersion {
V1,
V2,
V3,
V4,
V5,
}
Expand description
A version to indicate how a Cargo.lock
should be serialized.
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.
It’s important that if a new version is added that this is not updated until at least the support for the version is in the stable release of Rust.
This resolve version will be used for all new lock files, for example
those generated by cargo update
(update everything) or building after
a cargo new
(where no lock file previously existed). This is also used
for updated lock files such as when a dependency is added or when a
version requirement changes. In this situation Cargo’s updating the lock
file anyway so it takes the opportunity to bump the lock file version
forward.
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.
Variants§
V1
Historical baseline for when this abstraction was added.
V2
A more compact format, more amenable to avoiding source-control merge
conflicts. The dependencies
arrays are compressed and checksums are
listed inline.
- Introduced in 2019 in version 1.38.
- New lockfiles use V2 by default from 1.41 to 1.52.
V3
A format that explicitly lists a version
at the top of the file as
well as changing how git dependencies are encoded. Dependencies with
branch = "master"
are no longer encoded the same way as those without
branch specifiers.
- Introduced in 2020 in version 1.47.
- New lockfiles use V3 by default starting in 1.53.
V4
SourceId URL serialization is aware of URL encoding. For example,
?branch=foo bar
is now encoded as ?branch=foo+bar
and can be decoded
back and forth correctly.
- Introduced in 2024 in version 1.78.
V5
Unstable. Will collect a certain amount of changes and then go.
Changes made:
Implementations§
source§impl ResolveVersion
impl ResolveVersion
sourcefn default() -> ResolveVersion
fn default() -> 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.
sourcepub fn max_stable() -> ResolveVersion
pub fn max_stable() -> ResolveVersion
The maximum version of lockfile made into the stable channel.
Any version larger than this needs -Znext-lockfile-bump
to enable.
Update this when you’re going to stabilize a new lockfile format.
sourcepub fn with_rust_version(rust_version: Option<&RustVersion>) -> Self
pub fn with_rust_version(rust_version: Option<&RustVersion>) -> Self
Gets the default lockfile version for the given Rust version.
Trait Implementations§
source§impl Clone for ResolveVersion
impl Clone for ResolveVersion
source§fn clone(&self) -> ResolveVersion
fn clone(&self) -> ResolveVersion
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for ResolveVersion
impl Debug for ResolveVersion
source§impl Ord for ResolveVersion
impl Ord for ResolveVersion
source§fn cmp(&self, other: &ResolveVersion) -> Ordering
fn cmp(&self, other: &ResolveVersion) -> Ordering
1.21.0 · source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
source§impl PartialEq for ResolveVersion
impl PartialEq for ResolveVersion
source§impl PartialOrd for ResolveVersion
impl PartialOrd for ResolveVersion
impl Copy for ResolveVersion
impl Eq for ResolveVersion
impl StructuralPartialEq for ResolveVersion
Auto Trait Implementations§
impl Freeze for ResolveVersion
impl RefUnwindSafe for ResolveVersion
impl Send for ResolveVersion
impl Sync for ResolveVersion
impl Unpin for ResolveVersion
impl UnwindSafe for ResolveVersion
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)§impl<Q, K> Comparable<K> for Q
impl<Q, K> Comparable<K> for Q
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where
S: Into<Dispatch>,
§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...)
attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 1 byte
Size for each variant:
V1
: 0 bytesV2
: 0 bytesV3
: 0 bytesV4
: 0 bytesV5
: 0 bytes