Rocket/lib/src/response/mod.rs

69 lines
1.7 KiB
Rust
Raw Normal View History

mod empty;
mod responder;
mod redirect;
mod with_status;
mod flash;
2016-09-12 08:51:02 +00:00
mod named_file;
2016-09-12 09:43:34 +00:00
mod stream;
pub mod data;
pub use self::responder::Responder;
pub use self::empty::Empty;
pub use self::redirect::Redirect;
pub use self::with_status::StatusResponse;
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;
pub use self::data::Content;
pub use outcome::Outcome;
use std::fmt;
use request::Data;
use http::hyper::{StatusCode, FreshHyperResponse};
use term_painter::Color::*;
use term_painter::ToStyle;
pub type ResponseOutcome<'a> = Outcome<(StatusCode, FreshHyperResponse<'a>)>;
pub enum Response<'a> {
Forward(Data),
Complete(Box<Responder + 'a>)
}
impl<'a> Response<'a> {
#[inline(always)]
pub fn new<T: Responder + 'a>(body: T) -> Response<'a> {
Response::Complete(Box::new(body))
}
#[inline(always)]
pub fn forward(data: Data) -> Response<'static> {
Response::Forward(data)
}
#[inline(always)]
pub fn with_raw_status<T: Responder + 'a>(status: u16, body: T) -> Response<'a> {
let status_code = StatusCode::from_u16(status);
Response::new(StatusResponse::new(status_code, body))
}
#[doc(hidden)]
#[inline(always)]
pub fn responder(self) -> Option<Box<Responder + 'a>> {
match self {
Response::Complete(responder) => Some(responder),
_ => None
}
}
}
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")),
}
}
}