Skip to content

Commit 2601342

Browse files
committed
Add sitemap
1 parent 27771e4 commit 2601342

File tree

3 files changed

+45
-0
lines changed

3 files changed

+45
-0
lines changed

src/web/mod.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ mod pool;
4343
mod file;
4444
mod builds;
4545
mod error;
46+
mod sitemap;
4647

4748
use std::env;
4849
use std::error::Error;
@@ -96,6 +97,8 @@ impl CratesfyiHandler {
9697
router.get("/about", |_: &mut Request| {
9798
page::Page::new(false).title("About Docs.rs").to_resp("about")
9899
});
100+
router.get("/robots.txt", sitemap::robots_txt_handler);
101+
router.get("/sitemap.xml", sitemap::sitemap_handler);
99102
router.get("/releases", releases::releases_handler);
100103
router.get("/releases/feed", releases::releases_feed_handler);
101104
router.get("/releases/recent/:page", releases::releases_handler);

src/web/sitemap.rs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
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+
}

templates/sitemap.hbs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
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>

0 commit comments

Comments
 (0)