###############################################################################
# @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(
        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",
        "socket2",
        "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": [
            "@crates_vendor_manifests__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.19.2",
    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_manifests__libc-0.2.126//:libc",
            "@crates_vendor_manifests__signal-hook-registry-1.4.0//:signal_hook_registry",

            # Common Deps
            "@crates_vendor_manifests__bytes-1.1.0//:bytes",
            "@crates_vendor_manifests__memchr-2.5.0//:memchr",
            "@crates_vendor_manifests__mio-0.8.4//:mio",
            "@crates_vendor_manifests__num_cpus-1.13.1//:num_cpus",
            "@crates_vendor_manifests__once_cell-1.13.0//:once_cell",
            "@crates_vendor_manifests__parking_lot-0.12.1//:parking_lot",
            "@crates_vendor_manifests__pin-project-lite-0.2.9//:pin_project_lite",
            "@crates_vendor_manifests__socket2-0.4.4//:socket2",
        ],
        # cfg(windows)
        (
            "@rules_rust//rust/platform:i686-pc-windows-msvc",
            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
        ): [
            # Target Deps
            "@crates_vendor_manifests__winapi-0.3.9//:winapi",

            # Common Deps
            "@crates_vendor_manifests__bytes-1.1.0//:bytes",
            "@crates_vendor_manifests__memchr-2.5.0//:memchr",
            "@crates_vendor_manifests__mio-0.8.4//:mio",
            "@crates_vendor_manifests__num_cpus-1.13.1//:num_cpus",
            "@crates_vendor_manifests__once_cell-1.13.0//:once_cell",
            "@crates_vendor_manifests__parking_lot-0.12.1//:parking_lot",
            "@crates_vendor_manifests__pin-project-lite-0.2.9//:pin_project_lite",
            "@crates_vendor_manifests__socket2-0.4.4//:socket2",
        ],
        "//conditions:default": [
            "@crates_vendor_manifests__bytes-1.1.0//:bytes",
            "@crates_vendor_manifests__memchr-2.5.0//:memchr",
            "@crates_vendor_manifests__mio-0.8.4//:mio",
            "@crates_vendor_manifests__num_cpus-1.13.1//:num_cpus",
            "@crates_vendor_manifests__once_cell-1.13.0//:once_cell",
            "@crates_vendor_manifests__parking_lot-0.12.1//:parking_lot",
            "@crates_vendor_manifests__pin-project-lite-0.2.9//:pin_project_lite",
            "@crates_vendor_manifests__socket2-0.4.4//:socket2",
        ],
    }),
)
