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