###############################################################################
# @generated
# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
# regenerate this file, run the following:
#
#     bazel run //vendor_local_manifests:crates_vendor
###############################################################################

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 OR Apache-2.0
# ])

rust_library(
    name = "tempfile",
    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 = [
    ],
    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 = "3.3.0",
    deps = [
    ] + select_with_or({
        # cfg(any(unix, target_os = "wasi"))
        (
            "@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:wasm32-wasi",
            "@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.126:libc",

            # Common Deps
            "//vendor_local_manifests/crates/cfg-if-1.0.0:cfg_if",
            "//vendor_local_manifests/crates/fastrand-1.7.0:fastrand",
            "//vendor_local_manifests/crates/remove_dir_all-0.5.3:remove_dir_all",
        ],
        # cfg(target_os = "redox")
        #
        # No supported platform triples for cfg: 'cfg(target_os = "redox")'
        # Skipped dependencies: [{"id":"redox_syscall 0.2.13","target":"syscall"}]
        #
        # 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/cfg-if-1.0.0:cfg_if",
            "//vendor_local_manifests/crates/fastrand-1.7.0:fastrand",
            "//vendor_local_manifests/crates/remove_dir_all-0.5.3:remove_dir_all",
        ],
        "//conditions:default": [
            "//vendor_local_manifests/crates/cfg-if-1.0.0:cfg_if",
            "//vendor_local_manifests/crates/fastrand-1.7.0:fastrand",
            "//vendor_local_manifests/crates/remove_dir_all-0.5.3:remove_dir_all",
        ],
    }),
)
