###############################################################################
# @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_manifests:crates_vendor
###############################################################################

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(["**/*.rs"]),
    compile_data = glob(
        include = ["**"],
        exclude = [
            "**/* *",
            ".tmp_git_root/**/*",
            "BUILD",
            "BUILD.bazel",
            "WORKSPACE",
            "WORKSPACE.bazel",
        ],
    ),
    crate_root = "src/lib.rs",
    edition = "2018",
    rustc_flags = ["--cap-lints=allow"],
    tags = [
        "cargo-bazel",
        "crate-name=tempfile",
        "manual",
        "noclippy",
        "norustfmt",
    ],
    target_compatible_with = select({
        "@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-fuchsia": [],
        "@rules_rust//rust/platform:aarch64-linux-android": [],
        "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [],
        "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [],
        "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [],
        "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [],
        "@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-pc-windows-msvc": [],
        "@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:riscv32imc-unknown-none-elf": [],
        "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [],
        "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [],
        "@rules_rust//rust/platform:thumbv7em-none-eabi": [],
        "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [],
        "@rules_rust//rust/platform:wasm32-unknown-unknown": [],
        "@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-fuchsia": [],
        "@rules_rust//rust/platform:x86_64-linux-android": [],
        "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [],
        "@rules_rust//rust/platform:x86_64-unknown-freebsd": [],
        "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [],
        "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [],
        "@rules_rust//rust/platform:x86_64-unknown-none": [],
        "//conditions:default": ["@platforms//:incompatible"],
    }),
    version = "3.8.1",
    deps = [
        "@cvm__cfg-if-1.0.0//:cfg_if",
        "@cvm__fastrand-2.0.1//:fastrand",
    ] + select({
        "@rules_rust//rust/platform:aarch64-apple-darwin": [
            "@cvm__rustix-0.38.28//:rustix",  # cfg(any(unix, target_os = "wasi"))
        ],
        "@rules_rust//rust/platform:aarch64-apple-ios": [
            "@cvm__rustix-0.38.28//:rustix",  # cfg(any(unix, target_os = "wasi"))
        ],
        "@rules_rust//rust/platform:aarch64-apple-ios-sim": [
            "@cvm__rustix-0.38.28//:rustix",  # cfg(any(unix, target_os = "wasi"))
        ],
        "@rules_rust//rust/platform:aarch64-fuchsia": [
            "@cvm__rustix-0.38.28//:rustix",  # cfg(any(unix, target_os = "wasi"))
        ],
        "@rules_rust//rust/platform:aarch64-linux-android": [
            "@cvm__rustix-0.38.28//:rustix",  # cfg(any(unix, target_os = "wasi"))
        ],
        "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [
            "@cvm__windows-sys-0.48.0//:windows_sys",  # cfg(windows)
        ],
        "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [
            "@cvm__rustix-0.38.28//:rustix",  # cfg(any(unix, target_os = "wasi"))
        ],
        "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [
            "@cvm__rustix-0.38.28//:rustix",  # cfg(any(unix, target_os = "wasi"))
        ],
        "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [
            "@cvm__rustix-0.38.28//:rustix",  # cfg(any(unix, target_os = "wasi"))
        ],
        "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [
            "@cvm__rustix-0.38.28//:rustix",  # cfg(any(unix, target_os = "wasi"))
        ],
        "@rules_rust//rust/platform:armv7-linux-androideabi": [
            "@cvm__rustix-0.38.28//:rustix",  # cfg(any(unix, target_os = "wasi"))
        ],
        "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [
            "@cvm__rustix-0.38.28//:rustix",  # cfg(any(unix, target_os = "wasi"))
        ],
        "@rules_rust//rust/platform:i686-apple-darwin": [
            "@cvm__rustix-0.38.28//:rustix",  # cfg(any(unix, target_os = "wasi"))
        ],
        "@rules_rust//rust/platform:i686-linux-android": [
            "@cvm__rustix-0.38.28//:rustix",  # cfg(any(unix, target_os = "wasi"))
        ],
        "@rules_rust//rust/platform:i686-pc-windows-msvc": [
            "@cvm__windows-sys-0.48.0//:windows_sys",  # cfg(windows)
        ],
        "@rules_rust//rust/platform:i686-unknown-freebsd": [
            "@cvm__rustix-0.38.28//:rustix",  # cfg(any(unix, target_os = "wasi"))
        ],
        "@rules_rust//rust/platform:i686-unknown-linux-gnu": [
            "@cvm__rustix-0.38.28//:rustix",  # cfg(any(unix, target_os = "wasi"))
        ],
        "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [
            "@cvm__rustix-0.38.28//:rustix",  # cfg(any(unix, target_os = "wasi"))
        ],
        "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [
            "@cvm__rustix-0.38.28//:rustix",  # cfg(any(unix, target_os = "wasi"))
        ],
        "@rules_rust//rust/platform:wasm32-wasi": [
            "@cvm__rustix-0.38.28//:rustix",  # cfg(any(unix, target_os = "wasi"))
        ],
        "@rules_rust//rust/platform:x86_64-apple-darwin": [
            "@cvm__rustix-0.38.28//:rustix",  # cfg(any(unix, target_os = "wasi"))
        ],
        "@rules_rust//rust/platform:x86_64-apple-ios": [
            "@cvm__rustix-0.38.28//:rustix",  # cfg(any(unix, target_os = "wasi"))
        ],
        "@rules_rust//rust/platform:x86_64-fuchsia": [
            "@cvm__rustix-0.38.28//:rustix",  # cfg(any(unix, target_os = "wasi"))
        ],
        "@rules_rust//rust/platform:x86_64-linux-android": [
            "@cvm__rustix-0.38.28//:rustix",  # cfg(any(unix, target_os = "wasi"))
        ],
        "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [
            "@cvm__windows-sys-0.48.0//:windows_sys",  # cfg(windows)
        ],
        "@rules_rust//rust/platform:x86_64-unknown-freebsd": [
            "@cvm__rustix-0.38.28//:rustix",  # cfg(any(unix, target_os = "wasi"))
        ],
        "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [
            "@cvm__rustix-0.38.28//:rustix",  # cfg(any(unix, target_os = "wasi"))
        ],
        "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [
            "@cvm__rustix-0.38.28//:rustix",  # cfg(any(unix, target_os = "wasi"))
        ],
        "//conditions:default": [],
    }),
)
