@@ -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 ;
@@ -519,6 +521,7 @@ pub(crate) struct MetaData {
519521 pub ( crate ) default_target : String ,
520522 pub ( crate ) doc_targets : Vec < String > ,
521523 pub ( crate ) yanked : bool ,
524+ pub ( crate ) features : Option < Vec < Feature > > ,
522525}
523526
524527impl MetaData {
@@ -532,7 +535,8 @@ impl MetaData {
532535 releases.rustdoc_status,
533536 releases.default_target,
534537 releases.doc_targets,
535- releases.yanked
538+ releases.yanked,
539+ releases.features
536540 FROM releases
537541 INNER JOIN crates ON crates.id = releases.crate_id
538542 WHERE crates.name = $1 AND releases.version = $2" ,
@@ -551,6 +555,7 @@ impl MetaData {
551555 default_target : row. get ( 5 ) ,
552556 doc_targets : MetaData :: parse_doc_targets ( row. get ( 6 ) ) ,
553557 yanked : row. get ( 7 ) ,
558+ features : MetaData :: parse_features ( row. get ( 8 ) ) ,
554559 } )
555560 }
556561
@@ -565,6 +570,14 @@ impl MetaData {
565570 } )
566571 . unwrap_or_else ( Vec :: new)
567572 }
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+ }
568581}
569582
570583#[ derive( Debug , Clone , PartialEq , Serialize ) ]
@@ -843,6 +856,7 @@ mod test {
843856 "arm64-unknown-linux-gnu" . to_string( ) ,
844857 ] ,
845858 yanked : false ,
859+ features : None ,
846860 } ;
847861
848862 let correct_json = json ! ( {
@@ -857,6 +871,7 @@ mod test {
857871 "arm64-unknown-linux-gnu" ,
858872 ] ,
859873 "yanked" : false ,
874+ "features" : null
860875 } ) ;
861876
862877 assert_eq ! ( correct_json, serde_json:: to_value( & metadata) . unwrap( ) ) ;
@@ -874,6 +889,7 @@ mod test {
874889 "arm64-unknown-linux-gnu" ,
875890 ] ,
876891 "yanked" : false ,
892+ "features" : null,
877893 } ) ;
878894
879895 assert_eq ! ( correct_json, serde_json:: to_value( & metadata) . unwrap( ) ) ;
@@ -891,6 +907,7 @@ mod test {
891907 "arm64-unknown-linux-gnu" ,
892908 ] ,
893909 "yanked" : false ,
910+ "features" : null,
894911 } ) ;
895912
896913 assert_eq ! ( correct_json, serde_json:: to_value( & metadata) . unwrap( ) ) ;
0 commit comments