From a061b23d8b2c691bc569fbdefeb2ec5a17a78dda Mon Sep 17 00:00:00 2001 From: Marijn Suijten Date: Thu, 7 Apr 2022 16:47:59 +0200 Subject: [PATCH] Take advantage of weak features in Rust 1.60 for TLS enablement Previously it was impossible to have a unified feature named `rustls` or `native-tls` that would turn on the respective TLS backend in the chosen transport (`reqwest` or `ureq`) as a feature of `/tls` would implicitly turn on ``. Since Rust 1.60 it is now possible to specify this crate-feature enablement through the use of the question mark in `?/tls`, which will only enable the `tls` feature if `` was enabled through other means (another feature). Secondly we can now also let optional crates have the same name as a feature, and use `dep:` to refer to the crate instead of the dependency, making for a more pleasant experience without renames to underscore suffixes. --- sentry/Cargo.toml | 24 ++++++++++++------------ sentry/src/transports/curl.rs | 2 +- sentry/src/transports/mod.rs | 8 ++++---- sentry/src/transports/reqwest.rs | 4 ++-- sentry/src/transports/surf.rs | 2 +- sentry/src/transports/ureq.rs | 6 +----- sentry/tests/test_tower.rs | 2 +- 7 files changed, 22 insertions(+), 26 deletions(-) diff --git a/sentry/Cargo.toml b/sentry/Cargo.toml index a797fe41..e7b189d7 100644 --- a/sentry/Cargo.toml +++ b/sentry/Cargo.toml @@ -38,14 +38,14 @@ test = ["sentry-core/test"] debug-logs = ["log_", "sentry-core/debug-logs"] # transports transport = ["reqwest", "native-tls"] -reqwest = ["reqwest_", "httpdate", "tokio"] -curl = ["curl_", "httpdate"] -surf-h1 = ["surf_/h1-client", "httpdate"] -surf = ["surf_/curl-client", "httpdate", "tokio"] -native-tls = ["reqwest_/default-tls"] -rustls = ["reqwest_/rustls-tls"] -ureq = ["ureq_/tls", "httpdate"] -ureq-native-tls = ["ureq_/native-tls", "httpdate"] +reqwest = ["dep:reqwest", "httpdate", "tokio"] +curl = ["dep:curl", "httpdate"] +surf-h1 = ["surf/h1-client", "httpdate"] +surf = ["surf/curl-client", "httpdate", "tokio"] +ureq = ["dep:ureq", "httpdate"] +# transport settings +native-tls = ["reqwest?/default-tls", "ureq?/native-tls"] +rustls = ["reqwest?/rustls-tls", "ureq?/tls"] [dependencies] sentry-core = { version = "0.25.0", path = "../sentry-core", features = ["client"] } @@ -59,13 +59,13 @@ sentry-slog = { version = "0.25.0", path = "../sentry-slog", optional = true } sentry-tower = { version = "0.25.0", path = "../sentry-tower", optional = true } sentry-tracing = { version = "0.25.0", path = "../sentry-tracing", optional = true } log_ = { package = "log", version = "0.4.8", optional = true, features = ["std"] } -reqwest_ = { package = "reqwest", version = "0.11", optional = true, features = ["blocking", "json"], default-features = false } -curl_ = { package = "curl", version = "0.4.25", optional = true } +reqwest = { version = "0.11", optional = true, features = ["blocking", "json"], default-features = false } +curl = { version = "0.4.25", optional = true } httpdate = { version = "1.0.0", optional = true } -surf_ = { package = "surf", version = "2.0.0", optional = true, default-features = false } +surf = { version = "2.0.0", optional = true, default-features = false } serde_json = { version = "1.0.48", optional = true } tokio = { version = "1.0", features = ["rt"], optional = true } -ureq_ = { package = "ureq", version = "2.3.0", optional = true, default-features = false } +ureq = { version = "2.3.0", optional = true, default-features = false } [dev-dependencies] sentry-anyhow = { path = "../sentry-anyhow" } diff --git a/sentry/src/transports/curl.rs b/sentry/src/transports/curl.rs index 296ae8f5..6ef69b2e 100644 --- a/sentry/src/transports/curl.rs +++ b/sentry/src/transports/curl.rs @@ -1,7 +1,7 @@ use std::io::{Cursor, Read}; use std::time::Duration; -use curl_::{self as curl, easy::Easy as CurlClient}; +use curl::{self as curl, easy::Easy as CurlClient}; use super::thread::TransportThread; diff --git a/sentry/src/transports/mod.rs b/sentry/src/transports/mod.rs index 94f98df2..253c7fe0 100644 --- a/sentry/src/transports/mod.rs +++ b/sentry/src/transports/mod.rs @@ -16,22 +16,22 @@ mod tokio_thread; #[cfg(feature = "reqwest")] mod reqwest; #[cfg(feature = "reqwest")] -pub use reqwest::ReqwestHttpTransport; +pub use self::reqwest::ReqwestHttpTransport; #[cfg(feature = "curl")] mod curl; #[cfg(feature = "curl")] -pub use curl::CurlHttpTransport; +pub use self::curl::CurlHttpTransport; #[cfg(feature = "surf")] mod surf; #[cfg(feature = "surf")] -pub use surf::SurfHttpTransport; +pub use self::surf::SurfHttpTransport; #[cfg(feature = "ureq")] mod ureq; #[cfg(feature = "ureq")] -pub use ureq::UreqHttpTransport; +pub use self::ureq::UreqHttpTransport; #[cfg(feature = "reqwest")] type DefaultTransport = ReqwestHttpTransport; diff --git a/sentry/src/transports/reqwest.rs b/sentry/src/transports/reqwest.rs index 03e11438..aa0cf3bb 100644 --- a/sentry/src/transports/reqwest.rs +++ b/sentry/src/transports/reqwest.rs @@ -1,6 +1,6 @@ use std::time::Duration; -use reqwest_::{header as ReqwestHeaders, Client as ReqwestClient, Proxy, StatusCode}; +use reqwest::{header as ReqwestHeaders, Client as ReqwestClient, Proxy, StatusCode}; use super::tokio_thread::TransportThread; @@ -31,7 +31,7 @@ impl ReqwestHttpTransport { fn new_internal(options: &ClientOptions, client: Option) -> Self { let client = client.unwrap_or_else(|| { - let mut builder = reqwest_::Client::builder(); + let mut builder = reqwest::Client::builder(); if let Some(url) = options.http_proxy.as_ref() { builder = builder.proxy(Proxy::http(url.as_ref()).unwrap()); }; diff --git a/sentry/src/transports/surf.rs b/sentry/src/transports/surf.rs index d458a06c..d4e75b7c 100644 --- a/sentry/src/transports/surf.rs +++ b/sentry/src/transports/surf.rs @@ -1,6 +1,6 @@ use std::time::Duration; -use surf_::{http::headers as SurfHeaders, Client as SurfClient, StatusCode}; +use surf::{http::headers as SurfHeaders, Client as SurfClient, StatusCode}; use super::tokio_thread::TransportThread; diff --git a/sentry/src/transports/ureq.rs b/sentry/src/transports/ureq.rs index 0c3154b6..bf262086 100644 --- a/sentry/src/transports/ureq.rs +++ b/sentry/src/transports/ureq.rs @@ -1,8 +1,6 @@ use std::time::Duration; -#[cfg(fdoc)] -use ureq_ as ureq; -use ureq_::{Agent, AgentBuilder, Proxy}; +use ureq::{Agent, AgentBuilder, Proxy}; use super::thread::TransportThread; @@ -11,8 +9,6 @@ use crate::{sentry_debug, types::Scheme, ClientOptions, Envelope, Transport}; /// A [`Transport`] that sends events via the [`ureq`] library. /// /// This is enabled by the `ureq` feature flag. -/// -/// [`ureq`]: https://crates.io/crates/ureq #[cfg_attr(doc_cfg, doc(cfg(feature = "ureq")))] pub struct UreqHttpTransport { thread: TransportThread, diff --git a/sentry/tests/test_tower.rs b/sentry/tests/test_tower.rs index acfb4d95..ef9eab05 100644 --- a/sentry/tests/test_tower.rs +++ b/sentry/tests/test_tower.rs @@ -8,7 +8,7 @@ use sentry::{ ClientOptions, Hub, }; use sentry_tower::SentryLayer; -use tower_::{ServiceBuilder, ServiceExt}; +use tower::{ServiceBuilder, ServiceExt}; #[test] fn test_tower_hub() {