Skip to main content

FeatureQuery

Struct FeatureQuery 

Source
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>

Source

pub fn graph(&self) -> &FeatureGraph<'g>

Returns the feature graph the query is going to be executed on.

Source

pub fn direction(&self) -> DependencyDirection

Returns the direction the query is happening in.

Source

pub fn initials(&self) -> &FeatureSet<'g>

Returns the set of initial features specified in the query.

Source

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.

Source

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.

Source

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.

Source

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.

Source

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>

Source§

fn clone(&self) -> FeatureQuery<'g>

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<'g> Debug for FeatureQuery<'g>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto 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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.