###############################################################################
# @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_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(["**"]) + select_with_or({
        "//conditions:default": [
        ],
    }),
    crate_features = [
        "atty",
        "clap_derive",
        "color",
        "default",
        "derive",
        "lazy_static",
        "std",
        "strsim",
        "suggestions",
        "termcolor",
    ],
    crate_root = "src/lib.rs",
    data = select_with_or({
        "//conditions:default": [
        ],
    }),
    edition = "2018",
    proc_macro_deps = [
    ] + select_with_or({
        "//conditions:default": [
            "@crates_vendor__clap_derive-3.1.18//: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",
    ] + select_with_or({
        "//conditions:default": [
        ],
    }),
    tags = [
        "cargo-bazel",
        "manual",
        "noclippy",
        "norustfmt",
    ],
    version = "3.1.18",
    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.0//:clap_lex",
            "@crates_vendor__indexmap-1.8.2//:indexmap",
            "@crates_vendor__lazy_static-1.4.0//:lazy_static",
            "@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(["**"]) + select_with_or({
        "//conditions:default": [
        ],
    }),
    crate_features = [
        "atty",
        "clap_derive",
        "color",
        "default",
        "derive",
        "lazy_static",
        "std",
        "strsim",
        "suggestions",
        "termcolor",
    ],
    crate_root = "src/bin/stdio-fixture.rs",
    data = select_with_or({
        "//conditions:default": [
        ],
    }),
    edition = "2018",
    proc_macro_deps = [
    ] + select_with_or({
        "//conditions:default": [
            "@crates_vendor__clap_derive-3.1.18//: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",
    ] + select_with_or({
        "//conditions:default": [
        ],
    }),
    tags = [
        "cargo-bazel",
        "manual",
        "noclippy",
        "norustfmt",
    ],
    version = "3.1.18",
    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.0//:clap_lex",
            "@crates_vendor__indexmap-1.8.2//:indexmap",
            "@crates_vendor__lazy_static-1.4.0//:lazy_static",
            "@crates_vendor__strsim-0.10.0//:strsim",
            "@crates_vendor__termcolor-1.1.3//:termcolor",
            "@crates_vendor__textwrap-0.15.0//:textwrap",
        ],
    }),
)
