2016-03-28 09:34:09 +00:00
|
|
|
mod empty;
|
|
|
|
mod responder;
|
|
|
|
mod redirect;
|
2016-04-11 09:12:45 +00:00
|
|
|
mod with_status;
|
2016-04-11 10:57:23 +00:00
|
|
|
mod outcome;
|
2016-09-12 01:57:04 +00:00
|
|
|
mod flash;
|
2016-09-12 08:51:02 +00:00
|
|
|
mod named_file;
|
2016-09-12 09:43:34 +00:00
|
|
|
mod stream;
|
2016-03-28 09:34:09 +00:00
|
|
|
|
2016-09-21 03:02:33 +00:00
|
|
|
pub mod data;
|
|
|
|
|
2016-03-28 09:34:09 +00:00
|
|
|
pub use self::responder::Responder;
|
2016-04-11 10:57:23 +00:00
|
|
|
pub use self::empty::{Empty, Forward};
|
2016-03-28 09:34:09 +00:00
|
|
|
pub use self::redirect::Redirect;
|
2016-04-11 09:12:45 +00:00
|
|
|
pub use self::with_status::StatusResponse;
|
2016-04-11 10:57:23 +00:00
|
|
|
pub use self::outcome::Outcome;
|
2016-09-12 01:57:04 +00:00
|
|
|
pub use self::flash::Flash;
|
2016-09-12 08:51:02 +00:00
|
|
|
pub use self::named_file::NamedFile;
|
2016-09-12 09:43:34 +00:00
|
|
|
pub use self::stream::Stream;
|
2016-09-25 10:06:02 +00:00
|
|
|
pub use self::data::Content;
|
2016-03-28 09:34:09 +00:00
|
|
|
|
|
|
|
use std::ops::{Deref, DerefMut};
|
2016-10-04 00:09:13 +00:00
|
|
|
use http::hyper::StatusCode;
|
2016-04-11 10:57:23 +00:00
|
|
|
|
2016-03-28 09:34:09 +00:00
|
|
|
pub struct Response<'a>(Box<Responder + 'a>);
|
|
|
|
|
|
|
|
impl<'a> Response<'a> {
|
|
|
|
pub fn new<T: Responder + 'a>(body: T) -> Response<'a> {
|
|
|
|
Response(Box::new(body))
|
|
|
|
}
|
|
|
|
|
2016-09-30 22:20:11 +00:00
|
|
|
pub fn with_status<T: Responder + 'a>(status: StatusCode,
|
|
|
|
body: T)
|
|
|
|
-> Response<'a> {
|
2016-04-11 09:12:45 +00:00
|
|
|
Response(Box::new(StatusResponse::new(status, body)))
|
|
|
|
}
|
|
|
|
|
2016-04-11 10:57:23 +00:00
|
|
|
pub fn forward() -> Response<'a> {
|
|
|
|
Response(Box::new(Forward))
|
|
|
|
}
|
|
|
|
|
2016-09-30 22:20:11 +00:00
|
|
|
pub fn with_raw_status<T: Responder + 'a>(status: u16, body: T) -> Response<'a> {
|
2016-04-11 09:12:45 +00:00
|
|
|
let status_code = StatusCode::from_u16(status);
|
|
|
|
Response(Box::new(StatusResponse::new(status_code, body)))
|
|
|
|
}
|
|
|
|
|
2016-03-28 09:34:09 +00:00
|
|
|
pub fn empty() -> Response<'a> {
|
|
|
|
Response(Box::new(Empty::new(StatusCode::Ok)))
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn not_found() -> Response<'a> {
|
|
|
|
Response(Box::new(Empty::new(StatusCode::NotFound)))
|
|
|
|
}
|
|
|
|
|
2016-10-06 07:16:15 +00:00
|
|
|
pub fn server_error(reason: &str) -> Response<'a> {
|
|
|
|
warn_!("internal server error: {}", reason);
|
2016-03-28 09:34:09 +00:00
|
|
|
Response(Box::new(Empty::new(StatusCode::InternalServerError)))
|
|
|
|
}
|
2016-10-06 07:16:15 +00:00
|
|
|
|
|
|
|
pub fn bad_request(reason: &str) -> Response<'a> {
|
|
|
|
warn_!("bad request from user: {}", reason);
|
|
|
|
Response(Box::new(Empty::new(StatusCode::BadRequest)))
|
|
|
|
}
|
2016-03-28 09:34:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
impl<'a> Deref for Response<'a> {
|
|
|
|
type Target = Box<Responder + 'a>;
|
|
|
|
|
|
|
|
fn deref(&self) -> &Self::Target {
|
|
|
|
&self.0
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl<'a> DerefMut for Response<'a> {
|
|
|
|
fn deref_mut(&mut self) -> &mut Box<Responder + 'a> {
|
|
|
|
&mut self.0
|
|
|
|
}
|
|
|
|
}
|