#![cfg_attr(docsrs, feature(doc_cfg))]
#![cfg_attr(not(any(feature = "_async", feature = "_blocking")), allow(dead_code))]
#![warn(missing_docs)]
#[cfg(all(
feature = "strict-feature-guards",
not(feature = "_all-features-compat"),
not(any(feature = "_async", feature = "_blocking"))
))]
compile_error!(
"reqx requires at least one transport feature: enable an `async-tls-*` or `blocking-tls-*` feature"
);
#[cfg(all(
feature = "strict-feature-guards",
not(feature = "_all-features-compat"),
feature = "_async",
not(feature = "async-tls-rustls-ring"),
not(feature = "async-tls-rustls-aws-lc-rs"),
not(feature = "async-tls-native")
))]
compile_error!(
"async transport requires one async TLS backend: enable `async-tls-rustls-ring`, `async-tls-rustls-aws-lc-rs`, or `async-tls-native`"
);
#[cfg(all(
feature = "strict-feature-guards",
not(feature = "_all-features-compat"),
feature = "_async",
any(
all(
feature = "async-tls-rustls-ring",
feature = "async-tls-rustls-aws-lc-rs"
),
all(feature = "async-tls-rustls-ring", feature = "async-tls-native"),
all(feature = "async-tls-rustls-aws-lc-rs", feature = "async-tls-native")
)
))]
compile_error!(
"async transport requires exactly one TLS backend: choose only one of `async-tls-rustls-ring`, `async-tls-rustls-aws-lc-rs`, or `async-tls-native`"
);
#[cfg(all(
feature = "strict-feature-guards",
not(feature = "_all-features-compat"),
feature = "_blocking",
not(feature = "blocking-tls-rustls-ring"),
not(feature = "blocking-tls-rustls-aws-lc-rs"),
not(feature = "blocking-tls-native")
))]
compile_error!(
"blocking transport requires one blocking TLS backend: enable `blocking-tls-rustls-ring`, `blocking-tls-rustls-aws-lc-rs`, or `blocking-tls-native`"
);
#[cfg(all(
feature = "strict-feature-guards",
not(feature = "_all-features-compat"),
feature = "_blocking",
any(
all(
feature = "blocking-tls-rustls-ring",
feature = "blocking-tls-rustls-aws-lc-rs"
),
all(feature = "blocking-tls-rustls-ring", feature = "blocking-tls-native"),
all(
feature = "blocking-tls-rustls-aws-lc-rs",
feature = "blocking-tls-native"
)
)
))]
compile_error!(
"blocking transport requires exactly one TLS backend: choose only one of `blocking-tls-rustls-ring`, `blocking-tls-rustls-aws-lc-rs`, or `blocking-tls-native`"
);
pub(crate) const IDEMPOTENCY_KEY_HEADER: &str = "idempotency-key";
#[cfg(feature = "_async")]
mod async_client;
#[cfg(feature = "_blocking")]
mod blocking_client;
mod core;
mod http;
mod rate_limit;
mod resilience;
mod tls;
mod upload;
#[cfg(feature = "_async")]
pub(crate) use crate::async_client::body;
#[cfg(feature = "_async")]
pub(crate) use crate::async_client::client;
#[cfg(feature = "_async")]
pub(crate) use crate::async_client::limiters;
#[cfg(feature = "_async")]
pub(crate) use crate::async_client::request;
pub(crate) use crate::core::config;
pub(crate) use crate::core::content_encoding;
pub(crate) use crate::core::error;
#[cfg(any(feature = "_async", feature = "_blocking"))]
pub(crate) use crate::core::execution;
pub(crate) use crate::core::extensions;
pub(crate) use crate::core::metrics;
pub(crate) use crate::core::observe;
pub(crate) use crate::core::otel;
pub(crate) use crate::core::policy;
#[cfg(any(feature = "_async", feature = "_blocking"))]
pub(crate) use crate::core::proxy;
pub(crate) use crate::core::retry;
pub(crate) use crate::core::util;
pub(crate) use crate::http::response;
#[cfg(feature = "_async")]
#[cfg_attr(
docsrs,
doc(cfg(any(
feature = "async-tls-rustls-ring",
feature = "async-tls-rustls-aws-lc-rs",
feature = "async-tls-native"
)))
)]
pub use crate::client::{Client, ClientBuilder};
pub use crate::error::{Error, ErrorCode, TimeoutPhase, TransportErrorKind};
#[cfg(feature = "_async")]
#[cfg_attr(
docsrs,
doc(cfg(any(
feature = "async-tls-rustls-ring",
feature = "async-tls-rustls-aws-lc-rs",
feature = "async-tls-native"
)))
)]
pub use crate::request::RequestBuilder;
pub use crate::response::Response;
#[cfg(feature = "_async")]
#[cfg_attr(
docsrs,
doc(cfg(any(
feature = "async-tls-rustls-ring",
feature = "async-tls-rustls-aws-lc-rs",
feature = "async-tls-native"
)))
)]
pub use crate::response::ResponseStream;
pub use crate::tls::{TlsBackend, TlsRootStore, TlsVersion};
#[cfg(feature = "_blocking")]
#[cfg_attr(
docsrs,
doc(cfg(any(
feature = "blocking-tls-rustls-ring",
feature = "blocking-tls-rustls-aws-lc-rs",
feature = "blocking-tls-native"
)))
)]
pub mod blocking {
pub use crate::blocking_client::{Client, ClientBuilder, RequestBuilder};
pub use crate::response::BlockingResponseStream as ResponseStream;
}
pub type Result<T> = std::result::Result<T, Error>;
pub mod prelude {
pub use crate::Result;
#[cfg(feature = "_blocking")]
#[cfg_attr(
docsrs,
doc(cfg(any(
feature = "blocking-tls-rustls-ring",
feature = "blocking-tls-rustls-aws-lc-rs",
feature = "blocking-tls-native"
)))
)]
pub use crate::blocking;
#[cfg(feature = "_async")]
#[cfg_attr(
docsrs,
doc(cfg(any(
feature = "async-tls-rustls-ring",
feature = "async-tls-rustls-aws-lc-rs",
feature = "async-tls-native"
)))
)]
pub use crate::client::Client;
pub use crate::error::{Error, ErrorCode};
pub use crate::policy::{RedirectPolicy, StatusPolicy};
pub use crate::response::Response;
#[cfg(feature = "_async")]
#[cfg_attr(
docsrs,
doc(cfg(any(
feature = "async-tls-rustls-ring",
feature = "async-tls-rustls-aws-lc-rs",
feature = "async-tls-native"
)))
)]
pub use crate::response::ResponseStream;
pub use crate::retry::RetryPolicy;
pub use crate::tls::{TlsBackend, TlsRootStore, TlsVersion};
}
pub mod advanced {
pub use crate::config::ClientProfile;
pub use crate::error::{TimeoutPhase, TransportErrorKind};
pub use crate::extensions::{
BackoffSource, BodyCodec, Clock, EndpointSelector, OtelPathNormalizer, PolicyBackoffSource,
PrimaryEndpointSelector, RoundRobinEndpointSelector, StandardBodyCodec,
StandardOtelPathNormalizer, SystemClock,
};
#[cfg(feature = "_async")]
#[cfg_attr(
docsrs,
doc(cfg(any(
feature = "async-tls-rustls-ring",
feature = "async-tls-rustls-aws-lc-rs",
feature = "async-tls-native"
)))
)]
pub use crate::upload::{AsyncResumableUploadBackend, AsyncResumableUploader};
pub use crate::{
metrics::{
ErrorMetrics, LatencyMetrics, MetricsSnapshot, RequestMetrics, ResponseMetrics,
TimeoutMetrics,
},
observe::Observer,
policy::{Interceptor, RedirectPolicy, RequestContext, StatusPolicy},
rate_limit::{RateLimitPolicy, ServerThrottleScope},
resilience::{AdaptiveConcurrencyPolicy, CircuitBreakerPolicy, RetryBudgetPolicy},
retry::{
PermissiveRetryEligibility, RetryClassifier, RetryDecision, RetryEligibility,
RetryReason, StrictRetryEligibility,
},
tls::{TlsBackend, TlsRootStore, TlsVersion},
upload::{
BlockingResumableUploadBackend, BlockingResumableUploader, PartChecksumAlgorithm,
RESUMABLE_UPLOAD_CHECKPOINT_VERSION, ResumableUploadCheckpoint, ResumableUploadError,
ResumableUploadOptions, ResumableUploadResult, UploadedPart,
},
};
}
#[cfg(all(test, feature = "_async"))]
mod tests;