###############################################################################
# @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",
        "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_pkgs/crates/tokio-macros-1.8.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",
    ],
    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-apple-ios-sim",
            "@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-linux-androideabi",
            "@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_pkgs/crates/libc-0.2.126:libc",
            "//vendor_local_pkgs/crates/signal-hook-registry-1.4.0:signal_hook_registry",

            # Common Deps
            "//vendor_local_pkgs/crates/bytes-1.1.0:bytes",
            "//vendor_local_pkgs/crates/memchr-2.5.0:memchr",
            "//vendor_local_pkgs/crates/mio-0.7.14:mio",
            "//vendor_local_pkgs/crates/num_cpus-1.13.1:num_cpus",
            "//vendor_local_pkgs/crates/once_cell-1.12.1:once_cell",
            "//vendor_local_pkgs/crates/parking_lot-0.11.2:parking_lot",
            "//vendor_local_pkgs/crates/pin-project-lite-0.2.9: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_pkgs/crates/winapi-0.3.9:winapi",

            # Common Deps
            "//vendor_local_pkgs/crates/bytes-1.1.0:bytes",
            "//vendor_local_pkgs/crates/memchr-2.5.0:memchr",
            "//vendor_local_pkgs/crates/mio-0.7.14:mio",
            "//vendor_local_pkgs/crates/num_cpus-1.13.1:num_cpus",
            "//vendor_local_pkgs/crates/once_cell-1.12.1:once_cell",
            "//vendor_local_pkgs/crates/parking_lot-0.11.2:parking_lot",
            "//vendor_local_pkgs/crates/pin-project-lite-0.2.9:pin_project_lite",
        ],
        "//conditions:default": [
            "//vendor_local_pkgs/crates/bytes-1.1.0:bytes",
            "//vendor_local_pkgs/crates/memchr-2.5.0:memchr",
            "//vendor_local_pkgs/crates/mio-0.7.14:mio",
            "//vendor_local_pkgs/crates/num_cpus-1.13.1:num_cpus",
            "//vendor_local_pkgs/crates/once_cell-1.12.1:once_cell",
            "//vendor_local_pkgs/crates/parking_lot-0.11.2:parking_lot",
            "//vendor_local_pkgs/crates/pin-project-lite-0.2.9:pin_project_lite",
        ],
    }),
)
