###############################################################################
# @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
###############################################################################

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(
        include = ["**"],
        exclude = [
            "BUILD",
            "BUILD.bazel",
            "WORKSPACE",
            "WORKSPACE.bazel",
        ],
    ) + 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": [
            "@crates_vendor_pkgs__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
            "@crates_vendor_pkgs__libc-0.2.126//:libc",
            "@crates_vendor_pkgs__signal-hook-registry-1.4.0//:signal_hook_registry",

            # Common Deps
            "@crates_vendor_pkgs__bytes-1.1.0//:bytes",
            "@crates_vendor_pkgs__memchr-2.5.0//:memchr",
            "@crates_vendor_pkgs__mio-0.7.14//:mio",
            "@crates_vendor_pkgs__num_cpus-1.13.1//:num_cpus",
            "@crates_vendor_pkgs__once_cell-1.13.0//:once_cell",
            "@crates_vendor_pkgs__parking_lot-0.11.2//:parking_lot",
            "@crates_vendor_pkgs__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
            "@crates_vendor_pkgs__winapi-0.3.9//:winapi",

            # Common Deps
            "@crates_vendor_pkgs__bytes-1.1.0//:bytes",
            "@crates_vendor_pkgs__memchr-2.5.0//:memchr",
            "@crates_vendor_pkgs__mio-0.7.14//:mio",
            "@crates_vendor_pkgs__num_cpus-1.13.1//:num_cpus",
            "@crates_vendor_pkgs__once_cell-1.13.0//:once_cell",
            "@crates_vendor_pkgs__parking_lot-0.11.2//:parking_lot",
            "@crates_vendor_pkgs__pin-project-lite-0.2.9//:pin_project_lite",
        ],
        "//conditions:default": [
            "@crates_vendor_pkgs__bytes-1.1.0//:bytes",
            "@crates_vendor_pkgs__memchr-2.5.0//:memchr",
            "@crates_vendor_pkgs__mio-0.7.14//:mio",
            "@crates_vendor_pkgs__num_cpus-1.13.1//:num_cpus",
            "@crates_vendor_pkgs__once_cell-1.13.0//:once_cell",
            "@crates_vendor_pkgs__parking_lot-0.11.2//:parking_lot",
            "@crates_vendor_pkgs__pin-project-lite-0.2.9//:pin_project_lite",
        ],
    }),
)
