2016-03-28 09:34:09 +00:00
|
|
|
mod responder;
|
|
|
|
mod redirect;
|
2016-04-11 09:12:45 +00:00
|
|
|
mod with_status;
|
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-10-09 03:53:04 +00:00
|
|
|
mod failure;
|
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;
|
|
|
|
pub use self::redirect::Redirect;
|
2016-04-11 09:12:45 +00:00
|
|
|
pub use self::with_status::StatusResponse;
|
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-10-09 03:53:04 +00:00
|
|
|
pub use self::failure::Failure;
|
2016-10-08 06:20:49 +00:00
|
|
|
pub use outcome::Outcome;
|
2016-03-28 09:34:09 +00:00
|
|
|
|
2016-10-08 06:20:49 +00:00
|
|
|
use std::fmt;
|
|
|
|
use request::Data;
|
|
|
|
use http::hyper::{StatusCode, FreshHyperResponse};
|
|
|
|
use term_painter::Color::*;
|
|
|
|
use term_painter::ToStyle;
|
2016-04-11 10:57:23 +00:00
|
|
|
|
2016-10-08 06:20:49 +00:00
|
|
|
pub type ResponseOutcome<'a> = Outcome<(StatusCode, FreshHyperResponse<'a>)>;
|
|
|
|
|
|
|
|
pub enum Response<'a> {
|
|
|
|
Forward(Data),
|
|
|
|
Complete(Box<Responder + 'a>)
|
|
|
|
}
|
2016-03-28 09:34:09 +00:00
|
|
|
|
|
|
|
impl<'a> Response<'a> {
|
2016-10-08 06:20:49 +00:00
|
|
|
#[inline(always)]
|
2016-10-09 03:53:04 +00:00
|
|
|
pub fn complete<T: Responder + 'a>(body: T) -> Response<'a> {
|
2016-10-08 06:20:49 +00:00
|
|
|
Response::Complete(Box::new(body))
|
2016-04-11 09:12:45 +00:00
|
|
|
}
|
|
|
|
|
2016-10-08 06:20:49 +00:00
|
|
|
#[inline(always)]
|
|
|
|
pub fn forward(data: Data) -> Response<'static> {
|
|
|
|
Response::Forward(data)
|
2016-04-11 10:57:23 +00:00
|
|
|
}
|
|
|
|
|
2016-10-09 03:53:04 +00:00
|
|
|
#[inline(always)]
|
|
|
|
pub fn failed(code: StatusCode) -> Response<'static> {
|
|
|
|
Response::complete(Failure::new(code))
|
|
|
|
}
|
|
|
|
|
2016-10-08 06:20:49 +00:00
|
|
|
#[inline(always)]
|
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);
|
2016-10-09 03:53:04 +00:00
|
|
|
Response::complete(StatusResponse::new(status_code, body))
|
2016-03-28 09:34:09 +00:00
|
|
|
}
|
2016-10-06 07:16:15 +00:00
|
|
|
|
2016-10-08 06:20:49 +00:00
|
|
|
#[doc(hidden)]
|
|
|
|
#[inline(always)]
|
|
|
|
pub fn responder(self) -> Option<Box<Responder + 'a>> {
|
|
|
|
match self {
|
|
|
|
Response::Complete(responder) => Some(responder),
|
|
|
|
_ => None
|
|
|
|
}
|
2016-03-28 09:34:09 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-10-08 06:20:49 +00:00
|
|
|
impl<'a> fmt::Display for Response<'a> {
|
|
|
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
|
|
|
match *self {
|
|
|
|
Response::Complete(..) => write!(f, "{}", Green.paint("Complete")),
|
|
|
|
Response::Forward(..) => write!(f, "{}", Yellow.paint("Forwarding")),
|
|
|
|
}
|
2016-03-28 09:34:09 +00:00
|
|
|
}
|
|
|
|
}
|