liburlx 0.1.0

A memory-safe URL transfer library — idiomatic Rust reimplementation of libcurl
Documentation
[package]
name = "liburlx"
description = "A memory-safe URL transfer library — idiomatic Rust reimplementation of libcurl"
version.workspace = true
edition.workspace = true
rust-version.workspace = true
license.workspace = true
repository.workspace = true
homepage.workspace = true
documentation.workspace = true
keywords = ["http", "curl", "transfer", "tls", "async"]
categories = ["network-programming", "web-programming::http-client"]

[lints]
workspace = true

[features]
default = ["http", "http2", "rustls", "decompression"]

# Protocols
http = []
http2 = ["dep:h2", "dep:bytes"]
http3 = ["dep:quinn", "dep:h3", "dep:h3-quinn", "dep:bytes"]

# TLS backends
rustls = ["dep:rustls", "dep:webpki-roots", "dep:tokio-rustls"]

# SSH/SFTP/SCP protocols
ssh = ["dep:russh", "dep:russh-sftp"]

# Async DNS resolver
hickory-dns = ["dep:hickory-resolver"]

# Content-Encoding decompression
decompression = ["dep:flate2", "dep:brotli", "dep:zstd"]

[dependencies]
thiserror.workspace = true
tokio = { workspace = true, features = ["net", "io-util", "rt", "time", "sync", "macros"] }
base64 = "0.22"
h2 = { version = "0.4", optional = true }
md-5 = "0.10"
sha2 = "0.10"
hex = "0.4"
rand = "0.9"
socket2 = { version = "0.6", features = ["all"] }
url = "2"
bytes = { version = "1", optional = true }
http = "1"
httparse = "1"
rustls = { version = "0.23", optional = true, default-features = false, features = ["std", "tls12", "ring"] }
webpki-roots = { version = "1", optional = true }
tokio-rustls = { version = "0.26", optional = true, default-features = false, features = ["ring", "tls12"] }
quinn = { version = "0.11", optional = true, default-features = false, features = ["ring", "runtime-tokio", "rustls"] }
h3 = { version = "0.0.8", optional = true }
h3-quinn = { version = "0.0.10", optional = true }
russh = { version = "0.57", optional = true, default-features = false, features = ["ring"] }
russh-sftp = { version = "2.1", optional = true }
flate2 = { version = "1", optional = true }
brotli = { version = "7", optional = true }
zstd = { version = "0.13", optional = true, default-features = false }
hickory-resolver = { version = "0.25", optional = true, default-features = false, features = ["tokio", "system-config", "https-ring", "tls-ring"] }
psl = "2"

[dev-dependencies]
tokio = { workspace = true, features = ["full"] }
hyper = { version = "1", features = ["server", "http1", "http2"] }
hyper-util = { version = "0.1", features = ["tokio"] }
http-body-util = "0.1"
flate2 = "1"
tempfile = "3"
proptest = "1"
criterion = { version = "0.5", features = ["html_reports"] }
rcgen = "0.13"
tokio-rustls = { version = "0.26", default-features = false, features = ["ring", "tls12"] }
rustls = { version = "0.23", default-features = false, features = ["std", "tls12", "ring"] }
md-5 = "0.10"
hex = "0.4"

[[bench]]
name = "throughput"
harness = false