You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
1004 B
41 lines
1004 B
use futures::future;
|
|
|
|
use gotham::handler::{HandlerFuture, IntoHandlerError};
|
|
use gotham::helpers::http::response::create_response;
|
|
use gotham::state::{FromState, State};
|
|
use gotham_derive::{StateData, StaticResponseExtender};
|
|
|
|
use hyper::StatusCode;
|
|
use mime;
|
|
use serde_derive::Deserialize;
|
|
|
|
use crate::config::Config;
|
|
use crate::paste::Paste;
|
|
|
|
#[derive(Deserialize, StateData, StaticResponseExtender)]
|
|
pub struct Params {
|
|
id: String,
|
|
}
|
|
|
|
pub fn get(mut state: State) -> Box<HandlerFuture> {
|
|
Box::new({
|
|
let config = Config::take_from(&mut state);
|
|
let Params { id } = Params::take_from(&mut state);
|
|
|
|
let mut path = config.data_directory;
|
|
path.push(id);
|
|
|
|
match Paste::from_file(path) {
|
|
Ok(paste) => {
|
|
let res = create_response(&state, StatusCode::OK, mime::TEXT_PLAIN, paste.text);
|
|
|
|
future::ok((state, res))
|
|
}
|
|
Err(e) => {
|
|
let io_error = std::io::Error::new(std::io::ErrorKind::Other, e.description());
|
|
future::err((state, io_error.into_handler_error()))
|
|
}
|
|
}
|
|
})
|
|
}
|