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

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

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

rust_library(
    name = "rouille",
    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 = [
    ],
    crate_root = "src/lib.rs",
    data = select_with_or({
        "//conditions:default": [
        ],
    }),
    edition = "2015",
    proc_macro_deps = [
    ] + select_with_or({
        "//conditions:default": [
            "@rules_rust_wasm_bindgen__serde_derive-1.0.139//:serde_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.5.0",
    deps = [
    ] + select_with_or({
        "//conditions:default": [
            "@rules_rust_wasm_bindgen__base64-0.13.0//:base64",
            "@rules_rust_wasm_bindgen__chrono-0.4.19//:chrono",
            "@rules_rust_wasm_bindgen__filetime-0.2.17//:filetime",
            "@rules_rust_wasm_bindgen__multipart-0.18.0//:multipart",
            "@rules_rust_wasm_bindgen__num_cpus-1.13.1//:num_cpus",
            "@rules_rust_wasm_bindgen__percent-encoding-2.1.0//:percent_encoding",
            "@rules_rust_wasm_bindgen__rand-0.8.5//:rand",
            "@rules_rust_wasm_bindgen__serde-1.0.139//:serde",
            "@rules_rust_wasm_bindgen__serde_json-1.0.82//:serde_json",
            "@rules_rust_wasm_bindgen__sha1-0.6.1//:sha1",
            "@rules_rust_wasm_bindgen__threadpool-1.8.1//:threadpool",
            "@rules_rust_wasm_bindgen__time-0.3.11//:time",
            "@rules_rust_wasm_bindgen__tiny_http-0.8.2//:tiny_http",
            "@rules_rust_wasm_bindgen__url-2.2.2//:url",
        ],
    }),
)
