###############################################################################
# @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",  # Unlicense/MIT
# ])

rust_library(
    name = "ignore",
    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 = "0.4.18",
    deps = [
    ] + select_with_or({
        # cfg(windows)
        (
            "@rules_rust//rust/platform:i686-pc-windows-msvc",
            "@rules_rust//rust/platform:x86_64-pc-windows-msvc",
        ): [
            # Target Deps
            "@crate_universe_crate_index__winapi-util-0.1.5//:winapi_util",

            # Common Deps
            "@crate_universe_crate_index__crossbeam-utils-0.8.10//:crossbeam_utils",
            "@crate_universe_crate_index__globset-0.4.9//:globset",
            "@crate_universe_crate_index__lazy_static-1.4.0//:lazy_static",
            "@crate_universe_crate_index__log-0.4.17//:log",
            "@crate_universe_crate_index__memchr-2.5.0//:memchr",
            "@crate_universe_crate_index__regex-1.6.0//:regex",
            "@crate_universe_crate_index__same-file-1.0.6//:same_file",
            "@crate_universe_crate_index__thread_local-1.1.4//:thread_local",
            "@crate_universe_crate_index__walkdir-2.3.2//:walkdir",
        ],
        "//conditions:default": [
            "@crate_universe_crate_index__crossbeam-utils-0.8.10//:crossbeam_utils",
            "@crate_universe_crate_index__globset-0.4.9//:globset",
            "@crate_universe_crate_index__lazy_static-1.4.0//:lazy_static",
            "@crate_universe_crate_index__log-0.4.17//:log",
            "@crate_universe_crate_index__memchr-2.5.0//:memchr",
            "@crate_universe_crate_index__regex-1.6.0//:regex",
            "@crate_universe_crate_index__same-file-1.0.6//:same_file",
            "@crate_universe_crate_index__thread_local-1.1.4//:thread_local",
            "@crate_universe_crate_index__walkdir-2.3.2//:walkdir",
        ],
    }),
)
