diff --git a/reqwest-middleware/Cargo.toml b/reqwest-middleware/Cargo.toml index feef0f3..c216e6a 100644 --- a/reqwest-middleware/Cargo.toml +++ b/reqwest-middleware/Cargo.toml @@ -28,7 +28,7 @@ serde = { version = "1.0.106", optional = true } thiserror = "2.0" tower-service = "0.3.0" -[dev-dependencies] +[target.'cfg(not(target_arch = "wasm32"))'.dev-dependencies] reqwest = { version = "0.13.1", features = ["rustls"] } reqwest-retry = { path = "../reqwest-retry" } reqwest-tracing = { path = "../reqwest-tracing" } diff --git a/reqwest-retry/Cargo.toml b/reqwest-retry/Cargo.toml index 9afded0..04a1fe4 100644 --- a/reqwest-retry/Cargo.toml +++ b/reqwest-retry/Cargo.toml @@ -24,6 +24,7 @@ reqwest = { version = "0.13.1", default-features = false } retry-policies = "0.5" thiserror = "2.0" tracing = { version = "0.1.26", optional = true } +web-time = "1.1.0" [target.'cfg(not(target_arch = "wasm32"))'.dependencies] hyper = "1.0" @@ -31,10 +32,18 @@ tokio = { version = "1.6.0", default-features = false, features = ["time"] } [target.'cfg(target_arch = "wasm32")'.dependencies] wasmtimer = "0.4.3" -getrandom = { version = "0.2.0", features = ["js"] } +getrandom = { version = "0.3.0", features = ["wasm_js"] } +[target.'cfg(not(target_arch = "wasm32"))'.dev-dependencies] +wiremock = { version = "0.6", default-features = false } [dev-dependencies] +tokio = { version = "1.0.0", features = [ + #"time", + #"io-util", + #"sync", + #"macros", + #"rt", +], default-features = false } + paste = "1.0.0" -tokio = { version = "1.0.0", features = ["full"] } -wiremock = "0.6.0" -futures = "0.3.0" +#futures = "0.3.0" diff --git a/reqwest-retry/src/middleware.rs b/reqwest-retry/src/middleware.rs index a8339c1..49a74e8 100644 --- a/reqwest-retry/src/middleware.rs +++ b/reqwest-retry/src/middleware.rs @@ -34,7 +34,7 @@ macro_rules! log_retry { /// runtime that supports them. /// ///```rust -/// use std::time::Duration; +/// use web_time::Duration; /// use reqwest_middleware::ClientBuilder; /// use retry_policies::{RetryDecision, RetryPolicy, Jitter}; /// use retry_policies::policies::ExponentialBackoff; diff --git a/reqwest-retry/tests/all/retry.rs b/reqwest-retry/tests/all/retry.rs index 15744a9..33ee0e8 100644 --- a/reqwest-retry/tests/all/retry.rs +++ b/reqwest-retry/tests/all/retry.rs @@ -1,3 +1,4 @@ +#![cfg(not(target_family = "wasm"))] use futures::FutureExt; use paste::paste; use reqwest::Client; @@ -11,6 +12,7 @@ use std::sync::{ }; use tokio::io::AsyncReadExt; use tokio::io::AsyncWriteExt; + use wiremock::matchers::{method, path}; use wiremock::{Mock, MockServer, Respond, ResponseTemplate}; @@ -55,8 +57,8 @@ macro_rules! assert_retry_succeeds_inner { .with(RetryTransientMiddleware::new_with_policy( ExponentialBackoff::builder() .retry_bounds( - std::time::Duration::from_millis(30), - std::time::Duration::from_millis(100), + web_time::Duration::from_millis(30), + web_time::Duration::from_millis(100), ) .build_with_max_retries(retry_amount), )) @@ -151,10 +153,10 @@ assert_retry_succeeds!(429, StatusCode::OK); assert_no_retry!(431, StatusCode::REQUEST_HEADER_FIELDS_TOO_LARGE); assert_no_retry!(451, StatusCode::UNAVAILABLE_FOR_LEGAL_REASONS); -pub struct RetryTimeoutResponder(Arc, u32, std::time::Duration); +pub struct RetryTimeoutResponder(Arc, u32, web_time::Duration); impl RetryTimeoutResponder { - fn new(retries: u32, initial_timeout: std::time::Duration) -> Self { + fn new(retries: u32, initial_timeout: web_time::Duration) -> Self { Self(Arc::new(AtomicU32::new(0)), retries, initial_timeout) } } @@ -180,7 +182,7 @@ async fn assert_retry_on_request_timeout() { .and(path("/foo")) .respond_with(RetryTimeoutResponder::new( 3, - std::time::Duration::from_millis(1000), + web_time::Duration::from_millis(1000), )) .expect(2) .mount(&server) @@ -191,8 +193,8 @@ async fn assert_retry_on_request_timeout() { .with(RetryTransientMiddleware::new_with_policy( ExponentialBackoff::builder() .retry_bounds( - std::time::Duration::from_millis(30), - std::time::Duration::from_millis(100), + web_time::Duration::from_millis(30), + web_time::Duration::from_millis(100), ) .build_with_max_retries(3), )) @@ -200,7 +202,7 @@ async fn assert_retry_on_request_timeout() { let resp = client .get(format!("{}/foo", server.uri())) - .timeout(std::time::Duration::from_millis(10)) + .timeout(web_time::Duration::from_millis(10)) .send() .await .expect("call failed"); @@ -246,8 +248,8 @@ async fn assert_retry_on_incomplete_message() { .with(RetryTransientMiddleware::new_with_policy( ExponentialBackoff::builder() .retry_bounds( - std::time::Duration::from_millis(30), - std::time::Duration::from_millis(100), + web_time::Duration::from_millis(30), + web_time::Duration::from_millis(100), ) .build_with_max_retries(3), )) @@ -255,7 +257,7 @@ async fn assert_retry_on_incomplete_message() { let resp = client .get(format!("{}/foo", uri)) - .timeout(std::time::Duration::from_millis(100)) + .timeout(web_time::Duration::from_millis(100)) .send() .await .expect("call failed"); @@ -297,8 +299,8 @@ async fn assert_retry_on_hyper_canceled() { .with(RetryTransientMiddleware::new_with_policy( ExponentialBackoff::builder() .retry_bounds( - std::time::Duration::from_millis(30), - std::time::Duration::from_millis(100), + web_time::Duration::from_millis(30), + web_time::Duration::from_millis(100), ) .build_with_max_retries(3), )) @@ -306,7 +308,7 @@ async fn assert_retry_on_hyper_canceled() { let resp = client .get(format!("{}/foo", uri)) - .timeout(std::time::Duration::from_millis(100)) + .timeout(web_time::Duration::from_millis(100)) .send() .await .expect("call failed"); @@ -345,8 +347,8 @@ async fn assert_retry_on_connection_reset_by_peer() { .with(RetryTransientMiddleware::new_with_policy( ExponentialBackoff::builder() .retry_bounds( - std::time::Duration::from_millis(30), - std::time::Duration::from_millis(100), + web_time::Duration::from_millis(30), + web_time::Duration::from_millis(100), ) .build_with_max_retries(3), )) @@ -354,7 +356,7 @@ async fn assert_retry_on_connection_reset_by_peer() { let resp = client .get(format!("{}/foo", uri)) - .timeout(std::time::Duration::from_millis(100)) + .timeout(web_time::Duration::from_millis(100)) .send() .await .expect("call failed"); diff --git a/reqwest-tracing/Cargo.toml b/reqwest-tracing/Cargo.toml index 6f2bb13..8c38cde 100644 --- a/reqwest-tracing/Cargo.toml +++ b/reqwest-tracing/Cargo.toml @@ -10,18 +10,54 @@ keywords = ["reqwest", "http", "middleware", "opentelemetry", "tracing"] categories = ["web-programming::http-client"] [features] -opentelemetry_0_20 = ["opentelemetry_0_20_pkg", "tracing-opentelemetry_0_21_pkg"] -opentelemetry_0_21 = ["opentelemetry_0_21_pkg", "tracing-opentelemetry_0_22_pkg"] -opentelemetry_0_22 = ["opentelemetry_0_22_pkg", "tracing-opentelemetry_0_23_pkg"] -opentelemetry_0_23 = ["opentelemetry_0_23_pkg", "tracing-opentelemetry_0_24_pkg"] -opentelemetry_0_24 = ["opentelemetry_0_24_pkg", "tracing-opentelemetry_0_25_pkg"] -opentelemetry_0_25 = ["opentelemetry_0_25_pkg", "tracing-opentelemetry_0_26_pkg"] -opentelemetry_0_26 = ["opentelemetry_0_26_pkg", "tracing-opentelemetry_0_27_pkg"] -opentelemetry_0_27 = ["opentelemetry_0_27_pkg", "tracing-opentelemetry_0_28_pkg"] -opentelemetry_0_28 = ["opentelemetry_0_28_pkg", "tracing-opentelemetry_0_29_pkg"] -opentelemetry_0_29 = ["opentelemetry_0_29_pkg", "tracing-opentelemetry_0_30_pkg"] -opentelemetry_0_30 = ["opentelemetry_0_30_pkg", "tracing-opentelemetry_0_31_pkg"] -opentelemetry_0_31 = ["opentelemetry_0_31_pkg", "tracing-opentelemetry_0_32_pkg"] +opentelemetry_0_20 = [ + "opentelemetry_0_20_pkg", + "tracing-opentelemetry_0_21_pkg", +] +opentelemetry_0_21 = [ + "opentelemetry_0_21_pkg", + "tracing-opentelemetry_0_22_pkg", +] +opentelemetry_0_22 = [ + "opentelemetry_0_22_pkg", + "tracing-opentelemetry_0_23_pkg", +] +opentelemetry_0_23 = [ + "opentelemetry_0_23_pkg", + "tracing-opentelemetry_0_24_pkg", +] +opentelemetry_0_24 = [ + "opentelemetry_0_24_pkg", + "tracing-opentelemetry_0_25_pkg", +] +opentelemetry_0_25 = [ + "opentelemetry_0_25_pkg", + "tracing-opentelemetry_0_26_pkg", +] +opentelemetry_0_26 = [ + "opentelemetry_0_26_pkg", + "tracing-opentelemetry_0_27_pkg", +] +opentelemetry_0_27 = [ + "opentelemetry_0_27_pkg", + "tracing-opentelemetry_0_28_pkg", +] +opentelemetry_0_28 = [ + "opentelemetry_0_28_pkg", + "tracing-opentelemetry_0_29_pkg", +] +opentelemetry_0_29 = [ + "opentelemetry_0_29_pkg", + "tracing-opentelemetry_0_30_pkg", +] +opentelemetry_0_30 = [ + "opentelemetry_0_30_pkg", + "tracing-opentelemetry_0_31_pkg", +] +opentelemetry_0_31 = [ + "opentelemetry_0_31_pkg", + "tracing-opentelemetry_0_32_pkg", +] # This feature ensures that both the old (deprecated) and new attributes are published simultaneously. # By doing so, we maintain backward compatibility, allowing existing code that relies on the old attributes # to continue functioning while encouraging the transition to the new attributes. @@ -63,27 +99,59 @@ tracing-opentelemetry_0_31_pkg = { package = "tracing-opentelemetry", version = tracing-opentelemetry_0_32_pkg = { package = "tracing-opentelemetry", version = "0.32.0", optional = true } [target.'cfg(target_arch = "wasm32")'.dependencies] -getrandom = { version = "0.2.0", features = ["js"] } +getrandom = { version = "0.3.0", features = ["wasm_js"] } -[dev-dependencies] +[target.'cfg(not(target_arch = "wasm32"))'.dev-dependencies] tokio = { version = "1.0.0", features = ["macros"] } tracing_subscriber = { package = "tracing-subscriber", version = "0.3.0" } wiremock = "0.6.0" reqwest = { version = "0.13.1", features = ["rustls"] } -opentelemetry_sdk_0_21 = { package = "opentelemetry_sdk", version = "0.21.0", features = ["trace"] } -opentelemetry_sdk_0_22 = { package = "opentelemetry_sdk", version = "0.22.0", features = ["trace"] } -opentelemetry_sdk_0_23 = { package = "opentelemetry_sdk", version = "0.23.0", features = ["trace"] } -opentelemetry_sdk_0_24 = { package = "opentelemetry_sdk", version = "0.24.1", features = ["trace"] } -opentelemetry_sdk_0_25 = { package = "opentelemetry_sdk", version = "0.25.0", features = ["trace"] } -opentelemetry_sdk_0_26 = { package = "opentelemetry_sdk", version = "0.26.0", features = ["trace"] } -opentelemetry_sdk_0_27 = { package = "opentelemetry_sdk", version = "0.27.0", features = ["trace"] } -opentelemetry_sdk_0_28 = { package = "opentelemetry_sdk", version = "0.28.0", features = ["trace"] } -opentelemetry_sdk_0_29 = { package = "opentelemetry_sdk", version = "0.29.0", features = ["trace"] } -opentelemetry_sdk_0_30 = { package = "opentelemetry_sdk", version = "0.30.0", features = ["trace"] } -opentelemetry_sdk_0_31 = { package = "opentelemetry_sdk", version = "0.31.0", features = ["trace"] } -opentelemetry_stdout_0_1 = { package = "opentelemetry-stdout", version = "0.1.0", features = ["trace"] } -opentelemetry_stdout_0_2 = { package = "opentelemetry-stdout", version = "0.2.0", features = ["trace"] } -opentelemetry_stdout_0_3 = { package = "opentelemetry-stdout", version = "0.3.0", features = ["trace"] } -opentelemetry_stdout_0_4 = { package = "opentelemetry-stdout", version = "0.4.0", features = ["trace"] } -opentelemetry_stdout_0_5 = { package = "opentelemetry-stdout", version = "0.5.0", features = ["trace"] } +opentelemetry_sdk_0_21 = { package = "opentelemetry_sdk", version = "0.21.0", features = [ + "trace", +] } +opentelemetry_sdk_0_22 = { package = "opentelemetry_sdk", version = "0.22.0", features = [ + "trace", +] } +opentelemetry_sdk_0_23 = { package = "opentelemetry_sdk", version = "0.23.0", features = [ + "trace", +] } +opentelemetry_sdk_0_24 = { package = "opentelemetry_sdk", version = "0.24.1", features = [ + "trace", +] } +opentelemetry_sdk_0_25 = { package = "opentelemetry_sdk", version = "0.25.0", features = [ + "trace", +] } +opentelemetry_sdk_0_26 = { package = "opentelemetry_sdk", version = "0.26.0", features = [ + "trace", +] } +opentelemetry_sdk_0_27 = { package = "opentelemetry_sdk", version = "0.27.0", features = [ + "trace", +] } +opentelemetry_sdk_0_28 = { package = "opentelemetry_sdk", version = "0.28.0", features = [ + "trace", +] } +opentelemetry_sdk_0_29 = { package = "opentelemetry_sdk", version = "0.29.0", features = [ + "trace", +] } +opentelemetry_sdk_0_30 = { package = "opentelemetry_sdk", version = "0.30.0", features = [ + "trace", +] } +opentelemetry_sdk_0_31 = { package = "opentelemetry_sdk", version = "0.31.0", features = [ + "trace", +] } +opentelemetry_stdout_0_1 = { package = "opentelemetry-stdout", version = "0.1.0", features = [ + "trace", +] } +opentelemetry_stdout_0_2 = { package = "opentelemetry-stdout", version = "0.2.0", features = [ + "trace", +] } +opentelemetry_stdout_0_3 = { package = "opentelemetry-stdout", version = "0.3.0", features = [ + "trace", +] } +opentelemetry_stdout_0_4 = { package = "opentelemetry-stdout", version = "0.4.0", features = [ + "trace", +] } +opentelemetry_stdout_0_5 = { package = "opentelemetry-stdout", version = "0.5.0", features = [ + "trace", +] }