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 request::Data;
|
|
|
|
use http::hyper::{StatusCode, FreshHyperResponse};
|
2016-04-11 10:57:23 +00:00
|
|
|
|
2016-10-14 01:39:23 +00:00
|
|
|
pub type ResponseOutcome<'a> = Outcome<(), (), (StatusCode, FreshHyperResponse<'a>)>;
|
2016-10-08 06:20:49 +00:00
|
|
|
|
2016-10-14 01:39:23 +00:00
|
|
|
impl<'a> ResponseOutcome<'a> {
|
|
|
|
#[inline(always)]
|
|
|
|
pub fn of<A, B>(result: Result<A, B>) -> Self {
|
|
|
|
match result {
|
|
|
|
Ok(_) => Outcome::Success(()),
|
|
|
|
Err(_) => Outcome::Failure(())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#[inline(always)]
|
|
|
|
pub fn success() -> ResponseOutcome<'a> {
|
|
|
|
Outcome::Success(())
|
|
|
|
}
|
|
|
|
|
|
|
|
#[inline(always)]
|
|
|
|
pub fn failure() -> ResponseOutcome<'a> {
|
|
|
|
Outcome::Failure(())
|
|
|
|
}
|
|
|
|
|
|
|
|
#[inline(always)]
|
|
|
|
pub fn forward(s: StatusCode, r: FreshHyperResponse<'a>) -> ResponseOutcome<'a> {
|
|
|
|
Outcome::Forward((s, r))
|
|
|
|
}
|
2016-10-08 06:20:49 +00:00
|
|
|
}
|
2016-03-28 09:34:09 +00:00
|
|
|
|
2016-10-14 01:39:23 +00:00
|
|
|
pub type Response<'a> = Outcome<Box<Responder + 'a>, StatusCode, Data>;
|
|
|
|
|
2016-03-28 09:34:09 +00:00
|
|
|
impl<'a> Response<'a> {
|
2016-10-08 06:20:49 +00:00
|
|
|
#[inline(always)]
|
2016-10-14 01:39:23 +00:00
|
|
|
pub fn success<T: Responder + 'a>(responder: T) -> Response<'a> {
|
|
|
|
Outcome::Success(Box::new(responder))
|
2016-04-11 09:12:45 +00:00
|
|
|
}
|
|
|
|
|
2016-10-08 06:20:49 +00:00
|
|
|
#[inline(always)]
|
2016-10-14 01:39:23 +00:00
|
|
|
pub fn failure(code: StatusCode) -> Response<'static> {
|
|
|
|
Outcome::Failure(code)
|
2016-04-11 10:57:23 +00:00
|
|
|
}
|
|
|
|
|
2016-10-09 03:53:04 +00:00
|
|
|
#[inline(always)]
|
2016-10-14 01:39:23 +00:00
|
|
|
pub fn forward(data: Data) -> Response<'static> {
|
|
|
|
Outcome::Forward(data)
|
2016-10-09 03:53:04 +00:00
|
|
|
}
|
|
|
|
|
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-14 01:39:23 +00:00
|
|
|
Response::success(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>> {
|
2016-10-14 01:39:23 +00:00
|
|
|
self.succeeded()
|
2016-03-28 09:34:09 +00:00
|
|
|
}
|
|
|
|
}
|