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

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 = "windows_sys",
    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 = [
        "Win32",
        "Win32_Foundation",
        "Win32_Networking",
        "Win32_Networking_WinSock",
        "Win32_Security",
        "Win32_Storage",
        "Win32_Storage_FileSystem",
        "Win32_System",
        "Win32_System_IO",
        "Win32_System_LibraryLoader",
        "Win32_System_Pipes",
        "Win32_System_SystemServices",
        "Win32_System_WindowsProgramming",
        "default",
    ],
    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 = "0.36.1",
    deps = [
    ] + select_with_or({
        # aarch64-pc-windows-msvc
        #
        # No supported platform triples for cfg: 'aarch64-pc-windows-msvc'
        # Skipped dependencies: [{"id":"windows_aarch64_msvc 0.36.1","target":"windows_aarch64_msvc"}]
        #
        # aarch64-uwp-windows-msvc
        #
        # No supported platform triples for cfg: 'aarch64-uwp-windows-msvc'
        # Skipped dependencies: [{"id":"windows_aarch64_msvc 0.36.1","target":"windows_aarch64_msvc"}]
        #
        # i686-pc-windows-gnu
        #
        # No supported platform triples for cfg: 'i686-pc-windows-gnu'
        # Skipped dependencies: [{"id":"windows_i686_gnu 0.36.1","target":"windows_i686_gnu"}]
        #
        # i686-pc-windows-msvc
        (
            "@rules_rust//rust/platform:i686-pc-windows-msvc",
        ): [
            # Target Deps
            "@crates_vendor_manifests__windows_i686_msvc-0.36.1//:windows_i686_msvc",

            # Common Deps
        ],
        # i686-uwp-windows-gnu
        #
        # No supported platform triples for cfg: 'i686-uwp-windows-gnu'
        # Skipped dependencies: [{"id":"windows_i686_gnu 0.36.1","target":"windows_i686_gnu"}]
        #
        # i686-uwp-windows-msvc
        #
        # No supported platform triples for cfg: 'i686-uwp-windows-msvc'
        # Skipped dependencies: [{"id":"windows_i686_msvc 0.36.1","target":"windows_i686_msvc"}]
        #
        # x86_64-pc-windows-gnu
        #
        # No supported platform triples for cfg: 'x86_64-pc-windows-gnu'
        # Skipped dependencies: [{"id":"windows_x86_64_gnu 0.36.1","target":"windows_x86_64_gnu"}]
        #
        # x86_64-pc-windows-msvc
        (
            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
        ): [
            # Target Deps
            "@crates_vendor_manifests__windows_x86_64_msvc-0.36.1//:windows_x86_64_msvc",

            # Common Deps
        ],
        # x86_64-uwp-windows-gnu
        #
        # No supported platform triples for cfg: 'x86_64-uwp-windows-gnu'
        # Skipped dependencies: [{"id":"windows_x86_64_gnu 0.36.1","target":"windows_x86_64_gnu"}]
        #
        # x86_64-uwp-windows-msvc
        #
        # No supported platform triples for cfg: 'x86_64-uwp-windows-msvc'
        # Skipped dependencies: [{"id":"windows_x86_64_msvc 0.36.1","target":"windows_x86_64_msvc"}]
        #
        "//conditions:default": [
        ],
    }),
)
