@@ -90,6 +90,7 @@ mod sitemap;
9090mod source;
9191mod statics;
9292
93+ use crate :: db:: types:: Feature ;
9394use crate :: { impl_webpage, Context } ;
9495use chrono:: { DateTime , Utc } ;
9596use error:: Nope ;
@@ -519,6 +520,7 @@ pub(crate) struct MetaData {
519520 pub ( crate ) default_target : String ,
520521 pub ( crate ) doc_targets : Vec < String > ,
521522 pub ( crate ) yanked : bool ,
523+ pub ( crate ) features : Option < Vec < String > > ,
522524}
523525
524526impl MetaData {
@@ -532,7 +534,8 @@ impl MetaData {
532534 releases.rustdoc_status,
533535 releases.default_target,
534536 releases.doc_targets,
535- releases.yanked
537+ releases.yanked,
538+ releases.features
536539 FROM releases
537540 INNER JOIN crates ON crates.id = releases.crate_id
538541 WHERE crates.name = $1 AND releases.version = $2" ,
@@ -551,6 +554,7 @@ impl MetaData {
551554 default_target : row. get ( 5 ) ,
552555 doc_targets : MetaData :: parse_doc_targets ( row. get ( 6 ) ) ,
553556 yanked : row. get ( 7 ) ,
557+ features : MetaData :: parse_features ( row. get ( 8 ) ) ,
554558 } )
555559 }
556560
@@ -565,6 +569,15 @@ impl MetaData {
565569 } )
566570 . unwrap_or_else ( Vec :: new)
567571 }
572+
573+ fn parse_features ( features : Option < Vec < Feature > > ) -> Option < Vec < String > > {
574+ features. map ( |vec| {
575+ vec. iter ( )
576+ . filter ( |feature| !feature. is_private ( ) )
577+ . map ( |feature| feature. to_string ( ) )
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