File tree Expand file tree Collapse file tree 3 files changed +45
-0
lines changed Expand file tree Collapse file tree 3 files changed +45
-0
lines changed Original file line number Diff line number Diff line change @@ -43,6 +43,7 @@ mod pool;
43
43
mod file;
44
44
mod builds;
45
45
mod error;
46
+ mod sitemap;
46
47
47
48
use std:: env;
48
49
use std:: error:: Error ;
@@ -96,6 +97,8 @@ impl CratesfyiHandler {
96
97
router. get ( "/about" , |_: & mut Request | {
97
98
page:: Page :: new ( false ) . title ( "About Docs.rs" ) . to_resp ( "about" )
98
99
} ) ;
100
+ router. get ( "/robots.txt" , sitemap:: robots_txt_handler) ;
101
+ router. get ( "/sitemap.xml" , sitemap:: sitemap_handler) ;
99
102
router. get ( "/releases" , releases:: releases_handler) ;
100
103
router. get ( "/releases/feed" , releases:: releases_feed_handler) ;
101
104
router. get ( "/releases/recent/:page" , releases:: releases_handler) ;
Original file line number Diff line number Diff line change
1
+
2
+
3
+ use iron:: prelude:: * ;
4
+ use iron:: headers:: ContentType ;
5
+ use super :: page:: Page ;
6
+ use super :: pool:: Pool ;
7
+ use time;
8
+
9
+
10
+ pub fn sitemap_handler ( req : & mut Request ) -> IronResult < Response > {
11
+ let conn = extension ! ( req, Pool ) ;
12
+ let mut releases: Vec < ( String , String ) > = Vec :: new ( ) ;
13
+ for row in & conn. query ( "SELECT DISTINCT ON (crates.name)
14
+ crates.name,
15
+ releases.release_time
16
+ FROM crates
17
+ INNER JOIN releases ON releases.crate_id = crates.id
18
+ WHERE rustdoc_status = true" ,
19
+ & [ ] )
20
+ . unwrap ( ) {
21
+ releases. push ( ( row. get ( 0 ) , format ! ( "{}" , time:: at( row. get( 1 ) ) . rfc3339( ) ) ) ) ;
22
+ }
23
+ let mut resp = ctry ! ( Page :: new( releases) . to_resp( "sitemap" ) ) ;
24
+ resp. headers . set ( ContentType ( "application/xml" . parse ( ) . unwrap ( ) ) ) ;
25
+ Ok ( resp)
26
+ }
27
+
28
+
29
+ pub fn robots_txt_handler ( _: & mut Request ) -> IronResult < Response > {
30
+ let mut resp = Response :: with ( "Sitemap: https://docs.rs/sitemap.xml" ) ;
31
+ resp. headers . set ( ContentType ( "text/plain" . parse ( ) . unwrap ( ) ) ) ;
32
+ Ok ( resp)
33
+ }
Original file line number Diff line number Diff line change
1
+ <?xml version =" 1.0" encoding =" UTF-8" ?>
2
+ <urlset xmlns =" http://www.sitemaps.org/schemas/sitemap/0.9" >
3
+ {{ #each content }}
4
+ <url >
5
+ <loc >https://docs.rs/{{ this. [0 ]}} </loc >
6
+ <lastmod >{{ this. [1 ]}} </lastmod >
7
+ </url >
8
+ {{ /each }}
9
+ </urlset >
You can’t perform that action at this time.
0 commit comments