-
Notifications
You must be signed in to change notification settings - Fork 2.6k
Closed
Labels
A-registriesArea: registriesArea: registriesC-feature-requestCategory: proposal for a feature. Before PR, ping rust-lang/cargo if this is not `Feature accepted`Category: proposal for a feature. Before PR, ping rust-lang/cargo if this is not `Feature accepted`S-acceptedStatus: Issue or feature is accepted, and has a team member available to help mentor or reviewStatus: Issue or feature is accepted, and has a team member available to help mentor or review
Description
Problem
It is a bit surprising that the index metadata needs explicit "optional": false
and "default_features":true
for every dependency, even though these fields have defaults and are optional in manifests.
It's also odd that features: {}
must still be present in the serialized JSON even when using only features2
field.
Making these fields optional would make it a bit easier to serialize index metadata, and can make the index files a bit smaller (for packages with high enough MSRV).
Proposed Solution
--- a/src/cargo/sources/registry/index/mod.rs
+++ b/src/cargo/sources/registry/index/mod.rs
@@ -206,6 +206,7 @@ pub struct IndexPackage<'a> {
#[serde(borrow)]
pub deps: Vec<RegistryDependency<'a>>,
/// Set of features defined for the package, i.e., `[features]` table.
+ #[serde(default)]
pub features: BTreeMap<InternedString, Vec<InternedString>>,
/// This field contains features with new, extended syntax. Specifically,
/// namespaced features (`dep:`) and weak dependencies (`pkg?/feat`).
@@ -268,10 +269,13 @@ pub struct RegistryDependency<'a> {
#[serde(borrow)]
pub req: Cow<'a, str>,
/// Set of features enabled for this dependency.
+ #[serde(default)]
pub features: Vec<InternedString>,
/// Whether or not this is an optional dependency.
+ #[serde(default)]
pub optional: bool,
/// Whether or not default features are enabled.
+ #[serde(default = "default_true")]
pub default_features: bool,
/// The target platform for this dependency.
pub target: Option<Cow<'a, str>>,
@@ -292,6 +296,10 @@ pub struct RegistryDependency<'a> {
pub lib: bool,
}
+fn default_true() -> bool {
+ true
+}
+
Notes
No response
Metadata
Metadata
Assignees
Labels
A-registriesArea: registriesArea: registriesC-feature-requestCategory: proposal for a feature. Before PR, ping rust-lang/cargo if this is not `Feature accepted`Category: proposal for a feature. Before PR, ping rust-lang/cargo if this is not `Feature accepted`S-acceptedStatus: Issue or feature is accepted, and has a team member available to help mentor or reviewStatus: Issue or feature is accepted, and has a team member available to help mentor or review