@@ -81,6 +81,7 @@ mod builds;
8181mod crate_details;
8282mod error;
8383mod extensions;
84+ mod features;
8485mod file;
8586pub ( crate ) mod metrics;
8687mod releases;
@@ -90,6 +91,7 @@ mod sitemap;
9091mod source;
9192mod statics;
9293
94+ use crate :: db:: types:: Feature ;
9395use crate :: { impl_webpage, Context } ;
9496use chrono:: { DateTime , Utc } ;
9597use error:: Nope ;
@@ -520,6 +522,7 @@ pub(crate) struct MetaData {
520522 pub ( crate ) default_target : String ,
521523 pub ( crate ) doc_targets : Vec < String > ,
522524 pub ( crate ) yanked : bool ,
525+ pub ( crate ) features : Option < Vec < Feature > > ,
523526}
524527
525528impl MetaData {
@@ -533,7 +536,8 @@ impl MetaData {
533536 releases.rustdoc_status,
534537 releases.default_target,
535538 releases.doc_targets,
536- releases.yanked
539+ releases.yanked,
540+ releases.features
537541 FROM releases
538542 INNER JOIN crates ON crates.id = releases.crate_id
539543 WHERE crates.name = $1 AND releases.version = $2" ,
@@ -552,6 +556,7 @@ impl MetaData {
552556 default_target : row. get ( 5 ) ,
553557 doc_targets : MetaData :: parse_doc_targets ( row. get ( 6 ) ) ,
554558 yanked : row. get ( 7 ) ,
559+ features : MetaData :: parse_features ( row. get ( 8 ) ) ,
555560 } )
556561 }
557562
@@ -566,6 +571,14 @@ impl MetaData {
566571 } )
567572 . unwrap_or_else ( Vec :: new)
568573 }
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+ }
569582}
570583
571584#[ derive( Debug , Clone , PartialEq , Serialize ) ]
@@ -844,6 +857,7 @@ mod test {
844857 "arm64-unknown-linux-gnu" . to_string( ) ,
845858 ] ,
846859 yanked : false ,
860+ features : None ,
847861 } ;
848862
849863 let correct_json = json ! ( {
@@ -858,6 +872,7 @@ mod test {
858872 "arm64-unknown-linux-gnu" ,
859873 ] ,
860874 "yanked" : false ,
875+ "features" : null
861876 } ) ;
862877
863878 assert_eq ! ( correct_json, serde_json:: to_value( & metadata) . unwrap( ) ) ;
@@ -875,6 +890,7 @@ mod test {
875890 "arm64-unknown-linux-gnu" ,
876891 ] ,
877892 "yanked" : false ,
893+ "features" : null,
878894 } ) ;
879895
880896 assert_eq ! ( correct_json, serde_json:: to_value( & metadata) . unwrap( ) ) ;
@@ -892,6 +908,7 @@ mod test {
892908 "arm64-unknown-linux-gnu" ,
893909 ] ,
894910 "yanked" : false ,
911+ "features" : null,
895912 } ) ;
896913
897914 assert_eq ! ( correct_json, serde_json:: to_value( & metadata) . unwrap( ) ) ;
0 commit comments