rightkit-http 0.3.5

Brand-neutral blocking HTTP client for Right Suite apps: timeouts, retry/backoff with Retry-After, SSE streaming, multipart bodies, redacted secrets, and untrusted web-text wrapping.
Documentation
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
#
# When uploading crates to the registry Cargo will automatically
# "normalize" Cargo.toml files for maximal compatibility
# with all versions of Cargo and also rewrite `path` dependencies
# to registry (e.g., crates.io) dependencies.
#
# If you are reading this file be aware that the original Cargo.toml
# will likely look very different (and much more reasonable).
# See Cargo.toml.orig for the original contents.

[package]
edition = "2021"
rust-version = "1.98.0"
name = "rightkit-http"
version = "0.3.5"
build = false
include = [
    "src/**",
    "tests/**",
    "README.md",
    "CHANGELOG.md",
    "API.md",
    "LICENSE-MIT",
    "LICENSE-APACHE",
]
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "Brand-neutral blocking HTTP client for Right Suite apps: timeouts, retry/backoff with Retry-After, SSE streaming, multipart bodies, redacted secrets, and untrusted web-text wrapping."
readme = "README.md"
keywords = [
    "http",
    "retry",
    "sse",
    "streaming",
]
categories = ["web-programming::http-client"]
license = "MIT OR Apache-2.0"
repository = "https://github.com/bogusyogi/rightkit"

[package.metadata.rightkit]
continuous = false
continuous_reason = "sleep: cancellation-poll and retry waits inside one request (async_client.rs, cancel.rs), bounded by the request deadline; timer: a 25 ms tokio Sleep re-armed only while a cancellable async BodyStream is polled and pending (async_client.rs), gone when the stream is dropped; thread-spawn: one DNS-lookup thread per resolve with a timeout (netpolicy.rs), ends when getaddrinfo returns; thread-spawn: one body-reader thread per stream while ClientConfig::idle_timeout is set (idle.rs), ends at EOF, error or consumer drop, and no thread exists when it is None; listener: the loopback mock server in the opt-in testing feature, stopped and joined on drop; no free-running timer, watcher or long-lived memory (reviewed 2026-10-11); conn-pool: the reqwest Clients in src/async_client.rs (direct, plus at most one per configured proxy route) are owned by one AsyncClient and keep only idle keep-alive connections that reqwest closes after its default idle timeout, and all of them drop with the client, so the pool is idle when unused and holds no thread of its own beyond the DNS and body-reader threads named above; resident-static: CONNECT_STATE in src/client.rs is a thread_local Cell holding one three-state enum per calling thread (reviewed 2026-10-17)"

[features]
async = [
    "dep:reqwest",
    "dep:tokio",
    "dep:futures-util",
    "dep:bytes",
    "dep:rustls",
    "dep:rustls-platform-verifier",
    "dep:webpki-roots",
]
default = []
gzip = [
    "ureq/gzip",
    "reqwest?/gzip",
]
testing = []
untrusted = ["dep:rightkit-fs"]

[lib]
name = "rightkit_http"
path = "src/lib.rs"

[[test]]
name = "address_policy"
path = "tests/address_policy.rs"

[[test]]
name = "async_audit"
path = "tests/async_audit.rs"

[[test]]
name = "async_e2e"
path = "tests/async_e2e.rs"

[[test]]
name = "async_policy"
path = "tests/async_policy.rs"

[[test]]
name = "attempt_hook"
path = "tests/attempt_hook.rs"

[[test]]
name = "audit_030"
path = "tests/audit_030.rs"

[[test]]
name = "audit_030_async"
path = "tests/audit_030_async.rs"

[[test]]
name = "audit_fixes"
path = "tests/audit_fixes.rs"

[[test]]
name = "bodiless_framing"
path = "tests/bodiless_framing.rs"

[[test]]
name = "borrowed_cancel"
path = "tests/borrowed_cancel.rs"

[[test]]
name = "classify_parity"
path = "tests/classify_parity.rs"

[[test]]
name = "e2e"
path = "tests/e2e.rs"

[[test]]
name = "idle_cancel"
path = "tests/idle_cancel.rs"

[[test]]
name = "noproxy_routing"
path = "tests/noproxy_routing.rs"

[[test]]
name = "phases"
path = "tests/phases.rs"

[[test]]
name = "proxy"
path = "tests/proxy.rs"

[[test]]
name = "proxy_env"
path = "tests/proxy_env.rs"

[[test]]
name = "request_policy"
path = "tests/request_policy.rs"

[[test]]
name = "second_read"
path = "tests/second_read.rs"

[[test]]
name = "second_read_async"
path = "tests/second_read_async.rs"

[[test]]
name = "send_headers"
path = "tests/send_headers.rs"

[[test]]
name = "third_read"
path = "tests/third_read.rs"

[[test]]
name = "tls_local"
path = "tests/tls_local.rs"

[[test]]
name = "trust_https"
path = "tests/trust_https.rs"

[[test]]
name = "untrusted_coderight"
path = "tests/untrusted_coderight.rs"

[dependencies.bytes]
version = "1"
optional = true

[dependencies.futures-util]
version = "0.3"
optional = true
default-features = false

[dependencies.getrandom]
version = "0.4"

[dependencies.reqwest]
version = "0.13"
features = [
    "rustls-no-provider",
    "stream",
]
optional = true
default-features = false

[dependencies.rightkit-fs]
version = "0.4.0"
features = ["digest"]
optional = true
default-features = false

[dependencies.rustls]
version = "0.23"
features = [
    "ring",
    "std",
    "tls12",
]
optional = true
default-features = false

[dependencies.rustls-platform-verifier]
version = "0.7"
optional = true
default-features = false

[dependencies.serde]
version = "1.0.229"
features = ["derive"]

[dependencies.serde_json]
version = "1.0.154"

[dependencies.tokio]
version = "1"
features = [
    "time",
    "net",
]
optional = true
default-features = false

[dependencies.ureq]
version = "3.4"
features = [
    "rustls",
    "platform-verifier",
]
default-features = false

[dependencies.webpki-roots]
version = "1"
optional = true

[dev-dependencies.rcgen]
version = "0.14"

[dev-dependencies.rustls]
version = "0.23"
features = [
    "ring",
    "std",
    "tls12",
]
default-features = false

[dev-dependencies.tokio]
version = "1"
features = [
    "rt",
    "macros",
    "time",
]