###############################################################################
# @generated
# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
# regenerate this file, run the following:
#
#     bazel run //vendor_external: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_binary",
    "rust_library",
)

package(default_visibility = ["//visibility:public"])

# licenses([
#     "TODO",  # MIT OR Apache-2.0
# ])

rust_library(
    name = "clap",
    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 = [
        "atty",
        "clap_derive",
        "color",
        "default",
        "derive",
        "once_cell",
        "std",
        "strsim",
        "suggestions",
        "termcolor",
    ],
    crate_root = "src/lib.rs",
    data = select_with_or({
        "//conditions:default": [
        ],
    }),
    edition = "2021",
    proc_macro_deps = [
    ] + select_with_or({
        "//conditions:default": [
            "@crates_vendor__clap_derive-3.2.7//:clap_derive",
        ],
    }),
    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.2.10",
    deps = [
    ] + select_with_or({
        "//conditions:default": [
            "@crates_vendor__atty-0.2.14//:atty",
            "@crates_vendor__bitflags-1.3.2//:bitflags",
            "@crates_vendor__clap_lex-0.2.4//:clap_lex",
            "@crates_vendor__indexmap-1.9.1//:indexmap",
            "@crates_vendor__once_cell-1.13.0//:once_cell",
            "@crates_vendor__strsim-0.10.0//:strsim",
            "@crates_vendor__termcolor-1.1.3//:termcolor",
            "@crates_vendor__textwrap-0.15.0//:textwrap",
        ],
    }),
)

rust_binary(
    name = "stdio-fixture__bin",
    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 = [
        "atty",
        "clap_derive",
        "color",
        "default",
        "derive",
        "once_cell",
        "std",
        "strsim",
        "suggestions",
        "termcolor",
    ],
    crate_root = "src/bin/stdio-fixture.rs",
    data = select_with_or({
        "//conditions:default": [
        ],
    }),
    edition = "2021",
    proc_macro_deps = [
    ] + select_with_or({
        "//conditions:default": [
            "@crates_vendor__clap_derive-3.2.7//:clap_derive",
        ],
    }),
    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.2.10",
    deps = [
        ":clap",
    ] + select_with_or({
        "//conditions:default": [
            "@crates_vendor__atty-0.2.14//:atty",
            "@crates_vendor__bitflags-1.3.2//:bitflags",
            "@crates_vendor__clap_lex-0.2.4//:clap_lex",
            "@crates_vendor__indexmap-1.9.1//:indexmap",
            "@crates_vendor__once_cell-1.13.0//:once_cell",
            "@crates_vendor__strsim-0.10.0//:strsim",
            "@crates_vendor__termcolor-1.1.3//:termcolor",
            "@crates_vendor__textwrap-0.15.0//:textwrap",
        ],
    }),
)
