1
0
mirror of https://github.com/actix/actix-extras.git synced 2024-12-01 02:44:37 +01:00

rename HttpResponse

This commit is contained in:
Nikolay Kim 2018-10-05 11:04:59 -07:00
parent d53f3d7187
commit 8c2244dd88
16 changed files with 266 additions and 287 deletions

View File

@ -1,4 +1,4 @@
# Actix http [![Build Status](https://travis-ci.org/fafhrd91/actix-http.svg?branch=master)](https://travis-ci.org/fafhrd91/actix-http) [![Build status](https://ci.appveyor.com/api/projects/status/kkdb4yce7qhm5w85/branch/master?svg=true)](https://ci.appveyor.com/project/fafhrd91/actix-web-hdy9d/branch/master) [![codecov](https://codecov.io/gh/actix/actix-web/branch/master/graph/badge.svg)](https://codecov.io/gh/actix/actix-web) [![crates.io](https://meritbadge.herokuapp.com/actix-web)](https://crates.io/crates/actix-web) [![Join the chat at https://gitter.im/actix/actix](https://badges.gitter.im/actix/actix.svg)](https://gitter.im/actix/actix?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
# Actix http [![Build Status](https://travis-ci.org/fafhrd91/actix-http.svg?branch=master)](https://travis-ci.org/fafhrd91/actix-http) [![Build status](https://ci.appveyor.com/api/projects/status/kkdb4yce7qhm5w85/branch/master?svg=true)](https://ci.appveyor.com/project/fafhrd91/actix-web-hdy9d/branch/master) [![codecov](https://codecov.io/gh/fafhrd91/actix-http/branch/master/graph/badge.svg)](https://codecov.io/gh/fafhrd91/actix-http) [![crates.io](https://meritbadge.herokuapp.com/actix-web)](https://crates.io/crates/actix-web) [![Join the chat at https://gitter.im/actix/actix](https://badges.gitter.im/actix/actix.svg)](https://gitter.im/actix/actix?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
Actix http

View File

