###############################################################################
# @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(["**"]) + 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.5.6//: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.5.6//: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",
        ],
    }),
)
