###############################################################################
# @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 = "hyper",
    srcs = glob(
        include = [
            "**/*.rs",
        ],
        exclude = [
        ],
    ),
    aliases = selects.with_or({
        "//conditions:default": {
        },
    }),
    compile_data = glob(
        include = ["**"],
        exclude = [
            "BUILD",
            "BUILD.bazel",
            "WORKSPACE",
            "WORKSPACE.bazel",
        ],
    ) + 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_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.14.19",
    deps = [
    ] + select_with_or({
        "//conditions:default": [
            "@crates_vendor_pkgs__bytes-1.1.0//:bytes",
            "@crates_vendor_pkgs__futures-channel-0.3.21//:futures_channel",
            "@crates_vendor_pkgs__futures-core-0.3.21//:futures_core",
            "@crates_vendor_pkgs__futures-util-0.3.21//:futures_util",
            "@crates_vendor_pkgs__h2-0.3.13//:h2",
            "@crates_vendor_pkgs__http-0.2.8//:http",
            "@crates_vendor_pkgs__http-body-0.4.5//:http_body",
            "@crates_vendor_pkgs__httparse-1.7.1//:httparse",
            "@crates_vendor_pkgs__httpdate-1.0.2//:httpdate",
            "@crates_vendor_pkgs__itoa-1.0.2//:itoa",
            "@crates_vendor_pkgs__pin-project-lite-0.2.9//:pin_project_lite",
            "@crates_vendor_pkgs__socket2-0.4.4//: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.35//:tracing",
            "@crates_vendor_pkgs__want-0.3.0//:want",
        ],
    }),
)
