Skip to content

Commit 1b61984

Browse files
committed
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 `<crate>/tls` would implicitly turn on `<crate>`. Since Rust 1.60 it is now possible to specify this crate-feature enablement through the use of the question mark in `<crate>?/tls`, which will only enable the `tls` feature if `<crate>` 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:<crate>` to refer to the crate instead of the dependency, making for a more pleasant experience without renames to underscore suffixes (that subsequently have to be dealt with in Rust code, e.g. with `use log_ as log;` renames).
1 parent 89b31f8 commit 1b61984

File tree

19 files changed

+41
-55
lines changed

19 files changed

+41
-55
lines changed

sentry-contexts/src/utils.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -197,10 +197,10 @@ pub fn device_context() -> Context {
197197

198198
#[cfg(test)]
199199
mod tests {
200-
use super::*;
201200
#[cfg(windows)]
202201
#[test]
203202
fn windows_os_version_not_empty() {
203+
use super::*;
204204
let context = os_context();
205205
match context {
206206
Some(Context::Os(os_context)) => {

sentry-core/Cargo.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,13 @@ default = []
2424
client = ["rand"]
2525
# I would love to just have a `log` feature, but this is used inside a macro,
2626
# and macros actually expand features (and extern crate) where they are used!
27-
debug-logs = ["log_"]
27+
debug-logs = ["dep:log"]
2828
test = ["client"]
2929
profiling = ["pprof", "build_id", "uuid", "sys-info", "findshlibs", "rustc_version_runtime", "libc", "indexmap"]
3030
frame-pointer = ["pprof?/frame-pointer"]
3131

3232
[dependencies]
33-
log_ = { package = "log", version = "0.4.8", optional = true, features = ["std"] }
33+
log = { package = "log", version = "0.4.8", optional = true, features = ["std"] }
3434
once_cell = "1"
3535
rand = { version = "0.8.1", optional = true }
3636
sentry-types = { version = "0.27.0", path = "../sentry-types" }

sentry-core/src/macros.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ macro_rules! with_client_impl {
5656
macro_rules! sentry_debug {
5757
($($arg:tt)*) => {
5858
#[cfg(feature = "debug-logs")] {
59-
::log_::debug!(target: "sentry", $($arg)*);
59+
::log::debug!(target: "sentry", $($arg)*);
6060
}
6161
#[cfg(not(feature = "debug-logs"))] {
6262
$crate::Hub::with(|hub| {

sentry-tower/Cargo.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,12 @@ edition = "2021"
1313
rust-version = "1.60"
1414

1515
[features]
16-
http = ["http_", "pin-project", "url"]
16+
http = ["dep:http", "pin-project", "url"]
1717

1818
[dependencies]
1919
tower-layer = "0.3"
2020
tower-service = "0.3"
21-
http_ = { package = "http", version = "0.2.6", optional = true }
21+
http = { package = "http", version = "0.2.6", optional = true }
2222
pin-project = { version = "1.0.10", optional = true }
2323
sentry-core = { version = "0.27.0", path = "../sentry-core", default-features = false, features = ["client"] }
2424
url = { version = "2.2.2", optional = true }

sentry-tower/src/http.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use std::future::Future;
33
use std::pin::Pin;
44
use std::task::{Context, Poll};
55

6-
use http_::{header, uri, Request, Response, StatusCode};
6+
use http::{header, uri, Request, Response, StatusCode};
77
use sentry_core::protocol;
88
use tower_layer::Layer;
99
use tower_service::Service;

sentry-tower/src/lib.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@
121121
//!
122122
//! ```rust
123123
//! # #[cfg(feature = "http")] {
124-
//! # type Request = http_::Request<String>;
124+
//! # type Request = http::Request<String>;
125125
//! let layer = tower::ServiceBuilder::new()
126126
//! .layer(sentry_tower::NewSentryLayer::<Request>::new_from_top())
127127
//! .layer(sentry_tower::SentryHttpLayer::with_transaction());
@@ -145,7 +145,7 @@ use tower_service::Service;
145145
#[cfg(feature = "http")]
146146
mod http;
147147
#[cfg(feature = "http")]
148-
pub use http::*;
148+
pub use crate::http::*;
149149

150150
/// Provides a hub for each request
151151
pub trait HubProvider<H, Request>

sentry/Cargo.toml

