@@ -42,6 +42,7 @@ pub(crate) fn add_package_into_database(
42
42
let dependencies = convert_dependencies ( metadata_pkg) ;
43
43
let rustdoc = get_rustdoc ( metadata_pkg, source_dir) . unwrap_or ( None ) ;
44
44
let readme = get_readme ( metadata_pkg, source_dir) . unwrap_or ( None ) ;
45
+ let features = get_features ( metadata_pkg) ;
45
46
let is_library = metadata_pkg. is_library ( ) ;
46
47
47
48
let rows = conn. query (
@@ -52,12 +53,12 @@ pub(crate) fn add_package_into_database(
52
53
homepage_url, description, description_long, readme,
53
54
authors, keywords, have_examples, downloads, files,
54
55
doc_targets, is_library, doc_rustc_version,
55
- documentation_url, default_target
56
+ documentation_url, default_target, features
56
57
)
57
58
VALUES (
58
59
$1, $2, $3, $4, $5, $6, $7, $8, $9,
59
60
$10, $11, $12, $13, $14, $15, $16, $17, $18,
60
- $19, $20, $21, $22, $23, $24, $25
61
+ $19, $20, $21, $22, $23, $24, $25, $26
61
62
)
62
63
ON CONFLICT (crate_id, version) DO UPDATE
63
64
SET release_time = $3,
@@ -82,7 +83,8 @@ pub(crate) fn add_package_into_database(
82
83
is_library = $22,
83
84
doc_rustc_version = $23,
84
85
documentation_url = $24,
85
- default_target = $25
86
+ default_target = $25,
87
+ features = $26
86
88
RETURNING id" ,
87
89
& [
88
90
& crate_id,
@@ -110,6 +112,7 @@ pub(crate) fn add_package_into_database(
110
112
& res. rustc_version ,
111
113
& metadata_pkg. documentation ,
112
114
& default_target,
115
+ & serde_json:: to_value ( features) ?,
113
116
] ,
114
117
) ?;
115
118
@@ -213,6 +216,21 @@ fn convert_dependencies(pkg: &MetadataPackage) -> Vec<(String, String, String)>
213
216
. collect ( )
214
217
}
215
218
219
+ /// Reads features and converts them to Vec<String> with default being first
220
+ fn get_features ( pkg : & MetadataPackage ) -> Vec < String > {
221
+ let mut features = Vec :: with_capacity ( pkg. features . len ( ) ) ;
222
+ if let Some ( default) = pkg. features . get ( "default" ) {
223
+ features. push ( format ! ( "default = {:?}" , default ) ) ;
224
+ } ;
225
+ features. extend (
226
+ pkg. features
227
+ . iter ( )
228
+ . filter ( |( name, _) | !name. eq ( & "default" ) )
229
+ . map ( |( name, features) | format ! ( "{} = {:?}" , name, features) ) ,
230
+ ) ;
231
+ features
232
+ }
233
+
216
234
/// Reads readme if there is any read defined in Cargo.toml of a Package
217
235
fn get_readme ( pkg : & MetadataPackage , source_dir : & Path ) -> Result < Option < String > > {
218
236
let readme_path = source_dir. join ( pkg. readme . as_deref ( ) . unwrap_or ( "README.md" ) ) ;
0 commit comments