###############################################################################
# @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 = "tokio",
    srcs = glob(
        include = [
            "**/*.rs",
        ],
        exclude = [
        ],
    ),
    aliases = selects.with_or({
        "//conditions:default": {
        },
    }),
    compile_data = glob(["**"]) + select_with_or({
        "//conditions:default": [
        ],
    }),
    crate_features = [
        "bytes",
        "default",
        "fs",
        "full",
        "io-std",
        "io-util",
        "libc",
        "macros",
        "memchr",
        "mio",
        "net",
        "num_cpus",
        "once_cell",
        "parking_lot",
        "process",
        "rt",
        "rt-multi-thread",
        "signal",
        "signal-hook-registry",
        "sync",
        "test-util",
        "time",
        "tokio-macros",
        "winapi",
    ],
    crate_root = "src/lib.rs",
    data = select_with_or({
        "//conditions:default": [
        ],
    }),
    edition = "2018",
    proc_macro_deps = [
    ] + select_with_or({
        "//conditions:default": [
            "//vendor_local_manifests/crates/tokio-macros-1.7.0:tokio_macros",
        ],
    }),
    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 = "1.16.1",
    deps = [
    ] + select_with_or({
        # cfg(unix)
        (
            "@rules_rust//rust/platform:aarch64-apple-darwin",
            "@rules_rust//rust/platform:aarch64-apple-ios",
            "@rules_rust//rust/platform:aarch64-linux-android",
            "@rules_rust//rust/platform:aarch64-unknown-linux-gnu",
            "@rules_rust//rust/platform:arm-unknown-linux-gnueabi",
            "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi",
            "@rules_rust//rust/platform:i686-apple-darwin",
            "@rules_rust//rust/platform:i686-linux-android",
            "@rules_rust//rust/platform:i686-unknown-freebsd",
            "@rules_rust//rust/platform:i686-unknown-linux-gnu",
            "@rules_rust//rust/platform:powerpc-unknown-linux-gnu",
            "@rules_rust//rust/platform:s390x-unknown-linux-gnu",
            "@rules_rust//rust/platform:x86_64-apple-darwin",
            "@rules_rust//rust/platform:x86_64-apple-ios",
            "@rules_rust//rust/platform:x86_64-linux-android",
            "@rules_rust//rust/platform:x86_64-unknown-freebsd",
            "@rules_rust//rust/platform:x86_64-unknown-linux-gnu",
        ): [
            # Target Deps
            "//vendor_local_manifests/crates/libc-0.2.121:libc",
            "//vendor_local_manifests/crates/signal-hook-registry-1.4.0:signal_hook_registry",

            # Common Deps
            "//vendor_local_manifests/crates/bytes-1.1.0:bytes",
            "//vendor_local_manifests/crates/memchr-2.4.1:memchr",
            "//vendor_local_manifests/crates/mio-0.7.14:mio",
            "//vendor_local_manifests/crates/num_cpus-1.13.1:num_cpus",
            "//vendor_local_manifests/crates/once_cell-1.10.0:once_cell",
            "//vendor_local_manifests/crates/parking_lot-0.11.2:parking_lot",
            "//vendor_local_manifests/crates/pin-project-lite-0.2.8:pin_project_lite",
        ],
        # cfg(windows)
        (
            "@rules_rust//rust/platform:i686-pc-windows-msvc",
            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
        ): [
            # Target Deps
            "//vendor_local_manifests/crates/winapi-0.3.9:winapi",

            # Common Deps
            "//vendor_local_manifests/crates/bytes-1.1.0:bytes",
            "//vendor_local_manifests/crates/memchr-2.4.1:memchr",
            "//vendor_local_manifests/crates/mio-0.7.14:mio",
            "//vendor_local_manifests/crates/num_cpus-1.13.1:num_cpus",
            "//vendor_local_manifests/crates/once_cell-1.10.0:once_cell",
            "//vendor_local_manifests/crates/parking_lot-0.11.2:parking_lot",
            "//vendor_local_manifests/crates/pin-project-lite-0.2.8:pin_project_lite",
        ],
        "//conditions:default": [
            "//vendor_local_manifests/crates/bytes-1.1.0:bytes",
            "//vendor_local_manifests/crates/memchr-2.4.1:memchr",
            "//vendor_local_manifests/crates/mio-0.7.14:mio",
            "//vendor_local_manifests/crates/num_cpus-1.13.1:num_cpus",
            "//vendor_local_manifests/crates/once_cell-1.10.0:once_cell",
            "//vendor_local_manifests/crates/parking_lot-0.11.2:parking_lot",
            "//vendor_local_manifests/crates/pin-project-lite-0.2.8:pin_project_lite",
        ],
    }),
)