+20-20
Original file line numberDiff line numberDiff line change
@@ -39,17 +39,17 @@ profiling = ["sentry-core/profiling"]
3939
frame-pointer = ["sentry-core/frame-pointer"]
4040
# other features
4141
test = ["sentry-core/test"]
42-
debug-logs = ["log_", "sentry-core/debug-logs"]
42+
debug-logs = ["dep:log", "sentry-core/debug-logs"]
4343
# transports
4444
transport = ["reqwest", "native-tls"]
45-
reqwest = ["reqwest_", "httpdate", "tokio"]
46-
curl = ["curl_", "httpdate"]
47-
surf-h1 = ["surf_/h1-client", "httpdate"]
48-
surf = ["surf_/curl-client", "http-client", "httpdate", "isahc", "tokio"]
49-
native-tls = ["reqwest_/default-tls", "native-tls_", "ureq-native-tls"]
50-
rustls = ["reqwest_/rustls-tls", "rustls_", "webpki-roots"]
51-
ureq = ["ureq_/tls", "httpdate", "rustls_", "webpki-roots"]
52-
ureq-native-tls = ["ureq_/native-tls", "httpdate", "native-tls_"]
45+
reqwest = ["dep:reqwest", "httpdate", "tokio"]
46+
curl = ["dep:curl", "httpdate"]
47+
surf-h1 = ["surf/h1-client", "httpdate"]
48+
surf = ["surf/curl-client", "http-client", "httpdate", "isahc", "tokio"]
49+
ureq = ["dep:ureq", "httpdate"]
50+
# transport settings
51+
native-tls = ["dep:native-tls", "reqwest?/default-tls", "ureq?/native-tls"]
52+
rustls = ["dep:rustls", "reqwest?/rustls-tls", "ureq?/tls", "webpki-roots"]
5353

5454
[dependencies]
5555
sentry-core = { version = "0.27.0", path = "../sentry-core", features = ["client"] }
@@ -62,18 +62,18 @@ sentry-panic = { version = "0.27.0", path = "../sentry-panic", optional = true }
6262
sentry-slog = { version = "0.27.0", path = "../sentry-slog", optional = true }
6363
sentry-tower = { version = "0.27.0", path = "../sentry-tower", optional = true }
6464
sentry-tracing = { version = "0.27.0", path = "../sentry-tracing", optional = true }
65-
log_ = { package = "log", version = "0.4.8", optional = true, features = ["std"] }
66-
reqwest_ = { package = "reqwest", version = "0.11", optional = true, features = ["blocking", "json"], default-features = false }
67-
curl_ = { package = "curl", version = "0.4.25", optional = true }
65+
log = { version = "0.4.8", optional = true, features = ["std"] }
66+
reqwest = { version = "0.11", optional = true, features = ["blocking", "json"], default-features = false }
67+
curl = { version = "0.4.25", optional = true }
6868
httpdate = { version = "1.0.0", optional = true }
69-
surf_ = { package = "surf", version = "2.0.0", optional = true, default-features = false }
69+
surf = { package = "surf", version = "2.0.0", optional = true, default-features = false }
7070
http-client = { version = "6.5.3", optional = true }
7171
isahc = { version = "0.9.14", optional = true }
7272
serde_json = { version = "1.0.48", optional = true }
7373
tokio = { version = "1.0", features = ["rt"], optional = true }
74-
ureq_ = { package = "ureq", version = "2.3.0", optional = true, default-features = false }
75-
native-tls_ = { package = "native-tls", version = "0.2.8", optional = true }
76-
rustls_ = { package = "rustls", version = "0.20.6", optional = true, features = ["dangerous_configuration"] }
74+
ureq = { package = "ureq", version = "2.3.0", optional = true, default-features = false }
75+
native-tls = { package = "native-tls", version = "0.2.8", optional = true }
76+
rustls = { package = "rustls", version = "0.20.6", optional = true, features = ["dangerous_configuration"] }
7777
webpki-roots = { version = "0.22.5", optional = true }
7878

7979
[dev-dependencies]
@@ -84,10 +84,10 @@ sentry-tower = { path = "../sentry-tower" }
8484
sentry-tracing = { path = "../sentry-tracing" }
8585
actix-web = { version = "4", default-features = false }
8686
anyhow_ = { package = "anyhow", version = "1.0.30" }
87-
log_ = { package = "log", version = "0.4.8", features = ["std"] }
87+
log = { version = "0.4.8", features = ["std"] }
8888
pretty_env_logger = "0.4.0"
89-
slog_ = { package = "slog", version = "2.5.2" }
89+
slog = {version = "2.5.2" }
9090
tokio = { version = "1.0", features = ["macros"] }
91-
tower_ = { package = "tower", version = "0.4", features = ["util"] }
92-
tracing_ = { package = "tracing", version = "0.1" }
91+
tower = { version = "0.4", features = ["util"] }
92+
tracing = { package = "tracing", version = "0.1" }
9393
tracing-subscriber = { version = "0.3", features = ["fmt", "tracing-log"] }

sentry/examples/log-demo.rs

-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
use log::{debug, error, info, warn};
2-
use log_ as log;
32

