Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Add ureq transport support #419

Merged
merged 2 commits into from
Jan 28, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions sentry/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ 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", "tokio"]
ureq-native-tls = ["ureq_/native-tls", "httpdate", "tokio"]

[dependencies]
sentry-core = { version = "0.24.2", path = "../sentry-core", features = ["client"] }
Expand All @@ -63,6 +65,7 @@ httpdate = { version = "1.0.0", optional = true }
surf_ = { package = "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 }

[dev-dependencies]
sentry-anyhow = { path = "../sentry-anyhow" }
Expand Down
44 changes: 24 additions & 20 deletions sentry/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,24 +64,26 @@ one should use the [`sentry-core`] crate instead.
Additional functionality and integrations are enabled via feature flags. Some features require
extra setup to function properly.

| Feature | Default | Is Integration | Deprecated | Additional notes |
| -------------- | ------- | -------------- | ---------- | ---------------------------------------------------------------------------------------- |
| `backtrace` | ✅ | 🔌 | | |
| `contexts` | ✅ | 🔌 | | |
| `panic` | ✅ | 🔌 | | |
| `transport` | ✅ | | | |
| `anyhow` | | 🔌 | | |
| `test` | | | | |
| `debug-images` | | 🔌 | | |
| `log` | | 🔌 | | Requires extra setup; See [`sentry-log`]'s documentation. |
| `debug-logs` | | | ❗ | Requires extra setup; See [`sentry-log`]'s documentation. |
| `slog` | | 🔌 | | Requires extra setup; See [`sentry-slog`]'s documentation. |
| `reqwest` | ✅ | | | |
| `native-tls` | ✅ | | | `reqwest` must be enabled. |
| `rustls` | | | | `reqwest` must be enabled. `native-tls` must be disabled via `default-features = false`. |
| `curl` | | | | |
| `surf` | | | | |
| `tower` | | 🔌 | | Requires extra setup; See [`sentry-tower`]'s documentation. |
| Feature | Default | Is Integration | Deprecated | Additional notes |
| -------------- | ------- | -------------- | ---------- | ---------------------------------------------------------------------------------------- |
| `backtrace` | ✅ | 🔌 | | |
| `contexts` | ✅ | 🔌 | | |
| `panic` | ✅ | 🔌 | | |
| `transport` | ✅ | | | |
| `anyhow` | | 🔌 | | |
| `test` | | | | |
| `debug-images` | | 🔌 | | |
| `log` | | 🔌 | | Requires extra setup; See [`sentry-log`]'s documentation. |
| `debug-logs` | | | ❗ | Requires extra setup; See [`sentry-log`]'s documentation. |
| `slog` | | 🔌 | | Requires extra setup; See [`sentry-slog`]'s documentation. |
| `reqwest` | ✅ | | | |
| `native-tls` | ✅ | | | `reqwest` must be enabled. |
| `rustls` | | | | `reqwest` must be enabled. `native-tls` must be disabled via `default-features = false`. |
| `curl` | | | | |
| `surf` | | | | |
| `tower` | | 🔌 | | Requires extra setup; See [`sentry-tower`]'s documentation. |
| `ureq` | | | | `ureq` transport support using `rustls` by default |
| `ureq-native-tls` | | | | |

[`sentry-log`]: https://crates.io/crates/sentry-log
[`sentry-slog`]: https://crates.io/crates/sentry-slog
Expand Down Expand Up @@ -109,8 +111,10 @@ extra setup to function properly.
- `rustls`: Enables `rustls` support for `reqwest`. Please note that `native-tls` is a default
feature, and `default-features = false` must be set to completely disable building `native-tls`
dependencies.
- `curl`: Enables the curl transport.
- `surf`: Enables the surf transport.
- `curl`: Enables the `curl` transport.
- `surf`: Enables the `surf` transport.
- `ureq`: Enables the `ureq` transport using `rustls`.
- `ureq-native-tls`: Enables the `ureq` transport using `native-tls`.

### Integrations
- `tower`: Enables support for the `tower` crate and those using it.
Expand Down
44 changes: 24 additions & 20 deletions sentry/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -56,24 +56,26 @@
//! Additional functionality and integrations are enabled via feature flags. Some features require
//! extra setup to function properly.
//!
//! | Feature | Default | Is Integration | Deprecated | Additional notes |
//! | -------------- | ------- | -------------- | ---------- | ---------------------------------------------------------------------------------------- |
//! | `backtrace` | ✅ | 🔌 | | |
//! | `contexts` | ✅ | 🔌 | | |
//! | `panic` | ✅ | 🔌 | | |
//! | `transport` | ✅ | | | |
//! | `anyhow` | | 🔌 | | |
//! | `test` | | | | |
//! | `debug-images` | | 🔌 | | |
//! | `log` | | 🔌 | | Requires extra setup; See [`sentry-log`]'s documentation. |
//! | `debug-logs` | | | ❗ | Requires extra setup; See [`sentry-log`]'s documentation. |
//! | `slog` | | 🔌 | | Requires extra setup; See [`sentry-slog`]'s documentation. |
//! | `reqwest` | ✅ | | | |
//! | `native-tls` | ✅ | | | `reqwest` must be enabled. |
//! | `rustls` | | | | `reqwest` must be enabled. `native-tls` must be disabled via `default-features = false`. |
//! | `curl` | | | | |
//! | `surf` | | | | |
//! | `tower` | | 🔌 | | Requires extra setup; See [`sentry-tower`]'s documentation. |
//! | Feature | Default | Is Integration | Deprecated | Additional notes |
//! | -------------- | ------- | -------------- | ---------- | ---------------------------------------------------------------------------------------- |
//! | `backtrace` | ✅ | 🔌 | | |
//! | `contexts` | ✅ | 🔌 | | |
//! | `panic` | ✅ | 🔌 | | |
//! | `transport` | ✅ | | | |
//! | `anyhow` | | 🔌 | | |
//! | `test` | | | | |
//! | `debug-images` | | 🔌 | | |
//! | `log` | | 🔌 | | Requires extra setup; See [`sentry-log`]'s documentation. |
//! | `debug-logs` | | | ❗ | Requires extra setup; See [`sentry-log`]'s documentation. |
//! | `slog` | | 🔌 | | Requires extra setup; See [`sentry-slog`]'s documentation. |
//! | `reqwest` | ✅ | | | |
//! | `native-tls` | ✅ | | | `reqwest` must be enabled. |
//! | `rustls` | | | | `reqwest` must be enabled. `native-tls` must be disabled via `default-features = false`. |
//! | `curl` | | | | |
//! | `surf` | | | | |
//! | `tower` | | 🔌 | | Requires extra setup; See [`sentry-tower`]'s documentation. |
//! | `ureq` | | | | `ureq` transport support using `rustls` by default |
//! | `ureq-native-tls` | | | | |
//!
//! [`sentry-log`]: https://crates.io/crates/sentry-log
//! [`sentry-slog`]: https://crates.io/crates/sentry-slog
Expand Down Expand Up @@ -101,8 +103,10 @@
//! - `rustls`: Enables `rustls` support for `reqwest`. Please note that `native-tls` is a default
//! feature, and `default-features = false` must be set to completely disable building `native-tls`
//! dependencies.
//! - `curl`: Enables the curl transport.
//! - `surf`: Enables the surf transport.
//! - `curl`: Enables the `curl` transport.
//! - `surf`: Enables the `surf` transport.
//! - `ureq`: Enables the `ureq` transport using `rustls`.
//! - `ureq-native-tls`: Enables the `ureq` transport using `native-tls`.
//!
//! ## Integrations
//! - `tower`: Enables support for the `tower` crate and those using it.
Expand Down
64 changes: 56 additions & 8 deletions sentry/src/transports/mod.rs
Original file line number Diff line number Diff line change
@@ -1,14 +1,24 @@
//! The provided transports.
//!
//! This module exposes all transports that are compiled into the sentry
//! library. The `reqwest`, `curl` and `surf` features turn on these transports.
//! library. The `reqwest`, `curl`, `surf` and `ureq` features turn on these transports.

use crate::{ClientOptions, Transport, TransportFactory};
use std::sync::Arc;

#[cfg(any(feature = "reqwest", feature = "curl", feature = "surf"))]
#[cfg(any(
feature = "reqwest",
feature = "curl",
feature = "surf",
feature = "ureq"
))]
mod ratelimit;
#[cfg(any(feature = "reqwest", feature = "curl", feature = "surf"))]
#[cfg(any(
feature = "reqwest",
feature = "curl",
feature = "surf",
feature = "ureq"
))]
mod thread;

