@@ -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 ;
@@ -520,6 +522,7 @@ pub(crate) struct MetaData {
520
522
pub ( crate ) default_target : String ,
521
523
pub ( crate ) doc_targets : Vec < String > ,
522
524
pub ( crate ) yanked : bool ,
525
+ pub ( crate ) features : Option < Vec < Feature > > ,
523
526
}
524
527
525
528
impl MetaData {
@@ -533,7 +536,8 @@ impl MetaData {
533
536
releases.rustdoc_status,
534
537
releases.default_target,
535
538
releases.doc_targets,
536
- releases.yanked
539
+ releases.yanked,
540
+ releases.features
537
541
FROM releases
538
542
INNER JOIN crates ON crates.id = releases.crate_id
539
543
WHERE crates.name = $1 AND releases.version = $2" ,
@@ -552,6 +556,7 @@ impl MetaData {
552
556
default_target : row. get ( 5 ) ,
553
557
doc_targets : MetaData :: parse_doc_targets ( row. get ( 6 ) ) ,
554
558
yanked : row. get ( 7 ) ,
559
+ features : MetaData :: parse_features ( row. get ( 8 ) ) ,
555
560
} )
556
561
}
557
562
@@ -566,6 +571,14 @@ impl MetaData {
566
571
} )
567
572
. unwrap_or_else ( Vec :: new)
568
573
}
574
+
575
+ pub ( crate ) fn parse_features ( features : Option < Vec < Feature > > ) -> Option < Vec < Feature > > {
576
+ features. map ( |vec| {
577
+ vec. into_iter ( )
578
+ . filter ( |feature| !feature. is_private ( ) )
579
+ . collect ( )
580
+ } )
581
+ }
569
582
}
570
583
571
584
#[ derive( Debug , Clone , PartialEq , Serialize ) ]
@@ -844,6 +857,7 @@ mod test {
844
857
"arm64-unknown-linux-gnu" . to_string( ) ,
845
858
] ,
846
859
yanked : false ,
860
+ features : None ,
847
861
} ;
848
862
849
863
let correct_json = json ! ( {
@@ -858,6 +872,7 @@ mod test {
858
872
"arm64-unknown-linux-gnu" ,
859
873
] ,
860
874
"yanked" : false ,
875
+ "features" : null
861
876
} ) ;
862
877
863
878
assert_eq ! ( correct_json, serde_json:: to_value( & metadata) . unwrap( ) ) ;
@@ -875,6 +890,7 @@ mod test {
875
890
"arm64-unknown-linux-gnu" ,
876
891
] ,
877
892
"yanked" : false ,
893
+ "features" : null,
878
894
} ) ;
879
895
880
896
assert_eq ! ( correct_json, serde_json:: to_value( & metadata) . unwrap( ) ) ;
@@ -892,6 +908,7 @@ mod test {
892
908
"arm64-unknown-linux-gnu" ,
893
909
] ,
894
910
"yanked" : false ,
911
+ "features" : null,
895
912
} ) ;
896
913
897
914
assert_eq ! ( correct_json, serde_json:: to_value( & metadata) . unwrap( ) ) ;
0 commit comments