[package]
edition = "2021"
rust-version = "1.85.0"
name = "liburlx"
version = "0.1.0"
build = false
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "A memory-safe URL transfer library — idiomatic Rust reimplementation of libcurl"
homepage = "https://github.com/jonwiggins/urlx"
documentation = "https://docs.rs/liburlx"
readme = false
keywords = [
"http",
"curl",
"transfer",
"tls",
"async",
]
categories = [
"network-programming",
"web-programming::http-client",
]
license = "MIT"
repository = "https://github.com/jonwiggins/urlx"
[features]
decompression = [
"dep:flate2",
"dep:brotli",
"dep:zstd",
]
default = [
"http",
"http2",
"rustls",
"decompression",
]
hickory-dns = ["dep:hickory-resolver"]
http = []
http2 = [
"dep:h2",
"dep:bytes",
]
http3 = [
"dep:quinn",
"dep:h3",
"dep:h3-quinn",
"dep:bytes",
]
rustls = [
"dep:rustls",
"dep:webpki-roots",
"dep:tokio-rustls",
]
ssh = [
"dep:russh",
"dep:russh-sftp",
]
[lib]
name = "liburlx"
path = "src/lib.rs"
[[test]]
name = "auth_bearer_integration"
path = "tests/auth_bearer_integration.rs"
[[test]]
name = "aws_sigv4_integration"
path = "tests/aws_sigv4_integration.rs"
[[test]]
name = "connection_pool"
path = "tests/connection_pool.rs"
[[test]]
name = "cookie_engine"
path = "tests/cookie_engine.rs"
[[test]]
name = "cookie_jar_api"
path = "tests/cookie_jar_api.rs"
[[test]]
name = "cookie_persistence"
path = "tests/cookie_persistence.rs"
[[test]]
name = "cookie_stress"
path = "tests/cookie_stress.rs"
[[test]]
name = "cookie_wire_flow"
path = "tests/cookie_wire_flow.rs"
[[test]]
name = "curl_compat"
path = "tests/curl_compat.rs"
[[test]]
name = "decompression"
path = "tests/decompression.rs"
[[test]]
name = "decompression_integration"
path = "tests/decompression_integration.rs"
[[test]]
name = "differential_curl"
path = "tests/differential_curl.rs"
[[test]]
name = "digest_auth"
path = "tests/digest_auth.rs"
[[test]]
name = "dns_resolve"
path = "tests/dns_resolve.rs"
[[test]]
name = "e2e_error_recovery"
path = "tests/e2e_error_recovery.rs"
[[test]]
name = "e2e_workflows"
path = "tests/e2e_workflows.rs"
[[test]]
name = "easy_api_coverage"
path = "tests/easy_api_coverage.rs"
[[test]]
name = "easy_config_completeness"
path = "tests/easy_config_completeness.rs"
[[test]]
name = "easy_edge_cases"
path = "tests/easy_edge_cases.rs"
[[test]]
name = "easy_method_coverage"
path = "tests/easy_method_coverage.rs"
[[test]]
name = "error_code_mapping"
path = "tests/error_code_mapping.rs"
[[test]]
name = "error_coverage"
path = "tests/error_coverage.rs"
[[test]]
name = "error_interop"
path = "tests/error_interop.rs"
[[test]]
name = "fail_on_error"
path = "tests/fail_on_error.rs"
[[test]]
name = "fail_on_error_integration"
path = "tests/fail_on_error_integration.rs"
[[test]]
name = "ffi_expanded"
path = "tests/ffi_expanded.rs"
[[test]]
name = "file_protocol"
path = "tests/file_protocol.rs"
[[test]]
name = "file_protocol_edge"
path = "tests/file_protocol_edge.rs"
[[test]]
name = "form_upload_integration"
path = "tests/form_upload_integration.rs"
[[test]]
name = "ftp_protocol_edge_cases"
path = "tests/ftp_protocol_edge_cases.rs"
[[test]]
name = "h1_parser_edge"
path = "tests/h1_parser_edge.rs"
[[test]]
name = "h1_parser_edge_cases"
path = "tests/h1_parser_edge_cases.rs"
[[test]]
name = "header_wire_format"
path = "tests/header_wire_format.rs"
[[test]]
name = "hsts"
path = "tests/hsts.rs"
[[test]]
name = "hsts_integration"
path = "tests/hsts_integration.rs"
[[test]]
name = "hsts_upgrade_integration"
path = "tests/hsts_upgrade_integration.rs"
[[test]]
name = "http2_integration"
path = "tests/http2_integration.rs"
[[test]]
name = "http_basic"
path = "tests/http_basic.rs"
[[test]]
name = "http_conformance"
path = "tests/http_conformance.rs"
[[test]]
name = "http_cookies"
path = "tests/http_cookies.rs"
[[test]]
name = "http_edge_cases"
path = "tests/http_edge_cases.rs"
[[test]]
name = "http_error_paths"
path = "tests/http_error_paths.rs"
[[test]]
name = "http_integration"
path = "tests/http_integration.rs"
[[test]]
name = "http_multi"
path = "tests/http_multi.rs"
[[test]]
name = "http_multipart"
path = "tests/http_multipart.rs"
[[test]]
name = "http_proxy"
path = "tests/http_proxy.rs"
[[test]]
name = "http_range"
path = "tests/http_range.rs"
[[test]]
name = "http_version_selection"
path = "tests/http_version_selection.rs"
[[test]]
name = "imap_edge_cases"
path = "tests/imap_edge_cases.rs"
[[test]]
name = "keepalive_behavior"
path = "tests/keepalive_behavior.rs"
[[test]]
name = "mqtt_edge_cases"
path = "tests/mqtt_edge_cases.rs"
[[test]]
name = "multi_blocking"
path = "tests/multi_blocking.rs"
[[test]]
name = "multi_concurrency"
path = "tests/multi_concurrency.rs"
[[test]]
name = "multi_concurrent"
path = "tests/multi_concurrent.rs"
[[test]]
name = "multi_edge_cases"
path = "tests/multi_edge_cases.rs"
[[test]]
name = "multi_stress"
path = "tests/multi_stress.rs"
[[test]]
name = "multipart_encoding"
path = "tests/multipart_encoding.rs"
[[test]]
name = "multipart_roundtrip"
path = "tests/multipart_roundtrip.rs"
[[test]]
name = "multipart_stress"
path = "tests/multipart_stress.rs"
[[test]]
name = "pool_lifecycle"
path = "tests/pool_lifecycle.rs"
[[test]]
name = "pool_stress"
path = "tests/pool_stress.rs"
[[test]]
name = "pop3_edge_cases"
path = "tests/pop3_edge_cases.rs"
[[test]]
name = "progress_callback"
path = "tests/progress_callback.rs"
[[test]]
name = "progress_integration"
path = "tests/progress_integration.rs"
[[test]]
name = "proptest_cookie"
path = "tests/proptest_cookie.rs"
[[test]]
name = "proptest_ftp"
path = "tests/proptest_ftp.rs"
[[test]]
name = "proptest_h1"
path = "tests/proptest_h1.rs"
[[test]]
name = "proptest_hsts"
path = "tests/proptest_hsts.rs"
[[test]]
name = "proptest_multipart"
path = "tests/proptest_multipart.rs"
[[test]]
name = "proptest_protocols"
path = "tests/proptest_protocols.rs"
[[test]]
name = "proptest_url"
path = "tests/proptest_url.rs"
[[test]]
name = "proptest_ws"
path = "tests/proptest_ws.rs"
[[test]]
name = "proxy_behavior"
path = "tests/proxy_behavior.rs"
[[test]]
name = "rate_limiting"
path = "tests/rate_limiting.rs"
[[test]]
name = "redirect_chain"
path = "tests/redirect_chain.rs"
[[test]]
name = "response_api_completeness"
path = "tests/response_api_completeness.rs"
[[test]]
name = "response_builder"
path = "tests/response_builder.rs"
[[test]]
name = "smtp_edge_cases"
path = "tests/smtp_edge_cases.rs"
[[test]]
name = "timeout_scenarios"
path = "tests/timeout_scenarios.rs"
[[test]]
name = "tls_config"
path = "tests/tls_config.rs"
[[test]]
name = "transfer_info_accuracy"
path = "tests/transfer_info_accuracy.rs"
[[test]]
name = "url_conformance"
path = "tests/url_conformance.rs"
[[test]]
name = "url_edge_cases"
path = "tests/url_edge_cases.rs"
[[test]]
name = "url_malformed"
path = "tests/url_malformed.rs"
[[test]]
name = "url_normalization"
path = "tests/url_normalization.rs"
[[test]]
name = "ws_codec_edge"
path = "tests/ws_codec_edge.rs"
[[test]]
name = "ws_frame_stress"
path = "tests/ws_frame_stress.rs"
[[bench]]
name = "throughput"
path = "benches/throughput.rs"
harness = false
[dependencies.base64]
version = "0.22"
[dependencies.brotli]
version = "7"
optional = true
[dependencies.bytes]
version = "1"
optional = true
[dependencies.flate2]
version = "1"
optional = true
[dependencies.h2]
version = "0.4"
optional = true
[dependencies.h3]
version = "0.0.8"
optional = true
[dependencies.h3-quinn]
version = "0.0.10"
optional = true
[dependencies.hex]
version = "0.4"
[dependencies.hickory-resolver]
version = "0.25"
features = [
"tokio",
"system-config",
"https-ring",
"tls-ring",
]
optional = true
default-features = false
[dependencies.http]
version = "1"
[dependencies.httparse]
version = "1"
[dependencies.md-5]
version = "0.10"
[dependencies.psl]
version = "2"
[dependencies.quinn]
version = "0.11"
features = [
"ring",
"runtime-tokio",
"rustls",
]
optional = true
default-features = false
[dependencies.rand]
version = "0.9"
[dependencies.russh]
version = "0.57"
features = ["ring"]
optional = true
default-features = false
[dependencies.russh-sftp]
version = "2.1"
optional = true
[dependencies.rustls]
version = "0.23"
features = [
"std",
"tls12",
"ring",
]
optional = true
default-features = false
[dependencies.sha2]
version = "0.10"
[dependencies.socket2]
version = "0.6"
features = ["all"]
[dependencies.thiserror]
version = "2"
[dependencies.tokio]
version = "1"
features = [
"full",
"net",
"io-util",
"rt",
"time",
"sync",
"macros",
]
[dependencies.tokio-rustls]
version = "0.26"
features = [
"ring",
"tls12",
]
optional = true
default-features = false
[dependencies.url]
version = "2"
[dependencies.webpki-roots]
version = "1"
optional = true
[dependencies.zstd]
version = "0.13"
optional = true
default-features = false
[dev-dependencies.criterion]
version = "0.5"
features = ["html_reports"]
[dev-dependencies.flate2]
version = "1"
[dev-dependencies.hex]
version = "0.4"
[dev-dependencies.http-body-util]
version = "0.1"
[dev-dependencies.hyper]
version = "1"
features = [
"server",
"http1",
"http2",
]
[dev-dependencies.hyper-util]
version = "0.1"
features = ["tokio"]
[dev-dependencies.md-5]
version = "0.10"
[dev-dependencies.proptest]
version = "1"
[dev-dependencies.rcgen]
version = "0.13"
[dev-dependencies.rustls]
version = "0.23"
features = [
"std",
"tls12",
"ring",
]
default-features = false
[dev-dependencies.tempfile]
version = "3"
[dev-dependencies.tokio]
version = "1"
features = [
"full",
"full",
]
[dev-dependencies.tokio-rustls]
version = "0.26"
features = [
"ring",
"tls12",
]
default-features = false
[lints.clippy]
cast_possible_truncation = "warn"
cast_possible_wrap = "warn"
cast_sign_loss = "warn"
dbg_macro = "deny"
expect_used = "warn"
missing_errors_doc = "warn"
missing_panics_doc = "warn"
panic = "deny"
print_stderr = "warn"
print_stdout = "warn"
todo = "warn"
unwrap_used = "deny"
[lints.clippy.all]
level = "deny"
priority = -1
[lints.clippy.nursery]
level = "warn"
priority = -1
[lints.clippy.pedantic]
level = "warn"
priority = -1
[lints.rust]
elided_lifetimes_in_paths = "warn"
missing_docs = "warn"
unused_results = "warn"