pub struct SolverTask<TAvailablePackagesIterator> {
pub available_packages: TAvailablePackagesIterator,
pub locked_packages: Vec<RepoDataRecord>,
pub pinned_packages: Vec<RepoDataRecord>,
pub virtual_packages: Vec<GenericVirtualPackage>,
pub specs: Vec<MatchSpec>,
pub constraints: Vec<MatchSpec>,
pub timeout: Option<Duration>,
pub channel_priority: ChannelPriority,
pub exclude_newer: Option<DateTime<Utc>>,
pub min_age: Option<MinimumAgeConfig>,
pub strategy: SolveStrategy,
}Expand description
Represents a dependency resolution task, to be solved by one of the backends
Fields§
§available_packages: TAvailablePackagesIteratorAn iterator over all available packages
locked_packages: Vec<RepoDataRecord>Records of packages that are previously selected.
If the solver encounters multiple variants of a single package (identified by its name), it will sort the records and select the best possible version. However, if there exists a locked version it will prefer that variant instead. This is useful to reduce the number of packages that are updated when installing new packages.
Usually you add the currently installed packages or packages from a lock-file here.
pinned_packages: Vec<RepoDataRecord>Records of packages that are previously selected and CANNOT be changed.
If the solver encounters multiple variants of a single package
(identified by its name), it will sort the records and select the
best possible version. However, if there is a variant available in
the pinned_packages field it will always select that version no matter
what even if that means other packages have to be downgraded.
virtual_packages: Vec<GenericVirtualPackage>Virtual packages considered active
specs: Vec<MatchSpec>The specs we want to solve
constraints: Vec<MatchSpec>Additional constraints that should be satisfied by the solver.
Packages included in the constraints are not necessarily
installed, but they must be satisfied by the solution.
timeout: Option<Duration>The timeout after which the solver should stop
channel_priority: ChannelPriorityThe channel priority to solve with, either ChannelPriority::Strict
or ChannelPriority::Disabled
exclude_newer: Option<DateTime<Utc>>Exclude any package that has a timestamp newer than the specified timestamp.
min_age: Option<MinimumAgeConfig>Only consider packages that have been published for at least the specified duration.
This helps reduce the risk of installing compromised packages, as malicious releases are typically discovered and removed from channels within a short time window. By requiring a minimum age, you give the community time to identify and report malicious packages.
Some packages can be exempted from this check using the
MinimumAgeConfig::exempt_packages field.
strategy: SolveStrategyThe solve strategy.
Trait Implementations§
Source§impl<TAvailablePackagesIterator: Clone> Clone for SolverTask<TAvailablePackagesIterator>
impl<TAvailablePackagesIterator: Clone> Clone for SolverTask<TAvailablePackagesIterator>
Source§fn clone(&self) -> SolverTask<TAvailablePackagesIterator>
fn clone(&self) -> SolverTask<TAvailablePackagesIterator>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<TAvailablePackagesIterator: Debug> Debug for SolverTask<TAvailablePackagesIterator>
impl<TAvailablePackagesIterator: Debug> Debug for SolverTask<TAvailablePackagesIterator>
Source§impl<'r, I: IntoIterator<Item = &'r RepoDataRecord>> FromIterator<I> for SolverTask<Vec<RepoDataIter<I>>>
impl<'r, I: IntoIterator<Item = &'r RepoDataRecord>> FromIterator<I> for SolverTask<Vec<RepoDataIter<I>>>
Source§fn from_iter<T: IntoIterator<Item = I>>(iter: T) -> Self
fn from_iter<T: IntoIterator<Item = I>>(iter: T) -> Self
Source§impl<TAvailablePackagesIterator: PartialEq> PartialEq for SolverTask<TAvailablePackagesIterator>
impl<TAvailablePackagesIterator: PartialEq> PartialEq for SolverTask<TAvailablePackagesIterator>
Source§fn eq(&self, other: &SolverTask<TAvailablePackagesIterator>) -> bool
fn eq(&self, other: &SolverTask<TAvailablePackagesIterator>) -> bool
self and other values to be equal, and is used by ==.impl<TAvailablePackagesIterator: Eq> Eq for SolverTask<TAvailablePackagesIterator>
impl<TAvailablePackagesIterator> StructuralPartialEq for SolverTask<TAvailablePackagesIterator>
Auto Trait Implementations§
impl<TAvailablePackagesIterator> Freeze for SolverTask<TAvailablePackagesIterator>where
TAvailablePackagesIterator: Freeze,
impl<TAvailablePackagesIterator> RefUnwindSafe for SolverTask<TAvailablePackagesIterator>where
TAvailablePackagesIterator: RefUnwindSafe,
impl<TAvailablePackagesIterator> Send for SolverTask<TAvailablePackagesIterator>where
TAvailablePackagesIterator: Send,
impl<TAvailablePackagesIterator> Sync for SolverTask<TAvailablePackagesIterator>where
TAvailablePackagesIterator: Sync,
impl<TAvailablePackagesIterator> Unpin for SolverTask<TAvailablePackagesIterator>where
TAvailablePackagesIterator: Unpin,
impl<TAvailablePackagesIterator> UnwindSafe for SolverTask<TAvailablePackagesIterator>where
TAvailablePackagesIterator: UnwindSafe,
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§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.