###############################################################################
# @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": [
            "@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.19//: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.138//: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",
        ],
    }),
)