43
fn main() {
54
init_log();

sentry/examples/thread-demo.rs

-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
use log_ as log;
21
use std::sync::Arc;
32
use std::thread;
43

sentry/examples/tracing-demo.rs

-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
use std::thread;
22
use std::time::Duration;
33

4-
use tracing_ as tracing;
54
use tracing_subscriber::prelude::*;
65

76
// cargo run --example tracing-demo

sentry/src/transports/curl.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use std::io::{Cursor, Read};
22
use std::time::Duration;
33

4-
use curl_::{self as curl, easy::Easy as CurlClient};
4+
use curl::easy::Easy as CurlClient;
55

66
use super::thread::TransportThread;
77

sentry/src/transports/mod.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,22 @@ mod tokio_thread;
1616
#[cfg(feature = "reqwest")]
1717
mod reqwest;
1818
#[cfg(feature = "reqwest")]
19-
pub use reqwest::ReqwestHttpTransport;
19+
pub use self::reqwest::ReqwestHttpTransport;
2020

2121
#[cfg(feature = "curl")]
2222
mod curl;
2323
#[cfg(feature = "curl")]
24-
pub use curl::CurlHttpTransport;
24+
pub use self::curl::CurlHttpTransport;
2525

2626
#[cfg(feature = "surf")]
2727
mod surf;
2828
#[cfg(feature = "surf")]
29-
pub use surf::SurfHttpTransport;
29+
pub use self::surf::SurfHttpTransport;
3030

3131
#[cfg(feature = "ureq")]
3232
mod ureq;
3333
#[cfg(feature = "ureq")]
34-
pub use ureq::UreqHttpTransport;
34+
pub use self::ureq::UreqHttpTransport;
3535

3636
#[cfg(feature = "reqwest")]
3737
type DefaultTransport = ReqwestHttpTransport;

sentry/src/transports/reqwest.rs

+2-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use std::time::Duration;
22

3-
use reqwest_::{header as ReqwestHeaders, Client as ReqwestClient, Proxy, StatusCode};
3+
use reqwest::{header as ReqwestHeaders, Client as ReqwestClient, Proxy, StatusCode};
44

55
use super::tokio_thread::TransportThread;
66

@@ -11,8 +11,6 @@ use crate::{sentry_debug, ClientOptions, Envelope, Transport};
1111
/// When the `transport` feature is enabled this will currently
1212
/// be the default transport. This is separately enabled by the
1313
/// `reqwest` feature flag.
14-
///
15-
/// [`reqwest`]: reqwest_
1614
#[cfg_attr(doc_cfg, doc(cfg(feature = "reqwest")))]
1715
pub struct ReqwestHttpTransport {
1816
thread: TransportThread,
@@ -31,7 +29,7 @@ impl ReqwestHttpTransport {
3129

3230
fn new_internal(options: &ClientOptions, client: Option<ReqwestClient>) -> Self {
3331
let client = client.unwrap_or_else(|| {
34-
let mut builder = reqwest_::Client::builder();
32+
let mut builder = reqwest::Client::builder();
3533
if options.accept_invalid_certs {
3634
builder = builder.danger_accept_invalid_certs(true);
3735
}

sentry/src/transports/surf.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use isahc::{
44
config::{Configurable, SslOption},
55
HttpClient,
66
};
7-
use surf_::{http::headers as SurfHeaders, Client as SurfClient, StatusCode};
7+
use surf::{http::headers as SurfHeaders, Client as SurfClient, StatusCode};
88

99
use super::tokio_thread::TransportThread;
1010

sentry/src/transports/ureq.rs

+3-5
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,13 @@ use std::time::Duration;
44
use std::time::SystemTime;
55

66
#[cfg(feature = "native-tls")]
7-
use native_tls_::TlsConnector;
7+
use native_tls::TlsConnector;
88
#[cfg(feature = "rustls")]
9-
use rustls_::{
9+
use rustls::{
1010
client::{ServerCertVerified, ServerCertVerifier},
1111
Certificate, ClientConfig, Error, OwnedTrustAnchor, RootCertStore, ServerName,
1212
};
13-
#[cfg(doc)]
14-
use ureq_ as ureq;
15-
use ureq_::{Agent, AgentBuilder, Proxy};
13+
use ureq::{Agent, AgentBuilder, Proxy};
1614
#[cfg(feature = "rustls")]
1715
use webpki_roots::TLS_SERVER_ROOTS;
1816

sentry/tests/test_basic.rs

-2
Original file line numberDiff line numberDiff line change
@@ -143,8 +143,6 @@ fn test_reentrant_configure_scope() {
143143

144144
#[test]
145145
fn test_attached_stacktrace() {
146-
use log_ as log;
147-
148146
let logger = sentry_log::SentryLogger::new();
149147

150148
log::set_boxed_logger(Box::new(logger))

sentry/tests/test_log.rs

-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
#![cfg(feature = "test")]
22

3-
use log_ as log;
4-
use slog_ as slog;
5-
63
#[test]
74
fn test_log() {
85
let logger = sentry_log::SentryLogger::new();

sentry/tests/test_tower.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use sentry::{
88
ClientOptions, Hub,
99
};
1010
use sentry_tower::SentryLayer;
11-
use tower_::{ServiceBuilder, ServiceExt};
11+
use tower::{ServiceBuilder, ServiceExt};
1212

1313
#[test]
1414
fn test_tower_hub() {

sentry/tests/test_tracing.rs

-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
#![cfg(feature = "test")]
22

3-
use log_ as log;
43
use sentry::protocol::{Context, Request, Value};
5-
use tracing_ as tracing;
64
use tracing_subscriber::prelude::*;
75

86
#[test]

0 commit comments

Comments
 (0)