pub struct FeatureGraph<'g> { /* private fields */ }
Expand description
A derived graph representing every feature of every package.
Constructed through PackageGraph::feature_graph
.
Implementations§
source§impl<'g> FeatureGraph<'g>
impl<'g> FeatureGraph<'g>
sourcepub fn build_warnings(&self) -> &'g [FeatureGraphWarning]
pub fn build_warnings(&self) -> &'g [FeatureGraphWarning]
Returns any non-fatal warnings encountered while constructing the feature graph.
sourcepub fn package_graph(&self) -> &'g PackageGraph
pub fn package_graph(&self) -> &'g PackageGraph
Returns the PackageGraph
from which this feature graph was constructed.
sourcepub fn feature_count(&self) -> usize
pub fn feature_count(&self) -> usize
Returns the total number of (package ID, feature) combinations in this graph.
Includes the “base” feature for each package.
sourcepub fn link_count(&self) -> usize
pub fn link_count(&self) -> usize
Returns the number of links in this graph.
sourcepub fn contains(&self, feature_id: impl Into<FeatureId<'g>>) -> bool
pub fn contains(&self, feature_id: impl Into<FeatureId<'g>>) -> bool
Returns true if this feature graph contains the specified feature.
sourcepub fn metadata(
&self,
feature_id: impl Into<FeatureId<'g>>,
) -> Result<FeatureMetadata<'g>, Error>
pub fn metadata( &self, feature_id: impl Into<FeatureId<'g>>, ) -> Result<FeatureMetadata<'g>, Error>
Returns metadata for the given feature ID, or None
if the feature wasn’t found.
sourcepub fn all_features_for(
&self,
package_id: &PackageId,
) -> Result<FeatureList<'g>, Error>
pub fn all_features_for( &self, package_id: &PackageId, ) -> Result<FeatureList<'g>, Error>
Returns all known features for a package.
Returns an error if the package ID was unknown.
sourcepub fn is_default_feature<'a>(
&self,
feature_id: impl Into<FeatureId<'a>>,
) -> Result<bool, Error>
pub fn is_default_feature<'a>( &self, feature_id: impl Into<FeatureId<'a>>, ) -> Result<bool, Error>
Returns true if this feature is included in a package’s build by default.
Returns an error if this feature ID is unknown.
§Cycles
A cyclic dev-dependency may cause additional features to be turned on. This computation does not follow conditional links and will not return true for such additional features.
sourcepub fn depends_on<'a>(
&self,
feature_a: impl Into<FeatureId<'a>>,
feature_b: impl Into<FeatureId<'a>>,
) -> Result<bool, Error>
pub fn depends_on<'a>( &self, feature_a: impl Into<FeatureId<'a>>, feature_b: impl Into<FeatureId<'a>>, ) -> Result<bool, Error>
Returns true if feature_a
depends (directly or indirectly) on feature_b
.
In other words, this returns true if feature_b
is a (possibly transitive) dependency of
feature_a
.
This also returns true if feature_a
is the same as feature_b
.
Note that this returns true if feature_a
conditionally depends on feature_b
.
sourcepub fn directly_depends_on<'a>(
&self,
feature_a: impl Into<FeatureId<'a>>,
feature_b: impl Into<FeatureId<'a>>,
) -> Result<bool, Error>
pub fn directly_depends_on<'a>( &self, feature_a: impl Into<FeatureId<'a>>, feature_b: impl Into<FeatureId<'a>>, ) -> Result<bool, Error>
Returns true if feature_a
directly depends on feature_b
.
In other words, this returns true if feature_a
is a direct dependency of feature_b
.
This returns false if feature_a
is the same as feature_b
.
source§impl<'g> FeatureGraph<'g>
impl<'g> FeatureGraph<'g>
§Queries
The methods in this section create queries over subsets of this feature graph. Use the methods here to analyze transitive dependencies.
sourcepub fn query_workspace(
&self,
filter: impl FeatureFilter<'g>,
) -> FeatureQuery<'g>
pub fn query_workspace( &self, filter: impl FeatureFilter<'g>, ) -> FeatureQuery<'g>
Creates a new query over the entire workspace.
query_workspace
will select all workspace packages (subject to the provided filter) and
their transitive dependencies.
sourcepub fn query_directed<'a>(
&self,
feature_ids: impl IntoIterator<Item = impl Into<FeatureId<'a>>>,
dep_direction: DependencyDirection,
) -> Result<FeatureQuery<'g>, Error>
pub fn query_directed<'a>( &self, feature_ids: impl IntoIterator<Item = impl Into<FeatureId<'a>>>, dep_direction: DependencyDirection, ) -> Result<FeatureQuery<'g>, Error>
Creates a new query that returns transitive dependencies of the given feature IDs in the specified direction.
Returns an error if any feature IDs are unknown.
sourcepub fn query_forward<'a>(
&self,
feature_ids: impl IntoIterator<Item = impl Into<FeatureId<'a>>>,
) -> Result<FeatureQuery<'g>, Error>
pub fn query_forward<'a>( &self, feature_ids: impl IntoIterator<Item = impl Into<FeatureId<'a>>>, ) -> Result<FeatureQuery<'g>, Error>
Creates a new query that returns transitive dependencies of the given feature IDs.
Returns an error if any feature IDs are unknown.
sourcepub fn query_reverse<'a>(
&self,
feature_ids: impl IntoIterator<Item = impl Into<FeatureId<'a>>>,
) -> Result<FeatureQuery<'g>, Error>
pub fn query_reverse<'a>( &self, feature_ids: impl IntoIterator<Item = impl Into<FeatureId<'a>>>, ) -> Result<FeatureQuery<'g>, Error>
Creates a new query that returns transitive reverse dependencies of the given feature IDs.
Returns an error if any feature IDs are unknown.
source§impl<'g> FeatureGraph<'g>
impl<'g> FeatureGraph<'g>
sourcepub fn resolve_all(&self) -> FeatureSet<'g>
pub fn resolve_all(&self) -> FeatureSet<'g>
Creates a new FeatureSet
consisting of all members of this feature graph.
This will include features that aren’t depended on by any workspace packages.
In most situations, query_workspace().resolve()
is preferred. Use resolve_all
if you
know you need parts of the graph that aren’t accessible from the workspace.
sourcepub fn resolve_none(&self) -> FeatureSet<'g>
pub fn resolve_none(&self) -> FeatureSet<'g>
Creates a new, empty FeatureSet
associated with this feature graph.
sourcepub fn resolve_ids<'a>(
&self,
feature_ids: impl IntoIterator<Item = impl Into<FeatureId<'a>>>,
) -> Result<FeatureSet<'g>, Error>
pub fn resolve_ids<'a>( &self, feature_ids: impl IntoIterator<Item = impl Into<FeatureId<'a>>>, ) -> Result<FeatureSet<'g>, Error>
Creates a new FeatureSet
consisting of the specified feature IDs.
Returns an error if any feature IDs are unknown.
Trait Implementations§
source§impl<'g> Clone for FeatureGraph<'g>
impl<'g> Clone for FeatureGraph<'g>
source§fn clone(&self) -> FeatureGraph<'g>
fn clone(&self) -> FeatureGraph<'g>
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl<'g> Debug for FeatureGraph<'g>
impl<'g> Debug for FeatureGraph<'g>
impl<'g> Copy for FeatureGraph<'g>
Auto Trait Implementations§
impl<'g> Freeze for FeatureGraph<'g>
impl<'g> RefUnwindSafe for FeatureGraph<'g>
impl<'g> Send for FeatureGraph<'g>
impl<'g> Sync for FeatureGraph<'g>
impl<'g> Unpin for FeatureGraph<'g>
impl<'g> UnwindSafe for FeatureGraph<'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§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)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