###############################################################################
# @generated
# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
# regenerate this file, run the following:
#
#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
###############################################################################

# 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 = "hyper",
    srcs = glob(
        include = [
            "**/*.rs",
        ],
        exclude = [
        ],
    ),
    aliases = select({
        "//conditions:default": {
        },
    }),
    compile_data = glob(
        include = ["**"],
        exclude = [
            "**/* *",
            "BUILD.bazel",
            "BUILD",
            "WORKSPACE.bazel",
            "WORKSPACE",
        ],
    ) + select_with_or({
        "//conditions:default": [
        ],
    }),
    crate_features = [
        "client",
        "default",
        "full",
        "h2",
        "http1",
        "http2",
        "runtime",
        "server",
        "socket2",
        "stream",
        "tcp",
    ],
    crate_root = "src/lib.rs",
    data = select_with_or({
        "//conditions:default": [
        ],
    }),
    edition = "2018",
    proc_macro_deps = [
    ] + select({
        "//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.14.23",
    deps = [
    ] + select({
        "//conditions:default": [
            "@crates_vendor_pkgs__bytes-1.3.0//:bytes",
            "@crates_vendor_pkgs__futures-channel-0.3.25//:futures_channel",
            "@crates_vendor_pkgs__futures-core-0.3.25//:futures_core",
            "@crates_vendor_pkgs__futures-util-0.3.25//:futures_util",
            "@crates_vendor_pkgs__h2-0.3.15//:h2",
            "@crates_vendor_pkgs__http-0.2.8//:http",
            "@crates_vendor_pkgs__http-body-0.4.5//:http_body",
            "@crates_vendor_pkgs__httparse-1.8.0//:httparse",
            "@crates_vendor_pkgs__httpdate-1.0.2//:httpdate",
            "@crates_vendor_pkgs__itoa-1.0.4//:itoa",
            "@crates_vendor_pkgs__pin-project-lite-0.2.9//:pin_project_lite",
            "@crates_vendor_pkgs__socket2-0.4.7//:socket2",
            "@crates_vendor_pkgs__tokio-1.16.1//:tokio",
            "@crates_vendor_pkgs__tower-service-0.3.2//:tower_service",
            "@crates_vendor_pkgs__tracing-0.1.37//:tracing",
            "@crates_vendor_pkgs__want-0.3.0//:want",
        ],
    }),
)
