###############################################################################
# @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/Apache-2.0
# ])

rust_library(
    name = "rouille",
    srcs = glob(
        include = [
            "**/*.rs",
        ],
        exclude = [
        ],
    ),
    aliases = selects.with_or({
        "//conditions:default": {
        },
    }),
    compile_data = glob(["**"]) + 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.137//: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.16//: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.137//:serde",
            "@rules_rust_wasm_bindgen__serde_json-1.0.81//: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.9//:time",
            "@rules_rust_wasm_bindgen__tiny_http-0.8.2//:tiny_http",
            "@rules_rust_wasm_bindgen__url-2.2.2//:url",
        ],
    }),
)
