mirror of https://github.com/fafhrd91/actix-web
Merge branch 'master' into scope_work
This commit is contained in:
commit
f82e740776
|
@ -13,7 +13,6 @@
|
||||||
|
|
||||||
#![deny(rust_2018_idioms, nonstandard_style)]
|
#![deny(rust_2018_idioms, nonstandard_style)]
|
||||||
#![warn(future_incompatible, missing_docs, missing_debug_implementations)]
|
#![warn(future_incompatible, missing_docs, missing_debug_implementations)]
|
||||||
#![allow(clippy::uninlined_format_args)]
|
|
||||||
#![doc(html_logo_url = "https://actix.rs/img/logo.png")]
|
#![doc(html_logo_url = "https://actix.rs/img/logo.png")]
|
||||||
#![doc(html_favicon_url = "https://actix.rs/favicon.ico")]
|
#![doc(html_favicon_url = "https://actix.rs/favicon.ico")]
|
||||||
#![cfg_attr(docsrs, feature(doc_auto_cfg))]
|
#![cfg_attr(docsrs, feature(doc_auto_cfg))]
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
|
|
||||||
#![deny(rust_2018_idioms, nonstandard_style)]
|
#![deny(rust_2018_idioms, nonstandard_style)]
|
||||||
#![warn(future_incompatible)]
|
#![warn(future_incompatible)]
|
||||||
#![allow(clippy::uninlined_format_args)]
|
|
||||||
#![doc(html_logo_url = "https://actix.rs/img/logo.png")]
|
#![doc(html_logo_url = "https://actix.rs/img/logo.png")]
|
||||||
#![doc(html_favicon_url = "https://actix.rs/favicon.ico")]
|
#![doc(html_favicon_url = "https://actix.rs/favicon.ico")]
|
||||||
#![cfg_attr(docsrs, feature(doc_auto_cfg))]
|
#![cfg_attr(docsrs, feature(doc_auto_cfg))]
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
- Updated `zstd` dependency to `0.13`.
|
- Updated `zstd` dependency to `0.13`.
|
||||||
|
- Implemented `From<HeaderMap>` for `http::HeaderMap`.
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ authors = [
|
||||||
"Nikolay Kim <fafhrd91@gmail.com>",
|
"Nikolay Kim <fafhrd91@gmail.com>",
|
||||||
"Rob Ede <robjtede@icloud.com>",
|
"Rob Ede <robjtede@icloud.com>",
|
||||||
]
|
]
|
||||||
description = "HTTP primitives for the Actix ecosystem"
|
description = "HTTP types and services for the Actix ecosystem"
|
||||||
keywords = ["actix", "http", "framework", "async", "futures"]
|
keywords = ["actix", "http", "framework", "async", "futures"]
|
||||||
homepage = "https://actix.rs"
|
homepage = "https://actix.rs"
|
||||||
repository = "https://github.com/actix/actix-web"
|
repository = "https://github.com/actix/actix-web"
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
# actix-http
|
# `actix-http`
|
||||||
|
|
||||||
> HTTP primitives for the Actix ecosystem.
|
> HTTP types and services for the Actix ecosystem.
|
||||||
|
|
||||||
|
<!-- prettier-ignore-start -->
|
||||||
|
|
||||||
[](https://crates.io/crates/actix-http)
|
[](https://crates.io/crates/actix-http)
|
||||||
[](https://docs.rs/actix-http/3.4.0)
|
[](https://docs.rs/actix-http/3.4.0)
|
||||||
|
@ -11,12 +13,14 @@
|
||||||
[](https://crates.io/crates/actix-http)
|
[](https://crates.io/crates/actix-http)
|
||||||
[](https://discord.gg/NWpN5mmg3x)
|
[](https://discord.gg/NWpN5mmg3x)
|
||||||
|
|
||||||
|
<!-- prettier-ignore-end -->
|
||||||
|
|
||||||
## Documentation & Resources
|
## Documentation & Resources
|
||||||
|
|
||||||
- [API Documentation](https://docs.rs/actix-http)
|
- [API Documentation](https://docs.rs/actix-http)
|
||||||
- Minimum Supported Rust Version (MSRV): 1.68
|
- Minimum Supported Rust Version (MSRV): 1.68
|
||||||
|
|
||||||
## Example
|
## Examples
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
use std::{env, io};
|
use std::{env, io};
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
#![allow(clippy::uninlined_format_args)]
|
|
||||||
|
|
||||||
use std::convert::Infallible;
|
use std::convert::Infallible;
|
||||||
|
|
||||||
use actix_http::{encoding::Encoder, ContentEncoding, Request, Response, StatusCode};
|
use actix_http::{encoding::Encoder, ContentEncoding, Request, Response, StatusCode};
|
||||||
|
|
|
@ -636,10 +636,17 @@ impl<'a> IntoIterator for &'a HeaderMap {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Convert `http::HeaderMap` to our `HeaderMap`.
|
/// Convert a `http::HeaderMap` to our `HeaderMap`.
|
||||||
impl From<http::HeaderMap> for HeaderMap {
|
impl From<http::HeaderMap> for HeaderMap {
|
||||||
fn from(mut map: http::HeaderMap) -> HeaderMap {
|
fn from(mut map: http::HeaderMap) -> Self {
|
||||||
HeaderMap::from_drain(map.drain())
|
Self::from_drain(map.drain())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Convert our `HeaderMap` to a `http::HeaderMap`.
|
||||||
|
impl From<HeaderMap> for http::HeaderMap {
|
||||||
|
fn from(map: HeaderMap) -> Self {
|
||||||
|
Self::from_iter(map)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
//! HTTP primitives for the Actix ecosystem.
|
//! HTTP types and services for the Actix ecosystem.
|
||||||
//!
|
//!
|
||||||
//! ## Crate Features
|
//! ## Crate Features
|
||||||
|
//!
|
||||||
//! | Feature | Functionality |
|
//! | Feature | Functionality |
|
||||||
//! | ------------------- | ------------------------------------------- |
|
//! | ------------------- | ------------------------------------------- |
|
||||||
//! | `http2` | HTTP/2 support via [h2]. |
|
//! | `http2` | HTTP/2 support via [h2]. |
|
||||||
|
@ -21,8 +22,7 @@
|
||||||
#![allow(
|
#![allow(
|
||||||
clippy::type_complexity,
|
clippy::type_complexity,
|
||||||
clippy::too_many_arguments,
|
clippy::too_many_arguments,
|
||||||
clippy::borrow_interior_mutable_const,
|
clippy::borrow_interior_mutable_const
|
||||||
clippy::uninlined_format_args
|
|
||||||
)]
|
)]
|
||||||
#![doc(html_logo_url = "https://actix.rs/img/logo.png")]
|
#![doc(html_logo_url = "https://actix.rs/img/logo.png")]
|
||||||
#![doc(html_favicon_url = "https://actix.rs/favicon.ico")]
|
#![doc(html_favicon_url = "https://actix.rs/favicon.ico")]
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
#![cfg(feature = "openssl")]
|
#![cfg(feature = "openssl")]
|
||||||
#![allow(clippy::uninlined_format_args)]
|
|
||||||
|
|
||||||
extern crate tls_openssl as openssl;
|
extern crate tls_openssl as openssl;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
#![allow(clippy::uninlined_format_args)]
|
|
||||||
|
|
||||||
use std::{
|
use std::{
|
||||||
cell::Cell,
|
cell::Cell,
|
||||||
convert::Infallible,
|
convert::Infallible,
|
||||||
|
|
|
@ -3,11 +3,11 @@
|
||||||
> The derive macro implementation for actix-multipart-derive.
|
> The derive macro implementation for actix-multipart-derive.
|
||||||
|
|
||||||
[](https://crates.io/crates/actix-multipart-derive)
|
[](https://crates.io/crates/actix-multipart-derive)
|
||||||
[](https://docs.rs/actix-multipart-derive/0.5.0)
|
[](https://docs.rs/actix-multipart-derive/0.6.1)
|
||||||

|

|
||||||

|

|
||||||
<br />
|
<br />
|
||||||
[](https://deps.rs/crate/actix-multipart-derive/0.5.0)
|
[](https://deps.rs/crate/actix-multipart-derive/0.6.1)
|
||||||
[](https://crates.io/crates/actix-multipart-derive)
|
[](https://crates.io/crates/actix-multipart-derive)
|
||||||
[](https://discord.gg/NWpN5mmg3x)
|
[](https://discord.gg/NWpN5mmg3x)
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
#![deny(rust_2018_idioms, nonstandard_style)]
|
#![deny(rust_2018_idioms, nonstandard_style)]
|
||||||
#![warn(future_incompatible)]
|
#![warn(future_incompatible)]
|
||||||
#![allow(clippy::borrow_interior_mutable_const, clippy::uninlined_format_args)]
|
#![allow(clippy::borrow_interior_mutable_const)]
|
||||||
#![doc(html_logo_url = "https://actix.rs/img/logo.png")]
|
#![doc(html_logo_url = "https://actix.rs/img/logo.png")]
|
||||||
#![doc(html_favicon_url = "https://actix.rs/favicon.ico")]
|
#![doc(html_favicon_url = "https://actix.rs/favicon.ico")]
|
||||||
#![cfg_attr(docsrs, feature(doc_auto_cfg))]
|
#![cfg_attr(docsrs, feature(doc_auto_cfg))]
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
# `actix-router`
|
||||||
|
|
||||||
|
[](https://crates.io/crates/actix-router)
|
||||||
|
[](https://docs.rs/actix-router/0.5.1)
|
||||||
|

|
||||||
|

|
||||||
|
<br />
|
||||||
|
[](https://deps.rs/crate/actix-router/0.5.1)
|
||||||
|
[](https://crates.io/crates/actix-router)
|
||||||
|
[](https://discord.gg/NWpN5mmg3x)
|
||||||
|
|
||||||
|
<!-- cargo-rdme start -->
|
||||||
|
|
||||||
|
Resource path matching and router.
|
||||||
|
|
||||||
|
<!-- cargo-rdme end -->
|
|
@ -1,5 +1,3 @@
|
||||||
#![allow(clippy::uninlined_format_args)]
|
|
||||||
|
|
||||||
use std::{borrow::Cow, fmt::Write as _};
|
use std::{borrow::Cow, fmt::Write as _};
|
||||||
|
|
||||||
use criterion::{black_box, criterion_group, criterion_main, Criterion};
|
use criterion::{black_box, criterion_group, criterion_main, Criterion};
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
|
|
||||||
#![deny(rust_2018_idioms, nonstandard_style)]
|
#![deny(rust_2018_idioms, nonstandard_style)]
|
||||||
#![warn(future_incompatible)]
|
#![warn(future_incompatible)]
|
||||||
#![allow(clippy::uninlined_format_args)]
|
|
||||||
#![doc(html_logo_url = "https://actix.rs/img/logo.png")]
|
#![doc(html_logo_url = "https://actix.rs/img/logo.png")]
|
||||||
#![doc(html_favicon_url = "https://actix.rs/favicon.ico")]
|
#![doc(html_favicon_url = "https://actix.rs/favicon.ico")]
|
||||||
#![cfg_attr(docsrs, feature(doc_auto_cfg))]
|
#![cfg_attr(docsrs, feature(doc_auto_cfg))]
|
||||||
|
|
|
@ -193,8 +193,8 @@ const REGEX_FLAGS: &str = "(?s-m)";
|
||||||
/// # Trailing Slashes
|
/// # Trailing Slashes
|
||||||
/// It should be noted that this library takes no steps to normalize intra-path or trailing slashes.
|
/// It should be noted that this library takes no steps to normalize intra-path or trailing slashes.
|
||||||
/// As such, all resource definitions implicitly expect a pre-processing step to normalize paths if
|
/// As such, all resource definitions implicitly expect a pre-processing step to normalize paths if
|
||||||
/// they you wish to accommodate "recoverable" path errors. Below are several examples of
|
/// you wish to accommodate "recoverable" path errors. Below are several examples of resource-path
|
||||||
/// resource-path pairs that would not be compatible.
|
/// pairs that would not be compatible.
|
||||||
///
|
///
|
||||||
/// ## Examples
|
/// ## Examples
|
||||||
/// ```
|
/// ```
|
||||||
|
|
|
@ -97,6 +97,7 @@ impl<T, U> RouterBuilder<T, U> {
|
||||||
ctx: U,
|
ctx: U,
|
||||||
) -> (&mut ResourceDef, &mut T, &mut U) {
|
) -> (&mut ResourceDef, &mut T, &mut U) {
|
||||||
self.routes.push((rdef, val, ctx));
|
self.routes.push((rdef, val, ctx));
|
||||||
|
#[allow(clippy::map_identity)] // map is used to distribute &mut-ness to tuple elements
|
||||||
self.routes
|
self.routes
|
||||||
.last_mut()
|
.last_mut()
|
||||||
.map(|(rdef, val, ctx)| (rdef, val, ctx))
|
.map(|(rdef, val, ctx)| (rdef, val, ctx))
|
||||||
|
@ -186,11 +187,11 @@ mod tests {
|
||||||
assert_eq!(path.get("file").unwrap(), "file");
|
assert_eq!(path.get("file").unwrap(), "file");
|
||||||
assert_eq!(path.get("ext").unwrap(), "gz");
|
assert_eq!(path.get("ext").unwrap(), "gz");
|
||||||
|
|
||||||
let mut path = Path::new("/vtest/ttt/index.html");
|
let mut path = Path::new("/v2/ttt/index.html");
|
||||||
let (h, info) = router.recognize_mut(&mut path).unwrap();
|
let (h, info) = router.recognize_mut(&mut path).unwrap();
|
||||||
assert_eq!(*h, 14);
|
assert_eq!(*h, 14);
|
||||||
assert_eq!(info, ResourceId(4));
|
assert_eq!(info, ResourceId(4));
|
||||||
assert_eq!(path.get("val").unwrap(), "test");
|
assert_eq!(path.get("val").unwrap(), "2");
|
||||||
assert_eq!(path.get("val2").unwrap(), "ttt");
|
assert_eq!(path.get("val2").unwrap(), "ttt");
|
||||||
|
|
||||||
let mut path = Path::new("/v/blah-blah/index.html");
|
let mut path = Path::new("/v/blah-blah/index.html");
|
||||||
|
|
|
@ -57,7 +57,6 @@
|
||||||
|
|
||||||
#![deny(rust_2018_idioms, nonstandard_style)]
|
#![deny(rust_2018_idioms, nonstandard_style)]
|
||||||
#![warn(future_incompatible)]
|
#![warn(future_incompatible)]
|
||||||
#![allow(clippy::uninlined_format_args)]
|
|
||||||
#![doc(html_logo_url = "https://actix.rs/img/logo.png")]
|
#![doc(html_logo_url = "https://actix.rs/img/logo.png")]
|
||||||
#![doc(html_favicon_url = "https://actix.rs/favicon.ico")]
|
#![doc(html_favicon_url = "https://actix.rs/favicon.ico")]
|
||||||
#![cfg_attr(docsrs, feature(doc_auto_cfg))]
|
#![cfg_attr(docsrs, feature(doc_auto_cfg))]
|
||||||
|
|
|
@ -15,7 +15,7 @@ categories = [
|
||||||
]
|
]
|
||||||
homepage = "https://actix.rs"
|
homepage = "https://actix.rs"
|
||||||
repository = "https://github.com/actix/actix-web"
|
repository = "https://github.com/actix/actix-web"
|
||||||
license = "MIT OR Apache-2.0"
|
license.workspace = true
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
rust-version.workspace = true
|
rust-version.workspace = true
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
#![allow(clippy::uninlined_format_args)]
|
|
||||||
|
|
||||||
use actix_web::{web, App, HttpResponse};
|
use actix_web::{web, App, HttpResponse};
|
||||||
use awc::Client;
|
use awc::Client;
|
||||||
use criterion::{criterion_group, criterion_main, Criterion};
|
use criterion::{criterion_group, criterion_main, Criterion};
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
#![allow(clippy::uninlined_format_args)]
|
|
||||||
|
|
||||||
use actix_web::{middleware, rt, web, App, HttpRequest, HttpServer};
|
use actix_web::{middleware, rt, web, App, HttpRequest, HttpServer};
|
||||||
|
|
||||||
async fn index(req: HttpRequest) -> &'static str {
|
async fn index(req: HttpRequest) -> &'static str {
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
#![allow(clippy::uninlined_format_args)]
|
|
||||||
|
|
||||||
use actix_web::{get, web, HttpRequest};
|
use actix_web::{get, web, HttpRequest};
|
||||||
#[cfg(unix)]
|
#[cfg(unix)]
|
||||||
use actix_web::{middleware, App, Error, HttpResponse, HttpServer};
|
use actix_web::{middleware, App, Error, HttpResponse, HttpServer};
|
||||||
|
|
|
@ -69,7 +69,6 @@
|
||||||
|
|
||||||
#![deny(rust_2018_idioms, nonstandard_style)]
|
#![deny(rust_2018_idioms, nonstandard_style)]
|
||||||
#![warn(future_incompatible)]
|
#![warn(future_incompatible)]
|
||||||
#![allow(clippy::uninlined_format_args)]
|
|
||||||
#![doc(html_logo_url = "https://actix.rs/img/logo.png")]
|
#![doc(html_logo_url = "https://actix.rs/img/logo.png")]
|
||||||
#![doc(html_favicon_url = "https://actix.rs/favicon.ico")]
|
#![doc(html_favicon_url = "https://actix.rs/favicon.ico")]
|
||||||
#![cfg_attr(docsrs, feature(doc_auto_cfg))]
|
#![cfg_attr(docsrs, feature(doc_auto_cfg))]
|
||||||
|
|
|
@ -171,7 +171,7 @@ impl Responder for Redirect {
|
||||||
} else {
|
} else {
|
||||||
log::error!(
|
log::error!(
|
||||||
"redirect target location can not be converted to header value: {:?}",
|
"redirect target location can not be converted to header value: {:?}",
|
||||||
self.to
|
self.to,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
#![allow(clippy::uninlined_format_args)]
|
|
||||||
|
|
||||||
#[cfg(feature = "openssl")]
|
#[cfg(feature = "openssl")]
|
||||||
extern crate tls_openssl as openssl;
|
extern crate tls_openssl as openssl;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
#![allow(clippy::uninlined_format_args)]
|
|
||||||
|
|
||||||
use std::error::Error as StdError;
|
use std::error::Error as StdError;
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
|
|
|
@ -105,8 +105,7 @@
|
||||||
#![allow(
|
#![allow(
|
||||||
clippy::type_complexity,
|
clippy::type_complexity,
|
||||||
clippy::borrow_interior_mutable_const,
|
clippy::borrow_interior_mutable_const,
|
||||||
clippy::needless_doctest_main,
|
clippy::needless_doctest_main
|
||||||
clippy::uninlined_format_args
|
|
||||||
)]
|
)]
|
||||||
#![doc(html_logo_url = "https://actix.rs/img/logo.png")]
|
#![doc(html_logo_url = "https://actix.rs/img/logo.png")]
|
||||||
#![doc(html_favicon_url = "https://actix.rs/favicon.ico")]
|
#![doc(html_favicon_url = "https://actix.rs/favicon.ico")]
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
#![allow(clippy::uninlined_format_args)]
|
|
||||||
|
|
||||||
use std::{
|
use std::{
|
||||||
collections::HashMap,
|
collections::HashMap,
|
||||||
convert::Infallible,
|
convert::Infallible,
|
||||||
|
|
|
@ -93,9 +93,12 @@ fi
|
||||||
|
|
||||||
# done; remove backup files
|
# done; remove backup files
|
||||||
rm -f $CARGO_MANIFEST.bak
|
rm -f $CARGO_MANIFEST.bak
|
||||||
rm -f $CHANGELOG_FILE.bak
|
|
||||||
rm -f $README_FILE.bak
|
rm -f $README_FILE.bak
|
||||||
|
|
||||||
|
if [ -n "${CHANGELOG_FILE-}" ]; then
|
||||||
|
rm -f $CHANGELOG_FILE.bak
|
||||||
|
fi
|
||||||
|
|
||||||
echo "manifest, changelog, and readme updated"
|
echo "manifest, changelog, and readme updated"
|
||||||
echo
|
echo
|
||||||
echo "check other references:"
|
echo "check other references:"
|
||||||
|
|
Loading…
Reference in New Issue