Rocket/examples/pastebin/src/main.rs

58 lines
1.2 KiB
Rust
Raw Normal View History

2016-12-10 03:56:49 +00:00
#![feature(plugin)]
#![plugin(rocket_codegen)]
extern crate rocket;
extern crate rand;
mod paste_id;
use std::io;
use std::fs::File;
use std::path::Path;
use rocket::Data;
2016-12-10 05:01:30 +00:00
use rocket::response::content;
2016-12-10 03:56:49 +00:00
use paste_id::PasteID;
const HOST: &'static str = "http://localhost:8000";
const ID_LENGTH: usize = 3;
#[post("/", data = "<paste>")]
fn upload(paste: Data) -> io::Result<content::Plain<String>> {
let id = PasteID::new(ID_LENGTH);
let filename = format!("upload/{id}", id = id);
let url = format!("{host}/{id}\n", host = HOST, id = id);
paste.stream_to_file(Path::new(&filename))?;
Ok(content::Plain(url))
}
#[get("/<id>")]
2016-12-10 05:01:30 +00:00
fn retrieve(id: PasteID) -> Option<content::Plain<File>> {
2016-12-10 03:56:49 +00:00
let filename = format!("upload/{id}", id = id);
2016-12-10 05:01:30 +00:00
File::open(&filename).map(|f| content::Plain(f)).ok()
2016-12-10 03:56:49 +00:00
}
#[get("/")]
fn index() -> &'static str {
"
USAGE
POST /
accepts raw data in the body of the request and responds with a URL of
a page containing the body's content
EXMAPLE: curl --data-binary @file.txt http://localhost:8000
GET /<id>
retrieves the content for the paste with id `<id>`
"
}
fn main() {
rocket::ignite().mount("/", routes![index, upload, retrieve]).launch()
}