###############################################################################
# @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",
    srcs = glob(
        include = [
            "**/*.rs",
        ],
        exclude = [
        ],
    ),
    aliases = selects.with_or({
        "//conditions:default": {
        },
    }),
    compile_data = glob(["**"]) + select_with_or({
        "//conditions:default": [
        ],
    }),
    crate_features = [
        "__common",
        "buffer",
        "default",
        "futures-core",
        "futures-util",
        "log",
        "make",
        "pin-project",
        "pin-project-lite",
        "tokio",
        "tokio-util",
        "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",
    ] + select_with_or({
        "//conditions:default": [
        ],
    }),
    tags = [
        "cargo-bazel",
        "manual",
        "noclippy",
        "norustfmt",
    ],
    version = "0.4.12",
    deps = [
    ] + select_with_or({
        "//conditions:default": [
            "@crates_vendor_pkgs__futures-core-0.3.21//:futures_core",
            "@crates_vendor_pkgs__futures-util-0.3.21//:futures_util",
            "@crates_vendor_pkgs__pin-project-1.0.10//:pin_project",
            "@crates_vendor_pkgs__pin-project-lite-0.2.9//:pin_project_lite",
            "@crates_vendor_pkgs__tokio-1.16.1//:tokio",
            "@crates_vendor_pkgs__tokio-util-0.7.1//:tokio_util",
            "@crates_vendor_pkgs__tower-layer-0.3.1//:tower_layer",
            "@crates_vendor_pkgs__tower-service-0.3.1//:tower_service",
            "@crates_vendor_pkgs__tracing-0.1.34//:tracing",
        ],
    }),
)
