###############################################################################
# @generated
# This file is auto-generated by the cargo-bazel tool.
#
# DO NOT MODIFY: Local changes may be replaced in future executions.
###############################################################################

load(
    "@bazel_skylib//lib:selects.bzl",
    "selects",
)

# buildifier: disable=bzl-visibility
load("@rules_rust//crate_universe/private:selects.bzl", "select_with_or")
load(
    "@rules_rust//rust:defs.bzl",
    "rust_library",
)

package(default_visibility = ["//visibility:public"])

# licenses([
#     "TODO",  # MIT
# ])

rust_library(
    name = "tower_http",
    srcs = glob(
        include = [
            "**/*.rs",
        ],
        exclude = [
        ],
    ),
    aliases = selects.with_or({
        "//conditions:default": {
        },
    }),
    compile_data = glob(["**"]) + select_with_or({
        "//conditions:default": [
        ],
    }),
    crate_features = [
        "default",
        "map-response-body",
        "tower",
        "trace",
        "tracing",
        "util",
    ],
    crate_root = "src/lib.rs",
    data = select_with_or({
        "//conditions:default": [
        ],
    }),
    edition = "2018",
    proc_macro_deps = [
    ] + select_with_or({
        "//conditions:default": [
        ],
    }),
    rustc_env = {
    },
    rustc_env_files = select_with_or({
        "//conditions:default": [
        ],
    }),
    rustc_flags = [
        # In most cases, warnings in 3rd party crates are not interesting as
        # they're out of the control of consumers. The flag here silences
        # warnings. For more details see:
        # https://doc.rust-lang.org/rustc/lints/levels.html
        "--cap-lints=allow",
    ],
    tags = [
        "cargo-bazel",
        "manual",
        "noclippy",
        "norustfmt",
    ],
    version = "0.2.5",
    deps = [
    ] + select_with_or({
        "//conditions:default": [
            "//vendor_local_pkgs/crates/bitflags-1.3.2:bitflags",
            "//vendor_local_pkgs/crates/bytes-1.1.0:bytes",
            "//vendor_local_pkgs/crates/futures-core-0.3.21:futures_core",
            "//vendor_local_pkgs/crates/futures-util-0.3.21:futures_util",
            "//vendor_local_pkgs/crates/http-0.2.8:http",
            "//vendor_local_pkgs/crates/http-body-0.4.5:http_body",
            "//vendor_local_pkgs/crates/http-range-header-0.3.0:http_range_header",
            "//vendor_local_pkgs/crates/pin-project-lite-0.2.9:pin_project_lite",
            "//vendor_local_pkgs/crates/tower-0.4.12:tower",
            "//vendor_local_pkgs/crates/tower-layer-0.3.1:tower_layer",
            "//vendor_local_pkgs/crates/tower-service-0.3.1:tower_service",
            "//vendor_local_pkgs/crates/tracing-0.1.35:tracing",
        ],
    }),
)
