###############################################################################
# @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 = "axum",
    srcs = glob(
        include = [
            "**/*.rs",
        ],
        exclude = [
        ],
    ),
    aliases = selects.with_or({
        "//conditions:default": {
        },
    }),
    compile_data = glob(
        include = [
            "**",
            "**/*.md",
        ],
        exclude = [
            "BUILD",
            "BUILD.bazel",
            "WORKSPACE",
            "WORKSPACE.bazel",
        ],
    ) + select_with_or({
        "//conditions:default": [
        ],
    }),
    crate_features = [
        "default",
        "http1",
        "json",
        "serde_json",
        "tower-log",
    ],
    crate_root = "src/lib.rs",
    data = select_with_or({
        "//conditions:default": [
        ],
    }),
    edition = "2018",
    proc_macro_deps = [
    ] + select_with_or({
        "//conditions:default": [
            "//vendor_local_pkgs/crates/async-trait-0.1.56:async_trait",
        ],
    }),
    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 = "0.4.8",
    deps = [
    ] + select_with_or({
        "//conditions:default": [
            "//vendor_local_pkgs/crates/axum-core-0.1.2:axum_core",
            "//vendor_local_pkgs/crates/bitflags-1.3.2:bitflags",
            "//vendor_local_pkgs/crates/bytes-1.1.0:bytes",
            "//vendor_local_pkgs/crates/futures-util-0.3.21:futures_util",
            "//vendor_local_pkgs/crates/http-0.2.8:http",
            "//vendor_local_pkgs/crates/http-body-0.4.5:http_body",
            "//vendor_local_pkgs/crates/hyper-0.14.19:hyper",
            "//vendor_local_pkgs/crates/matchit-0.4.6:matchit",
            "//vendor_local_pkgs/crates/memchr-2.5.0:memchr",
            "//vendor_local_pkgs/crates/mime-0.3.16:mime",
            "//vendor_local_pkgs/crates/percent-encoding-2.1.0:percent_encoding",
            "//vendor_local_pkgs/crates/pin-project-lite-0.2.9:pin_project_lite",
            "//vendor_local_pkgs/crates/serde-1.0.138:serde",
            "//vendor_local_pkgs/crates/serde_json-1.0.82:serde_json",
            "//vendor_local_pkgs/crates/serde_urlencoded-0.7.1:serde_urlencoded",
            "//vendor_local_pkgs/crates/sync_wrapper-0.1.1:sync_wrapper",
            "//vendor_local_pkgs/crates/tokio-1.16.1:tokio",
            "//vendor_local_pkgs/crates/tower-0.4.13:tower",
            "//vendor_local_pkgs/crates/tower-http-0.2.5:tower_http",
            "//vendor_local_pkgs/crates/tower-layer-0.3.1:tower_layer",
            "//vendor_local_pkgs/crates/tower-service-0.3.2:tower_service",
        ],
    }),
)
