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

rust_library(
    name = "tera",
    srcs = glob(
        include = [
            "**/*.rs",
        ],
        exclude = [
        ],
    ),
    aliases = selects.with_or({
        "//conditions:default": {
        },
    }),
    compile_data = glob(["**"]) + select_with_or({
        "//conditions:default": [
        ],
    }),
    crate_features = [
        "builtins",
        "chrono",
        "chrono-tz",
        "default",
        "humansize",
        "percent-encoding",
        "rand",
        "slug",
        "urlencode",
    ],
    crate_root = "src/lib.rs",
    data = select_with_or({
        "//conditions:default": [
        ],
    }),
    edition = "2018",
    proc_macro_deps = [
    ] + select_with_or({
        "//conditions:default": [
            "@crate_universe_crate_index__pest_derive-2.1.0//:pest_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 = "1.16.0",
    deps = [
    ] + select_with_or({
        "//conditions:default": [
            "@crate_universe_crate_index__chrono-0.4.19//:chrono",
            "@crate_universe_crate_index__chrono-tz-0.6.1//:chrono_tz",
            "@crate_universe_crate_index__globwalk-0.8.1//:globwalk",
            "@crate_universe_crate_index__humansize-1.1.1//:humansize",
            "@crate_universe_crate_index__lazy_static-1.4.0//:lazy_static",
            "@crate_universe_crate_index__percent-encoding-2.1.0//:percent_encoding",
            "@crate_universe_crate_index__pest-2.1.3//:pest",
            "@crate_universe_crate_index__rand-0.8.5//:rand",
            "@crate_universe_crate_index__regex-1.5.6//:regex",
            "@crate_universe_crate_index__serde-1.0.137//:serde",
            "@crate_universe_crate_index__serde_json-1.0.82//:serde_json",
            "@crate_universe_crate_index__slug-0.1.4//:slug",
            "@crate_universe_crate_index__unic-segment-0.9.0//:unic_segment",
        ],
    }),
)
