From 7cbb7cf1354fe3ea4c8c2774bf7616e382caf8d0 Mon Sep 17 00:00:00 2001 From: Jonas Platte Date: Tue, 9 Aug 2022 18:43:02 +0200 Subject: [PATCH] Use new Cargo features to avoid implicit features for optional dependencies (#1239) * Fix changelog entry for MSRV change in axum-extra 0.3.5 * Bump MSRV to 1.60 for axum, axum-extra, axum-macros * Use new Cargo features to avoid implicit features for optional dependencies --- .github/workflows/CI.yml | 2 +- axum-extra/CHANGELOG.md | 4 +++- axum-extra/Cargo.toml | 29 +++++++++++++++--------- axum-extra/README.md | 2 +- axum-extra/src/extract/cookie/mod.rs | 10 ++++---- axum-extra/src/extract/cookie/private.rs | 12 +++++----- axum-extra/src/extract/cookie/signed.rs | 14 ++++++------ axum-macros/CHANGELOG.md | 4 +++- axum-macros/Cargo.toml | 2 +- axum-macros/README.md | 2 +- axum/CHANGELOG.md | 2 ++ axum/Cargo.toml | 14 ++++++------ axum/README.md | 2 +- 13 files changed, 56 insertions(+), 43 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index f440de4a87..5a93bc2c89 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -2,7 +2,7 @@ name: CI env: CARGO_TERM_COLOR: always - MSRV: 1.56 + MSRV: '1.60' on: push: diff --git a/axum-extra/CHANGELOG.md b/axum-extra/CHANGELOG.md index a583d2c7c3..a93e88e060 100644 --- a/axum-extra/CHANGELOG.md +++ b/axum-extra/CHANGELOG.md @@ -12,13 +12,15 @@ and this project adheres to [Semantic Versioning]. - **changed:** For methods that accept some `S: Service`, the bounds have been relaxed so the response type must implement `IntoResponse` rather than being a literal `Response` +- **change:** axum-extra's MSRV is now 1.60 ([#1239]) [#1119]: https://github.com/tokio-rs/axum/pull/1119 +[#1239]: https://github.com/tokio-rs/axum/pull/1239 # 0.3.5 (27. June, 2022) - **added:** Add `JsonLines` for streaming newline delimited JSON ([#1093]) -- **change:** axum's MSRV is now 1.56 ([#1098]) +- **change:** axum-extra's MSRV is now 1.56 ([#1098]) [#1093]: https://github.com/tokio-rs/axum/pull/1093 [#1098]: https://github.com/tokio-rs/axum/pull/1098 diff --git a/axum-extra/Cargo.toml b/axum-extra/Cargo.toml index 2cf7dbbb8c..aad940475a 100644 --- a/axum-extra/Cargo.toml +++ b/axum-extra/Cargo.toml @@ -2,7 +2,7 @@ categories = ["asynchronous", "network-programming", "web-programming"] description = "Extra utilities for axum" edition = "2021" -rust-version = "1.56" +rust-version = "1.60" homepage = "https://github.com/tokio-rs/axum" keywords = ["http", "web", "framework"] license = "MIT" @@ -14,16 +14,23 @@ version = "0.3.5" [features] default = [] -async-read-body = ["tokio-util/io"] -cookie = ["cookie-lib"] -cookie-private = ["cookie", "cookie-lib/private"] -cookie-signed = ["cookie", "cookie-lib/signed"] -erased-json = ["serde_json", "serde"] -form = ["serde", "serde_html_form"] -json-lines = ["serde_json", "serde", "tokio-util/io", "tokio-stream/io-util"] -query = ["serde", "serde_html_form"] +async-read-body = ["dep:tokio-util", "tokio-util?/io"] +cookie = ["dep:cookie"] +cookie-private = ["cookie", "cookie?/private"] +cookie-signed = ["cookie", "cookie?/signed"] +erased-json = ["dep:serde_json", "dep:serde"] +form = ["dep:serde", "dep:serde_html_form"] +json-lines = [ + "dep:serde_json", + "dep:serde", + "dep:tokio-util", + "dep:tokio-stream", + "tokio-util?/io", + "tokio-stream?/io-util" +] +query = ["dep:serde", "dep:serde_html_form"] spa = ["tower-http/fs"] -typed-routing = ["axum-macros", "serde", "percent-encoding"] +typed-routing = ["dep:axum-macros", "dep:serde", "dep:percent-encoding"] [dependencies] axum = { path = "../axum", version = "0.5", default-features = false } @@ -40,7 +47,7 @@ tower-service = "0.3" # optional dependencies axum-macros = { path = "../axum-macros", version = "0.2.2", optional = true } -cookie-lib = { package = "cookie", version = "0.16", features = ["percent-encode"], optional = true } +cookie = { package = "cookie", version = "0.16", features = ["percent-encode"], optional = true } percent-encoding = { version = "2.1", optional = true } serde = { version = "1.0", optional = true } serde_html_form = { version = "0.1", optional = true } diff --git a/axum-extra/README.md b/axum-extra/README.md index 07d2252e57..25fa2e8d74 100644 --- a/axum-extra/README.md +++ b/axum-extra/README.md @@ -14,7 +14,7 @@ This crate uses `#![forbid(unsafe_code)]` to ensure everything is implemented in ## Minimum supported Rust version -axum-extra's MSRV is 1.56. +axum-extra's MSRV is 1.60. ## Getting Help diff --git a/axum-extra/src/extract/cookie/mod.rs b/axum-extra/src/extract/cookie/mod.rs index 7bda1ea34e..04eb5877c7 100644 --- a/axum-extra/src/extract/cookie/mod.rs +++ b/axum-extra/src/extract/cookie/mod.rs @@ -23,10 +23,10 @@ pub use self::private::PrivateCookieJar; #[cfg(feature = "cookie-signed")] pub use self::signed::SignedCookieJar; -pub use cookie_lib::{Cookie, Expiration, SameSite}; +pub use cookie::{Cookie, Expiration, SameSite}; #[cfg(any(feature = "cookie-signed", feature = "cookie-private"))] -pub use cookie_lib::Key; +pub use cookie::Key; /// Extractor that grabs cookies from the request and manages the jar. /// @@ -84,7 +84,7 @@ pub use cookie_lib::Key; /// ``` #[derive(Debug)] pub struct CookieJar { - jar: cookie_lib::CookieJar, + jar: cookie::CookieJar, } #[async_trait] @@ -95,7 +95,7 @@ where type Rejection = Infallible; async fn from_request(req: &mut RequestParts) -> Result { - let mut jar = cookie_lib::CookieJar::new(); + let mut jar = cookie::CookieJar::new(); for cookie in cookies_from_request(req) { jar.add_original(cookie); } @@ -193,7 +193,7 @@ impl IntoResponse for CookieJar { } } -fn set_cookies(jar: cookie_lib::CookieJar, headers: &mut HeaderMap) { +fn set_cookies(jar: cookie::CookieJar, headers: &mut HeaderMap) { for cookie in jar.delta() { if let Ok(header_value) = cookie.encoded().to_string().parse() { headers.append(SET_COOKIE, header_value); diff --git a/axum-extra/src/extract/cookie/private.rs b/axum-extra/src/extract/cookie/private.rs index a583a3c9a9..032d020adb 100644 --- a/axum-extra/src/extract/cookie/private.rs +++ b/axum-extra/src/extract/cookie/private.rs @@ -5,7 +5,7 @@ use axum::{ response::{IntoResponse, IntoResponseParts, Response, ResponseParts}, Extension, }; -use cookie_lib::PrivateJar; +use cookie::PrivateJar; use std::{convert::Infallible, fmt, marker::PhantomData}; /// Extractor that grabs private cookies from the request and manages the jar. @@ -57,7 +57,7 @@ use std::{convert::Infallible, fmt, marker::PhantomData}; /// # let app: Router = app; /// ``` pub struct PrivateCookieJar { - jar: cookie_lib::CookieJar, + jar: cookie::CookieJar, key: Key, // The key used to extract the key extension. Allows users to use multiple keys for different // jars. Maybe a library wants its own key. @@ -84,7 +84,7 @@ where async fn from_request(req: &mut RequestParts) -> Result { let key = Extension::::from_request(req).await?.0.into(); - let mut jar = cookie_lib::CookieJar::new(); + let mut jar = cookie::CookieJar::new(); let mut private_jar = jar.private_mut(&key); for cookie in cookies_from_request(req) { if let Some(cookie) = private_jar.decrypt(cookie) { @@ -176,11 +176,11 @@ impl PrivateCookieJar { } } - fn private_jar(&self) -> PrivateJar<&'_ cookie_lib::CookieJar> { + fn private_jar(&self) -> PrivateJar<&'_ cookie::CookieJar> { self.jar.private(&self.key) } - fn private_jar_mut(&mut self) -> PrivateJar<&'_ mut cookie_lib::CookieJar> { + fn private_jar_mut(&mut self) -> PrivateJar<&'_ mut cookie::CookieJar> { self.jar.private_mut(&self.key) } } @@ -202,7 +202,7 @@ impl IntoResponse for PrivateCookieJar { struct PrivateCookieJarIter<'a, K> { jar: &'a PrivateCookieJar, - iter: cookie_lib::Iter<'a>, + iter: cookie::Iter<'a>, } impl<'a, K> Iterator for PrivateCookieJarIter<'a, K> { diff --git a/axum-extra/src/extract/cookie/signed.rs b/axum-extra/src/extract/cookie/signed.rs index 51fb865c6e..05a3880eab 100644 --- a/axum-extra/src/extract/cookie/signed.rs +++ b/axum-extra/src/extract/cookie/signed.rs @@ -5,8 +5,8 @@ use axum::{ response::{IntoResponse, IntoResponseParts, Response, ResponseParts}, Extension, }; -use cookie_lib::SignedJar; -use cookie_lib::{Cookie, Key}; +use cookie::SignedJar; +use cookie::{Cookie, Key}; use std::{convert::Infallible, fmt, marker::PhantomData}; /// Extractor that grabs signed cookies from the request and manages the jar. @@ -75,7 +75,7 @@ use std::{convert::Infallible, fmt, marker::PhantomData}; /// # let app: Router = app; /// ``` pub struct SignedCookieJar { - jar: cookie_lib::CookieJar, + jar: cookie::CookieJar, key: Key, // The key used to extract the key extension. Allows users to use multiple keys for different // jars. Maybe a library wants its own key. @@ -102,7 +102,7 @@ where async fn from_request(req: &mut RequestParts) -> Result { let key = Extension::::from_request(req).await?.0.into(); - let mut jar = cookie_lib::CookieJar::new(); + let mut jar = cookie::CookieJar::new(); let mut signed_jar = jar.signed_mut(&key); for cookie in cookies_from_request(req) { if let Some(cookie) = signed_jar.verify(cookie) { @@ -195,11 +195,11 @@ impl SignedCookieJar { } } - fn signed_jar(&self) -> SignedJar<&'_ cookie_lib::CookieJar> { + fn signed_jar(&self) -> SignedJar<&'_ cookie::CookieJar> { self.jar.signed(&self.key) } - fn signed_jar_mut(&mut self) -> SignedJar<&'_ mut cookie_lib::CookieJar> { + fn signed_jar_mut(&mut self) -> SignedJar<&'_ mut cookie::CookieJar> { self.jar.signed_mut(&self.key) } } @@ -221,7 +221,7 @@ impl IntoResponse for SignedCookieJar { struct SignedCookieJarIter<'a, K> { jar: &'a SignedCookieJar, - iter: cookie_lib::Iter<'a>, + iter: cookie::Iter<'a>, } impl<'a, K> Iterator for SignedCookieJarIter<'a, K> { diff --git a/axum-macros/CHANGELOG.md b/axum-macros/CHANGELOG.md index 406fa472e6..63597979a6 100644 --- a/axum-macros/CHANGELOG.md +++ b/axum-macros/CHANGELOG.md @@ -7,7 +7,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 # Unreleased -- None. +- **change:** axum-macro's MSRV is now 1.60 ([#1239]) + +[#1239]: https://github.com/tokio-rs/axum/pull/1239 # 0.2.3 (27. June, 2022) diff --git a/axum-macros/Cargo.toml b/axum-macros/Cargo.toml index b5b932b717..b8e0a6e22d 100644 --- a/axum-macros/Cargo.toml +++ b/axum-macros/Cargo.toml @@ -2,7 +2,7 @@ categories = ["asynchronous", "network-programming", "web-programming"] description = "Macros for axum" edition = "2021" -rust-version = "1.56" +rust-version = "1.60" homepage = "https://github.com/tokio-rs/axum" keywords = ["axum"] license = "MIT" diff --git a/axum-macros/README.md b/axum-macros/README.md index 0018fc17ba..acaf06122a 100644 --- a/axum-macros/README.md +++ b/axum-macros/README.md @@ -14,7 +14,7 @@ This crate uses `#![forbid(unsafe_code)]` to ensure everything is implemented in ## Minimum supported Rust version -axum-macros's MSRV is 1.56. +axum-macros's MSRV is 1.60. ## Getting Help diff --git a/axum/CHANGELOG.md b/axum/CHANGELOG.md index fa1169fc63..9034c900a0 100644 --- a/axum/CHANGELOG.md +++ b/axum/CHANGELOG.md @@ -32,6 +32,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - **changed:** For methods that accept some `S: Service`, the bounds have been relaxed so the response type must implement `IntoResponse` rather than being a literal `Response` +- **change:** axum's MSRV is now 1.60 ([#1239]) [#1171]: https://github.com/tokio-rs/axum/pull/1171 [#1077]: https://github.com/tokio-rs/axum/pull/1077 @@ -41,6 +42,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 [#1130]: https://github.com/tokio-rs/axum/pull/1130 [#1135]: https://github.com/tokio-rs/axum/pull/1135 [#1152]: https://github.com/tokio-rs/axum/pull/1152 +[#1239]: https://github.com/tokio-rs/axum/pull/1239 [#924]: https://github.com/tokio-rs/axum/pull/924 # 0.5.10 (28. June, 2022) diff --git a/axum/Cargo.toml b/axum/Cargo.toml index 4aeac8bb9b..fda655d29e 100644 --- a/axum/Cargo.toml +++ b/axum/Cargo.toml @@ -4,7 +4,7 @@ version = "0.5.10" categories = ["asynchronous", "network-programming", "web-programming::http-server"] description = "Web framework that focuses on ergonomics and modularity" edition = "2021" -rust-version = "1.56" +rust-version = "1.60" homepage = "https://github.com/tokio-rs/axum" keywords = ["http", "web", "framework"] license = "MIT" @@ -13,17 +13,17 @@ repository = "https://github.com/tokio-rs/axum" [features] default = ["form", "http1", "json", "matched-path", "original-uri", "query", "tower-log"] -form = ["serde_urlencoded"] +form = ["dep:serde_urlencoded"] http1 = ["hyper/http1"] http2 = ["hyper/http2"] -json = ["serde_json"] -macros = ["axum-macros"] +json = ["dep:serde_json"] +macros = ["dep:axum-macros"] matched-path = [] -multipart = ["multer"] +multipart = ["dep:multer"] original-uri = [] -query = ["serde_urlencoded"] +query = ["dep:serde_urlencoded"] tower-log = ["tower/log"] -ws = ["tokio-tungstenite", "sha-1", "base64"] +ws = ["dep:tokio-tungstenite", "dep:sha-1", "dep:base64"] # Required for intra-doc links to resolve correctly __private_docs = ["tower/full", "tower-http/full"] diff --git a/axum/README.md b/axum/README.md index b78148c37d..bec780d6cb 100644 --- a/axum/README.md +++ b/axum/README.md @@ -117,7 +117,7 @@ This crate uses `#![forbid(unsafe_code)]` to ensure everything is implemented in ## Minimum supported Rust version -axum's MSRV is 1.56. +axum's MSRV is 1.60. ## Examples