###############################################################################
# @generated
# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
# regenerate this file, run the following:
#
#     bazel run //vendor_remote_pkgs:crates_vendor_pkgs
###############################################################################

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": [
            "@crates_vendor_pkgs__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": [
            "@crates_vendor_pkgs__axum-core-0.1.2//:axum_core",
            "@crates_vendor_pkgs__bitflags-1.3.2//:bitflags",
            "@crates_vendor_pkgs__bytes-1.1.0//:bytes",
            "@crates_vendor_pkgs__futures-util-0.3.21//:futures_util",
            "@crates_vendor_pkgs__http-0.2.8//:http",
            "@crates_vendor_pkgs__http-body-0.4.5//:http_body",
            "@crates_vendor_pkgs__hyper-0.14.20//:hyper",
            "@crates_vendor_pkgs__matchit-0.4.6//:matchit",
            "@crates_vendor_pkgs__memchr-2.5.0//:memchr",
            "@crates_vendor_pkgs__mime-0.3.16//:mime",
            "@crates_vendor_pkgs__percent-encoding-2.1.0//:percent_encoding",
            "@crates_vendor_pkgs__pin-project-lite-0.2.9//:pin_project_lite",
            "@crates_vendor_pkgs__serde-1.0.139//:serde",
            "@crates_vendor_pkgs__serde_json-1.0.82//:serde_json",
            "@crates_vendor_pkgs__serde_urlencoded-0.7.1//:serde_urlencoded",
            "@crates_vendor_pkgs__sync_wrapper-0.1.1//:sync_wrapper",
            "@crates_vendor_pkgs__tokio-1.16.1//:tokio",
            "@crates_vendor_pkgs__tower-0.4.13//:tower",
            "@crates_vendor_pkgs__tower-http-0.2.5//:tower_http",
            "@crates_vendor_pkgs__tower-layer-0.3.1//:tower_layer",
            "@crates_vendor_pkgs__tower-service-0.3.2//:tower_service",
        ],
    }),
)
