###############################################################################
# @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([
        "**",
        "**/*.md",
    ]) + 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",
        ],
    }),
)
