pub struct FeatureQuery<'g> { /* private fields */ }Expand description
A query over a feature graph.
A FeatureQuery is the entry point for Cargo resolution, and also provides iterators over
feature IDs and links. This struct is constructed through the query_ methods on
FeatureGraph, or through PackageQuery::to_feature_query.
Implementations§
Source§impl<'g> FeatureQuery<'g>
impl<'g> FeatureQuery<'g>
Sourcepub fn graph(&self) -> &FeatureGraph<'g>
pub fn graph(&self) -> &FeatureGraph<'g>
Returns the feature graph the query is going to be executed on.
Sourcepub fn direction(&self) -> DependencyDirection
pub fn direction(&self) -> DependencyDirection
Returns the direction the query is happening in.
Sourcepub fn initials(&self) -> &FeatureSet<'g>
pub fn initials(&self) -> &FeatureSet<'g>
Returns the set of initial features specified in the query.
Sourcepub fn initial_packages<'a>(
&'a self,
) -> impl Iterator<Item = PackageMetadata<'g>> + 'a
pub fn initial_packages<'a>( &'a self, ) -> impl Iterator<Item = PackageMetadata<'g>> + 'a
Returns the list of initial packages specified in the query.
The order of packages is unspecified.
Sourcepub fn starts_from_package(&self, package_id: &PackageId) -> Result<bool, Error>
pub fn starts_from_package(&self, package_id: &PackageId) -> Result<bool, Error>
Returns true if the query starts from the given package.
Returns an error if the package ID is unknown.
Sourcepub fn resolve(self) -> FeatureSet<'g>
pub fn resolve(self) -> FeatureSet<'g>
Resolves this query into a set of known feature IDs.
This is the entry point for iterators.
The result is every feature reachable from the initials, ignoring any conditions attached to it (such as whether it is a dev-dependency or a weak dependency). This does not determine which features Cargo would enable in a particular build.
To simulate a Cargo build, pass a set of workspace features to
FeatureSet::into_cargo_set, then inspect
CargoSet::target_features and CargoSet::host_features.
Sourcepub fn resolve_with(
self,
visitor: impl FeatureLinkVisitor<'g>,
) -> FeatureSet<'g>
pub fn resolve_with( self, visitor: impl FeatureLinkVisitor<'g>, ) -> FeatureSet<'g>
Resolves this query into a set of known feature IDs, using the provided visitor to determine which links are followed.
The visitor can be called twice for a weak dependency feature
(dep?/feature). See FeatureLinkVisitor::visit_link for details.
With a visitor that accepts every link, a reverse query returns the same
set as resolve. Note that (unlike with resolve), a
forward query can return a smaller set of features because of weak links
not being activated.
Sourcepub fn resolve_with_fn(
self,
visitor_fn: impl FnMut(&FeatureLinkContext<'g>, ConditionalLink<'g>) -> bool,
) -> FeatureSet<'g>
pub fn resolve_with_fn( self, visitor_fn: impl FnMut(&FeatureLinkContext<'g>, ConditionalLink<'g>) -> bool, ) -> FeatureSet<'g>
Resolves this query into a set of known feature IDs, using the provided visitor function to determine which links are followed.
The visitor function can be called twice for a weak dependency feature
(dep?/feature). See FeatureLinkVisitor::visit_link for details.
Trait Implementations§
Source§impl<'g> Clone for FeatureQuery<'g>
impl<'g> Clone for FeatureQuery<'g>
Source§fn clone(&self) -> FeatureQuery<'g>
fn clone(&self) -> FeatureQuery<'g>
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl<'g> Freeze for FeatureQuery<'g>
impl<'g> RefUnwindSafe for FeatureQuery<'g>
impl<'g> Send for FeatureQuery<'g>
impl<'g> Sync for FeatureQuery<'g>
impl<'g> Unpin for FeatureQuery<'g>
impl<'g> UnsafeUnpin for FeatureQuery<'g>
impl<'g> UnwindSafe for FeatureQuery<'g>
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<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 more