mirror of
https://github.com/actix/actix-web.git
synced 2024-11-24 10:31:07 +00:00
prepare releases: actix-http 3.0.0 and actix-web 4.0.0 (#2663)
This commit is contained in:
parent
d0b5fb18d2
commit
d0c08dbb7d
19 changed files with 613 additions and 36 deletions
|
@ -1,4 +1,4 @@
|
||||||
# Changes
|
# Changelog
|
||||||
|
|
||||||
Changelogs are kept separately for each crate in this repo.
|
Changelogs are kept separately for each crate in this repo.
|
||||||
|
|
||||||
|
|
|
@ -22,10 +22,10 @@ path = "src/lib.rs"
|
||||||
experimental-io-uring = ["actix-web/experimental-io-uring", "tokio-uring"]
|
experimental-io-uring = ["actix-web/experimental-io-uring", "tokio-uring"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
actix-http = "3.0.0-rc.4"
|
actix-http = "3.0.0"
|
||||||
actix-service = "2"
|
actix-service = "2"
|
||||||
actix-utils = "3"
|
actix-utils = "3"
|
||||||
actix-web = { version = "4.0.0-rc.3", default-features = false }
|
actix-web = { version = "4.0.0", default-features = false }
|
||||||
|
|
||||||
askama_escape = "0.10"
|
askama_escape = "0.10"
|
||||||
bitflags = "1"
|
bitflags = "1"
|
||||||
|
@ -44,5 +44,5 @@ tokio-uring = { version = "0.2", optional = true, features = ["bytes"] }
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
actix-rt = "2.2"
|
actix-rt = "2.2"
|
||||||
actix-test = "0.1.0-beta.13"
|
actix-test = "0.1.0-beta.13"
|
||||||
actix-web = "4.0.0-rc.3"
|
actix-web = "4.0.0"
|
||||||
tempfile = "3.2"
|
tempfile = "3.2"
|
||||||
|
|
|
@ -51,5 +51,5 @@ tls-openssl = { version = "0.10.9", package = "openssl", optional = true }
|
||||||
tokio = { version = "1.8.4", features = ["sync"] }
|
tokio = { version = "1.8.4", features = ["sync"] }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
actix-web = { version = "4.0.0-rc.3", default-features = false, features = ["cookies"] }
|
actix-web = { version = "4.0.0", default-features = false, features = ["cookies"] }
|
||||||
actix-http = "3.0.0-rc.4"
|
actix-http = "3.0.0"
|
||||||
|
|
|
@ -1,13 +1,294 @@
|
||||||
# Changes
|
# Changes
|
||||||
|
|
||||||
## Unreleased - 2021-xx-xx
|
## Unreleased - 2021-xx-xx
|
||||||
|
|
||||||
|
|
||||||
|
## 3.0.0 - 2022-02-25
|
||||||
|
### Dependencies
|
||||||
|
- Updated `actix-*` to Tokio v1-based versions. [#1813]
|
||||||
|
- Updated `bytes` to `1.0`. [#1813]
|
||||||
|
- Updated `h2` to `0.3`. [#1813]
|
||||||
|
- Updated `rustls` to `0.20.0`. [#2414]
|
||||||
|
- Updated `language-tags` to `0.3`.
|
||||||
|
- Updated `tokio` to `1`.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Crate Features:
|
||||||
|
- `ws`; disabled by default. [#2618]
|
||||||
|
- `http2`; disabled by default. [#2618]
|
||||||
|
- `compress-brotli`; disabled by default. [#2618]
|
||||||
|
- `compress-gzip`; disabled by default. [#2618]
|
||||||
|
- `compress-zstd`; disabled by default. [#2618]
|
||||||
|
- Functions:
|
||||||
|
- `body::to_bytes` for async collecting message body into Bytes. [#2158]
|
||||||
|
- Traits:
|
||||||
|
- `TryIntoHeaderPair`; allows using typed and untyped headers in the same methods. [#1869]
|
||||||
|
- Types:
|
||||||
|
- `body::BoxBody`; a boxed message body with boxed errors. [#2183]
|
||||||
|
- `body::EitherBody` enum. [#2468]
|
||||||
|
- `body::None` struct. [#2468]
|
||||||
|
- Re-export `http` crate's `Error` type as `error::HttpError`. [#2171]
|
||||||
|
- Variants:
|
||||||
|
- `ContentEncoding::Zstd` along with . [#2244]
|
||||||
|
- `Protocol::Http3` for future compatibility and also mark `#[non_exhaustive]`. [00ba8d55]
|
||||||
|
- Methods:
|
||||||
|
- `ContentEncoding::to_header_value()`. [#2501]
|
||||||
|
- `header::QualityItem::{max, min}()`. [#2486]
|
||||||
|
- `header::QualityItem::zero()` that uses `Quality::ZERO`. [#2501]
|
||||||
|
- `HeaderMap::drain()` as an efficient draining iterator. [#1964]
|
||||||
|
- `HeaderMap::len_keys()` has the behavior of the old `len` method. [#1964]
|
||||||
|
- `MessageBody::boxed` trait method for wrapping boxing types efficiently. [#2520]
|
||||||
|
- `MessageBody::try_into_bytes` trait method, with default implementation, for optimizations on body types that complete in exactly one poll. [#2522]
|
||||||
|
- `Request::conn_data()`. [#2491]
|
||||||
|
- `Request::take_conn_data()`. [#2491]
|
||||||
|
- `Request::take_req_data()`. [#2487]
|
||||||
|
- `Response::{ok, bad_request, not_found, internal_server_error}()`. [#2159]
|
||||||
|
- `Response::into_body()` that consumes response and returns body type. [#2201]
|
||||||
|
- `Response::map_into_boxed_body()`. [#2468]
|
||||||
|
- `ResponseBuilder::append_header()` method which allows using typed and untyped headers. [#1869]
|
||||||
|
- `ResponseBuilder::insert_header()` method which allows using typed and untyped headers. [#1869]
|
||||||
|
- `ResponseHead::set_camel_case_headers()`. [#2587]
|
||||||
|
- `TestRequest::insert_header()` method which allows using typed and untyped headers. [#1869]
|
||||||
|
- Implementations:
|
||||||
|
- Implement `Clone for ws::HandshakeError`. [#2468]
|
||||||
|
- Implement `Clone` for `body::AnyBody<S> where S: Clone`. [#2448]
|
||||||
|
- Implement `Clone` for `RequestHead`. [#2487]
|
||||||
|
- Implement `Clone` for `ResponseHead`. [#2585]
|
||||||
|
- Implement `Copy` for `QualityItem<T> where T: Copy`. [#2501]
|
||||||
|
- Implement `Default` for `ContentEncoding`. [#1912]
|
||||||
|
- Implement `Default` for `HttpServiceBuilder`. [#2611]
|
||||||
|
- Implement `Default` for `KeepAlive`. [#2611]
|
||||||
|
- Implement `Default` for `Response`. [#2201]
|
||||||
|
- Implement `Default` for `ws::Codec`. [#1920]
|
||||||
|
- Implement `Display` for `header::Quality`. [#2486]
|
||||||
|
- Implement `Eq` for `header::ContentEncoding`. [#2501]
|
||||||
|
- Implement `ExactSizeIterator` and `FusedIterator` for all `HeaderMap` iterators. [#2470]
|
||||||
|
- Implement `From<Duration>` for `KeepAlive`. [#2611]
|
||||||
|
- Implement `From<Option<Duration>>` for `KeepAlive`. [#2611]
|
||||||
|
- Implement `From<Vec<u8>>` for `Response<Vec<u8>>`. [#2625]
|
||||||
|
- Implement `FromStr` for `ContentEncoding`. [#1912]
|
||||||
|
- Implement `Header` for `ContentEncoding`. [#1912]
|
||||||
|
- Implement `IntoHeaderValue` for `ContentEncoding`. [#1912]
|
||||||
|
- Implement `IntoIterator` for `HeaderMap`. [#1964]
|
||||||
|
- Implement `MessageBody` for `bytestring::ByteString`. [#2468]
|
||||||
|
- Implement `MessageBody` for `Pin<Box<T>> where T: MessageBody`. [#2152]
|
||||||
|
- Misc:
|
||||||
|
- Re-export `StatusCode`, `Method`, `Version` and `Uri` at the crate root. [#2171]
|
||||||
|
- Re-export `ContentEncoding` and `ConnectionType` at the crate root. [#2171]
|
||||||
|
- `Quality::ZERO` associated constant equivalent to `q=0`. [#2501]
|
||||||
|
- `header::Quality::{MAX, MIN}` associated constants equivalent to `q=1` and `q=0.001`, respectively. [#2486]
|
||||||
|
- Timeout for canceling HTTP/2 server side connection handshake. Configurable with `ServiceConfig::client_timeout`; defaults to 5 seconds. [#2483]
|
||||||
|
- `#[must_use]` for `ws::Codec` to prevent subtle bugs. [#1920]
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Traits:
|
||||||
|
- Rename `IntoHeaderValue => TryIntoHeaderValue`. [#2510]
|
||||||
|
- `MessageBody` now has an associated `Error` type. [#2183]
|
||||||
|
- Types:
|
||||||
|
- `Protocol` enum is now marked `#[non_exhaustive]`.
|
||||||
|
- `error::DispatcherError` enum is now marked `#[non_exhaustive]`. [#2624]
|
||||||
|
- `ContentEncoding` is now marked `#[non_exhaustive]`. [#2377]
|
||||||
|
- Error enums are marked `#[non_exhaustive]`. [#2161]
|
||||||
|
- Rename `PayloadStream` to `BoxedPayloadStream`. [#2545]
|
||||||
|
- The body type parameter of `Response` no longer has a default. [#2152]
|
||||||
|
- Enum Variants:
|
||||||
|
- Rename `ContentEncoding::{Br => Brotli}`. [#2501]
|
||||||
|
- `Payload` inner fields are now named. [#2545]
|
||||||
|
- `ws::Message::Text` now contains a `bytestring::ByteString`. [#1864]
|
||||||
|
- Methods:
|
||||||
|
- Rename `ServiceConfig::{client_timer_expire => client_request_deadline}`. [#2611]
|
||||||
|
- Rename `ServiceConfig::{client_disconnect_timer => client_disconnect_deadline}`. [#2611]
|
||||||
|
- Rename `h1::Codec::{keepalive => keep_alive}`. [#2611]
|
||||||
|
- Rename `h1::Codec::{keepalive_enabled => keep_alive_enabled}`. [#2611]
|
||||||
|
- Rename `h1::ClientCodec::{keepalive => keep_alive}`. [#2611]
|
||||||
|
- Rename `h1::ClientPayloadCodec::{keepalive => keep_alive}`. [#2611]
|
||||||
|
- Rename `header::EntityTag::{weak => new_weak, strong => new_strong}`. [#2565]
|
||||||
|
- Rename `TryIntoHeaderValue::{try_into => try_into_value}` to avoid ambiguity with std `TryInto` trait. [#1894]
|
||||||
|
- Deadline methods in `ServiceConfig` now return `std::time::Instant`s instead of Tokio's wrapper type. [#2611]
|
||||||
|
- Places in `Response` where `ResponseBody<B>` was received or returned now simply use `B`. [#2201]
|
||||||
|
- `encoding::Encoder::response` now returns `AnyBody<Encoder<B>>`. [#2448]
|
||||||
|
- `Extensions::insert` returns replaced item. [#1904]
|
||||||
|
- `HeaderMap::get_all` now returns a `std::slice::Iter`. [#2527]
|
||||||
|
- `HeaderMap::insert` now returns iterator of removed values. [#1964]
|
||||||
|
- `HeaderMap::len` now returns number of values instead of number of keys. [#1964]
|
||||||
|
- `HeaderMap::remove` now returns iterator of removed values. [#1964]
|
||||||
|
- `ResponseBuilder::body(B)` now returns `Response<EitherBody<B>>`. [#2468]
|
||||||
|
- `ResponseBuilder::content_type` now takes an `impl TryIntoHeaderValue` to support using typed `mime` types. [#1894]
|
||||||
|
- `ResponseBuilder::finish()` now returns `Response<EitherBody<()>>`. [#2468]
|
||||||
|
- `ResponseBuilder::json` now takes `impl Serialize`. [#2052]
|
||||||
|
- `ResponseBuilder::message_body` now returns a `Result`. [#2201]∑
|
||||||
|
- `ServiceConfig::keep_alive` now returns a `KeepAlive`. [#2611]
|
||||||
|
- `ws::hash_key` now returns array. [#2035]
|
||||||
|
- Trait Implementations:
|
||||||
|
- Implementation of `Stream` for `Payload` no longer requires the `Stream` variant be `Unpin`. [#2545]
|
||||||
|
- Implementation of `Future` for `h1::SendResponse` no longer requires the body type be `Unpin`. [#2545]
|
||||||
|
- Implementation of `Stream` for `encoding::Decoder` no longer requires the stream type be `Unpin`. [#2545]
|
||||||
|
- Implementation of `From` for error types now return a `Response<BoxBody>`. [#2468]
|
||||||
|
- Misc:
|
||||||
|
- `header` module is now public. [#2171]
|
||||||
|
- `uri` module is now public. [#2171]
|
||||||
|
- Request-local data container is no longer part of a `RequestHead`. Instead it is a distinct part of a `Request`. [#2487]
|
||||||
|
- All error trait bounds in server service builders have changed from `Into<Error>` to `Into<Response<BoxBody>>`. [#2253]
|
||||||
|
- All error trait bounds in message body and stream impls changed from `Into<Error>` to `Into<Box<dyn std::error::Error>>`. [#2253]
|
||||||
|
- Guarantee ordering of `header::GetAll` iterator to be same as insertion order. [#2467]
|
||||||
|
- Connection data set through the `on_connect_ext` callbacks is now accessible only from the new `Request::conn_data()` method. [#2491]
|
||||||
|
- Brotli (de)compression support is now provided by the `brotli` crate. [#2538]
|
||||||
|
- Minimum supported Rust version (MSRV) is now 1.54.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- A `Vary` header is now correctly sent along with compressed content. [#2501]
|
||||||
|
- HTTP/1.1 dispatcher correctly uses client request timeout. [#2611]
|
||||||
|
- Fixed issue where handlers that took payload but then dropped without reading it to EOF it would cause keep-alive connections to become stuck. [#2624]
|
||||||
|
- `ContentEncoding`'s `Identity` variant can now be parsed from a string. [#2501]
|
||||||
|
- `HttpServer::{listen_rustls(), bind_rustls()}` now honor the ALPN protocols in the configuration parameter. [#2226]
|
||||||
|
- Remove unnecessary `Into<Error>` bound on `Encoder` body types. [#2375]
|
||||||
|
- Remove unnecessary `Unpin` bound on `ResponseBuilder::streaming`. [#2253]
|
||||||
|
- `BodyStream` and `SizedStream` are no longer restricted to `Unpin` types. [#2152]
|
||||||
|
- Fixed slice creation pointing to potential uninitialized data on h1 encoder. [#2364]
|
||||||
|
- Fixed quality parse error in Accept-Encoding header. [#2344]
|
||||||
|
|
||||||
### Removed
|
### Removed
|
||||||
- `error::BlockingError` [#2660]
|
- Crate Features:
|
||||||
|
- `compress` feature. [#2065]
|
||||||
|
- `cookies` feature. [#2065]
|
||||||
|
- `trust-dns` feature. [#2425]
|
||||||
|
- `actors` optional feature and trait implementation for `actix` types. [#1969]
|
||||||
|
- Functions:
|
||||||
|
- `header::qitem` helper. Replaced with `header::QualityItem::max`. [#2486]
|
||||||
|
- Types:
|
||||||
|
- `body::Body`; replaced with `EitherBody` and `BoxBody`. [#2468]
|
||||||
|
- `body::ResponseBody`. [#2446]
|
||||||
|
- `ConnectError::SslHandshakeError` and re-export of `HandshakeError`. Due to the removal of this type from `tokio-openssl` crate. OpenSSL handshake error now returns `ConnectError::SslError`. [#1813]
|
||||||
|
- `error::Canceled` re-export. [#1994]
|
||||||
|
- `error::Result` type alias. [#2201]
|
||||||
|
- `error::BlockingError` [#2660]
|
||||||
|
- `InternalError` and all the error types it constructed were moved up to `actix-web`. [#2215]
|
||||||
|
- Typed HTTP headers; they have moved up to `actix-web`. [2094]
|
||||||
|
- Re-export of `http` crate's `HeaderMap` types in addition to ours. [#2171]
|
||||||
|
- Enum Variants:
|
||||||
|
- `body::BodySize::Empty`; an empty body can now only be represented as a `Sized(0)` variant. [#2446]
|
||||||
|
- `ContentEncoding::Auto`. [#2501]
|
||||||
|
- `EncoderError::Boxed`. [#2446]
|
||||||
|
- Methods:
|
||||||
|
- `ContentEncoding::is_compression()`. [#2501]
|
||||||
|
- `h1::Payload::readany()`. [#2545]
|
||||||
|
- `HttpMessage::cookie[s]()` trait methods. [#2065]
|
||||||
|
- `HttpServiceBuilder::new()`; use `default` instead. [#2611]
|
||||||
|
- `on_connect` (previously deprecated) methods have been removed; use `on_connect_ext`. [#1857]
|
||||||
|
- `Response::build_from()`. [#2159]
|
||||||
|
- `Response::error()` [#2205]
|
||||||
|
- `Response::take_body()` and old `Response::into_body()` method that casted body type. [#2201]
|
||||||
|
- `Response`'s status code builders. [#2159]
|
||||||
|
- `ResponseBuilder::{if_true, if_some}()` (previously deprecated). [#2148]
|
||||||
|
- `ResponseBuilder::{set, set_header}()`; use `ResponseBuilder::insert_header()`. [#1869]
|
||||||
|
- `ResponseBuilder::extensions[_mut]()`. [#2585]
|
||||||
|
- `ResponseBuilder::header()`; use `ResponseBuilder::append_header()`. [#1869]
|
||||||
|
- `ResponseBuilder::json()`. [#2148]
|
||||||
|
- `ResponseBuilder::json2()`. [#1903]
|
||||||
|
- `ResponseBuilder::streaming()`. [#2468]
|
||||||
|
- `ResponseHead::extensions[_mut]()`. [#2585]
|
||||||
|
- `ServiceConfig::{client_timer, keep_alive_timer}()`. [#2611]
|
||||||
|
- `TestRequest::with_hdr()`; use `TestRequest::default().insert_header()`. [#1869]
|
||||||
|
- `TestRequest::with_header()`; use `TestRequest::default().insert_header()`. [#1869]
|
||||||
|
- Trait implementations:
|
||||||
|
- Implementation of `Copy` for `ws::Codec`. [#1920]
|
||||||
|
- Implementation of `From<Option<usize>> for KeepAlive`; use `Duration`s instead. [#2611]
|
||||||
|
- Implementation of `From<serde_json::Value>` for `Body`. [#2148]
|
||||||
|
- Implementation of `From<usize> for KeepAlive`; use `Duration`s instead. [#2611]
|
||||||
|
- Implementation of `Future` for `Response`. [#2201]
|
||||||
|
- Implementation of `Future` for `ResponseBuilder`. [#2468]
|
||||||
|
- Implementation of `Into<Error>` for `Response<Body>`. [#2215]
|
||||||
|
- Implementation of `Into<Error>` for `ResponseBuilder`. [#2215]
|
||||||
|
- Implementation of `ResponseError` for `actix_utils::timeout::TimeoutError`. [#2127]
|
||||||
|
- Implementation of `ResponseError` for `CookieParseError`. [#2065]
|
||||||
|
- Implementation of `TryFrom<u16>` for `header::Quality`. [#2486]
|
||||||
|
- Misc:
|
||||||
|
- `http` module; most everything it contained is exported at the crate root. [#2488]
|
||||||
|
- `cookies` module (re-export). [#2065]
|
||||||
|
- `client` module. Connector types now live in `awc`. [#2425]
|
||||||
|
- `error` field from `Response`. [#2205]
|
||||||
|
- `downcast` and `downcast_get_type_id` macros. [#2291]
|
||||||
|
- Down-casting for `MessageBody` types; use standard `Any` trait. [#2183]
|
||||||
|
|
||||||
|
|
||||||
|
[#1813]: https://github.com/actix/actix-web/pull/1813
|
||||||
|
[#1845]: https://github.com/actix/actix-web/pull/1845
|
||||||
|
[#1857]: https://github.com/actix/actix-web/pull/1857
|
||||||
|
[#1864]: https://github.com/actix/actix-web/pull/1864
|
||||||
|
[#1869]: https://github.com/actix/actix-web/pull/1869
|
||||||
|
[#1878]: https://github.com/actix/actix-web/pull/1878
|
||||||
|
[#1894]: https://github.com/actix/actix-web/pull/1894
|
||||||
|
[#1903]: https://github.com/actix/actix-web/pull/1903
|
||||||
|
[#1904]: https://github.com/actix/actix-web/pull/1904
|
||||||
|
[#1912]: https://github.com/actix/actix-web/pull/1912
|
||||||
|
[#1920]: https://github.com/actix/actix-web/pull/1920
|
||||||
|
[#1964]: https://github.com/actix/actix-web/pull/1964
|
||||||
|
[#1969]: https://github.com/actix/actix-web/pull/1969
|
||||||
|
[#1981]: https://github.com/actix/actix-web/pull/1981
|
||||||
|
[#1994]: https://github.com/actix/actix-web/pull/1994
|
||||||
|
[#2035]: https://github.com/actix/actix-web/pull/2035
|
||||||
|
[#2052]: https://github.com/actix/actix-web/pull/2052
|
||||||
|
[#2065]: https://github.com/actix/actix-web/pull/2065
|
||||||
|
[#2094]: https://github.com/actix/actix-web/pull/2094
|
||||||
|
[#2127]: https://github.com/actix/actix-web/pull/2127
|
||||||
|
[#2148]: https://github.com/actix/actix-web/pull/2148
|
||||||
|
[#2152]: https://github.com/actix/actix-web/pull/2152
|
||||||
|
[#2158]: https://github.com/actix/actix-web/pull/2158
|
||||||
|
[#2159]: https://github.com/actix/actix-web/pull/2159
|
||||||
|
[#2161]: https://github.com/actix/actix-web/pull/2161
|
||||||
|
[#2171]: https://github.com/actix/actix-web/pull/2171
|
||||||
|
[#2183]: https://github.com/actix/actix-web/pull/2183
|
||||||
|
[#2196]: https://github.com/actix/actix-web/pull/2196
|
||||||
|
[#2201]: https://github.com/actix/actix-web/pull/2201
|
||||||
|
[#2205]: https://github.com/actix/actix-web/pull/2205
|
||||||
|
[#2215]: https://github.com/actix/actix-web/pull/2215
|
||||||
|
[#2244]: https://github.com/actix/actix-web/pull/2244
|
||||||
|
[#2250]: https://github.com/actix/actix-web/pull/2250
|
||||||
|
[#2253]: https://github.com/actix/actix-web/pull/2253
|
||||||
|
[#2291]: https://github.com/actix/actix-web/pull/2291
|
||||||
|
[#2344]: https://github.com/actix/actix-web/pull/2344
|
||||||
|
[#2364]: https://github.com/actix/actix-web/pull/2364
|
||||||
|
[#2375]: https://github.com/actix/actix-web/pull/2375
|
||||||
|
[#2377]: https://github.com/actix/actix-web/pull/2377
|
||||||
|
[#2414]: https://github.com/actix/actix-web/pull/2414
|
||||||
|
[#2425]: https://github.com/actix/actix-web/pull/2425
|
||||||
|
[#2442]: https://github.com/actix/actix-web/pull/2442
|
||||||
|
[#2446]: https://github.com/actix/actix-web/pull/2446
|
||||||
|
[#2448]: https://github.com/actix/actix-web/pull/2448
|
||||||
|
[#2456]: https://github.com/actix/actix-web/pull/2456
|
||||||
|
[#2467]: https://github.com/actix/actix-web/pull/2467
|
||||||
|
[#2468]: https://github.com/actix/actix-web/pull/2468
|
||||||
|
[#2470]: https://github.com/actix/actix-web/pull/2470
|
||||||
|
[#2474]: https://github.com/actix/actix-web/pull/2474
|
||||||
|
[#2483]: https://github.com/actix/actix-web/pull/2483
|
||||||
|
[#2486]: https://github.com/actix/actix-web/pull/2486
|
||||||
|
[#2487]: https://github.com/actix/actix-web/pull/2487
|
||||||
|
[#2488]: https://github.com/actix/actix-web/pull/2488
|
||||||
|
[#2491]: https://github.com/actix/actix-web/pull/2491
|
||||||
|
[#2497]: https://github.com/actix/actix-web/pull/2497
|
||||||
|
[#2501]: https://github.com/actix/actix-web/pull/2501
|
||||||
|
[#2510]: https://github.com/actix/actix-web/pull/2510
|
||||||
|
[#2520]: https://github.com/actix/actix-web/pull/2520
|
||||||
|
[#2522]: https://github.com/actix/actix-web/pull/2522
|
||||||
|
[#2527]: https://github.com/actix/actix-web/pull/2527
|
||||||
|
[#2538]: https://github.com/actix/actix-web/pull/2538
|
||||||
|
[#2545]: https://github.com/actix/actix-web/pull/2545
|
||||||
|
[#2565]: https://github.com/actix/actix-web/pull/2565
|
||||||
|
[#2585]: https://github.com/actix/actix-web/pull/2585
|
||||||
|
[#2587]: https://github.com/actix/actix-web/pull/2587
|
||||||
|
[#2611]: https://github.com/actix/actix-web/pull/2611
|
||||||
|
[#2618]: https://github.com/actix/actix-web/pull/2618
|
||||||
|
[#2624]: https://github.com/actix/actix-web/pull/2624
|
||||||
|
[#2625]: https://github.com/actix/actix-web/pull/2625
|
||||||
[#2660]: https://github.com/actix/actix-web/pull/2660
|
[#2660]: https://github.com/actix/actix-web/pull/2660
|
||||||
|
[00ba8d55]: https://github.com/actix/actix-web/commit/00ba8d55492284581695d824648590715a8bd386
|
||||||
|
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>3.0.0 Pre-Releases</summary>
|
||||||
|
|
||||||
## 3.0.0-rc.4 - 2022-02-22
|
## 3.0.0-rc.4 - 2022-02-22
|
||||||
|
### Fixed
|
||||||
- Fix h1 dispatcher panic. [1ce58ecb]
|
- Fix h1 dispatcher panic. [1ce58ecb]
|
||||||
|
|
||||||
[1ce58ecb]: https://github.com/actix/actix-web/commit/1ce58ecb305c60e51db06e6c913b7a1344e229ca
|
[1ce58ecb]: https://github.com/actix/actix-web/commit/1ce58ecb305c60e51db06e6c913b7a1344e229ca
|
||||||
|
@ -108,7 +389,7 @@
|
||||||
|
|
||||||
|
|
||||||
## 3.0.0-beta.17 - 2021-12-27
|
## 3.0.0-beta.17 - 2021-12-27
|
||||||
### Changes
|
### Changed
|
||||||
- `HeaderMap::get_all` now returns a `std::slice::Iter`. [#2527]
|
- `HeaderMap::get_all` now returns a `std::slice::Iter`. [#2527]
|
||||||
- `Payload` inner fields are now named. [#2545]
|
- `Payload` inner fields are now named. [#2545]
|
||||||
- `impl Stream` for `Payload` no longer requires the `Stream` variant be `Unpin`. [#2545]
|
- `impl Stream` for `Payload` no longer requires the `Stream` variant be `Unpin`. [#2545]
|
||||||
|
@ -331,7 +612,7 @@
|
||||||
- `Response::{ok, bad_request, not_found, internal_server_error}`. [#2159]
|
- `Response::{ok, bad_request, not_found, internal_server_error}`. [#2159]
|
||||||
- Helper `body::to_bytes` for async collecting message body into Bytes. [#2158]
|
- Helper `body::to_bytes` for async collecting message body into Bytes. [#2158]
|
||||||
|
|
||||||
### Changes
|
### Changed
|
||||||
- The type parameter of `Response` no longer has a default. [#2152]
|
- The type parameter of `Response` no longer has a default. [#2152]
|
||||||
- The `Message` variant of `body::Body` is now `Pin<Box<dyn MessageBody>>`. [#2152]
|
- The `Message` variant of `body::Body` is now `Pin<Box<dyn MessageBody>>`. [#2152]
|
||||||
- `BodyStream` and `SizedStream` are no longer restricted to Unpin types. [#2152]
|
- `BodyStream` and `SizedStream` are no longer restricted to Unpin types. [#2152]
|
||||||
|
@ -475,6 +756,8 @@
|
||||||
[#1864]: https://github.com/actix/actix-web/pull/1864
|
[#1864]: https://github.com/actix/actix-web/pull/1864
|
||||||
[#1878]: https://github.com/actix/actix-web/pull/1878
|
[#1878]: https://github.com/actix/actix-web/pull/1878
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
|
||||||
## 2.2.2 - 2022-01-21
|
## 2.2.2 - 2022-01-21
|
||||||
### Changed
|
### Changed
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "actix-http"
|
name = "actix-http"
|
||||||
version = "3.0.0-rc.4"
|
version = "3.0.0"
|
||||||
authors = [
|
authors = [
|
||||||
"Nikolay Kim <fafhrd91@gmail.com>",
|
"Nikolay Kim <fafhrd91@gmail.com>",
|
||||||
"Rob Ede <robjtede@icloud.com>",
|
"Rob Ede <robjtede@icloud.com>",
|
||||||
|
@ -100,7 +100,7 @@ zstd = { version = "0.10", optional = true }
|
||||||
actix-http-test = { version = "3.0.0-beta.13", features = ["openssl"] }
|
actix-http-test = { version = "3.0.0-beta.13", features = ["openssl"] }
|
||||||
actix-server = "2"
|
actix-server = "2"
|
||||||
actix-tls = { version = "3", features = ["openssl"] }
|
actix-tls = { version = "3", features = ["openssl"] }
|
||||||
actix-web = "4.0.0-rc.3"
|
actix-web = "4.0.0"
|
||||||
|
|
||||||
async-stream = "0.3"
|
async-stream = "0.3"
|
||||||
criterion = { version = "0.3", features = ["html_reports"] }
|
criterion = { version = "0.3", features = ["html_reports"] }
|
||||||
|
|
|
@ -3,11 +3,11 @@
|
||||||
> HTTP primitives for the Actix ecosystem.
|
> HTTP primitives for the Actix ecosystem.
|
||||||
|
|
||||||
[![crates.io](https://img.shields.io/crates/v/actix-http?label=latest)](https://crates.io/crates/actix-http)
|
[![crates.io](https://img.shields.io/crates/v/actix-http?label=latest)](https://crates.io/crates/actix-http)
|
||||||
[![Documentation](https://docs.rs/actix-http/badge.svg?version=3.0.0-rc.4)](https://docs.rs/actix-http/3.0.0-rc.4)
|
[![Documentation](https://docs.rs/actix-http/badge.svg?version=3.0.0)](https://docs.rs/actix-http/3.0.0)
|
||||||
[![Version](https://img.shields.io/badge/rustc-1.54+-ab6000.svg)](https://blog.rust-lang.org/2021/05/06/Rust-1.54.0.html)
|
[![Version](https://img.shields.io/badge/rustc-1.54+-ab6000.svg)](https://blog.rust-lang.org/2021/05/06/Rust-1.54.0.html)
|
||||||
![MIT or Apache 2.0 licensed](https://img.shields.io/crates/l/actix-http.svg)
|
![MIT or Apache 2.0 licensed](https://img.shields.io/crates/l/actix-http.svg)
|
||||||
<br />
|
<br />
|
||||||
[![dependency status](https://deps.rs/crate/actix-http/3.0.0-rc.4/status.svg)](https://deps.rs/crate/actix-http/3.0.0-rc.4)
|
[![dependency status](https://deps.rs/crate/actix-http/3.0.0/status.svg)](https://deps.rs/crate/actix-http/3.0.0)
|
||||||
[![Download](https://img.shields.io/crates/d/actix-http.svg)](https://crates.io/crates/actix-http)
|
[![Download](https://img.shields.io/crates/d/actix-http.svg)](https://crates.io/crates/actix-http)
|
||||||
[![Chat on Discord](https://img.shields.io/discord/771444961383153695?label=chat&logo=discord)](https://discord.gg/NWpN5mmg3x)
|
[![Chat on Discord](https://img.shields.io/discord/771444961383153695?label=chat&logo=discord)](https://discord.gg/NWpN5mmg3x)
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@ path = "src/lib.rs"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
actix-utils = "3.0.0"
|
actix-utils = "3.0.0"
|
||||||
actix-web = { version = "4.0.0-rc.3", default-features = false }
|
actix-web = { version = "4.0.0", default-features = false }
|
||||||
|
|
||||||
bytes = "1"
|
bytes = "1"
|
||||||
derive_more = "0.99.5"
|
derive_more = "0.99.5"
|
||||||
|
@ -28,7 +28,7 @@ twoway = "0.2"
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
actix-rt = "2.2"
|
actix-rt = "2.2"
|
||||||
actix-http = "3.0.0-rc.4"
|
actix-http = "3.0.0"
|
||||||
futures-util = { version = "0.3.7", default-features = false, features = ["alloc"] }
|
futures-util = { version = "0.3.7", default-features = false, features = ["alloc"] }
|
||||||
tokio = { version = "1.8.4", features = ["sync"] }
|
tokio = { version = "1.8.4", features = ["sync"] }
|
||||||
tokio-stream = "0.1"
|
tokio-stream = "0.1"
|
||||||
|
|
|
@ -29,12 +29,12 @@ openssl = ["tls-openssl", "actix-http/openssl", "awc/openssl"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
actix-codec = "0.5"
|
actix-codec = "0.5"
|
||||||
actix-http = "3.0.0-rc.4"
|
actix-http = "3.0.0"
|
||||||
actix-http-test = "3.0.0-beta.13"
|
actix-http-test = "3.0.0-beta.13"
|
||||||
actix-rt = "2.1"
|
actix-rt = "2.1"
|
||||||
actix-service = "2.0.0"
|
actix-service = "2.0.0"
|
||||||
actix-utils = "3.0.0"
|
actix-utils = "3.0.0"
|
||||||
actix-web = { version = "4.0.0-rc.3", default-features = false, features = ["cookies"] }
|
actix-web = { version = "4.0.0", default-features = false, features = ["cookies"] }
|
||||||
awc = { version = "3.0.0-beta.21", default-features = false, features = ["cookies"] }
|
awc = { version = "3.0.0-beta.21", default-features = false, features = ["cookies"] }
|
||||||
|
|
||||||
futures-core = { version = "0.3.7", default-features = false, features = ["std"] }
|
futures-core = { version = "0.3.7", default-features = false, features = ["std"] }
|
||||||
|
|
|
@ -16,8 +16,8 @@ path = "src/lib.rs"
|
||||||
[dependencies]
|
[dependencies]
|
||||||
actix = { version = "0.12.0", default-features = false }
|
actix = { version = "0.12.0", default-features = false }
|
||||||
actix-codec = "0.5"
|
actix-codec = "0.5"
|
||||||
actix-http = "3.0.0-rc.4"
|
actix-http = "3.0.0"
|
||||||
actix-web = { version = "4.0.0-rc.3", default-features = false }
|
actix-web = { version = "4.0.0", default-features = false }
|
||||||
|
|
||||||
bytes = "1"
|
bytes = "1"
|
||||||
bytestring = "1"
|
bytestring = "1"
|
||||||
|
|
|
@ -3,6 +3,15 @@
|
||||||
## Unreleased - 2021-xx-xx
|
## Unreleased - 2021-xx-xx
|
||||||
|
|
||||||
|
|
||||||
|
## 4.0.0 - 2022-02-24
|
||||||
|
- Version aligned with `actix-web` and will remain in sync going forward.
|
||||||
|
- No significant changes since `0.5.0`.
|
||||||
|
|
||||||
|
|
||||||
|
## 0.5.0 - 2022-02-24
|
||||||
|
- No significant changes since `0.5.0-rc.2`.
|
||||||
|
|
||||||
|
|
||||||
## 0.5.0-rc.2 - 2022-02-01
|
## 0.5.0-rc.2 - 2022-02-01
|
||||||
- No significant changes since `0.5.0-rc.1`.
|
- No significant changes since `0.5.0-rc.1`.
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "actix-web-codegen"
|
name = "actix-web-codegen"
|
||||||
version = "0.5.0-rc.2"
|
version = "4.0.0"
|
||||||
description = "Routing and runtime macros for Actix Web"
|
description = "Routing and runtime macros for Actix Web"
|
||||||
homepage = "https://actix.rs"
|
homepage = "https://actix.rs"
|
||||||
repository = "https://github.com/actix/actix-web.git"
|
repository = "https://github.com/actix/actix-web.git"
|
||||||
|
@ -25,7 +25,7 @@ actix-macros = "0.2.3"
|
||||||
actix-rt = "2.2"
|
actix-rt = "2.2"
|
||||||
actix-test = "0.1.0-beta.13"
|
actix-test = "0.1.0-beta.13"
|
||||||
actix-utils = "3.0.0"
|
actix-utils = "3.0.0"
|
||||||
actix-web = "4.0.0-rc.3"
|
actix-web = "4.0.0"
|
||||||
|
|
||||||
futures-core = { version = "0.3.7", default-features = false, features = ["alloc"] }
|
futures-core = { version = "0.3.7", default-features = false, features = ["alloc"] }
|
||||||
trybuild = "1"
|
trybuild = "1"
|
||||||
|
|
|
@ -3,11 +3,11 @@
|
||||||
> Routing and runtime macros for Actix Web.
|
> Routing and runtime macros for Actix Web.
|
||||||
|
|
||||||
[![crates.io](https://img.shields.io/crates/v/actix-web-codegen?label=latest)](https://crates.io/crates/actix-web-codegen)
|
[![crates.io](https://img.shields.io/crates/v/actix-web-codegen?label=latest)](https://crates.io/crates/actix-web-codegen)
|
||||||
[![Documentation](https://docs.rs/actix-web-codegen/badge.svg?version=0.5.0-rc.2)](https://docs.rs/actix-web-codegen/0.5.0-rc.2)
|
[![Documentation](https://docs.rs/actix-web-codegen/badge.svg?version=4.0.0)](https://docs.rs/actix-web-codegen/4.0.0)
|
||||||
[![Version](https://img.shields.io/badge/rustc-1.54+-ab6000.svg)](https://blog.rust-lang.org/2021/05/06/Rust-1.54.0.html)
|
[![Version](https://img.shields.io/badge/rustc-1.54+-ab6000.svg)](https://blog.rust-lang.org/2021/05/06/Rust-1.54.0.html)
|
||||||
![License](https://img.shields.io/crates/l/actix-web-codegen.svg)
|
![License](https://img.shields.io/crates/l/actix-web-codegen.svg)
|
||||||
<br />
|
<br />
|
||||||
[![dependency status](https://deps.rs/crate/actix-web-codegen/0.5.0-rc.2/status.svg)](https://deps.rs/crate/actix-web-codegen/0.5.0-rc.2)
|
[![dependency status](https://deps.rs/crate/actix-web-codegen/4.0.0/status.svg)](https://deps.rs/crate/actix-web-codegen/4.0.0)
|
||||||
[![Download](https://img.shields.io/crates/d/actix-web-codegen.svg)](https://crates.io/crates/actix-web-codegen)
|
[![Download](https://img.shields.io/crates/d/actix-web-codegen.svg)](https://crates.io/crates/actix-web-codegen)
|
||||||
[![Chat on Discord](https://img.shields.io/discord/771444961383153695?label=chat&logo=discord)](https://discord.gg/NWpN5mmg3x)
|
[![Chat on Discord](https://img.shields.io/discord/771444961383153695?label=chat&logo=discord)](https://discord.gg/NWpN5mmg3x)
|
||||||
|
|
||||||
|
|
|
@ -1,12 +1,280 @@
|
||||||
# Changes
|
# Changelog
|
||||||
|
|
||||||
## Unreleased - 2021-xx-xx
|
## Unreleased - 2021-xx-xx
|
||||||
|
|
||||||
|
|
||||||
|
## 4.0.0 - 2022-02-25
|
||||||
|
### Dependencies
|
||||||
|
- Updated `actix-*` to Tokio v1-based versions. [#1813]
|
||||||
|
- Updated `actix-web-codegen` to `4.0.0`.
|
||||||
|
- Updated `cookie` to `0.16`. [#2555]
|
||||||
|
- Updated `language-tags` to `0.3`.
|
||||||
|
- Updated `rand` to `0.8`.
|
||||||
|
- Updated `rustls` to `0.20.0`. [#2414]
|
||||||
|
- Updated `tokio` to `1`.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Crate Features:
|
||||||
|
- `cookies`; enabled by default. [#2619]
|
||||||
|
- `compress-brotli`; enabled by default. [#2618]
|
||||||
|
- `compress-gzip`; enabled by default. [#2618]
|
||||||
|
- `compress-zstd`; enabled by default. [#2618]
|
||||||
|
- `macros`; enables routing and runtime macros, enabled by default. [#2619]
|
||||||
|
- Types:
|
||||||
|
- `CustomizeResponder` for customizing response. [#2510]
|
||||||
|
- `dev::ServerHandle` re-export from `actix-server`. [#2442]
|
||||||
|
- `dev::ServiceFactory` re-export from `actix-service`. [#2325]
|
||||||
|
- `guard::GuardContext` for use with the `Guard` trait. [#2552]
|
||||||
|
- `http::header::AcceptEncoding` typed header. [#2482]
|
||||||
|
- `http::header::Range` typed header. [#2485]
|
||||||
|
- `http::KeepAlive` re-export from `actix-http`. [#2625]
|
||||||
|
- `middleware::Compat` that boxes middleware types like `Logger` and `Compress` to be used with constrained type bounds. [#1865]
|
||||||
|
- `web::Header` extractor for extracting typed HTTP headers in handlers. [#2094]
|
||||||
|
- Methods:
|
||||||
|
- `dev::ServiceRequest::guard_ctx()` for obtaining a guard context. [#2552]
|
||||||
|
- `dev::ServiceRequest::parts_mut()`. [#2177]
|
||||||
|
- `dev::ServiceResponse::map_into_{left,right}_body()` and `HttpResponse::map_into_boxed_body()`. [#2468]
|
||||||
|
- `Either<web::Json<T>, web::Form<T>>::into_inner()` which returns the inner type for whichever variant was created. Also works for `Either<web::Form<T>, web::Json<T>>`. [#1894]
|
||||||
|
- `http::header::AcceptLanguage::{ranked, preference}()`. [#2480]
|
||||||
|
- `HttpResponse::add_removal_cookie()`. [#2586]
|
||||||
|
- `HttpResponse::map_into_{left,right}_body()` and `HttpResponse::map_into_boxed_body()`. [#2468]
|
||||||
|
- `HttpServer::worker_max_blocking_threads` for setting block thread pool. [#2200]
|
||||||
|
- `middleware::Logger::log_target()` to allow customize. [#2594]
|
||||||
|
- `Responder::customize()` trait method that wraps responder in `CustomizeResponder`. [#2510]
|
||||||
|
- `Route::service()` for using hand-written services as handlers. [#2262]
|
||||||
|
- `ServiceResponse::into_parts()`. [#2499]
|
||||||
|
- `TestServer::client_headers()` method. [#2097]
|
||||||
|
- `web::ServiceConfig::configure()` to allow easy nesting of configuration functions. [#1988]
|
||||||
|
- Trait Implementations:
|
||||||
|
- Implement `Debug` for `DefaultHeaders`. [#2510]
|
||||||
|
- Implement `FromRequest` for `ConnectionInfo` and `PeerAddr`. [#2263]
|
||||||
|
- Implement `FromRequest` for `Method`. [#2263]
|
||||||
|
- Implement `FromRequest` for `Uri`. [#2263]
|
||||||
|
- Implement `Hash` for `http::header::Encoding`. [#2501]
|
||||||
|
- Implement `Responder` for `Vec<u8>`. [#2625]
|
||||||
|
- Misc:
|
||||||
|
- `#[actix_web::test]` macro for setting up tests with a runtime. [#2409]
|
||||||
|
- Enable registering a vec of services of the same type to `App` [#1933]
|
||||||
|
- Add `services!` macro for helping register multiple services to `App`. [#1933]
|
||||||
|
- Option to allow `Json` extractor to work without a `Content-Type` header present. [#2362]
|
||||||
|
- Connection data set through the `HttpServer::on_connect` callback is now accessible only from the new `HttpRequest::conn_data()` and `ServiceRequest::conn_data()` methods. [#2491]
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
- Rename `test::{simple_service => status_service}`. [#2659]
|
- Functions:
|
||||||
|
- `guard::fn_guard` functions now receives a `&GuardContext`. [#2552]
|
||||||
|
- `guard::Not` is now generic over the type of guard it wraps. [#2552]
|
||||||
|
- `test::{call_service, read_response, read_response_json, send_request}()` now receive a `&Service`. [#1905]
|
||||||
|
- Some guard functions now return `impl Guard` and their concrete types are made private: `guard::Header` and all the method guards. [#2552]
|
||||||
|
- Rename `test::{default_service => status_service}()`. Old name is deprecated. [#2518]
|
||||||
|
- Rename `test::{read_response_json => call_and_read_body_json}()`. Old name is deprecated. [#2518]
|
||||||
|
- Rename `test::{read_response => call_and_read_body}()`. Old name is deprecated. [#2518]
|
||||||
|
- Traits:
|
||||||
|
- `guard::Guard::check` now receives a `&GuardContext`. [#2552]
|
||||||
|
- `FromRequest::Config` associated type was removed. [#2233]
|
||||||
|
- `Responder` trait has been reworked and now `Response`/`HttpResponse` synchronously, making it simpler and more performant. [#1891]
|
||||||
|
- Rename `Factory` trait to `Handler`. [#1852]
|
||||||
|
- Types:
|
||||||
|
- `App`'s `B` (body) type parameter been removed. As a result, `App`s can be returned from functions now. [#2493]
|
||||||
|
- `Compress` middleware's response type is now `EitherBody<Encoder<B>>`. [#2448]
|
||||||
|
- `error::BlockingError` is now a unit struct. It's now only triggered when blocking thread pool has shutdown. [#1957]
|
||||||
|
- `ErrorHandlerResponse`'s response variants now use `ServiceResponse<EitherBody<B>>`. [#2515]
|
||||||
|
- `ErrorHandlers` middleware's response types now use `ServiceResponse<EitherBody<B>>`. [#2515]
|
||||||
|
- `http::header::Encoding` now only represents `Content-Encoding` types. [#2501]
|
||||||
|
- `middleware::Condition` gained a broader middleware compatibility. [#2635]
|
||||||
|
- `Resource` no longer require service body type to be boxed. [#2526]
|
||||||
|
- `Scope` no longer require service body type to be boxed. [#2523]
|
||||||
|
- `web::Path`s inner field is now private. [#1894]
|
||||||
|
- `web::Payload`'s inner field is now private. [#2384]
|
||||||
|
- Error enums are now marked `#[non_exhaustive]`. [#2148]
|
||||||
|
- Enum Variants:
|
||||||
|
- `Either` now uses `Left`/`Right` variants (instead of `A`/`B`) [#1894]
|
||||||
|
- Include size and limits in `JsonPayloadError::Overflow`. [#2162]
|
||||||
|
- Methods:
|
||||||
|
- `App::data()` is deprecated; `App::app_data()` should be preferred. [#2271]
|
||||||
|
- `dev::JsonBody::new()` returns a default limit of 32kB to be consistent with `JsonConfig` and the default behaviour of the `web::Json<T>` extractor. [#2010]
|
||||||
|
- `dev::ServiceRequest::{into_parts, from_parts}()` can no longer fail. [#1893]
|
||||||
|
- `dev::ServiceRequest::from_request` can no longer fail. [#1893]
|
||||||
|
- `dev::ServiceResponse::error_response()` now uses body type of `BoxBody`. [#2201]
|
||||||
|
- `dev::ServiceResponse::map_body()` closure receives and returns `B` instead of `ResponseBody<B>`. [#2201]
|
||||||
|
- `http::header::ContentType::html()` now produces `text/html; charset=utf-8` instead of `text/html`. [#2423]
|
||||||
|
- `HttpRequest::url_for`'s constructed URLs no longer contain query or fragment. [#2430]
|
||||||
|
- `HttpResponseBuilder::json()` can now receive data by value and reference. [#1903]
|
||||||
|
- `HttpServer::{listen_rustls, bind_rustls}()` now honor the ALPN protocols in the configuration parameter. [#2226]
|
||||||
|
- `middleware::NormalizePath()` now will not try to normalize URIs with no valid path [#2246]
|
||||||
|
- `test::TestRequest::param()` now accepts more than just static strings. [#2172]
|
||||||
|
- `web::Data::into_inner()` and `Data::get_ref()` no longer require `T: Sized`. [#2403]
|
||||||
|
- Rename `HttpServer::{client_timeout => client_request_timeout}()`. [#2611]
|
||||||
|
- Rename `HttpServer::{client_shutdown => client_disconnect_timeout}()`. [#2611]
|
||||||
|
- Rename `http::header::Accept::{mime_precedence => ranked}()`. [#2480]
|
||||||
|
- Rename `http::header::Accept::{mime_preference => preference}()`. [#2480]
|
||||||
|
- Rename `middleware::DefaultHeaders::{content_type => add_content_type}()`. [#1875]
|
||||||
|
- Rename `dev::ConnectionInfo::{remote_addr => peer_addr}`, deprecating the old name. [#2554]
|
||||||
|
- Trait Implementations:
|
||||||
|
- `HttpResponse` can now be used as a `Responder` with any body type. [#2567]
|
||||||
|
- Misc:
|
||||||
|
- Maximum number of handler extractors has increased to 12. [#2582]
|
||||||
|
- The default `TrailingSlash` behavior is now `Trim`, in line with existing documentation. See migration guide for implications. [#1875]
|
||||||
|
- `Result` extractor wrapper can now convert error types. [#2581]
|
||||||
|
- Compress middleware will return `406 Not Acceptable` when no content encoding is acceptable to the client. [#2344]
|
||||||
|
- Adjusted default JSON payload limit to 2MB (from 32kb). [#2162]
|
||||||
|
- All error trait bounds in server service builders have changed from `Into<Error>` to `Into<Response<BoxBody>>`. [#2253]
|
||||||
|
- All error trait bounds in message body and stream impls changed from `Into<Error>` to `Into<Box<dyn std::error::Error>>`. [#2253]
|
||||||
|
- Improve spec compliance of `dev::ConnectionInfo` extractor. [#2282]
|
||||||
|
- Associated types in `FromRequest` implementation for `Option` and `Result` have changed. [#2581]
|
||||||
|
- Reduce the level from `error` to `debug` for the log line that is emitted when a `500 Internal Server Error` is built using `HttpResponse::from_error`. [#2201]
|
||||||
|
- Minimum supported Rust version (MSRV) is now 1.54.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Auto-negotiation of content encoding is more fault-tolerant when using the `Compress` middleware. [#2501]
|
||||||
|
- Scope and Resource middleware can access data items set on their own layer. [#2288]
|
||||||
|
- Multiple calls to `App::data()` with the same type now keeps the latest call's data. [#1906]
|
||||||
|
- Typed headers containing lists that require one or more items now enforce this minimum. [#2482]
|
||||||
|
- `dev::ConnectionInfo::peer_addr` will no longer return the port number. [#2554]
|
||||||
|
- `dev::ConnectionInfo::realip_remote_addr` will no longer return the port number if sourcing the IP from the peer's socket address. [#2554]
|
||||||
|
- Accept wildcard `*` items in `AcceptLanguage`. [#2480]
|
||||||
|
- Relax `Unpin` bound on `S` (stream) parameter of `HttpResponseBuilder::streaming`. [#2448]
|
||||||
|
- Fix quality parse error in `http::header::AcceptEncoding` typed header. [#2344]
|
||||||
|
- Double ampersand in `middleware::Logger` format is escaped correctly. [#2067]
|
||||||
|
- Added the underlying parse error to `test::read_body_json`'s panic message. [#1812]
|
||||||
|
|
||||||
|
### Security
|
||||||
|
- `cookie` upgrade addresses [`RUSTSEC-2020-0071`].
|
||||||
|
|
||||||
|
[`rustsec-2020-0071`]: https://rustsec.org/advisories/RUSTSEC-2020-0071.html
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
- Crate Features:
|
||||||
|
- `compress` feature. [#2065]
|
||||||
|
- Functions:
|
||||||
|
- `test::load_stream` and `test::load_body`; replace usage with `body::to_bytes`. [#2518]
|
||||||
|
- `test::start_with`; moved to new `actix-test` crate. [#2112]
|
||||||
|
- `test::start`; moved to new `actix-test` crate. [#2112]
|
||||||
|
- `test::unused_addr`; moved to new `actix-test` crate. [#2112]
|
||||||
|
- Traits:
|
||||||
|
- `BodyEncoding`; signalling content encoding is now only done via the `Content-Encoding` header. [#2565]
|
||||||
|
- Types:
|
||||||
|
- `dev::{BodySize, MessageBody, SizedStream}` re-exports; they are exposed through the `body` module. [#2468]
|
||||||
|
- `EitherExtractError` direct export. [#2510]
|
||||||
|
- `rt::{Arbiter, ArbiterHandle}` re-exports. [#2619]
|
||||||
|
- `test::TestServer`; moved to new `actix-test` crate. [#2112]
|
||||||
|
- `test::TestServerConfig`; moved to new `actix-test` crate. [#2112]
|
||||||
|
- `web::HttpRequest` re-export. [#2663]
|
||||||
|
- `web::HttpResponse` re-export. [#2663]
|
||||||
|
- Methods:
|
||||||
|
- `AppService::set_service_data`; for custom HTTP service factories adding application data, use the layered data model by calling `ServiceRequest::add_data_container` when handling requests instead. [#1906]
|
||||||
|
- `dev::ConnectionInfo::get`. [#2487]
|
||||||
|
- `dev::ServiceResponse::checked_expr`. [#2401]
|
||||||
|
- `HttpRequestBuilder::del_cookie`. [#2591]
|
||||||
|
- `HttpResponse::take_body` and old `HttpResponse::into_body` method that casted body type. [#2201]
|
||||||
|
- `HttpResponseBuilder::json2()`. [#1903]
|
||||||
|
- `middleware::Compress::new`; restricting compression algorithm is done through feature flags. [#2501]
|
||||||
|
- `test::TestRequest::with_header()`; use `test::TestRequest::default().insert_header()`. [#1869]
|
||||||
|
- Trait Implementations:
|
||||||
|
- Implementation of `From<either::Either>` for `Either` crate. [#2516]
|
||||||
|
- Implementation of `Future` for `HttpResponse`. [#2601]
|
||||||
|
- Misc:
|
||||||
|
- The `client` module was removed; use the `awc` crate directly. [871ca5e4]
|
||||||
|
- `middleware::{normalize, err_handlers}` modules; all necessary middleware types are now exposed in the `middleware` module.
|
||||||
|
|
||||||
|
[#1812]: https://github.com/actix/actix-web/pull/1812
|
||||||
|
[#1813]: https://github.com/actix/actix-web/pull/1813
|
||||||
|
[#1852]: https://github.com/actix/actix-web/pull/1852
|
||||||
|
[#1865]: https://github.com/actix/actix-web/pull/1865
|
||||||
|
[#1869]: https://github.com/actix/actix-web/pull/1869
|
||||||
|
[#1875]: https://github.com/actix/actix-web/pull/1875
|
||||||
|
[#1878]: https://github.com/actix/actix-web/pull/1878
|
||||||
|
[#1891]: https://github.com/actix/actix-web/pull/1891
|
||||||
|
[#1893]: https://github.com/actix/actix-web/pull/1893
|
||||||
|
[#1894]: https://github.com/actix/actix-web/pull/1894
|
||||||
|
[#1903]: https://github.com/actix/actix-web/pull/1903
|
||||||
|
[#1905]: https://github.com/actix/actix-web/pull/1905
|
||||||
|
[#1906]: https://github.com/actix/actix-web/pull/1906
|
||||||
|
[#1933]: https://github.com/actix/actix-web/pull/1933
|
||||||
|
[#1957]: https://github.com/actix/actix-web/pull/1957
|
||||||
|
[#1957]: https://github.com/actix/actix-web/pull/1957
|
||||||
|
[#1981]: https://github.com/actix/actix-web/pull/1981
|
||||||
|
[#1988]: https://github.com/actix/actix-web/pull/1988
|
||||||
|
[#2010]: https://github.com/actix/actix-web/pull/2010
|
||||||
|
[#2065]: https://github.com/actix/actix-web/pull/2065
|
||||||
|
[#2067]: https://github.com/actix/actix-web/pull/2067
|
||||||
|
[#2093]: https://github.com/actix/actix-web/pull/2093
|
||||||
|
[#2094]: https://github.com/actix/actix-web/pull/2094
|
||||||
|
[#2097]: https://github.com/actix/actix-web/pull/2097
|
||||||
|
[#2112]: https://github.com/actix/actix-web/pull/2112
|
||||||
|
[#2148]: https://github.com/actix/actix-web/pull/2148
|
||||||
|
[#2162]: https://github.com/actix/actix-web/pull/2162
|
||||||
|
[#2172]: https://github.com/actix/actix-web/pull/2172
|
||||||
|
[#2177]: https://github.com/actix/actix-web/pull/2177
|
||||||
|
[#2200]: https://github.com/actix/actix-web/pull/2200
|
||||||
|
[#2201]: https://github.com/actix/actix-web/pull/2201
|
||||||
|
[#2201]: https://github.com/actix/actix-web/pull/2201
|
||||||
|
[#2233]: https://github.com/actix/actix-web/pull/2233
|
||||||
|
[#2246]: https://github.com/actix/actix-web/pull/2246
|
||||||
|
[#2250]: https://github.com/actix/actix-web/pull/2250
|
||||||
|
[#2253]: https://github.com/actix/actix-web/pull/2253
|
||||||
|
[#2262]: https://github.com/actix/actix-web/pull/2262
|
||||||
|
[#2263]: https://github.com/actix/actix-web/pull/2263
|
||||||
|
[#2271]: https://github.com/actix/actix-web/pull/2271
|
||||||
|
[#2282]: https://github.com/actix/actix-web/pull/2282
|
||||||
|
[#2288]: https://github.com/actix/actix-web/pull/2288
|
||||||
|
[#2325]: https://github.com/actix/actix-web/pull/2325
|
||||||
|
[#2344]: https://github.com/actix/actix-web/pull/2344
|
||||||
|
[#2362]: https://github.com/actix/actix-web/pull/2362
|
||||||
|
[#2379]: https://github.com/actix/actix-web/pull/2379
|
||||||
|
[#2384]: https://github.com/actix/actix-web/pull/2384
|
||||||
|
[#2401]: https://github.com/actix/actix-web/pull/2401
|
||||||
|
[#2403]: https://github.com/actix/actix-web/pull/2403
|
||||||
|
[#2409]: https://github.com/actix/actix-web/pull/2409
|
||||||
|
[#2414]: https://github.com/actix/actix-web/pull/2414
|
||||||
|
[#2423]: https://github.com/actix/actix-web/pull/2423
|
||||||
|
[#2430]: https://github.com/actix/actix-web/pull/2430
|
||||||
|
[#2442]: https://github.com/actix/actix-web/pull/2442
|
||||||
|
[#2446]: https://github.com/actix/actix-web/pull/2446
|
||||||
|
[#2448]: https://github.com/actix/actix-web/pull/2448
|
||||||
|
[#2468]: https://github.com/actix/actix-web/pull/2468
|
||||||
|
[#2474]: https://github.com/actix/actix-web/pull/2474
|
||||||
|
[#2480]: https://github.com/actix/actix-web/pull/2480
|
||||||
|
[#2482]: https://github.com/actix/actix-web/pull/2482
|
||||||
|
[#2484]: https://github.com/actix/actix-web/pull/2484
|
||||||
|
[#2485]: https://github.com/actix/actix-web/pull/2485
|
||||||
|
[#2487]: https://github.com/actix/actix-web/pull/2487
|
||||||
|
[#2491]: https://github.com/actix/actix-web/pull/2491
|
||||||
|
[#2492]: https://github.com/actix/actix-web/pull/2492
|
||||||
|
[#2493]: https://github.com/actix/actix-web/pull/2493
|
||||||
|
[#2499]: https://github.com/actix/actix-web/pull/2499
|
||||||
|
[#2501]: https://github.com/actix/actix-web/pull/2501
|
||||||
|
[#2510]: https://github.com/actix/actix-web/pull/2510
|
||||||
|
[#2515]: https://github.com/actix/actix-web/pull/2515
|
||||||
|
[#2516]: https://github.com/actix/actix-web/pull/2516
|
||||||
|
[#2518]: https://github.com/actix/actix-web/pull/2518
|
||||||
|
[#2523]: https://github.com/actix/actix-web/pull/2523
|
||||||
|
[#2526]: https://github.com/actix/actix-web/pull/2526
|
||||||
|
[#2552]: https://github.com/actix/actix-web/pull/2552
|
||||||
|
[#2554]: https://github.com/actix/actix-web/pull/2554
|
||||||
|
[#2555]: https://github.com/actix/actix-web/pull/2555
|
||||||
|
[#2565]: https://github.com/actix/actix-web/pull/2565
|
||||||
|
[#2567]: https://github.com/actix/actix-web/pull/2567
|
||||||
|
[#2569]: https://github.com/actix/actix-web/pull/2569
|
||||||
|
[#2581]: https://github.com/actix/actix-web/pull/2581
|
||||||
|
[#2582]: https://github.com/actix/actix-web/pull/2582
|
||||||
|
[#2584]: https://github.com/actix/actix-web/pull/2584
|
||||||
|
[#2585]: https://github.com/actix/actix-web/pull/2585
|
||||||
|
[#2586]: https://github.com/actix/actix-web/pull/2586
|
||||||
|
[#2591]: https://github.com/actix/actix-web/pull/2591
|
||||||
|
[#2594]: https://github.com/actix/actix-web/pull/2594
|
||||||
|
[#2601]: https://github.com/actix/actix-web/pull/2601
|
||||||
|
[#2611]: https://github.com/actix/actix-web/pull/2611
|
||||||
|
[#2619]: https://github.com/actix/actix-web/pull/2619
|
||||||
|
[#2625]: https://github.com/actix/actix-web/pull/2625
|
||||||
|
[#2635]: https://github.com/actix/actix-web/pull/2635
|
||||||
[#2659]: https://github.com/actix/actix-web/pull/2659
|
[#2659]: https://github.com/actix/actix-web/pull/2659
|
||||||
|
[#2663]: https://github.com/actix/actix-web/pull/2663
|
||||||
|
[871ca5e4]: https://github.com/actix/actix-web/commit/871ca5e4ae2bdc22d1ea02701c2992fa8d04aed7
|
||||||
|
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>4.0.0 Pre-Releases</summary>
|
||||||
|
|
||||||
## 4.0.0-rc.3 - 2022-02-08
|
## 4.0.0-rc.3 - 2022-02-08
|
||||||
### Changed
|
### Changed
|
||||||
- `middleware::Condition` gained a broader compatibility; `Compat` is needed in fewer cases. [#2635]
|
- `middleware::Condition` gained a broader compatibility; `Compat` is needed in fewer cases. [#2635]
|
||||||
|
@ -453,6 +721,7 @@
|
||||||
[#1875]: https://github.com/actix/actix-web/pull/1875
|
[#1875]: https://github.com/actix/actix-web/pull/1875
|
||||||
[#1878]: https://github.com/actix/actix-web/pull/1878
|
[#1878]: https://github.com/actix/actix-web/pull/1878
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
## 3.3.3 - 2021-12-18
|
## 3.3.3 - 2021-12-18
|
||||||
### Changed
|
### Changed
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "actix-web"
|
name = "actix-web"
|
||||||
version = "4.0.0-rc.3"
|
version = "4.0.0"
|
||||||
authors = [
|
authors = [
|
||||||
"Nikolay Kim <fafhrd91@gmail.com>",
|
"Nikolay Kim <fafhrd91@gmail.com>",
|
||||||
"Rob Ede <robjtede@icloud.com>",
|
"Rob Ede <robjtede@icloud.com>",
|
||||||
|
@ -71,9 +71,9 @@ actix-service = "2"
|
||||||
actix-utils = "3"
|
actix-utils = "3"
|
||||||
actix-tls = { version = "3", default-features = false, optional = true }
|
actix-tls = { version = "3", default-features = false, optional = true }
|
||||||
|
|
||||||
actix-http = { version = "3.0.0-rc.4", features = ["http2", "ws"] }
|
actix-http = { version = "3.0.0", features = ["http2", "ws"] }
|
||||||
actix-router = "0.5.0"
|
actix-router = "0.5.0"
|
||||||
actix-web-codegen = { version = "0.5.0-rc.2", optional = true }
|
actix-web-codegen = { version = "4.0.0", optional = true }
|
||||||
|
|
||||||
ahash = "0.7"
|
ahash = "0.7"
|
||||||
bytes = "1"
|
bytes = "1"
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
This guide walks you through the process of migrating from v3.x.y to v4.x.y.
|
This guide walks you through the process of migrating from v3.x.y to v4.x.y.
|
||||||
If you are migrating to v4.x.y from an older version of Actix Web (v2.x.y or earlier), check out the other historical migration notes in this folder.
|
If you are migrating to v4.x.y from an older version of Actix Web (v2.x.y or earlier), check out the other historical migration notes in this folder.
|
||||||
|
|
||||||
This document is not designed to be exhaustive—it focuses on the most significant changes coming in v4. You can find an exhaustive changelog in [CHANGES.md](./CHANGES.md), complete of PR links. If you think that some of the changes that we omitted deserve to be called out in this document, please open an issue or submit a PR.
|
This document is not designed to be exhaustive—it focuses on the most significant changes coming in v4. You can find an exhaustive changelog in the changelogs for [`actix-web`](./CHANGES.md#400---2022-02-25) and [`actix-http`](../actix-http/CHANGES.md#300---2022-02-25), complete of PR links. If you think that some of the changes that we omitted deserve to be called out in this document, please open an issue or submit a PR.
|
||||||
|
|
||||||
Headings marked with :warning: are **breaking behavioral changes**. They will probably not surface as compile-time errors though automated tests _might_ detect their effects on your app.
|
Headings marked with :warning: are **breaking behavioral changes**. They will probably not surface as compile-time errors though automated tests _might_ detect their effects on your app.
|
||||||
|
|
||||||
|
|
|
@ -6,10 +6,10 @@
|
||||||
<p>
|
<p>
|
||||||
|
|
||||||
[![crates.io](https://img.shields.io/crates/v/actix-web?label=latest)](https://crates.io/crates/actix-web)
|
[![crates.io](https://img.shields.io/crates/v/actix-web?label=latest)](https://crates.io/crates/actix-web)
|
||||||
[![Documentation](https://docs.rs/actix-web/badge.svg?version=4.0.0-rc.3)](https://docs.rs/actix-web/4.0.0-rc.3)
|
[![Documentation](https://docs.rs/actix-web/badge.svg?version=4.0.0)](https://docs.rs/actix-web/4.0.0)
|
||||||
![MSRV](https://img.shields.io/badge/rustc-1.54+-ab6000.svg)
|
![MSRV](https://img.shields.io/badge/rustc-1.54+-ab6000.svg)
|
||||||
![MIT or Apache 2.0 licensed](https://img.shields.io/crates/l/actix-web.svg)
|
![MIT or Apache 2.0 licensed](https://img.shields.io/crates/l/actix-web.svg)
|
||||||
[![Dependency Status](https://deps.rs/crate/actix-web/4.0.0-rc.3/status.svg)](https://deps.rs/crate/actix-web/4.0.0-rc.3)
|
[![Dependency Status](https://deps.rs/crate/actix-web/4.0.0/status.svg)](https://deps.rs/crate/actix-web/4.0.0)
|
||||||
<br />
|
<br />
|
||||||
[![CI](https://github.com/actix/actix-web/actions/workflows/ci.yml/badge.svg)](https://github.com/actix/actix-web/actions/workflows/ci.yml)
|
[![CI](https://github.com/actix/actix-web/actions/workflows/ci.yml/badge.svg)](https://github.com/actix/actix-web/actions/workflows/ci.yml)
|
||||||
[![codecov](https://codecov.io/gh/actix/actix-web/branch/master/graph/badge.svg)](https://codecov.io/gh/actix/actix-web)
|
[![codecov](https://codecov.io/gh/actix/actix-web/branch/master/graph/badge.svg)](https://codecov.io/gh/actix/actix-web)
|
||||||
|
|
|
@ -2,6 +2,10 @@
|
||||||
//!
|
//!
|
||||||
//! Most users will not have to interact with the types in this module, but it is useful for those
|
//! Most users will not have to interact with the types in this module, but it is useful for those
|
||||||
//! writing extractors, middleware, libraries, or interacting with the service API directly.
|
//! writing extractors, middleware, libraries, or interacting with the service API directly.
|
||||||
|
//!
|
||||||
|
//! # Request Extractors
|
||||||
|
//! - [`ConnectionInfo`]: Connection information
|
||||||
|
//! - [`PeerAddr`]: Connection information
|
||||||
|
|
||||||
pub use actix_http::{Extensions, Payload, RequestHead, Response, ResponseHead};
|
pub use actix_http::{Extensions, Payload, RequestHead, Response, ResponseHead};
|
||||||
pub use actix_router::{Path, ResourceDef, ResourcePath, Url};
|
pub use actix_router::{Path, ResourceDef, ResourcePath, Url};
|
||||||
|
|
|
@ -1,4 +1,18 @@
|
||||||
//! Essentials helper functions and types for application registration.
|
//! Essentials helper functions and types for application registration.
|
||||||
|
//!
|
||||||
|
//! # Request Extractors
|
||||||
|
//! - [`Data`]: Application data item
|
||||||
|
//! - [`ReqData`]: Request-local data item
|
||||||
|
//! - [`Path`]: URL path parameters / dynamic segments
|
||||||
|
//! - [`Query`]: URL query parameters
|
||||||
|
//! - [`Header`]: Typed header
|
||||||
|
//! - [`Json`]: JSON payload
|
||||||
|
//! - [`Form`]: URL-encoded payload
|
||||||
|
//! - [`Bytes`]: Raw payload
|
||||||
|
//!
|
||||||
|
//! # Responders
|
||||||
|
//! - [`Json`]: JSON request payload
|
||||||
|
//! - [`Bytes`]: Raw request payload
|
||||||
|
|
||||||
use std::future::Future;
|
use std::future::Future;
|
||||||
|
|
||||||
|
@ -12,9 +26,7 @@ use crate::{
|
||||||
|
|
||||||
pub use crate::config::ServiceConfig;
|
pub use crate::config::ServiceConfig;
|
||||||
pub use crate::data::Data;
|
pub use crate::data::Data;
|
||||||
pub use crate::request::HttpRequest;
|
|
||||||
pub use crate::request_data::ReqData;
|
pub use crate::request_data::ReqData;
|
||||||
pub use crate::response::HttpResponse;
|
|
||||||
pub use crate::types::*;
|
pub use crate::types::*;
|
||||||
|
|
||||||
/// Creates a new resource for a specific path.
|
/// Creates a new resource for a specific path.
|
||||||
|
|
|
@ -60,7 +60,7 @@ dangerous-h2c = []
|
||||||
[dependencies]
|
[dependencies]
|
||||||
actix-codec = "0.5"
|
actix-codec = "0.5"
|
||||||
actix-service = "2.0.0"
|
actix-service = "2.0.0"
|
||||||
actix-http = { version = "3.0.0-rc.4", features = ["http2", "ws"] }
|
actix-http = { version = "3.0.0", features = ["http2", "ws"] }
|
||||||
actix-rt = { version = "2.1", default-features = false }
|
actix-rt = { version = "2.1", default-features = false }
|
||||||
actix-tls = { version = "3", features = ["connect", "uri"] }
|
actix-tls = { version = "3", features = ["connect", "uri"] }
|
||||||
actix-utils = "3.0.0"
|
actix-utils = "3.0.0"
|
||||||
|
@ -93,13 +93,13 @@ tls-rustls = { package = "rustls", version = "0.20.0", optional = true, features
|
||||||
trust-dns-resolver = { version = "0.20.0", optional = true }
|
trust-dns-resolver = { version = "0.20.0", optional = true }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
actix-http = { version = "3.0.0-rc.4", features = ["openssl"] }
|
actix-http = { version = "3.0.0", features = ["openssl"] }
|
||||||
actix-http-test = { version = "3.0.0-beta.13", features = ["openssl"] }
|
actix-http-test = { version = "3.0.0-beta.13", features = ["openssl"] }
|
||||||
actix-server = "2"
|
actix-server = "2"
|
||||||
actix-test = { version = "0.1.0-beta.13", features = ["openssl", "rustls"] }
|
actix-test = { version = "0.1.0-beta.13", features = ["openssl", "rustls"] }
|
||||||
actix-tls = { version = "3", features = ["openssl", "rustls"] }
|
actix-tls = { version = "3", features = ["openssl", "rustls"] }
|
||||||
actix-utils = "3.0.0"
|
actix-utils = "3.0.0"
|
||||||
actix-web = { version = "4.0.0-rc.3", features = ["openssl"] }
|
actix-web = { version = "4.0.0", features = ["openssl"] }
|
||||||
|
|
||||||
brotli = "3.3.3"
|
brotli = "3.3.3"
|
||||||
const-str = "0.3"
|
const-str = "0.3"
|
||||||
|
|
Loading…
Reference in a new issue