@ -21,8 +21,7 @@ pub use url::ParseError as UrlParseError;
// re-exports
pub use cookie::ParseError as CookieParseError;
// use httprequest::HttpRequest;
use httpresponse::{HttpResponse, HttpResponseParts};
use response::{Response, ResponseParts};
/// A specialized [`Result`](https://doc.rust-lang.org/std/result/enum.Result.html)
/// for actix web operations
@ -124,13 +123,13 @@ impl<T: ResponseError> InternalResponseErrorAsFail for T {
}
}
/// Error that can be converted to `HttpResponse`
/// Error that can be converted to `Response`
pub trait ResponseError: Fail + InternalResponseErrorAsFail {
/// Create response for error
///
/// Internal server error is generated by default.
fn error_response(&self) -> HttpResponse {
HttpResponse::new(StatusCode::INTERNAL_SERVER_ERROR)
fn error_response(&self) -> Response {
Response::new(StatusCode::INTERNAL_SERVER_ERROR)
}
}
@ -155,10 +154,10 @@ impl fmt::Debug for Error {
}
}
/// Convert `Error` to a `HttpResponse` instance
impl From<Error> for HttpResponse {
/// Convert `Error` to a `Response` instance
impl From<Error> for Response {
fn from(err: Error) -> Self {
HttpResponse::from_error(err)
Response::from_error(err)
}
}
@ -202,15 +201,15 @@ impl ResponseError for UrlParseError {}
/// Return `BAD_REQUEST` for `de::value::Error`
impl ResponseError for DeError {
fn error_response(&self) -> HttpResponse {
HttpResponse::new(StatusCode::BAD_REQUEST)
fn error_response(&self) -> Response {
Response::new(StatusCode::BAD_REQUEST)
}
}
/// Return `BAD_REQUEST` for `Utf8Error`
impl ResponseError for Utf8Error {
fn error_response(&self) -> HttpResponse {
HttpResponse::new(StatusCode::BAD_REQUEST)
fn error_response(&self) -> Response {
Response::new(StatusCode::BAD_REQUEST)
}
}
@ -220,26 +219,26 @@ impl ResponseError for HttpError {}
/// Return `InternalServerError` for `io::Error`
impl ResponseError for io::Error {
fn error_response(&self) -> HttpResponse {
fn error_response(&self) -> Response {
match self.kind() {
io::ErrorKind::NotFound => HttpResponse::new(StatusCode::NOT_FOUND),
io::ErrorKind::PermissionDenied => HttpResponse::new(StatusCode::FORBIDDEN),
_ => HttpResponse::new(StatusCode::INTERNAL_SERVER_ERROR),
io::ErrorKind::NotFound => Response::new(StatusCode::NOT_FOUND),
io::ErrorKind::PermissionDenied => Response::new(StatusCode::FORBIDDEN),
_ => Response::new(StatusCode::INTERNAL_SERVER_ERROR),
}
}
}
/// `BadRequest` for `InvalidHeaderValue`
impl ResponseError for header::InvalidHeaderValue {
fn error_response(&self) -> HttpResponse {
HttpResponse::new(StatusCode::BAD_REQUEST)
fn error_response(&self) -> Response {
Response::new(StatusCode::BAD_REQUEST)
}
}
/// `BadRequest` for `InvalidHeaderValue`
impl ResponseError for header::InvalidHeaderValueBytes {
fn error_response(&self) -> HttpResponse {
HttpResponse::new(StatusCode::BAD_REQUEST)
fn error_response(&self) -> Response {
Response::new(StatusCode::BAD_REQUEST)
}
}
@ -288,8 +287,8 @@ pub enum ParseError {
/// Return `BadRequest` for `ParseError`
impl ResponseError for ParseError {
fn error_response(&self) -> HttpResponse {
HttpResponse::new(StatusCode::BAD_REQUEST)
fn error_response(&self) -> Response {
Response::new(StatusCode::BAD_REQUEST)
}
}
@ -362,18 +361,18 @@ impl From<IoError> for PayloadError {
/// - `Overflow` returns `PayloadTooLarge`
/// - Other errors returns `BadRequest`
impl ResponseError for PayloadError {
fn error_response(&self) -> HttpResponse {
fn error_response(&self) -> Response {
match *self {
PayloadError::Overflow => HttpResponse::new(StatusCode::PAYLOAD_TOO_LARGE),
_ => HttpResponse::new(StatusCode::BAD_REQUEST),
PayloadError::Overflow => Response::new(StatusCode::PAYLOAD_TOO_LARGE),
_ => Response::new(StatusCode::BAD_REQUEST),
}
}
}
/// Return `BadRequest` for `cookie::ParseError`
impl ResponseError for cookie::ParseError {
fn error_response(&self) -> HttpResponse {
HttpResponse::new(StatusCode::BAD_REQUEST)
fn error_response(&self) -> Response {
Response::new(StatusCode::BAD_REQUEST)
}
}
@ -443,8 +442,8 @@ pub enum ContentTypeError {
/// Return `BadRequest` for `ContentTypeError`
impl ResponseError for ContentTypeError {
fn error_response(&self) -> HttpResponse {
HttpResponse::new(StatusCode::BAD_REQUEST)
fn error_response(&self) -> Response {
Response::new(StatusCode::BAD_REQUEST)
}
}
@ -475,15 +474,11 @@ pub enum UrlencodedError {
/// Return `BadRequest` for `UrlencodedError`
impl ResponseError for UrlencodedError {
fn error_response(&self) -> HttpResponse {
fn error_response(&self) -> Response {
match *self {
UrlencodedError::Overflow => {
HttpResponse::new(StatusCode::PAYLOAD_TOO_LARGE)
}
UrlencodedError::UnknownLength => {
HttpResponse::new(StatusCode::LENGTH_REQUIRED)
}
_ => HttpResponse::new(StatusCode::BAD_REQUEST),
UrlencodedError::Overflow => Response::new(StatusCode::PAYLOAD_TOO_LARGE),
UrlencodedError::UnknownLength => Response::new(StatusCode::LENGTH_REQUIRED),
_ => Response::new(StatusCode::BAD_REQUEST),
}
}
}
@ -513,12 +508,10 @@ pub enum JsonPayloadError {
/// Return `BadRequest` for `UrlencodedError`
impl ResponseError for JsonPayloadError {
fn error_response(&self) -> HttpResponse {
fn error_response(&self) -> Response {
match *self {
JsonPayloadError::Overflow => {
HttpResponse::new(StatusCode::PAYLOAD_TOO_LARGE)
}
_ => HttpResponse::new(StatusCode::BAD_REQUEST),
JsonPayloadError::Overflow => Response::new(StatusCode::PAYLOAD_TOO_LARGE),
_ => Response::new(StatusCode::BAD_REQUEST),
}
}
}
@ -606,7 +599,7 @@ pub struct InternalError<T> {
enum InternalErrorType {
Status(StatusCode),
Response(Box<Mutex<Option<HttpResponseParts>>>),
Response(Box<Mutex<Option<ResponseParts>>>),
}
impl<T> InternalError<T> {
@ -619,8 +612,8 @@ impl<T> InternalError<T> {
}
}
/// Create `InternalError` with predefined `HttpResponse`.
pub fn from_response(cause: T, response: HttpResponse) -> Self {
/// Create `InternalError` with predefined `Response`.
pub fn from_response(cause: T, response: Response) -> Self {
let resp = response.into_parts();
InternalError {
cause,
@ -661,14 +654,14 @@ impl<T> ResponseError for InternalError<T>
where
T: Send + Sync + fmt::Debug + fmt::Display + 'static,
{
fn error_response(&self) -> HttpResponse {
fn error_response(&self) -> Response {
match self.status {
InternalErrorType::Status(st) => HttpResponse::new(st),
InternalErrorType::Status(st) => Response::new(st),
InternalErrorType::Response(ref resp) => {
if let Some(resp) = resp.lock().unwrap().take() {
HttpResponse::from_parts(resp)
Response::from_parts(resp)
} else {
HttpResponse::new(StatusCode::INTERNAL_SERVER_ERROR)
Response::new(StatusCode::INTERNAL_SERVER_ERROR)
}
}
}
@ -838,14 +831,14 @@ mod tests {
#[test]
fn test_into_response() {
let resp: HttpResponse = ParseError::Incomplete.error_response();
let resp: Response = ParseError::Incomplete.error_response();
assert_eq!(resp.status(), StatusCode::BAD_REQUEST);
let resp: HttpResponse = CookieParseError::EmptyName.error_response();
let resp: Response = CookieParseError::EmptyName.error_response();
assert_eq!(resp.status(), StatusCode::BAD_REQUEST);
let err: HttpError = StatusCode::from_u16(10000).err().unwrap().into();
let resp: HttpResponse = err.error_response();
let resp: Response = err.error_response();
assert_eq!(resp.status(), StatusCode::INTERNAL_SERVER_ERROR);
}
@ -883,7 +876,7 @@ mod tests {
fn test_error_http_response() {
let orig = io::Error::new(io::ErrorKind::Other, "other");
let e = Error::from(orig);
let resp: HttpResponse = e.into();
let resp: Response = e.into();
assert_eq!(resp.status(), StatusCode::INTERNAL_SERVER_ERROR);
}
@ -944,8 +937,8 @@ mod tests {
#[test]
fn test_internal_error() {
let err =
InternalError::from_response(ParseError::Method, HttpResponse::Ok().into());
let resp: HttpResponse = err.error_response();
InternalError::from_response(ParseError::Method, Response::Ok().into());
let resp: Response = err.error_response();
assert_eq!(resp.status(), StatusCode::OK);
}
@ -977,49 +970,49 @@ mod tests {
#[test]
fn test_error_helpers() {
let r: HttpResponse = ErrorBadRequest("err").into();
let r: Response = ErrorBadRequest("err").into();
assert_eq!(r.status(), StatusCode::BAD_REQUEST);
let r: HttpResponse = ErrorUnauthorized("err").into();
let r: Response = ErrorUnauthorized("err").into();
assert_eq!(r.status(), StatusCode::UNAUTHORIZED);
let r: HttpResponse = ErrorForbidden("err").into();
let r: Response = ErrorForbidden("err").into();
assert_eq!(r.status(), StatusCode::FORBIDDEN);
let r: HttpResponse = ErrorNotFound("err").into();
let r: Response = ErrorNotFound("err").into();
assert_eq!(r.status(), StatusCode::NOT_FOUND);
let r: HttpResponse = ErrorMethodNotAllowed("err").into();
let r: Response = ErrorMethodNotAllowed("err").into();
assert_eq!(r.status(), StatusCode::METHOD_NOT_ALLOWED);
let r: HttpResponse = ErrorRequestTimeout("err").into();
let r: Response = ErrorRequestTimeout("err").into();
assert_eq!(r.status(), StatusCode::REQUEST_TIMEOUT);
let r: HttpResponse = ErrorConflict("err").into();
let r: Response = ErrorConflict("err").into();
assert_eq!(r.status(), StatusCode::CONFLICT);
let r: HttpResponse = ErrorGone("err").into();
let r: Response = ErrorGone("err").into();
assert_eq!(r.status(), StatusCode::GONE);
let r: HttpResponse = ErrorPreconditionFailed("err").into();
let r: Response = ErrorPreconditionFailed("err").into();
assert_eq!(r.status(), StatusCode::PRECONDITION_FAILED);
let r: HttpResponse = ErrorExpectationFailed("err").into();
let r: Response = ErrorExpectationFailed("err").into();
assert_eq!(r.status(), StatusCode::EXPECTATION_FAILED);
let r: HttpResponse = ErrorInternalServerError("err").into();
let r: Response = ErrorInternalServerError("err").into();
assert_eq!(r.status(), StatusCode::INTERNAL_SERVER_ERROR);
let r: HttpResponse = ErrorNotImplemented("err").into();
let r: Response = ErrorNotImplemented("err").into();
assert_eq!(r.status(), StatusCode::NOT_IMPLEMENTED);
let r: HttpResponse = ErrorBadGateway("err").into();
let r: Response = ErrorBadGateway("err").into();
assert_eq!(r.status(), StatusCode::BAD_GATEWAY);
let r: HttpResponse = ErrorServiceUnavailable("err").into();
let r: Response = ErrorServiceUnavailable("err").into();
assert_eq!(r.status(), StatusCode::SERVICE_UNAVAILABLE);
let r: HttpResponse = ErrorGatewayTimeout("err").into();
let r: Response = ErrorGatewayTimeout("err").into();
assert_eq!(r.status(), StatusCode::GATEWAY_TIMEOUT);
}
}

View File

@ -12,8 +12,8 @@ use error::ParseError;
use helpers;
use http::header::{HeaderValue, CONNECTION, CONTENT_LENGTH, DATE, TRANSFER_ENCODING};
use http::{Method, Version};
use httpresponse::HttpResponse;
use request::RequestPool;
use response::Response;
bitflags! {
struct Flags: u8 {
@ -29,7 +29,7 @@ const AVERAGE_HEADER_SIZE: usize = 30;
/// Http response
pub enum OutMessage {
/// Http response message
Response(HttpResponse),
Response(Response),
/// Payload chunk
Payload(Bytes),
}
@ -87,7 +87,7 @@ impl Codec {
}
fn encode_response(
&mut self, mut msg: HttpResponse, buffer: &mut BytesMut,
&mut self, mut msg: Response, buffer: &mut BytesMut,
) -> io::Result<()> {
// prepare transfer encoding
self.te

View File

@ -628,7 +628,7 @@ mod tests {
// let buf = Buffer::new("GET /test HTTP/1\r\n\r\n");
// let readbuf = BytesMut::new();
// let mut h1 = Dispatcher::new(buf, |req| ok(HttpResponse::Ok().finish()));
// let mut h1 = Dispatcher::new(buf, |req| ok(Response::Ok().finish()));
// assert!(h1.poll_io().is_ok());
// assert!(h1.poll_io().is_ok());
// assert!(h1.flags.contains(Flags::READ_DISCONNECTED));

View File

@ -17,8 +17,8 @@ use body::Body;
use config::ServiceConfig;
use error::DispatchError;
use framed::Framed;
use httpresponse::HttpResponse;
use request::Request;
use response::Response;
use super::codec::{Codec, InMessage, OutMessage};
@ -77,7 +77,7 @@ impl<S: Service> State<S> {
impl<T, S> Dispatcher<T, S>
where
T: AsyncRead + AsyncWrite,
S: Service<Request = Request, Response = HttpResponse>,
S: Service<Request = Request, Response = Response>,
S::Error: Debug + Display,
{
/// Create http/1 dispatcher.
@ -415,7 +415,7 @@ where
.insert(Flags::STARTED | Flags::READ_DISCONNECTED);
self.state =
State::SendResponse(Some(OutMessage::Response(
HttpResponse::RequestTimeout().finish(),
Response::RequestTimeout().finish(),
)));
} else {
trace!("Keep-alive timeout, close connection");
@ -452,7 +452,7 @@ where
impl<T, S> Future for Dispatcher<T, S>
where
T: AsyncRead + AsyncWrite,
S: Service<Request = Request, Response = HttpResponse>,
S: Service<Request = Request, Response = Response>,
S::Error: Debug + Display,
{
type Item = ();

View File

@ -11,8 +11,8 @@ use http::{StatusCode, Version};
use body::{Binary, Body};
use header::ContentEncoding;
use http::Method;
use httpresponse::HttpResponse;
use request::Request;
use response::Response;
#[derive(Debug)]
pub(crate) enum ResponseLength {
@ -41,7 +41,7 @@ impl Default for ResponseEncoder {
}
impl ResponseEncoder {
pub fn update(&mut self, resp: &mut HttpResponse, head: bool, version: Version) {
pub fn update(&mut self, resp: &mut Response, head: bool, version: Version) {
self.head = head;
let version = resp.version().unwrap_or_else(|| version);
@ -98,7 +98,7 @@ impl ResponseEncoder {
}
fn streaming_encoding(
&mut self, version: Version, resp: &mut HttpResponse,
&mut self, version: Version, resp: &mut Response,
) -> TransferEncoding {
match resp.chunked() {
Some(true) => {

View File

@ -7,8 +7,8 @@ use tokio_io::{AsyncRead, AsyncWrite};
use config::ServiceConfig;
use error::DispatchError;
use httpresponse::HttpResponse;
use request::Request;
use response::Response;
use super::dispatcher::Dispatcher;
@ -36,7 +36,7 @@ where
impl<T, S> NewService for H1Service<T, S>
where
T: AsyncRead + AsyncWrite,
S: NewService<Request = Request, Response = HttpResponse> + Clone,
S: NewService<Request = Request, Response = Response> + Clone,
S::Service: Clone,
S::Error: Debug + Display,
{
@ -65,7 +65,7 @@ pub struct H1ServiceResponse<T, S: NewService> {
impl<T, S> Future for H1ServiceResponse<T, S>
where
T: AsyncRead + AsyncWrite,
S: NewService<Request = Request, Response = HttpResponse>,
S: NewService<Request = Request, Response = Response>,
S::Service: Clone,
S::Error: Debug + Display,
{
@ -90,7 +90,7 @@ pub struct H1ServiceHandler<T, S> {
impl<T, S> H1ServiceHandler<T, S>
where
S: Service<Request = Request, Response = HttpResponse> + Clone,
S: Service<Request = Request, Response = Response> + Clone,
S::Error: Debug + Display,
{
fn new(cfg: ServiceConfig, srv: S) -> H1ServiceHandler<T, S> {
@ -105,7 +105,7 @@ where
impl<T, S> Service for H1ServiceHandler<T, S>
where
T: AsyncRead + AsyncWrite,
S: Service<Request = Request, Response = HttpResponse> + Clone,
S: Service<Request = Request, Response = Response> + Clone,
S::Error: Debug + Display,
{
type Request = T;

View File

@ -1,18 +1,18 @@
//! Basic http responses
#![allow(non_upper_case_globals)]
use http::StatusCode;
use httpresponse::{HttpResponse, HttpResponseBuilder};
use response::{Response, ResponseBuilder};
macro_rules! STATIC_RESP {
($name:ident, $status:expr) => {
#[allow(non_snake_case, missing_docs)]
pub fn $name() -> HttpResponseBuilder {
HttpResponse::build($status)
pub fn $name() -> ResponseBuilder {
Response::build($status)
}
};
}
impl HttpResponse {
impl Response {
STATIC_RESP!(Ok, StatusCode::OK);
STATIC_RESP!(Created, StatusCode::CREATED);
STATIC_RESP!(Accepted, StatusCode::ACCEPTED);
@ -74,11 +74,11 @@ impl HttpResponse {
mod tests {
use body::Body;
use http::StatusCode;
use httpresponse::HttpResponse;
use response::Response;
#[test]
fn test_build() {
let resp = HttpResponse::Ok().body(Body::Empty);
let resp = Response::Ok().body(Body::Empty);
assert_eq!(resp.status(), StatusCode::OK);
}
}

View File

@ -112,18 +112,18 @@ pub trait HttpMessage: Sized {
/// # extern crate futures;
/// # #[macro_use] extern crate serde_derive;
/// use actix_web::{
/// AsyncResponder, FutureResponse, HttpMessage, HttpRequest, HttpResponse,
/// AsyncResponder, FutureResponse, HttpMessage, HttpRequest, Response,
/// };
/// use bytes::Bytes;
/// use futures::future::Future;
///
/// fn index(mut req: HttpRequest) -> FutureResponse<HttpResponse> {
/// fn index(mut req: HttpRequest) -> FutureResponse<Response> {
/// req.body() // <- get Body future
/// .limit(1024) // <- change max size of the body to a 1kb
/// .from_err()
/// .and_then(|bytes: Bytes| { // <- complete body
/// println!("==== BODY ==== {:?}", bytes);
/// Ok(HttpResponse::Ok().into())
/// Ok(Response::Ok().into())
/// }).responder()
/// }
/// # fn main() {}
@ -148,15 +148,15 @@ pub trait HttpMessage: Sized {
/// # extern crate futures;
/// # use futures::Future;
/// # use std::collections::HashMap;
/// use actix_web::{FutureResponse, HttpMessage, HttpRequest, HttpResponse};
/// use actix_web::{FutureResponse, HttpMessage, HttpRequest, Response};
///
/// fn index(mut req: HttpRequest) -> FutureResponse<HttpResponse> {
/// fn index(mut req: HttpRequest) -> FutureResponse<Response> {
/// Box::new(
/// req.urlencoded::<HashMap<String, String>>() // <- get UrlEncoded future
/// .from_err()
/// .and_then(|params| { // <- url encoded parameters
/// println!("==== BODY ==== {:?}", params);
/// Ok(HttpResponse::Ok().into())
/// Ok(Response::Ok().into())
/// }),
/// )
/// }
@ -188,12 +188,12 @@ pub trait HttpMessage: Sized {
/// name: String,
/// }
///
/// fn index(mut req: HttpRequest) -> Box<Future<Item = HttpResponse, Error = Error>> {
/// fn index(mut req: HttpRequest) -> Box<Future<Item = Response, Error = Error>> {
/// req.json() // <- get JsonBody future
/// .from_err()
/// .and_then(|val: MyObj| { // <- deserialized value
/// println!("==== BODY ==== {:?}", val);
/// Ok(HttpResponse::Ok().into())
/// Ok(Response::Ok().into())
/// }).responder()
/// }
/// # fn main() {}

View File

@ -123,7 +123,7 @@ where
/// # extern crate actix_web;
/// # extern crate futures;
/// # #[macro_use] extern crate serde_derive;
/// use actix_web::{AsyncResponder, Error, HttpMessage, HttpRequest, HttpResponse};
/// use actix_web::{AsyncResponder, Error, HttpMessage, HttpRequest, Response};
/// use futures::future::Future;
///
/// #[derive(Deserialize, Debug)]
@ -131,12 +131,12 @@ where
/// name: String,
/// }
///
/// fn index(mut req: HttpRequest) -> Box<Future<Item = HttpResponse, Error = Error>> {
/// fn index(mut req: HttpRequest) -> Box<Future<Item = Response, Error = Error>> {
/// req.json() // <- get JsonBody future
/// .from_err()
/// .and_then(|val: MyObj| { // <- deserialized value
/// println!("==== BODY ==== {:?}", val);
/// Ok(HttpResponse::Ok().into())
/// Ok(Response::Ok().into())
/// }).responder()
/// }
/// # fn main() {}

View File

@ -41,8 +41,8 @@
//! represents an HTTP server instance and is used to instantiate and
//! configure servers.
//!
//! * [HttpRequest](struct.HttpRequest.html) and
//! [HttpResponse](struct.HttpResponse.html): These structs
//! * [Request](struct.Request.html) and
//! [Response](struct.Response.html): These structs
//! represent HTTP requests and responses and expose various methods
//! for inspecting, creating and otherwise utilizing them.
//!
@ -129,10 +129,10 @@ mod extensions;
mod header;
mod httpcodes;
mod httpmessage;
mod httpresponse;
mod json;
mod payload;
mod request;
mod response;
mod uri;
#[doc(hidden)]
@ -147,9 +147,9 @@ pub use body::{Binary, Body};
pub use error::{Error, ResponseError, Result};
pub use extensions::Extensions;
pub use httpmessage::HttpMessage;
pub use httpresponse::HttpResponse;
pub use json::Json;
pub use request::Request;
pub use response::Response;
pub use self::config::{KeepAlive, ServiceConfig, ServiceConfigBuilder};
@ -166,9 +166,9 @@ pub mod dev {
pub use body::BodyStream;
pub use httpmessage::{MessageBody, Readlines, UrlEncoded};
pub use httpresponse::HttpResponseBuilder;
pub use json::JsonBody;
pub use payload::{Payload, PayloadBuffer};
pub use response::ResponseBuilder;
}
pub mod http {
@ -187,5 +187,5 @@ pub mod http {
pub use header::*;
}
pub use header::ContentEncoding;
pub use httpresponse::ConnectionType;
pub use response::ConnectionType;
}

View File

@ -27,7 +27,7 @@ pub(crate) enum PayloadStatus {
/// `.readany()` method. Payload stream is not thread safe. Payload does not
/// notify current task when new data is available.
///
/// Payload stream can be used as `HttpResponse` body stream.
/// Payload stream can be used as `Response` body stream.
#[derive(Debug)]
pub struct Payload {
inner: Rc<RefCell<Inner>>,

View File

@ -31,54 +31,54 @@ pub enum ConnectionType {
}
/// An HTTP Response
pub struct HttpResponse(Box<InnerHttpResponse>, &'static HttpResponsePool);
pub struct Response(Box<InnerResponse>, &'static ResponsePool);
impl HttpResponse {
impl Response {
#[inline]
fn get_ref(&self) -> &InnerHttpResponse {
fn get_ref(&self) -> &InnerResponse {
self.0.as_ref()
}
#[inline]
fn get_mut(&mut self) -> &mut InnerHttpResponse {
fn get_mut(&mut self) -> &mut InnerResponse {
self.0.as_mut()
}
/// Create http response builder with specific status.
#[inline]
pub fn build(status: StatusCode) -> HttpResponseBuilder {
HttpResponsePool::get(status)
pub fn build(status: StatusCode) -> ResponseBuilder {
ResponsePool::get(status)
}
/// Create http response builder
#[inline]
pub fn build_from<T: Into<HttpResponseBuilder>>(source: T) -> HttpResponseBuilder {
pub fn build_from<T: Into<ResponseBuilder>>(source: T) -> ResponseBuilder {
source.into()
}
/// Constructs a response
#[inline]
pub fn new(status: StatusCode) -> HttpResponse {
HttpResponsePool::with_body(status, Body::Empty)
pub fn new(status: StatusCode) -> Response {
ResponsePool::with_body(status, Body::Empty)
}
/// Constructs a response with body
#[inline]
pub fn with_body<B: Into<Body>>(status: StatusCode, body: B) -> HttpResponse {
HttpResponsePool::with_body(status, body.into())
pub fn with_body<B: Into<Body>>(status: StatusCode, body: B) -> Response {
ResponsePool::with_body(status, body.into())
}
/// Constructs an error response
#[inline]
pub fn from_error(error: Error) -> HttpResponse {
pub fn from_error(error: Error) -> Response {
let mut resp = error.as_response_error().error_response();
resp.get_mut().error = Some(error);
resp
}
/// Convert `HttpResponse` to a `HttpResponseBuilder`
/// Convert `Response` to a `ResponseBuilder`
#[inline]
pub fn into_builder(self) -> HttpResponseBuilder {
pub fn into_builder(self) -> ResponseBuilder {
// If this response has cookies, load them into a jar
let mut jar: Option<CookieJar> = None;
for c in self.cookies() {
@ -91,7 +91,7 @@ impl HttpResponse {
}
}
HttpResponseBuilder {
ResponseBuilder {
pool: self.1,
response: Some(self.0),
err: None,
@ -282,23 +282,23 @@ impl HttpResponse {
self.1.release(self.0);
}
pub(crate) fn into_parts(self) -> HttpResponseParts {
pub(crate) fn into_parts(self) -> ResponseParts {
self.0.into_parts()
}
pub(crate) fn from_parts(parts: HttpResponseParts) -> HttpResponse {
HttpResponse(
Box::new(InnerHttpResponse::from_parts(parts)),
HttpResponsePool::get_pool(),
pub(crate) fn from_parts(parts: ResponseParts) -> Response {
Response(
Box::new(InnerResponse::from_parts(parts)),
ResponsePool::get_pool(),
)
}
}
impl fmt::Debug for HttpResponse {
impl fmt::Debug for Response {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let res = writeln!(
f,
"\nHttpResponse {:?} {}{}",
"\nResponse {:?} {}{}",
self.get_ref().version,
self.get_ref().status,
self.get_ref().reason.unwrap_or("")
@ -332,16 +332,16 @@ impl<'a> Iterator for CookieIter<'a> {
/// An HTTP response builder
///
/// This type can be used to construct an instance of `HttpResponse` through a
/// This type can be used to construct an instance of `Response` through a
/// builder-like pattern.
pub struct HttpResponseBuilder {
pool: &'static HttpResponsePool,
response: Option<Box<InnerHttpResponse>>,
pub struct ResponseBuilder {
pool: &'static ResponsePool,
response: Option<Box<InnerResponse>>,
err: Option<HttpError>,
cookies: Option<CookieJar>,
}
impl HttpResponseBuilder {
impl ResponseBuilder {
/// Set HTTP status code of this response.
#[inline]
pub fn status(&mut self, status: StatusCode) -> &mut Self {
@ -366,10 +366,10 @@ impl HttpResponseBuilder {
///
/// ```rust,ignore
/// # extern crate actix_web;
/// use actix_web::{http, HttpRequest, HttpResponse, Result};
/// use actix_web::{http, Request, Response, Result};
///
/// fn index(req: HttpRequest) -> Result<HttpResponse> {
/// Ok(HttpResponse::Ok()
/// fn index(req: HttpRequest) -> Result<Response> {
/// Ok(Response::Ok()
/// .set(http::header::IfModifiedSince(
/// "Sun, 07 Nov 1994 08:48:37 GMT".parse()?,
/// ))
@ -394,10 +394,10 @@ impl HttpResponseBuilder {
///
/// ```rust,ignore
/// # extern crate actix_web;
/// use actix_web::{http, HttpRequest, HttpResponse};
/// use actix_web::{http, Request, Response};
///
/// fn index(req: HttpRequest) -> HttpResponse {
/// HttpResponse::Ok()
/// fn index(req: HttpRequest) -> Response {
/// Response::Ok()
/// .header("X-TEST", "value")
/// .header(http::header::CONTENT_TYPE, "application/json")
/// .finish()
@ -516,10 +516,10 @@ impl HttpResponseBuilder {
///
/// ```rust,ignore
/// # extern crate actix_web;
/// use actix_web::{http, HttpRequest, HttpResponse, Result};
/// use actix_web::{http, HttpRequest, Response, Result};
///
/// fn index(req: HttpRequest) -> HttpResponse {
/// HttpResponse::Ok()
/// fn index(req: HttpRequest) -> Response {
/// Response::Ok()
/// .cookie(
/// http::Cookie::build("name", "value")
/// .domain("www.rust-lang.org")
@ -546,10 +546,10 @@ impl HttpResponseBuilder {
///
/// ```rust,ignore
/// # extern crate actix_web;
/// use actix_web::{http, HttpRequest, HttpResponse, Result};
/// use actix_web::{http, HttpRequest, Response, Result};
///
/// fn index(req: &HttpRequest) -> HttpResponse {
/// let mut builder = HttpResponse::Ok();
/// fn index(req: &HttpRequest) -> Response {
/// let mut builder = Response::Ok();
///
/// if let Some(ref cookie) = req.cookie("name") {
/// builder.del_cookie(cookie);
@ -575,7 +575,7 @@ impl HttpResponseBuilder {
/// true.
pub fn if_true<F>(&mut self, value: bool, f: F) -> &mut Self
where
F: FnOnce(&mut HttpResponseBuilder),
F: FnOnce(&mut ResponseBuilder),
{
if value {
f(self);
@ -587,7 +587,7 @@ impl HttpResponseBuilder {
/// Some.
pub fn if_some<T, F>(&mut self, value: Option<T>, f: F) -> &mut Self
where
F: FnOnce(T, &mut HttpResponseBuilder),
F: FnOnce(T, &mut ResponseBuilder),
{
if let Some(val) = value {
f(val, self);
@ -609,10 +609,10 @@ impl HttpResponseBuilder {
self
}
/// Set a body and generate `HttpResponse`.
/// Set a body and generate `Response`.
///
/// `HttpResponseBuilder` can not be used after this call.
pub fn body<B: Into<Body>>(&mut self, body: B) -> HttpResponse {
/// `ResponseBuilder` can not be used after this call.
pub fn body<B: Into<Body>>(&mut self, body: B) -> Response {
if let Some(e) = self.err.take() {
return Error::from(e).into();
}
@ -626,14 +626,14 @@ impl HttpResponseBuilder {
}
}
response.body = body.into();
HttpResponse(response, self.pool)
Response(response, self.pool)
}
#[inline]
/// Set a streaming body and generate `HttpResponse`.
/// Set a streaming body and generate `Response`.
///
/// `HttpResponseBuilder` can not be used after this call.
pub fn streaming<S, E>(&mut self, stream: S) -> HttpResponse
/// `ResponseBuilder` can not be used after this call.
pub fn streaming<S, E>(&mut self, stream: S) -> Response
where
S: Stream<Item = Bytes, Error = E> + 'static,
E: Into<Error>,
@ -641,17 +641,17 @@ impl HttpResponseBuilder {
self.body(Body::Streaming(Box::new(stream.map_err(|e| e.into()))))
}
/// Set a json body and generate `HttpResponse`
/// Set a json body and generate `Response`
///
/// `HttpResponseBuilder` can not be used after this call.
pub fn json<T: Serialize>(&mut self, value: T) -> HttpResponse {
/// `ResponseBuilder` can not be used after this call.
pub fn json<T: Serialize>(&mut self, value: T) -> Response {
self.json2(&value)
}
/// Set a json body and generate `HttpResponse`
/// Set a json body and generate `Response`
///
/// `HttpResponseBuilder` can not be used after this call.
pub fn json2<T: Serialize>(&mut self, value: &T) -> HttpResponse {
/// `ResponseBuilder` can not be used after this call.
pub fn json2<T: Serialize>(&mut self, value: &T) -> Response {
match serde_json::to_string(value) {
Ok(body) => {
let contains = if let Some(parts) = parts(&mut self.response, &self.err)
@ -671,16 +671,16 @@ impl HttpResponseBuilder {
}
#[inline]
/// Set an empty body and generate `HttpResponse`
/// Set an empty body and generate `Response`
///
/// `HttpResponseBuilder` can not be used after this call.
pub fn finish(&mut self) -> HttpResponse {
/// `ResponseBuilder` can not be used after this call.
pub fn finish(&mut self) -> Response {
self.body(Body::Empty)
}
/// This method construct new `HttpResponseBuilder`
pub fn take(&mut self) -> HttpResponseBuilder {
HttpResponseBuilder {
/// This method construct new `ResponseBuilder`
pub fn take(&mut self) -> ResponseBuilder {
ResponseBuilder {
pool: self.pool,
response: self.response.take(),
err: self.err.take(),
@ -692,8 +692,8 @@ impl HttpResponseBuilder {
#[inline]
#[cfg_attr(feature = "cargo-clippy", allow(clippy::borrowed_box))]
fn parts<'a>(
parts: &'a mut Option<Box<InnerHttpResponse>>, err: &Option<HttpError>,
) -> Option<&'a mut Box<InnerHttpResponse>> {
parts: &'a mut Option<Box<InnerResponse>>, err: &Option<HttpError>,
) -> Option<&'a mut Box<InnerResponse>> {
if err.is_some() {
return None;
}
@ -701,7 +701,7 @@ fn parts<'a>(
}
/// Helper converters
impl<I: Into<HttpResponse>, E: Into<Error>> From<Result<I, E>> for HttpResponse {
impl<I: Into<Response>, E: Into<Error>> From<Result<I, E>> for Response {
fn from(res: Result<I, E>) -> Self {
match res {
Ok(val) => val.into(),
@ -710,62 +710,62 @@ impl<I: Into<HttpResponse>, E: Into<Error>> From<Result<I, E>> for HttpResponse
}
}
impl From<HttpResponseBuilder> for HttpResponse {
fn from(mut builder: HttpResponseBuilder) -> Self {
impl From<ResponseBuilder> for Response {
fn from(mut builder: ResponseBuilder) -> Self {
builder.finish()
}
}
impl From<&'static str> for HttpResponse {
impl From<&'static str> for Response {
fn from(val: &'static str) -> Self {
HttpResponse::Ok()
Response::Ok()
.content_type("text/plain; charset=utf-8")
.body(val)
}
}
impl From<&'static [u8]> for HttpResponse {
impl From<&'static [u8]> for Response {
fn from(val: &'static [u8]) -> Self {
HttpResponse::Ok()
Response::Ok()
.content_type("application/octet-stream")
.body(val)
}
}
impl From<String> for HttpResponse {
impl From<String> for Response {
fn from(val: String) -> Self {
HttpResponse::Ok()
Response::Ok()
.content_type("text/plain; charset=utf-8")
.body(val)
}
}
impl<'a> From<&'a String> for HttpResponse {
impl<'a> From<&'a String> for Response {
fn from(val: &'a String) -> Self {
HttpResponse::build(StatusCode::OK)
Response::build(StatusCode::OK)
.content_type("text/plain; charset=utf-8")
.body(val)
}
}
impl From<Bytes> for HttpResponse {
impl From<Bytes> for Response {
fn from(val: Bytes) -> Self {
HttpResponse::Ok()
Response::Ok()
.content_type("application/octet-stream")
.body(val)
}
}
impl From<BytesMut> for HttpResponse {
impl From<BytesMut> for Response {
fn from(val: BytesMut) -> Self {
HttpResponse::Ok()
Response::Ok()
.content_type("application/octet-stream")
.body(val)
}
}
#[derive(Debug)]
struct InnerHttpResponse {
struct InnerResponse {
version: Option<Version>,
headers: HeaderMap,
status: StatusCode,
@ -779,7 +779,7 @@ struct InnerHttpResponse {
error: Option<Error>,
}
pub(crate) struct HttpResponseParts {
pub(crate) struct ResponseParts {
version: Option<Version>,
headers: HeaderMap,
status: StatusCode,
@ -790,10 +790,10 @@ pub(crate) struct HttpResponseParts {
error: Option<Error>,
}
impl InnerHttpResponse {
impl InnerResponse {
#[inline]
fn new(status: StatusCode, body: Body) -> InnerHttpResponse {
InnerHttpResponse {
fn new(status: StatusCode, body: Body) -> InnerResponse {
InnerResponse {
status,
body,
version: None,
@ -809,7 +809,7 @@ impl InnerHttpResponse {
}
/// This is for failure, we can not have Send + Sync on Streaming and Actor response
fn into_parts(mut self) -> HttpResponseParts {
fn into_parts(mut self) -> ResponseParts {
let body = match mem::replace(&mut self.body, Body::Empty) {
Body::Empty => None,
Body::Binary(mut bin) => Some(bin.take()),
@ -819,7 +819,7 @@ impl InnerHttpResponse {
}
};
HttpResponseParts {
ResponseParts {
body,
version: self.version,
headers: self.headers,
@ -831,14 +831,14 @@ impl InnerHttpResponse {
}
}
fn from_parts(parts: HttpResponseParts) -> InnerHttpResponse {
fn from_parts(parts: ResponseParts) -> InnerResponse {
let body = if let Some(ref body) = parts.body {
Body::Binary(body.clone().into())
} else {
Body::Empty
};
InnerHttpResponse {
InnerResponse {
body,
status: parts.status,
version: parts.version,
@ -855,35 +855,35 @@ impl InnerHttpResponse {
}
/// Internal use only!
pub(crate) struct HttpResponsePool(RefCell<VecDeque<Box<InnerHttpResponse>>>);
pub(crate) struct ResponsePool(RefCell<VecDeque<Box<InnerResponse>>>);
thread_local!(static POOL: &'static HttpResponsePool = HttpResponsePool::pool());
thread_local!(static POOL: &'static ResponsePool = ResponsePool::pool());
impl HttpResponsePool {
fn pool() -> &'static HttpResponsePool {
let pool = HttpResponsePool(RefCell::new(VecDeque::with_capacity(128)));
impl ResponsePool {
fn pool() -> &'static ResponsePool {
let pool = ResponsePool(RefCell::new(VecDeque::with_capacity(128)));
Box::leak(Box::new(pool))
}
pub fn get_pool() -> &'static HttpResponsePool {
pub fn get_pool() -> &'static ResponsePool {
POOL.with(|p| *p)
}
#[inline]
pub fn get_builder(
pool: &'static HttpResponsePool, status: StatusCode,
) -> HttpResponseBuilder {
pool: &'static ResponsePool, status: StatusCode,
) -> ResponseBuilder {
if let Some(mut msg) = pool.0.borrow_mut().pop_front() {
msg.status = status;
HttpResponseBuilder {
ResponseBuilder {
pool,
response: Some(msg),
err: None,
cookies: None,
}
} else {
let msg = Box::new(InnerHttpResponse::new(status, Body::Empty));
HttpResponseBuilder {
let msg = Box::new(InnerResponse::new(status, Body::Empty));
ResponseBuilder {
pool,
response: Some(msg),
err: None,
@ -894,30 +894,30 @@ impl HttpResponsePool {
#[inline]
pub fn get_response(
pool: &'static HttpResponsePool, status: StatusCode, body: Body,
) -> HttpResponse {
pool: &'static ResponsePool, status: StatusCode, body: Body,
) -> Response {
if let Some(mut msg) = pool.0.borrow_mut().pop_front() {
msg.status = status;
msg.body = body;
HttpResponse(msg, pool)
Response(msg, pool)
} else {
let msg = Box::new(InnerHttpResponse::new(status, body));
HttpResponse(msg, pool)
let msg = Box::new(InnerResponse::new(status, body));
Response(msg, pool)
}
}
#[inline]
fn get(status: StatusCode) -> HttpResponseBuilder {
POOL.with(|pool| HttpResponsePool::get_builder(pool, status))
fn get(status: StatusCode) -> ResponseBuilder {
POOL.with(|pool| ResponsePool::get_builder(pool, status))
}
#[inline]
fn with_body(status: StatusCode, body: Body) -> HttpResponse {
POOL.with(|pool| HttpResponsePool::get_response(pool, status, body))
fn with_body(status: StatusCode, body: Body) -> Response {
POOL.with(|pool| ResponsePool::get_response(pool, status, body))
}
#[inline]
fn release(&self, mut inner: Box<InnerHttpResponse>) {
fn release(&self, mut inner: Box<InnerResponse>) {
let mut p = self.0.borrow_mut();
if p.len() < 128 {
inner.headers.clear();
@ -946,12 +946,12 @@ mod tests {
#[test]
fn test_debug() {
let resp = HttpResponse::Ok()
let resp = Response::Ok()
.header(COOKIE, HeaderValue::from_static("cookie1=value1; "))
.header(COOKIE, HeaderValue::from_static("cookie2=value2; "))
.finish();
let dbg = format!("{:?}", resp);
assert!(dbg.contains("HttpResponse"));
assert!(dbg.contains("Response"));
}
// #[test]
@ -962,7 +962,7 @@ mod tests {
// .finish();
// let cookies = req.cookies().unwrap();
// let resp = HttpResponse::Ok()
// let resp = Response::Ok()
// .cookie(
// http::Cookie::build("name", "value")
// .domain("www.rust-lang.org")
@ -989,7 +989,7 @@ mod tests {
#[test]
fn test_update_response_cookies() {
let mut r = HttpResponse::Ok()
let mut r = Response::Ok()
.cookie(http::Cookie::new("original", "val100"))
.finish();
@ -1012,7 +1012,7 @@ mod tests {
#[test]
fn test_basic_builder() {
let resp = HttpResponse::Ok()
let resp = Response::Ok()
.header("X-TEST", "value")
.version(Version::HTTP_10)
.finish();
@ -1022,19 +1022,19 @@ mod tests {
#[test]
fn test_upgrade() {
let resp = HttpResponse::build(StatusCode::OK).upgrade().finish();
let resp = Response::build(StatusCode::OK).upgrade().finish();
assert!(resp.upgrade())
}
#[test]
fn test_force_close() {
let resp = HttpResponse::build(StatusCode::OK).force_close().finish();
let resp = Response::build(StatusCode::OK).force_close().finish();
assert!(!resp.keep_alive().unwrap())
}
#[test]
fn test_content_type() {
let resp = HttpResponse::build(StatusCode::OK)
let resp = Response::build(StatusCode::OK)
.content_type("text/plain")
.body(Body::Empty);
assert_eq!(resp.headers().get(CONTENT_TYPE).unwrap(), "text/plain")
@ -1042,18 +1042,18 @@ mod tests {
#[test]
fn test_content_encoding() {
let resp = HttpResponse::build(StatusCode::OK).finish();
let resp = Response::build(StatusCode::OK).finish();
assert_eq!(resp.content_encoding(), None);
#[cfg(feature = "brotli")]
{
let resp = HttpResponse::build(StatusCode::OK)
let resp = Response::build(StatusCode::OK)
.content_encoding(ContentEncoding::Br)
.finish();
assert_eq!(resp.content_encoding(), Some(ContentEncoding::Br));
}
let resp = HttpResponse::build(StatusCode::OK)
let resp = Response::build(StatusCode::OK)
.content_encoding(ContentEncoding::Gzip)
.finish();
assert_eq!(resp.content_encoding(), Some(ContentEncoding::Gzip));
@ -1061,7 +1061,7 @@ mod tests {
#[test]
fn test_json() {
let resp = HttpResponse::build(StatusCode::OK).json(vec!["v1", "v2", "v3"]);
let resp = Response::build(StatusCode::OK).json(vec!["v1", "v2", "v3"]);
let ct = resp.headers().get(CONTENT_TYPE).unwrap();
assert_eq!(ct, HeaderValue::from_static("application/json"));
assert_eq!(
@ -1072,7 +1072,7 @@ mod tests {
#[test]
fn test_json_ct() {
let resp = HttpResponse::build(StatusCode::OK)
let resp = Response::build(StatusCode::OK)
.header(CONTENT_TYPE, "text/json")
.json(vec!["v1", "v2", "v3"]);
let ct = resp.headers().get(CONTENT_TYPE).unwrap();
@ -1085,7 +1085,7 @@ mod tests {
#[test]
fn test_json2() {
let resp = HttpResponse::build(StatusCode::OK).json2(&vec!["v1", "v2", "v3"]);
let resp = Response::build(StatusCode::OK).json2(&vec!["v1", "v2", "v3"]);
let ct = resp.headers().get(CONTENT_TYPE).unwrap();
assert_eq!(ct, HeaderValue::from_static("application/json"));
assert_eq!(
@ -1096,7 +1096,7 @@ mod tests {
#[test]
fn test_json2_ct() {
let resp = HttpResponse::build(StatusCode::OK)
let resp = Response::build(StatusCode::OK)
.header(CONTENT_TYPE, "text/json")
.json2(&vec!["v1", "v2", "v3"]);
let ct = resp.headers().get(CONTENT_TYPE).unwrap();
@ -1120,7 +1120,7 @@ mod tests {
fn test_into_response() {
let req = TestRequest::default().finish();
let resp: HttpResponse = "test".into();
let resp: Response = "test".into();
assert_eq!(resp.status(), StatusCode::OK);
assert_eq!(
resp.headers().get(CONTENT_TYPE).unwrap(),
@ -1129,7 +1129,7 @@ mod tests {
assert_eq!(resp.status(), StatusCode::OK);
assert_eq!(resp.body().bin_ref(), &Binary::from("test"));
let resp: HttpResponse = b"test".as_ref().into();
let resp: Response = b"test".as_ref().into();
assert_eq!(resp.status(), StatusCode::OK);
assert_eq!(
resp.headers().get(CONTENT_TYPE).unwrap(),
@ -1138,7 +1138,7 @@ mod tests {
assert_eq!(resp.status(), StatusCode::OK);
assert_eq!(resp.body().bin_ref(), &Binary::from(b"test".as_ref()));
let resp: HttpResponse = "test".to_owned().into();
let resp: Response = "test".to_owned().into();
assert_eq!(resp.status(), StatusCode::OK);
assert_eq!(
resp.headers().get(CONTENT_TYPE).unwrap(),
@ -1147,7 +1147,7 @@ mod tests {
assert_eq!(resp.status(), StatusCode::OK);
assert_eq!(resp.body().bin_ref(), &Binary::from("test".to_owned()));
let resp: HttpResponse = (&"test".to_owned()).into();
let resp: Response = (&"test".to_owned()).into();
assert_eq!(resp.status(), StatusCode::OK);
assert_eq!(
resp.headers().get(CONTENT_TYPE).unwrap(),
@ -1157,7 +1157,7 @@ mod tests {
assert_eq!(resp.body().bin_ref(), &Binary::from(&"test".to_owned()));
let b = Bytes::from_static(b"test");
let resp: HttpResponse = b.into();
let resp: Response = b.into();
assert_eq!(resp.status(), StatusCode::OK);
assert_eq!(
resp.headers().get(CONTENT_TYPE).unwrap(),
@ -1170,7 +1170,7 @@ mod tests {
);
let b = Bytes::from_static(b"test");
let resp: HttpResponse = b.into();
let resp: Response = b.into();
assert_eq!(resp.status(), StatusCode::OK);
assert_eq!(
resp.headers().get(CONTENT_TYPE).unwrap(),
@ -1180,7 +1180,7 @@ mod tests {
assert_eq!(resp.body().bin_ref(), &Binary::from(BytesMut::from("test")));
let b = BytesMut::from("test");
let resp: HttpResponse = b.into();
let resp: Response = b.into();
assert_eq!(resp.status(), StatusCode::OK);
assert_eq!(
resp.headers().get(CONTENT_TYPE).unwrap(),
@ -1192,7 +1192,7 @@ mod tests {
#[test]
fn test_into_builder() {
let mut resp: HttpResponse = "test".into();
let mut resp: Response = "test".into();
assert_eq!(resp.status(), StatusCode::OK);
resp.add_cookie(&http::Cookie::new("cookie1", "val100"))

View File

@ -25,12 +25,12 @@ use uri::Url as InnerUrl;
///
/// # Examples
///
/// ```rust
/// ```rust,ignore
/// # extern crate actix_web;
/// # use actix_web::*;
/// #
/// # fn my_handler(req: &HttpRequest) -> HttpResponse {
/// # HttpResponse::Ok().into()
/// # fn my_handler(req: &HttpRequest) -> Response {
/// # Response::Ok().into()
/// # }
/// #
/// # fn main() {
@ -248,20 +248,20 @@ impl Drop for TestServer {
// }
// }
/// Test `HttpRequest` builder
/// Test `Request` builder
///
/// ```rust
/// ```rust,ignore
/// # extern crate http;
/// # extern crate actix_web;
/// # use http::{header, StatusCode};
/// # use actix_web::*;
/// use actix_web::test::TestRequest;
///
/// fn index(req: &HttpRequest) -> HttpResponse {
/// fn index(req: &HttpRequest) -> Response {
/// if let Some(hdr) = req.headers().get(header::CONTENT_TYPE) {
/// HttpResponse::Ok().into()
/// Response::Ok().into()
/// } else {
/// HttpResponse::BadRequest().into()
/// Response::BadRequest().into()
/// }
/// }
///
@ -403,7 +403,7 @@ impl TestRequest {
// /// This method generates `HttpRequest` instance and runs handler
// /// with generated request.
// pub fn run<H: Handler<S>>(self, h: &H) -> Result<HttpResponse, Error> {
// pub fn run<H: Handler<S>>(self, h: &H) -> Result<Response, Error> {
// let req = self.finish();
// let resp = h.handle(&req);
@ -424,7 +424,7 @@ impl TestRequest {
// /// with generated request.
// ///
// /// This method panics is handler returns actor.
// pub fn run_async<H, R, F, E>(self, h: H) -> Result<HttpResponse, E>
// pub fn run_async<H, R, F, E>(self, h: H) -> Result<Response, E>
// where
// H: Fn(HttpRequest<S>) -> F + 'static,
// F: Future<Item = R, Error = E> + 'static,
@ -467,7 +467,7 @@ impl TestRequest {
// }
// /// This method generates `HttpRequest` instance and executes handler
// pub fn execute<F, R>(self, f: F) -> Result<HttpResponse, Error>
// pub fn execute<F, R>(self, f: F) -> Result<Response, Error>
// where
// F: FnOnce(&HttpRequest<S>) -> R,
// R: Responder + 'static,

View File

@ -10,9 +10,9 @@ use http::{header, Method, StatusCode};
use body::Binary;
use error::{PayloadError, ResponseError};
use httpresponse::{ConnectionType, HttpResponse, HttpResponseBuilder};
use payload::PayloadBuffer;
use request::Request;
use response::{ConnectionType, Response, ResponseBuilder};
mod frame;
mod mask;
@ -85,26 +85,26 @@ pub enum HandshakeError {
}
impl ResponseError for HandshakeError {
fn error_response(&self) -> HttpResponse {
fn error_response(&self) -> Response {
match *self {
HandshakeError::GetMethodRequired => HttpResponse::MethodNotAllowed()
HandshakeError::GetMethodRequired => Response::MethodNotAllowed()
.header(header::ALLOW, "GET")
.finish(),
HandshakeError::NoWebsocketUpgrade => HttpResponse::BadRequest()
HandshakeError::NoWebsocketUpgrade => Response::BadRequest()
.reason("No WebSocket UPGRADE header found")
.finish(),
HandshakeError::NoConnectionUpgrade => HttpResponse::BadRequest()
HandshakeError::NoConnectionUpgrade => Response::BadRequest()
.reason("No CONNECTION upgrade")
.finish(),
HandshakeError::NoVersionHeader => HttpResponse::BadRequest()
HandshakeError::NoVersionHeader => Response::BadRequest()
.reason("Websocket version header is required")
.finish(),
HandshakeError::UnsupportedVersion => HttpResponse::BadRequest()
HandshakeError::UnsupportedVersion => Response::BadRequest()
.reason("Unsupported version")
.finish(),
HandshakeError::BadWebsocketKey => HttpResponse::BadRequest()
.reason("Handshake error")
.finish(),
HandshakeError::BadWebsocketKey => {
Response::BadRequest().reason("Handshake error").finish()
}
}
}
}
@ -126,13 +126,13 @@ pub enum Message {
/// Prepare `WebSocket` handshake response.
///
/// This function returns handshake `HttpResponse`, ready to send to peer.
/// This function returns handshake `Response`, ready to send to peer.
/// It does not perform any IO.
///
// /// `protocols` is a sequence of known protocols. On successful handshake,
// /// the returned response headers contain the first protocol in this list
// /// which the server also knows.
pub fn handshake(req: &Request) -> Result<HttpResponseBuilder, HandshakeError> {
pub fn handshake(req: &Request) -> Result<ResponseBuilder, HandshakeError> {
// WebSocket accepts only GET
if *req.method() != Method::GET {
return Err(HandshakeError::GetMethodRequired);
@ -181,7 +181,7 @@ pub fn handshake(req: &Request) -> Result<HttpResponseBuilder, HandshakeError> {
proto::hash_key(key.as_ref())
};
Ok(HttpResponse::build(StatusCode::SWITCHING_PROTOCOLS)
Ok(Response::build(StatusCode::SWITCHING_PROTOCOLS)
.connection_type(ConnectionType::Upgrade)
.header(header::UPGRADE, "websocket")
.header(header::TRANSFER_ENCODING, "chunked")
@ -280,20 +280,6 @@ where
}
}
/// Common writing methods for a websocket.
pub trait WsWriter {
/// Send a text
fn send_text<T: Into<Binary>>(&mut self, text: T);
/// Send a binary
fn send_binary<B: Into<Binary>>(&mut self, data: B);
/// Send a ping message
fn send_ping(&mut self, message: &str);
/// Send a pong message
fn send_pong(&mut self, message: &str);
/// Close the connection
fn send_close(&mut self, reason: Option<CloseReason>);
}
#[cfg(test)]
mod tests {
use super::*;
@ -399,17 +385,17 @@ mod tests {
#[test]
fn test_wserror_http_response() {
let resp: HttpResponse = HandshakeError::GetMethodRequired.error_response();
let resp: Response = HandshakeError::GetMethodRequired.error_response();
assert_eq!(resp.status(), StatusCode::METHOD_NOT_ALLOWED);
let resp: HttpResponse = HandshakeError::NoWebsocketUpgrade.error_response();
let resp: Response = HandshakeError::NoWebsocketUpgrade.error_response();
assert_eq!(resp.status(), StatusCode::BAD_REQUEST);
let resp: HttpResponse = HandshakeError::NoConnectionUpgrade.error_response();
let resp: Response = HandshakeError::NoConnectionUpgrade.error_response();
assert_eq!(resp.status(), StatusCode::BAD_REQUEST);
let resp: HttpResponse = HandshakeError::NoVersionHeader.error_response();
let resp: Response = HandshakeError::NoVersionHeader.error_response();
assert_eq!(resp.status(), StatusCode::BAD_REQUEST);
let resp: HttpResponse = HandshakeError::UnsupportedVersion.error_response();
let resp: Response = HandshakeError::UnsupportedVersion.error_response();
assert_eq!(resp.status(), StatusCode::BAD_REQUEST);
let resp: HttpResponse = HandshakeError::BadWebsocketKey.error_response();
let resp: Response = HandshakeError::BadWebsocketKey.error_response();
assert_eq!(resp.status(), StatusCode::BAD_REQUEST);
}
}

View File

@ -11,7 +11,7 @@ use actix_net::server::Server;
use actix_web::{client, test};
use futures::future;
use actix_http::{h1, Error, HttpResponse, KeepAlive, ServiceConfig};
use actix_http::{h1, Error, KeepAlive, Response, ServiceConfig};
#[test]
fn test_h1_v2() {
@ -29,7 +29,7 @@ fn test_h1_v2() {
h1::H1Service::new(settings, |req| {
println!("REQ: {:?}", req);
future::ok::<_, Error>(HttpResponse::Ok().finish())
future::ok::<_, Error>(Response::Ok().finish())
})
}).unwrap()
.run();