1
0
mirror of https://github.com/fafhrd91/actix-web synced 2024-11-27 17:52:56 +01:00

re-export ServiceFactory (#2325)

This commit is contained in:
Rob Ede 2021-07-12 16:55:41 +01:00 committed by GitHub
parent 5a14ffeef2
commit 293c52c3ef
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 31 additions and 33 deletions

View File

@ -1,6 +1,10 @@
# Changes # Changes
## Unreleased - 2021-xx-xx ## 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 ## 4.0.0-beta.8 - 2021-06-26

View File

@ -15,7 +15,7 @@ use crate::{
HttpMessage, HttpMessage,
}; };
/// Request /// An HTTP request.
pub struct Request<P = PayloadStream> { pub struct Request<P = PayloadStream> {
pub(crate) payload: Payload<P>, pub(crate) payload: Payload<P>,
pub(crate) head: Message<RequestHead>, pub(crate) head: Message<RequestHead>,

View File

@ -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, //! Most users will not have to interact with the types in this module, but it is useful for those
//! but it is useful as a glob import for those writing middleware, developing libraries, //! writing extractors, middleware and libraries, or interacting with the service API directly.
//! or interacting with the service API directly:
//!
//! ```
//! # #![allow(unused_imports)]
//! use actix_web::dev::*;
//! ```
pub use crate::config::{AppConfig, AppService}; pub use crate::config::{AppConfig, AppService};
#[doc(hidden)] #[doc(hidden)]
@ -24,26 +18,25 @@ pub use actix_http::body::{AnyBody, Body, BodySize, MessageBody, ResponseBody, S
#[cfg(feature = "__compress")] #[cfg(feature = "__compress")]
pub use actix_http::encoding::Decoder as Decompress; 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_http::{Extensions, Payload, PayloadStream, RequestHead, ResponseHead};
pub use actix_router::{Path, ResourceDef, ResourcePath, Url}; pub use actix_router::{Path, ResourceDef, ResourcePath, Url};
pub use actix_server::Server; pub use actix_server::Server;
pub use actix_service::{ 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<String>) -> Vec<String> { use crate::http::header::ContentEncoding;
use actix_http::{Response, ResponseBuilder};
pub(crate) fn insert_leading_slash(mut patterns: Vec<String>) -> Vec<String> {
for path in &mut patterns { for path in &mut patterns {
if !path.is_empty() && !path.starts_with('/') { if !path.is_empty() && !path.starts_with('/') {
path.insert(0, '/'); path.insert(0, '/');
}; };
} }
patterns patterns
} }
use crate::http::header::ContentEncoding;
use actix_http::{Response, ResponseBuilder};
struct Enc(ContentEncoding); struct Enc(ContentEncoding);
/// Helper trait that allows to set specific encoding for response. /// Helper trait that allows to set specific encoding for response.

View File

@ -23,10 +23,10 @@ use crate::{
#[cfg(feature = "cookies")] #[cfg(feature = "cookies")]
struct Cookies(Vec<Cookie<'static>>); struct Cookies(Vec<Cookie<'static>>);
/// An incoming request.
#[derive(Clone)] #[derive(Clone)]
/// An HTTP Request
pub struct HttpRequest { pub struct HttpRequest {
/// # Panics /// # Invariant
/// `Rc<HttpRequestInner>` is used exclusively and NO `Weak<HttpRequestInner>` /// `Rc<HttpRequestInner>` is used exclusively and NO `Weak<HttpRequestInner>`
/// is allowed anywhere in the code. Weak pointer is purposely ignored when /// 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. /// doing `Rc`'s ref counter check. Expect panics if this invariant is violated.

View File

@ -15,7 +15,7 @@ use futures_util::future::join_all;
use crate::{ use crate::{
data::Data, data::Data,
dev::{insert_slash, AppService, HttpServiceFactory, ResourceDef}, dev::{insert_leading_slash, AppService, HttpServiceFactory, ResourceDef},
guard::Guard, guard::Guard,
handler::Handler, handler::Handler,
responder::Responder, responder::Responder,
@ -391,7 +391,7 @@ where
}; };
let mut rdef = if config.is_root() || !self.rdef.is_empty() { 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 { } else {
ResourceDef::new(self.rdef.clone()) ResourceDef::new(self.rdef.clone())
}; };

View File

@ -24,20 +24,14 @@ use {
use crate::{error::Error, HttpResponseBuilder}; use crate::{error::Error, HttpResponseBuilder};
/// An HTTP Response /// An outgoing response.
pub struct HttpResponse<B = AnyBody> { pub struct HttpResponse<B = AnyBody> {
res: Response<B>, res: Response<B>,
pub(crate) error: Option<Error>, pub(crate) error: Option<Error>,
} }
impl HttpResponse<AnyBody> { impl HttpResponse<AnyBody> {
/// Create HTTP response builder with specific status. /// Constructs a response.
#[inline]
pub fn build(status: StatusCode) -> HttpResponseBuilder {
HttpResponseBuilder::new(status)
}
/// Create a response.
#[inline] #[inline]
pub fn new(status: StatusCode) -> Self { pub fn new(status: StatusCode) -> Self {
Self { Self {
@ -46,6 +40,12 @@ impl HttpResponse<AnyBody> {
} }
} }
/// Constructs a response builder with specific HTTP status.
#[inline]
pub fn build(status: StatusCode) -> HttpResponseBuilder {
HttpResponseBuilder::new(status)
}
/// Create an error response. /// Create an error response.
#[inline] #[inline]
pub fn from_error(error: impl Into<Error>) -> Self { pub fn from_error(error: impl Into<Error>) -> Self {

View File

@ -14,7 +14,7 @@ use cookie::{Cookie, ParseError as CookieParseError};
use crate::{ use crate::{
config::{AppConfig, AppService}, config::{AppConfig, AppService},
dev::insert_slash, dev::insert_leading_slash,
guard::Guard, guard::Guard,
info::ConnectionInfo, info::ConnectionInfo,
rmap::ResourceMap, 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 { pub struct ServiceRequest {
req: HttpRequest, req: HttpRequest,
payload: Payload, payload: Payload,
@ -325,6 +325,7 @@ impl fmt::Debug for ServiceRequest {
} }
} }
/// A service level response wrapper.
pub struct ServiceResponse<B = AnyBody> { pub struct ServiceResponse<B = AnyBody> {
request: HttpRequest, request: HttpRequest,
response: HttpResponse<B>, response: HttpResponse<B>,
@ -550,7 +551,7 @@ where
}; };
let mut rdef = if config.is_root() || !self.rdef.is_empty() { 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 { } else {
ResourceDef::new(self.rdef) ResourceDef::new(self.rdef)
}; };