@@ -81,6 +81,7 @@ mod builds;
81
81
mod crate_details;
82
82
mod error;
83
83
mod extensions;
84
+ mod features;
84
85
mod file;
85
86
pub ( crate ) mod metrics;
86
87
mod releases;
@@ -90,6 +91,7 @@ mod sitemap;
90
91
mod source;
91
92
mod statics;
92
93
94
+ use crate :: db:: types:: Feature ;
93
95
use crate :: { impl_webpage, Context } ;
94
96
use chrono:: { DateTime , Utc } ;
95
97
use error:: Nope ;
@@ -519,6 +521,7 @@ pub(crate) struct MetaData {
519
521
pub ( crate ) default_target : String ,
520
522
pub ( crate ) doc_targets : Vec < String > ,
521
523
pub ( crate ) yanked : bool ,
524
+ pub ( crate ) features : Option < Vec < Feature > > ,
522
525
}
523
526
524
527
impl MetaData {
@@ -532,7 +535,8 @@ impl MetaData {
532
535
releases.rustdoc_status,
533
536
releases.default_target,
534
537
releases.doc_targets,
535
- releases.yanked
538
+ releases.yanked,
539
+ releases.features
536
540
FROM releases
537
541
INNER JOIN crates ON crates.id = releases.crate_id
538
542
WHERE crates.name = $1 AND releases.version = $2" ,
@@ -551,6 +555,7 @@ impl MetaData {
551
555
default_target : row. get ( 5 ) ,
552
556
doc_targets : MetaData :: parse_doc_targets ( row. get ( 6 ) ) ,
553
557
yanked : row. get ( 7 ) ,
558
+ features : MetaData :: parse_features ( row. get ( 8 ) ) ,
554
559
} )
555
560
}
556
561
@@ -565,6 +570,14 @@ impl MetaData {
565
570
} )
566
571
. unwrap_or_else ( Vec :: new)
567
572
}
573
+
574
+ pub ( crate ) fn parse_features ( features : Option < Vec < Feature > > ) -> Option < Vec < Feature > > {
575
+ features. map ( |vec| {
576
+ vec. into_iter ( )
577
+ . filter ( |feature| !feature. is_private ( ) )
578
+ . collect ( )
579
+ } )
580
+ }
568
581
}
569
582
570
583
#[ derive( Debug , Clone , PartialEq , Serialize ) ]
@@ -843,6 +856,7 @@ mod test {
843
856
"arm64-unknown-linux-gnu" . to_string( ) ,
844
857
] ,
845
858
yanked : false ,
859
+ features : None ,
846
860
} ;
847
861
848
862
let correct_json = json ! ( {
@@ -857,6 +871,7 @@ mod test {
857
871
"arm64-unknown-linux-gnu" ,
858
872
] ,
859
873
"yanked" : false ,
874
+ "features" : null
860
875
} ) ;
861
876
862
877
assert_eq ! ( correct_json, serde_json:: to_value( & metadata) . unwrap( ) ) ;
@@ -874,6 +889,7 @@ mod test {
874
889
"arm64-unknown-linux-gnu" ,
875
890
] ,
876
891
"yanked" : false ,
892
+ "features" : null,
877
893
} ) ;
878
894
879
895
assert_eq ! ( correct_json, serde_json:: to_value( & metadata) . unwrap( ) ) ;
@@ -891,6 +907,7 @@ mod test {
891
907
"arm64-unknown-linux-gnu" ,
892
908
] ,
893
909
"yanked" : false ,
910
+ "features" : null,
894
911
} ) ;
895
912
896
913
assert_eq ! ( correct_json, serde_json:: to_value( & metadata) . unwrap( ) ) ;
0 commit comments