###############################################################################
# @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",
)
load(
    "@rules_rust//cargo:defs.bzl",
    "cargo_build_script",
)

# 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",  # MPL-2.0+
# ])

rust_library(
    name = "smartstring",
    srcs = glob(
        include = [
            "**/*.rs",
        ],
        exclude = [
        ],
    ),
    aliases = selects.with_or({
        "//conditions:default": {
        },
    }),
    compile_data = glob(["**"]) + select_with_or({
        "//conditions:default": [
        ],
    }),
    crate_features = [
        "default",
        "serde",
        "std",
    ],
    crate_root = "src/lib.rs",
    data = select_with_or({
        "//conditions:default": [
        ],
    }),
    edition = "2021",
    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 = "1.0.1",
    deps = [
    ] + select_with_or({
        "//conditions:default": [
            "@crate_universe_crate_index__serde-1.0.138//:serde",
            "@crate_universe_crate_index__smartstring-1.0.1//:build_script_build",
            "@crate_universe_crate_index__static_assertions-1.1.0//:static_assertions",
        ],
    }),
)

cargo_build_script(
    # See comment associated with alias. Do not change this name
    name = "smartstring_build_script",
    srcs = glob(
        include = [
            "**/*.rs",
        ],
        exclude = [
        ],
    ),
    aliases = selects.with_or({
        "//conditions:default": {
        },
    }),
    build_script_env = {
    },
    compile_data = select_with_or({
        "//conditions:default": [
        ],
    }),
    crate_features = [
        "default",
        "serde",
        "std",
    ],
    crate_name = "build_script_build",
    crate_root = "build.rs",
    data = glob(["**"]) + select_with_or({
        "//conditions:default": [
        ],
    }),
    edition = "2021",
    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",
    ],
    tools = select_with_or({
        "//conditions:default": [
        ],
    }),
    version = "1.0.1",
    visibility = ["//visibility:private"],
    deps = [
    ] + select_with_or({
        "//conditions:default": [
            "@crate_universe_crate_index__autocfg-1.1.0//:autocfg",
            "@crate_universe_crate_index__version_check-0.9.4//:version_check",
        ],
    }),
)

alias(
    # Because `cargo_build_script` does some invisible target name mutating to
    # determine the package and crate name for a build script, the Bazel
    # target namename of any build script cannot be the Cargo canonical name
    # of `build_script_build` without losing out on having certain Cargo
    # environment variables set.
    name = "build_script_build",
    actual = "smartstring_build_script",
    tags = [
        "manual",
    ],
)
