@@ -26,11 +26,17 @@ pub fn sitemapindex_handler(req: &mut Request) -> IronResult<Response> {
26
26
SitemapIndexXml { sitemaps } . into_response ( req)
27
27
}
28
28
29
+ #[ derive( Debug , Clone , PartialEq , Eq , Serialize ) ]
30
+ struct SitemapRow {
31
+ crate_name : String ,
32
+ last_modified : String ,
33
+ target_name : String ,
34
+ }
35
+
29
36
/// The sitemap
30
37
#[ derive( Debug , Clone , PartialEq , Eq , Serialize ) ]
31
38
struct SitemapXml {
32
- /// The release's names and RFC 3339 timestamp to be displayed on the sitemap
33
- releases : Vec < ( String , String ) > ,
39
+ releases : Vec < SitemapRow > ,
34
40
}
35
41
36
42
impl_webpage ! {
@@ -54,26 +60,30 @@ pub fn sitemap_handler(req: &mut Request) -> IronResult<Response> {
54
60
let query = conn
55
61
. query (
56
62
"SELECT crates.name,
63
+ releases.target_name,
57
64
MAX(releases.release_time) as release_time
58
65
FROM crates
59
66
INNER JOIN releases ON releases.crate_id = crates.id
60
67
WHERE
61
68
rustdoc_status = true AND
62
69
crates.name ILIKE $1
63
- GROUP BY crates.name
70
+ GROUP BY crates.name, releases.target_name
64
71
" ,
65
72
& [ & format ! ( "{}%" , letter) ] ,
66
73
)
67
74
. unwrap ( ) ;
68
75
69
76
let releases = query
70
77
. into_iter ( )
71
- . map ( |row| {
72
- let time = row. get :: < _ , DateTime < Utc > > ( 1 ) . format ( "%+" ) . to_string ( ) ;
73
-
74
- ( row. get ( 0 ) , time)
78
+ . map ( |row| SitemapRow {
79
+ crate_name : row. get ( "name" ) ,
80
+ target_name : row. get ( "target_name" ) ,
81
+ last_modified : row
82
+ . get :: < _ , DateTime < Utc > > ( "release_time" )
83
+ . format ( "%+" )
84
+ . to_string ( ) ,
75
85
} )
76
- . collect :: < Vec < ( String , String ) > > ( ) ;
86
+ . collect ( ) ;
77
87
78
88
SitemapXml { releases } . into_response ( req)
79
89
}
0 commit comments