[package]
name = "tower-proxy"
version = "0.8.0"
edition = "2024"
rust-version = "1.88.0"
authors = ["Kristof Mattei", "Masato Nakata <masaton@naughie.com>"]
description = "Tower service for reverse proxy"
license = "MIT OR Apache-2.0"
categories = ["asynchronous", "web-programming", "web-programming::http-server"]
keywords = ["http", "tower", "axum", "reverse", "proxy"]
repository = "https://github.com/kristof-mattei/tower-proxy"
documentation = "https://docs.rs/tower-proxy"
readme = "README.md"
include = ["src/**", "/LICENSE", "/LICENSE-*"]
[features]
default = ["http1"]
http1 = ["hyper/http1", "hyper-util/http1"]
http2 = ["hyper/http2", "hyper-util/http2"]
https = ["nativetls"]
nativetls = ["hyper-tls"]
rustls = ["rustls-webpki-roots"]
rustls-http2 = ["http2", "rustls", "hyper-rustls/http2"]
rustls-native-roots = ["__rustls", "hyper-rustls/rustls-native-certs"]
rustls-webpki-roots = ["__rustls", "hyper-rustls/webpki-roots"]
rustls-ring = ["__rustls", "hyper-rustls/ring"]
rustls-aws-lc = ["__rustls", "hyper-rustls/aws-lc-rs"]
__rustls = ["hyper-rustls"]
[dependencies]
axum = { version = "0.8.6", optional = true }
http = "1.3.1"
hyper = { version = "1.7.0", features = ["client"] }
hyper-rustls = { version = "0.27.7", default-features = false, features = [
"http1",
"logging",
"native-tokio",
"tls12",
], optional = true }
hyper-tls = { version = "0.6.0", optional = true }
hyper-util = { version = "0.1.17", features = [
"client",
"client-legacy",
"tokio",
] }
regex = "1.12.2"
tower-service = "0.3.3"
tracing = "0.1.41"
[dev-dependencies]
axum = "0.8.6"
http-body-util = "0.1.3"
mockito = "1.7.0"
pretty_assertions = "1.4.1"
reqwest = "0.13.1"
tokio = { version = "1", features = ["macros", "rt-multi-thread"] }
[[example]]
doc-scrape-examples = true
name = "http2-proxy"
required-features = ["axum"]
[package.metadata.docs.rs]
all-features = true
rustdoc-args = ["--cfg", "docsrs"]
[package.metadata.spellcheck]
config = "spellcheck.toml"
[lints.clippy]
all = "warn"
cargo = "warn"
complexity = "warn"
correctness = "warn"
pedantic = "warn"
perf = "warn"
style = "warn"
suspicious = "warn"
absolute_paths = { level = "deny", priority = 127 }
allow_attributes = { level = "deny", priority = 127 }
allow_attributes_without_reason = { level = "deny", priority = 127 }
as_pointer_underscore = { level = "deny", priority = 127 }
as_underscore = { level = "deny", priority = 127 }
assertions_on_result_states = { level = "deny", priority = 127 }
big_endian_bytes = { level = "deny", priority = 127 }
cfg_not_test = { level = "deny", priority = 127 }
clone_on_ref_ptr = { level = "deny", priority = 127 }
create_dir = { level = "deny", priority = 127 }
dbg_macro = { level = "deny", priority = 127 }
decimal_literal_representation = { level = "deny", priority = 127 }
default_union_representation = { level = "deny", priority = 127 }
deref_by_slicing = { level = "deny", priority = 127 }
doc_include_without_cfg = { level = "deny", priority = 127 }
doc_paragraphs_missing_punctuation = { level = "deny", priority = 127 }
else_if_without_else = { level = "deny", priority = 127 }
empty_drop = { level = "deny", priority = 127 }
error_impl_error = { level = "deny", priority = 127 }
exit = { level = "deny", priority = 127 }
field_scoped_visibility_modifiers = { level = "deny", priority = 127 }
filetype_is_file = { level = "deny", priority = 127 }
float_cmp_const = { level = "deny", priority = 127 }
fn_to_numeric_cast_any = { level = "deny", priority = 127 }
host_endian_bytes = { level = "deny", priority = 127 }
impl_trait_in_params = { level = "deny", priority = 127 }
infinite_loop = { level = "deny", priority = 127 }
inline_asm_x86_att_syntax = { level = "deny", priority = 127 }
iter_over_hash_type = { level = "deny", priority = 127 }
large_include_file = { level = "deny", priority = 127 }
let_underscore_must_use = { level = "deny", priority = 127 }
let_underscore_untyped = { level = "deny", priority = 127 }
little_endian_bytes = { level = "deny", priority = 127 }
lossy_float_literal = { level = "deny", priority = 127 }
map_with_unused_argument_over_ranges = { level = "deny", priority = 127 }
mem_forget = { level = "deny", priority = 127 }
missing_assert_message = { level = "deny", priority = 127 }
mixed_read_write_in_expression = { level = "deny", priority = 127 }
mod_module_files = { level = "deny", priority = 127 }
modulo_arithmetic = { level = "deny", priority = 127 }
multiple_inherent_impl = { level = "deny", priority = 127 }
multiple_unsafe_ops_per_block = { level = "deny", priority = 127 }
mutex_atomic = { level = "deny", priority = 127 }
mutex_integer = { level = "deny", priority = 127 }
needless_raw_strings = { level = "deny", priority = 127 }
non_ascii_literal = { level = "deny", priority = 127 }
non_zero_suggestions = { level = "deny", priority = 127 }
panic_in_result_fn = { level = "deny", priority = 127 }
partial_pub_fields = { level = "deny", priority = 127 }
pattern_type_mismatch = { level = "deny", priority = 127 }
precedence_bits = { level = "deny", priority = 127 }
pub_without_shorthand = { level = "deny", priority = 127 }
rc_buffer = { level = "deny", priority = 127 }
rc_mutex = { level = "deny", priority = 127 }
redundant_test_prefix = { level = "deny", priority = 127 }
renamed_function_params = { level = "deny", priority = 127 }
rest_pat_in_fully_bound_structs = { level = "deny", priority = 127 }
return_and_then = { level = "deny", priority = 127 }
semicolon_inside_block = { level = "deny", priority = 127 }
str_to_string = { level = "deny", priority = 127 }
string_add = { level = "deny", priority = 127 }
string_lit_chars_any = { level = "deny", priority = 127 }
string_slice = { level = "deny", priority = 127 }
suspicious_xor_used_as_pow = { level = "deny", priority = 127 }
tests_outside_test_module = { level = "deny", priority = 127 }
todo = { level = "deny", priority = 127 }
try_err = { level = "deny", priority = 127 }
undocumented_unsafe_blocks = { level = "deny", priority = 127 }
unimplemented = { level = "deny", priority = 127 }
unnecessary_safety_comment = { level = "deny", priority = 127 }
unnecessary_safety_doc = { level = "deny", priority = 127 }
unnecessary_self_imports = { level = "deny", priority = 127 }
unneeded_field_pattern = { level = "deny", priority = 127 }
unseparated_literal_suffix = { level = "deny", priority = 127 }
unused_result_ok = { level = "deny", priority = 127 }
unused_trait_names = { level = "deny", priority = 127 }
verbose_file_reads = { level = "deny", priority = 127 }
wildcard_enum_match_arm = { level = "deny", priority = 127 }
collapsible_if = { level = "allow", priority = 127 }
let_and_return = { level = "allow", priority = 127 }
multiple_crate_versions = { level = "allow", priority = 127 }
needless_continue = { level = "allow", priority = 127 }
needless_borrowed_reference = { level = "allow", priority = 127 }
redundant_else = { level = "allow", priority = 127 }
uninlined_format_args = { level = "allow", priority = 127 }
[lints.rust]
let_underscore_drop = { level = "deny", priority = 127 }
non_ascii_idents = { level = "deny", priority = 127 }