pub struct FeatureResolver<'a, 'cfg> {
    ws: &'a Workspace<'cfg>,
    target_data: &'a RustcTargetData<'cfg>,
    requested_targets: &'a [CompileKind],
    resolve: &'a Resolve,
    package_set: &'a PackageSet<'cfg>,
    opts: FeatureOpts,
    activated_features: HashMap<(PackageId, FeaturesFor), BTreeSet<InternedString>>,
    activated_dependencies: HashMap<(PackageId, FeaturesFor), BTreeSet<InternedString>>,
    processed_deps: HashSet<(PackageId, FeaturesFor)>,
    track_for_host: bool,
    deferred_weak_dependencies: HashMap<(PackageId, FeaturesFor, InternedString), HashSet<InternedString>>,
}
Expand description

The new feature resolver that resolves your project.

For more information, please see the module-level documentation.

Fields§

§ws: &'a Workspace<'cfg>§target_data: &'a RustcTargetData<'cfg>§requested_targets: &'a [CompileKind]

The platforms to build for, requested by the user.

§resolve: &'a Resolve§package_set: &'a PackageSet<'cfg>§opts: FeatureOpts

Options that change how the feature resolver operates.

§activated_features: HashMap<(PackageId, FeaturesFor), BTreeSet<InternedString>>

Map of features activated for each package.

§activated_dependencies: HashMap<(PackageId, FeaturesFor), BTreeSet<InternedString>>

Map of optional dependencies activated for each package.

§processed_deps: HashSet<(PackageId, FeaturesFor)>

Keeps track of which packages have had its dependencies processed. Used to avoid cycles, and to speed up processing.

§track_for_host: bool

If this is true, then a non-default feature_key needs to be tracked while traversing the graph.

This is only here to avoid calling is_proc_macro when all feature options are disabled (because is_proc_macro can trigger downloads). This has to be separate from FeatureOpts.decouple_host_deps because for_host tracking is also needed for itarget to work properly.

§deferred_weak_dependencies: HashMap<(PackageId, FeaturesFor, InternedString), HashSet<InternedString>>

dep_name?/feat_name features that will be activated if dep_name is ever activated.

The key is the (package, for_host, dep_name) of the package whose dependency will trigger the addition of new features. The value is the set of features to activate.

Implementations§

Runs the resolution algorithm and returns a new ResolvedFeatures with the result.

Performs the process of resolving all features for the resolve graph.

Activates FeatureValues on the given package.

This is the main entrance into the recursion of feature activation for a package.

Activate a single FeatureValue for a package.

Activate the given feature for the given package, and then recursively activate any other features that feature enables.

Activate a dependency (dep:dep_name syntax).

Activate a feature within a dependency (dep_name/feat_name syntax).

Returns Vec of FeatureValues from a Dependency definition.

Returns Vec of FeatureValues from a set of command-line features.

Returns the dependencies for a package, filtering out inactive targets.

Compare the activated features to the resolver. Used for testing.

Auto Trait Implementations§

Blanket Implementations§

Gets the TypeId of self. Read more
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

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

Should always be Self
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.

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: 248 bytes