diff --git a/CHANGES.md b/CHANGES.md
index d0f2188a..88295ec1 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,6 +1,10 @@
# Changes
## Unreleased - 2021-xx-xx
+### Added
+* Re-export actix-service `ServiceFactory` in `dev` module. [#2325]
+
+[#2325]: https://github.com/actix/actix-web/pull/2325
## 4.0.0-beta.8 - 2021-06-26
diff --git a/actix-http/src/request.rs b/actix-http/src/request.rs
index 09c6dd29..401e9745 100644
--- a/actix-http/src/request.rs
+++ b/actix-http/src/request.rs
@@ -15,7 +15,7 @@ use crate::{
HttpMessage,
};
-/// Request
+/// An HTTP request.
pub struct Request
{
pub(crate) payload: Payload
,
pub(crate) head: Message,
diff --git a/src/dev.rs b/src/dev.rs
index a656604e..b8d95efb 100644
--- a/src/dev.rs
+++ b/src/dev.rs
@@ -1,13 +1,7 @@
-//! Lower level `actix-web` types.
+//! Lower-level types and re-exports.
//!
-//! Most users will not have to interact with the types in this module,
-//! but it is useful as a glob import for those writing middleware, developing libraries,
-//! or interacting with the service API directly:
-//!
-//! ```
-//! # #![allow(unused_imports)]
-//! use actix_web::dev::*;
-//! ```
+//! Most users will not have to interact with the types in this module, but it is useful for those
+//! writing extractors, middleware and libraries, or interacting with the service API directly.
pub use crate::config::{AppConfig, AppService};
#[doc(hidden)]
@@ -24,26 +18,25 @@ pub use actix_http::body::{AnyBody, Body, BodySize, MessageBody, ResponseBody, S
#[cfg(feature = "__compress")]
pub use actix_http::encoding::Decoder as Decompress;
-pub use actix_http::ResponseBuilder as BaseHttpResponseBuilder;
pub use actix_http::{Extensions, Payload, PayloadStream, RequestHead, ResponseHead};
pub use actix_router::{Path, ResourceDef, ResourcePath, Url};
pub use actix_server::Server;
pub use actix_service::{
- always_ready, fn_factory, fn_service, forward_ready, Service, Transform,
+ always_ready, fn_factory, fn_service, forward_ready, Service, ServiceFactory, Transform,
};
-pub(crate) fn insert_slash(mut patterns: Vec) -> Vec {
+use crate::http::header::ContentEncoding;
+use actix_http::{Response, ResponseBuilder};
+
+pub(crate) fn insert_leading_slash(mut patterns: Vec) -> Vec {
for path in &mut patterns {
if !path.is_empty() && !path.starts_with('/') {
path.insert(0, '/');
};
}
+
patterns
}
-
-use crate::http::header::ContentEncoding;
-use actix_http::{Response, ResponseBuilder};
-
struct Enc(ContentEncoding);
/// Helper trait that allows to set specific encoding for response.
diff --git a/src/request.rs b/src/request.rs
index 36d9aba9..4b950e75 100644
--- a/src/request.rs
+++ b/src/request.rs
@@ -23,10 +23,10 @@ use crate::{
#[cfg(feature = "cookies")]
struct Cookies(Vec>);
+/// An incoming request.
#[derive(Clone)]
-/// An HTTP Request
pub struct HttpRequest {
- /// # Panics
+ /// # Invariant
/// `Rc` is used exclusively and NO `Weak`
/// is allowed anywhere in the code. Weak pointer is purposely ignored when
/// doing `Rc`'s ref counter check. Expect panics if this invariant is violated.
diff --git a/src/resource.rs b/src/resource.rs
index 4e609f31..20d1ee17 100644
--- a/src/resource.rs
+++ b/src/resource.rs
@@ -15,7 +15,7 @@ use futures_util::future::join_all;
use crate::{
data::Data,
- dev::{insert_slash, AppService, HttpServiceFactory, ResourceDef},
+ dev::{insert_leading_slash, AppService, HttpServiceFactory, ResourceDef},
guard::Guard,
handler::Handler,
responder::Responder,
@@ -391,7 +391,7 @@ where
};
let mut rdef = if config.is_root() || !self.rdef.is_empty() {
- ResourceDef::new(insert_slash(self.rdef.clone()))
+ ResourceDef::new(insert_leading_slash(self.rdef.clone()))
} else {
ResourceDef::new(self.rdef.clone())
};
diff --git a/src/response/response.rs b/src/response/response.rs
index 9a3bb287..09515c83 100644
--- a/src/response/response.rs
+++ b/src/response/response.rs
@@ -24,20 +24,14 @@ use {
use crate::{error::Error, HttpResponseBuilder};
-/// An HTTP Response
+/// An outgoing response.
pub struct HttpResponse {
res: Response,
pub(crate) error: Option,
}
impl HttpResponse {
- /// Create HTTP response builder with specific status.
- #[inline]
- pub fn build(status: StatusCode) -> HttpResponseBuilder {
- HttpResponseBuilder::new(status)
- }
-
- /// Create a response.
+ /// Constructs a response.
#[inline]
pub fn new(status: StatusCode) -> Self {
Self {
@@ -46,6 +40,12 @@ impl HttpResponse {
}
}
+ /// Constructs a response builder with specific HTTP status.
+ #[inline]
+ pub fn build(status: StatusCode) -> HttpResponseBuilder {
+ HttpResponseBuilder::new(status)
+ }
+
/// Create an error response.
#[inline]
pub fn from_error(error: impl Into) -> Self {
diff --git a/src/service.rs b/src/service.rs
index c1bffac4..47e7e4ac 100644
--- a/src/service.rs
+++ b/src/service.rs
@@ -14,7 +14,7 @@ use cookie::{Cookie, ParseError as CookieParseError};
use crate::{
config::{AppConfig, AppService},
- dev::insert_slash,
+ dev::insert_leading_slash,
guard::Guard,
info::ConnectionInfo,
rmap::ResourceMap,
@@ -59,9 +59,9 @@ where
}
}
-/// An service http request
+/// A service level request wrapper.
///
-/// ServiceRequest allows mutable access to request's internal structures
+/// Allows mutable access to request's internal structures.
pub struct ServiceRequest {
req: HttpRequest,
payload: Payload,
@@ -325,6 +325,7 @@ impl fmt::Debug for ServiceRequest {
}
}
+/// A service level response wrapper.
pub struct ServiceResponse {
request: HttpRequest,
response: HttpResponse,
@@ -550,7 +551,7 @@ where
};
let mut rdef = if config.is_root() || !self.rdef.is_empty() {
- ResourceDef::new(insert_slash(self.rdef))
+ ResourceDef::new(insert_leading_slash(self.rdef))
} else {
ResourceDef::new(self.rdef)
};