@@ -99,17 +99,28 @@ pub fn rustdoc_redirector_handler(req: &mut Request) -> IronResult<Response> {
9999 // get target name
100100 // FIXME: This is a bit inefficient but allowing us to use less code in general
101101 let target_name: String = {
102- let query = ctry ! ( conn. query( "SELECT target_name, default_target
102+ fn targets_contains ( doc_targets : & Json , default_target : & str ) -> bool {
103+ doc_targets. as_array ( ) . map_or ( false , |tgts| {
104+ tgts. iter ( ) . any ( |t| t. as_string ( ) == Some ( default_target) )
105+ } )
106+ }
107+
108+ let query = ctry ! ( conn. query( "SELECT target_name, default_target, doc_targets
103109 FROM releases
104110 INNER JOIN crates ON crates.id = releases.crate_id
105111 WHERE crates.name = $1 AND releases.version = $2" ,
106112 & [ & crate_name, & version] ) ) ;
107113 let row = query. get ( 0 ) ;
108114
109- let ( target, default) : ( String , Option < String > ) = ( row. get ( 0 ) , row. get ( 1 ) ) ;
115+ let ( target, default, doc_targets) : ( String , Option < String > , Json ) =
116+ ( row. get ( 0 ) , row. get ( 1 ) , row. get ( 2 ) ) ;
110117
111118 if let Some ( default) = default {
112- format ! ( "{}/{}" , default , target)
119+ if targets_contains ( & doc_targets, & default) {
120+ format ! ( "{}/{}" , default , target)
121+ } else {
122+ target
123+ }
113124 } else {
114125 target
115126 }
0 commit comments