#[cfg(feature = "reqwest")]
Expand All @@ -26,17 +36,45 @@ mod surf;
#[cfg(feature = "surf")]
pub use surf::SurfHttpTransport;

#[cfg(feature = "ureq")]
mod ureq;
#[cfg(feature = "ureq")]
pub use ureq::UreqHttpTransport;

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

#[cfg(all(feature = "curl", not(feature = "reqwest"), not(feature = "surf")))]
#[cfg(all(
feature = "curl",
not(feature = "reqwest"),
not(feature = "surf"),
not(feature = "ureq")
))]
type DefaultTransport = CurlHttpTransport;

#[cfg(all(feature = "surf", not(feature = "reqwest"), not(feature = "curl")))]
#[cfg(all(
feature = "surf",
not(feature = "reqwest"),
not(feature = "curl"),
not(feature = "ureq")
))]
type DefaultTransport = SurfHttpTransport;

#[cfg(all(
feature = "ureq",
not(feature = "reqwest"),
not(feature = "curl"),
not(feature = "surf")
))]
type DefaultTransport = UreqHttpTransport;

/// The default http transport.
#[cfg(any(feature = "reqwest", feature = "curl", feature = "surf"))]
#[cfg(any(
feature = "reqwest",
feature = "curl",
feature = "surf",
feature = "ureq"
))]
pub type HttpTransport = DefaultTransport;

/// Creates the default HTTP transport.
Expand All @@ -49,11 +87,21 @@ pub struct DefaultTransportFactory;

impl TransportFactory for DefaultTransportFactory {
fn create_transport(&self, options: &ClientOptions) -> Arc<dyn Transport> {
#[cfg(any(feature = "reqwest", feature = "curl", feature = "surf"))]
#[cfg(any(
feature = "reqwest",
feature = "curl",
feature = "surf",
feature = "ureq"
))]
{
Arc::new(HttpTransport::new(options))
}
#[cfg(not(any(feature = "reqwest", feature = "curl", feature = "surf")))]
#[cfg(not(any(
feature = "reqwest",
feature = "curl",
feature = "surf",
feature = "ureq"
)))]
{
let _ = options;
panic!("sentry crate was compiled without transport")
Expand Down
Loading