###############################################################################
# @generated
# This file is auto-generated by the cargo-bazel tool.
#
# DO NOT MODIFY: Local changes may be replaced in future executions.
###############################################################################
"""Rules for defining repositories for remote `crates_vendor` repositories"""

load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")

# buildifier: disable=bzl-visibility
load("@rules_rust//crate_universe/private:crates_vendor.bzl", "crates_vendor_remote_repository")

# buildifier: disable=bzl-visibility
load("@rules_rust//proto/prost/private/3rdparty/crates:defs.bzl", _crate_repositories = "crate_repositories")

def crate_repositories():
    """Generates repositories for vendored crates.

    Returns:
      A list of repos visible to the module through the module extension.
    """
    maybe(
        crates_vendor_remote_repository,
        name = "rules_rust_prost",
        build_file = Label("@rules_rust//proto/prost/private/3rdparty/crates:BUILD.bazel"),
        defs_module = Label("@rules_rust//proto/prost/private/3rdparty/crates:defs.bzl"),
    )

    direct_deps = [struct(repo = "rules_rust_prost", is_dev_dep = False)]
    direct_deps.extend(_crate_repositories())
    return direct_deps
