From f7c196c9b3c402f1291ce2ebec2915b25fd8f47d Mon Sep 17 00:00:00 2001 From: Stuart Axelbrooke Date: Thu, 27 Nov 2025 14:20:40 +0800 Subject: [PATCH] add automated server startup for cli --- MODULE.bazel | 8 + MODULE.bazel.lock | 110 +++++++-- databuild/BUILD.bazel | 6 + databuild/cli_main.rs | 182 +++++++++++---- databuild/config.rs | 71 +++++- databuild/daemon.rs | 213 +++++++++++++++++ databuild/lib.rs | 2 + databuild/server_lock.rs | 300 ++++++++++++++++++++++++ databuild/util.rs | 6 + docs/design/cli-server-automation.md | 330 +++++++++++++++++++++++++++ examples/multihop/config.json | 1 + 11 files changed, 1166 insertions(+), 63 deletions(-) create mode 100644 databuild/daemon.rs create mode 100644 databuild/server_lock.rs create mode 100644 docs/design/cli-server-automation.md diff --git a/MODULE.bazel b/MODULE.bazel index 06020fc..136f5b2 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -118,6 +118,14 @@ crate.spec( package = "urlencoding", version = "2.1", ) +crate.spec( + package = "fs2", + version = "0.4", +) +crate.spec( + package = "libc", + version = "0.2", +) crate.from_specs() use_repo(crate, "crates") diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 9ed9440..62800c9 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -751,7 +751,7 @@ "@@rules_rust+//crate_universe:extensions.bzl%crate": { "general": { "bzlTransitiveDigest": "mkQADRs9tP+WT7g3USjcSZGwLVVvqK4ZLSnqALX7kNA=", - "usagesDigest": "i8eOrCrYuqZO3cCnzVNdxCOlOoj9zhwbpsKsTs001n0=", + "usagesDigest": "OkFrd0oLbm3frR+HdKDunF4PH0xWkkH3dslwNqGnru0=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": { @@ -769,9 +769,9 @@ "repoRuleId": "@@rules_rust+//crate_universe:extensions.bzl%_generate_repo", "attributes": { "contents": { - "BUILD.bazel": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files(\n [\n \"cargo-bazel.json\",\n \"crates.bzl\",\n \"defs.bzl\",\n ] + glob(\n allow_empty = True,\n include = [\"*.bazel\"],\n ),\n)\n\nfilegroup(\n name = \"srcs\",\n srcs = glob(\n allow_empty = True,\n include = [\n \"*.bazel\",\n \"*.bzl\",\n ],\n ),\n)\n\n# Workspace Member Dependencies\nalias(\n name = \"askama-0.14.0\",\n actual = \"@crates__askama-0.14.0//:askama\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"askama\",\n actual = \"@crates__askama-0.14.0//:askama\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"axum-0.7.9\",\n actual = \"@crates__axum-0.7.9//:axum\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"axum\",\n actual = \"@crates__axum-0.7.9//:axum\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"clap-4.5.53\",\n actual = \"@crates__clap-4.5.53//:clap\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"clap\",\n actual = \"@crates__clap-4.5.53//:clap\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"prost-0.13.5\",\n actual = \"@crates__prost-0.13.5//:prost\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"prost\",\n actual = \"@crates__prost-0.13.5//:prost\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"prost-build-0.13.5\",\n actual = \"@crates__prost-build-0.13.5//:prost_build\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"prost-build\",\n actual = \"@crates__prost-build-0.13.5//:prost_build\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"prost-types-0.13.5\",\n actual = \"@crates__prost-types-0.13.5//:prost_types\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"prost-types\",\n actual = \"@crates__prost-types-0.13.5//:prost_types\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"regex-1.12.2\",\n actual = \"@crates__regex-1.12.2//:regex\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"regex\",\n actual = \"@crates__regex-1.12.2//:regex\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"reqwest-0.11.27\",\n actual = \"@crates__reqwest-0.11.27//:reqwest\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"reqwest\",\n actual = \"@crates__reqwest-0.11.27//:reqwest\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rusqlite-0.31.0\",\n actual = \"@crates__rusqlite-0.31.0//:rusqlite\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rusqlite\",\n actual = \"@crates__rusqlite-0.31.0//:rusqlite\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"schemars-0.8.22\",\n actual = \"@crates__schemars-0.8.22//:schemars\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"schemars\",\n actual = \"@crates__schemars-0.8.22//:schemars\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde-1.0.228\",\n actual = \"@crates__serde-1.0.228//:serde\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde\",\n actual = \"@crates__serde-1.0.228//:serde\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde_json-1.0.145\",\n actual = \"@crates__serde_json-1.0.145//:serde_json\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde_json\",\n actual = \"@crates__serde_json-1.0.145//:serde_json\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"sha2-0.10.9\",\n actual = \"@crates__sha2-0.10.9//:sha2\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"sha2\",\n actual = \"@crates__sha2-0.10.9//:sha2\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tempfile-3.23.0\",\n actual = \"@crates__tempfile-3.23.0//:tempfile\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tempfile\",\n actual = \"@crates__tempfile-3.23.0//:tempfile\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tokio-1.48.0\",\n actual = \"@crates__tokio-1.48.0//:tokio\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tokio\",\n actual = \"@crates__tokio-1.48.0//:tokio\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"toml-0.8.23\",\n actual = \"@crates__toml-0.8.23//:toml\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"toml\",\n actual = \"@crates__toml-0.8.23//:toml\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tower-0.4.13\",\n actual = \"@crates__tower-0.4.13//:tower\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tower\",\n actual = \"@crates__tower-0.4.13//:tower\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tower-http-0.5.2\",\n actual = \"@crates__tower-http-0.5.2//:tower_http\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tower-http\",\n actual = \"@crates__tower-http-0.5.2//:tower_http\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tracing-0.1.41\",\n actual = \"@crates__tracing-0.1.41//:tracing\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tracing\",\n actual = \"@crates__tracing-0.1.41//:tracing\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tracing-subscriber-0.3.20\",\n actual = \"@crates__tracing-subscriber-0.3.20//:tracing_subscriber\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tracing-subscriber\",\n actual = \"@crates__tracing-subscriber-0.3.20//:tracing_subscriber\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"urlencoding-2.1.3\",\n actual = \"@crates__urlencoding-2.1.3//:urlencoding\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"urlencoding\",\n actual = \"@crates__urlencoding-2.1.3//:urlencoding\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"uuid-1.18.1\",\n actual = \"@crates__uuid-1.18.1//:uuid\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"uuid\",\n actual = \"@crates__uuid-1.18.1//:uuid\",\n tags = [\"manual\"],\n)\n", + "BUILD.bazel": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files(\n [\n \"cargo-bazel.json\",\n \"crates.bzl\",\n \"defs.bzl\",\n ] + glob(\n allow_empty = True,\n include = [\"*.bazel\"],\n ),\n)\n\nfilegroup(\n name = \"srcs\",\n srcs = glob(\n allow_empty = True,\n include = [\n \"*.bazel\",\n \"*.bzl\",\n ],\n ),\n)\n\n# Workspace Member Dependencies\nalias(\n name = \"askama-0.14.0\",\n actual = \"@crates__askama-0.14.0//:askama\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"askama\",\n actual = \"@crates__askama-0.14.0//:askama\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"axum-0.7.9\",\n actual = \"@crates__axum-0.7.9//:axum\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"axum\",\n actual = \"@crates__axum-0.7.9//:axum\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"clap-4.5.53\",\n actual = \"@crates__clap-4.5.53//:clap\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"clap\",\n actual = \"@crates__clap-4.5.53//:clap\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"fs2-0.4.3\",\n actual = \"@crates__fs2-0.4.3//:fs2\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"fs2\",\n actual = \"@crates__fs2-0.4.3//:fs2\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"libc-0.2.177\",\n actual = \"@crates__libc-0.2.177//:libc\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"libc\",\n actual = \"@crates__libc-0.2.177//:libc\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"prost-0.13.5\",\n actual = \"@crates__prost-0.13.5//:prost\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"prost\",\n actual = \"@crates__prost-0.13.5//:prost\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"prost-build-0.13.5\",\n actual = \"@crates__prost-build-0.13.5//:prost_build\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"prost-build\",\n actual = \"@crates__prost-build-0.13.5//:prost_build\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"prost-types-0.13.5\",\n actual = \"@crates__prost-types-0.13.5//:prost_types\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"prost-types\",\n actual = \"@crates__prost-types-0.13.5//:prost_types\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"regex-1.12.2\",\n actual = \"@crates__regex-1.12.2//:regex\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"regex\",\n actual = \"@crates__regex-1.12.2//:regex\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"reqwest-0.11.27\",\n actual = \"@crates__reqwest-0.11.27//:reqwest\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"reqwest\",\n actual = \"@crates__reqwest-0.11.27//:reqwest\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rusqlite-0.31.0\",\n actual = \"@crates__rusqlite-0.31.0//:rusqlite\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rusqlite\",\n actual = \"@crates__rusqlite-0.31.0//:rusqlite\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"schemars-0.8.22\",\n actual = \"@crates__schemars-0.8.22//:schemars\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"schemars\",\n actual = \"@crates__schemars-0.8.22//:schemars\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde-1.0.228\",\n actual = \"@crates__serde-1.0.228//:serde\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde\",\n actual = \"@crates__serde-1.0.228//:serde\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde_json-1.0.145\",\n actual = \"@crates__serde_json-1.0.145//:serde_json\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde_json\",\n actual = \"@crates__serde_json-1.0.145//:serde_json\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"sha2-0.10.9\",\n actual = \"@crates__sha2-0.10.9//:sha2\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"sha2\",\n actual = \"@crates__sha2-0.10.9//:sha2\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tempfile-3.23.0\",\n actual = \"@crates__tempfile-3.23.0//:tempfile\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tempfile\",\n actual = \"@crates__tempfile-3.23.0//:tempfile\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tokio-1.48.0\",\n actual = \"@crates__tokio-1.48.0//:tokio\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tokio\",\n actual = \"@crates__tokio-1.48.0//:tokio\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"toml-0.8.23\",\n actual = \"@crates__toml-0.8.23//:toml\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"toml\",\n actual = \"@crates__toml-0.8.23//:toml\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tower-0.4.13\",\n actual = \"@crates__tower-0.4.13//:tower\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tower\",\n actual = \"@crates__tower-0.4.13//:tower\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tower-http-0.5.2\",\n actual = \"@crates__tower-http-0.5.2//:tower_http\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tower-http\",\n actual = \"@crates__tower-http-0.5.2//:tower_http\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tracing-0.1.41\",\n actual = \"@crates__tracing-0.1.41//:tracing\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tracing\",\n actual = \"@crates__tracing-0.1.41//:tracing\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tracing-subscriber-0.3.20\",\n actual = \"@crates__tracing-subscriber-0.3.20//:tracing_subscriber\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tracing-subscriber\",\n actual = \"@crates__tracing-subscriber-0.3.20//:tracing_subscriber\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"urlencoding-2.1.3\",\n actual = \"@crates__urlencoding-2.1.3//:urlencoding\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"urlencoding\",\n actual = \"@crates__urlencoding-2.1.3//:urlencoding\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"uuid-1.18.1\",\n actual = \"@crates__uuid-1.18.1//:uuid\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"uuid\",\n actual = \"@crates__uuid-1.18.1//:uuid\",\n tags = [\"manual\"],\n)\n", "alias_rules.bzl": "\"\"\"Alias that transitions its target to `compilation_mode=opt`. Use `transition_alias=\"opt\"` to enable.\"\"\"\n\nload(\"@rules_cc//cc:defs.bzl\", \"CcInfo\")\nload(\"@rules_rust//rust:rust_common.bzl\", \"COMMON_PROVIDERS\")\n\ndef _transition_alias_impl(ctx):\n # `ctx.attr.actual` is a list of 1 item due to the transition\n providers = [ctx.attr.actual[0][provider] for provider in COMMON_PROVIDERS]\n if CcInfo in ctx.attr.actual[0]:\n providers.append(ctx.attr.actual[0][CcInfo])\n return providers\n\ndef _change_compilation_mode(compilation_mode):\n def _change_compilation_mode_impl(_settings, _attr):\n return {\n \"//command_line_option:compilation_mode\": compilation_mode,\n }\n\n return transition(\n implementation = _change_compilation_mode_impl,\n inputs = [],\n outputs = [\n \"//command_line_option:compilation_mode\",\n ],\n )\n\ndef _transition_alias_rule(compilation_mode):\n return rule(\n implementation = _transition_alias_impl,\n provides = COMMON_PROVIDERS,\n attrs = {\n \"actual\": attr.label(\n mandatory = True,\n doc = \"`rust_library()` target to transition to `compilation_mode=opt`.\",\n providers = COMMON_PROVIDERS,\n cfg = _change_compilation_mode(compilation_mode),\n ),\n \"_allowlist_function_transition\": attr.label(\n default = \"@bazel_tools//tools/allowlists/function_transition_allowlist\",\n ),\n },\n doc = \"Transitions a Rust library crate to the `compilation_mode=opt`.\",\n )\n\ntransition_alias_dbg = _transition_alias_rule(\"dbg\")\ntransition_alias_fastbuild = _transition_alias_rule(\"fastbuild\")\ntransition_alias_opt = _transition_alias_rule(\"opt\")\n", - "defs.bzl": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\"\"\"\n# `crates_repository` API\n\n- [aliases](#aliases)\n- [crate_deps](#crate_deps)\n- [all_crate_deps](#all_crate_deps)\n- [crate_repositories](#crate_repositories)\n\n\"\"\"\n\nload(\"@bazel_tools//tools/build_defs/repo:git.bzl\", \"new_git_repository\")\nload(\"@bazel_tools//tools/build_defs/repo:http.bzl\", \"http_archive\")\nload(\"@bazel_tools//tools/build_defs/repo:utils.bzl\", \"maybe\")\nload(\"@bazel_skylib//lib:selects.bzl\", \"selects\")\nload(\"@rules_rust//crate_universe/private:local_crate_mirror.bzl\", \"local_crate_mirror\")\n\n###############################################################################\n# MACROS API\n###############################################################################\n\n# An identifier that represent common dependencies (unconditional).\n_COMMON_CONDITION = \"\"\n\ndef _flatten_dependency_maps(all_dependency_maps):\n \"\"\"Flatten a list of dependency maps into one dictionary.\n\n Dependency maps have the following structure:\n\n ```python\n DEPENDENCIES_MAP = {\n # The first key in the map is a Bazel package\n # name of the workspace this file is defined in.\n \"workspace_member_package\": {\n\n # Not all dependencies are supported for all platforms.\n # the condition key is the condition required to be true\n # on the host platform.\n \"condition\": {\n\n # An alias to a crate target. # The label of the crate target the\n # Aliases are only crate names. # package name refers to.\n \"package_name\": \"@full//:label\",\n }\n }\n }\n ```\n\n Args:\n all_dependency_maps (list): A list of dicts as described above\n\n Returns:\n dict: A dictionary as described above\n \"\"\"\n dependencies = {}\n\n for workspace_deps_map in all_dependency_maps:\n for pkg_name, conditional_deps_map in workspace_deps_map.items():\n if pkg_name not in dependencies:\n non_frozen_map = dict()\n for key, values in conditional_deps_map.items():\n non_frozen_map.update({key: dict(values.items())})\n dependencies.setdefault(pkg_name, non_frozen_map)\n continue\n\n for condition, deps_map in conditional_deps_map.items():\n # If the condition has not been recorded, do so and continue\n if condition not in dependencies[pkg_name]:\n dependencies[pkg_name].setdefault(condition, dict(deps_map.items()))\n continue\n\n # Alert on any miss-matched dependencies\n inconsistent_entries = []\n for crate_name, crate_label in deps_map.items():\n existing = dependencies[pkg_name][condition].get(crate_name)\n if existing and existing != crate_label:\n inconsistent_entries.append((crate_name, existing, crate_label))\n dependencies[pkg_name][condition].update({crate_name: crate_label})\n\n return dependencies\n\ndef crate_deps(deps, package_name = None):\n \"\"\"Finds the fully qualified label of the requested crates for the package where this macro is called.\n\n Args:\n deps (list): The desired list of crate targets.\n package_name (str, optional): The package name of the set of dependencies to look up.\n Defaults to `native.package_name()`.\n\n Returns:\n list: A list of labels to generated rust targets (str)\n \"\"\"\n\n if not deps:\n return []\n\n if package_name == None:\n package_name = native.package_name()\n\n # Join both sets of dependencies\n dependencies = _flatten_dependency_maps([\n _NORMAL_DEPENDENCIES,\n _NORMAL_DEV_DEPENDENCIES,\n _PROC_MACRO_DEPENDENCIES,\n _PROC_MACRO_DEV_DEPENDENCIES,\n _BUILD_DEPENDENCIES,\n _BUILD_PROC_MACRO_DEPENDENCIES,\n ]).pop(package_name, {})\n\n # Combine all conditional packages so we can easily index over a flat list\n # TODO: Perhaps this should actually return select statements and maintain\n # the conditionals of the dependencies\n flat_deps = {}\n for deps_set in dependencies.values():\n for crate_name, crate_label in deps_set.items():\n flat_deps.update({crate_name: crate_label})\n\n missing_crates = []\n crate_targets = []\n for crate_target in deps:\n if crate_target not in flat_deps:\n missing_crates.append(crate_target)\n else:\n crate_targets.append(flat_deps[crate_target])\n\n if missing_crates:\n fail(\"Could not find crates `{}` among dependencies of `{}`. Available dependencies were `{}`\".format(\n missing_crates,\n package_name,\n dependencies,\n ))\n\n return crate_targets\n\ndef all_crate_deps(\n normal = False, \n normal_dev = False, \n proc_macro = False, \n proc_macro_dev = False,\n build = False,\n build_proc_macro = False,\n package_name = None):\n \"\"\"Finds the fully qualified label of all requested direct crate dependencies \\\n for the package where this macro is called.\n\n If no parameters are set, all normal dependencies are returned. Setting any one flag will\n otherwise impact the contents of the returned list.\n\n Args:\n normal (bool, optional): If True, normal dependencies are included in the\n output list.\n normal_dev (bool, optional): If True, normal dev dependencies will be\n included in the output list..\n proc_macro (bool, optional): If True, proc_macro dependencies are included\n in the output list.\n proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are\n included in the output list.\n build (bool, optional): If True, build dependencies are included\n in the output list.\n build_proc_macro (bool, optional): If True, build proc_macro dependencies are\n included in the output list.\n package_name (str, optional): The package name of the set of dependencies to look up.\n Defaults to `native.package_name()` when unset.\n\n Returns:\n list: A list of labels to generated rust targets (str)\n \"\"\"\n\n if package_name == None:\n package_name = native.package_name()\n\n # Determine the relevant maps to use\n all_dependency_maps = []\n if normal:\n all_dependency_maps.append(_NORMAL_DEPENDENCIES)\n if normal_dev:\n all_dependency_maps.append(_NORMAL_DEV_DEPENDENCIES)\n if proc_macro:\n all_dependency_maps.append(_PROC_MACRO_DEPENDENCIES)\n if proc_macro_dev:\n all_dependency_maps.append(_PROC_MACRO_DEV_DEPENDENCIES)\n if build:\n all_dependency_maps.append(_BUILD_DEPENDENCIES)\n if build_proc_macro:\n all_dependency_maps.append(_BUILD_PROC_MACRO_DEPENDENCIES)\n\n # Default to always using normal dependencies\n if not all_dependency_maps:\n all_dependency_maps.append(_NORMAL_DEPENDENCIES)\n\n dependencies = _flatten_dependency_maps(all_dependency_maps).pop(package_name, None)\n\n if not dependencies:\n if dependencies == None:\n fail(\"Tried to get all_crate_deps for package \" + package_name + \" but that package had no Cargo.toml file\")\n else:\n return []\n\n crate_deps = list(dependencies.pop(_COMMON_CONDITION, {}).values())\n for condition, deps in dependencies.items():\n crate_deps += selects.with_or({\n tuple(_CONDITIONS[condition]): deps.values(),\n \"//conditions:default\": [],\n })\n\n return crate_deps\n\ndef aliases(\n normal = False,\n normal_dev = False,\n proc_macro = False,\n proc_macro_dev = False,\n build = False,\n build_proc_macro = False,\n package_name = None):\n \"\"\"Produces a map of Crate alias names to their original label\n\n If no dependency kinds are specified, `normal` and `proc_macro` are used by default.\n Setting any one flag will otherwise determine the contents of the returned dict.\n\n Args:\n normal (bool, optional): If True, normal dependencies are included in the\n output list.\n normal_dev (bool, optional): If True, normal dev dependencies will be\n included in the output list..\n proc_macro (bool, optional): If True, proc_macro dependencies are included\n in the output list.\n proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are\n included in the output list.\n build (bool, optional): If True, build dependencies are included\n in the output list.\n build_proc_macro (bool, optional): If True, build proc_macro dependencies are\n included in the output list.\n package_name (str, optional): The package name of the set of dependencies to look up.\n Defaults to `native.package_name()` when unset.\n\n Returns:\n dict: The aliases of all associated packages\n \"\"\"\n if package_name == None:\n package_name = native.package_name()\n\n # Determine the relevant maps to use\n all_aliases_maps = []\n if normal:\n all_aliases_maps.append(_NORMAL_ALIASES)\n if normal_dev:\n all_aliases_maps.append(_NORMAL_DEV_ALIASES)\n if proc_macro:\n all_aliases_maps.append(_PROC_MACRO_ALIASES)\n if proc_macro_dev:\n all_aliases_maps.append(_PROC_MACRO_DEV_ALIASES)\n if build:\n all_aliases_maps.append(_BUILD_ALIASES)\n if build_proc_macro:\n all_aliases_maps.append(_BUILD_PROC_MACRO_ALIASES)\n\n # Default to always using normal aliases\n if not all_aliases_maps:\n all_aliases_maps.append(_NORMAL_ALIASES)\n all_aliases_maps.append(_PROC_MACRO_ALIASES)\n\n aliases = _flatten_dependency_maps(all_aliases_maps).pop(package_name, None)\n\n if not aliases:\n return dict()\n\n common_items = aliases.pop(_COMMON_CONDITION, {}).items()\n\n # If there are only common items in the dictionary, immediately return them\n if not len(aliases.keys()) == 1:\n return dict(common_items)\n\n # Build a single select statement where each conditional has accounted for the\n # common set of aliases.\n crate_aliases = {\"//conditions:default\": dict(common_items)}\n for condition, deps in aliases.items():\n condition_triples = _CONDITIONS[condition]\n for triple in condition_triples:\n if triple in crate_aliases:\n crate_aliases[triple].update(deps)\n else:\n crate_aliases.update({triple: dict(deps.items() + common_items)})\n\n return select(crate_aliases)\n\n###############################################################################\n# WORKSPACE MEMBER DEPS AND ALIASES\n###############################################################################\n\n_NORMAL_DEPENDENCIES = {\n \"\": {\n _COMMON_CONDITION: {\n \"askama\": Label(\"@crates//:askama-0.14.0\"),\n \"axum\": Label(\"@crates//:axum-0.7.9\"),\n \"clap\": Label(\"@crates//:clap-4.5.53\"),\n \"prost\": Label(\"@crates//:prost-0.13.5\"),\n \"prost-build\": Label(\"@crates//:prost-build-0.13.5\"),\n \"prost-types\": Label(\"@crates//:prost-types-0.13.5\"),\n \"regex\": Label(\"@crates//:regex-1.12.2\"),\n \"reqwest\": Label(\"@crates//:reqwest-0.11.27\"),\n \"rusqlite\": Label(\"@crates//:rusqlite-0.31.0\"),\n \"schemars\": Label(\"@crates//:schemars-0.8.22\"),\n \"serde\": Label(\"@crates//:serde-1.0.228\"),\n \"serde_json\": Label(\"@crates//:serde_json-1.0.145\"),\n \"sha2\": Label(\"@crates//:sha2-0.10.9\"),\n \"tempfile\": Label(\"@crates//:tempfile-3.23.0\"),\n \"tokio\": Label(\"@crates//:tokio-1.48.0\"),\n \"toml\": Label(\"@crates//:toml-0.8.23\"),\n \"tower\": Label(\"@crates//:tower-0.4.13\"),\n \"tower-http\": Label(\"@crates//:tower-http-0.5.2\"),\n \"tracing\": Label(\"@crates//:tracing-0.1.41\"),\n \"tracing-subscriber\": Label(\"@crates//:tracing-subscriber-0.3.20\"),\n \"urlencoding\": Label(\"@crates//:urlencoding-2.1.3\"),\n \"uuid\": Label(\"@crates//:uuid-1.18.1\"),\n },\n },\n}\n\n\n_NORMAL_ALIASES = {\n \"\": {\n _COMMON_CONDITION: {\n },\n },\n}\n\n\n_NORMAL_DEV_DEPENDENCIES = {\n \"\": {\n },\n}\n\n\n_NORMAL_DEV_ALIASES = {\n \"\": {\n },\n}\n\n\n_PROC_MACRO_DEPENDENCIES = {\n \"\": {\n },\n}\n\n\n_PROC_MACRO_ALIASES = {\n \"\": {\n },\n}\n\n\n_PROC_MACRO_DEV_DEPENDENCIES = {\n \"\": {\n },\n}\n\n\n_PROC_MACRO_DEV_ALIASES = {\n \"\": {\n },\n}\n\n\n_BUILD_DEPENDENCIES = {\n \"\": {\n },\n}\n\n\n_BUILD_ALIASES = {\n \"\": {\n },\n}\n\n\n_BUILD_PROC_MACRO_DEPENDENCIES = {\n \"\": {\n },\n}\n\n\n_BUILD_PROC_MACRO_ALIASES = {\n \"\": {\n },\n}\n\n\n_CONDITIONS = {\n \"aarch64-apple-darwin\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n \"aarch64-linux-android\": [],\n \"aarch64-pc-windows-gnullvm\": [],\n \"aarch64-unknown-linux-gnu\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\"],\n \"cfg(all(any(target_arch = \\\"x86_64\\\", target_arch = \\\"arm64ec\\\"), target_env = \\\"msvc\\\", not(windows_raw_dylib)))\": [\"@rules_rust//rust/platform:x86_64-pc-windows-msvc\"],\n \"cfg(all(any(target_os = \\\"linux\\\"), any(rustix_use_libc, miri, not(all(target_os = \\\"linux\\\", any(target_endian = \\\"little\\\", any(target_arch = \\\"s390x\\\", target_arch = \\\"powerpc\\\")), any(target_arch = \\\"arm\\\", all(target_arch = \\\"aarch64\\\", target_pointer_width = \\\"64\\\"), target_arch = \\\"riscv64\\\", all(rustix_use_experimental_asm, target_arch = \\\"powerpc\\\"), all(rustix_use_experimental_asm, target_arch = \\\"powerpc64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"s390x\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips32r6\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64r6\\\"), target_arch = \\\"x86\\\", all(target_arch = \\\"x86_64\\\", target_pointer_width = \\\"64\\\")))))))\": [],\n \"cfg(all(any(target_os = \\\"linux\\\", target_os = \\\"android\\\"), not(any(all(target_os = \\\"linux\\\", target_env = \\\"\\\"), getrandom_backend = \\\"custom\\\", getrandom_backend = \\\"linux_raw\\\", getrandom_backend = \\\"rdrand\\\", getrandom_backend = \\\"rndr\\\"))))\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\"],\n \"cfg(all(not(rustix_use_libc), not(miri), target_os = \\\"linux\\\", any(target_endian = \\\"little\\\", any(target_arch = \\\"s390x\\\", target_arch = \\\"powerpc\\\")), any(target_arch = \\\"arm\\\", all(target_arch = \\\"aarch64\\\", target_pointer_width = \\\"64\\\"), target_arch = \\\"riscv64\\\", all(rustix_use_experimental_asm, target_arch = \\\"powerpc\\\"), all(rustix_use_experimental_asm, target_arch = \\\"powerpc64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"s390x\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips32r6\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64r6\\\"), target_arch = \\\"x86\\\", all(target_arch = \\\"x86_64\\\", target_pointer_width = \\\"64\\\"))))\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\"],\n \"cfg(all(not(windows), any(rustix_use_libc, miri, not(all(target_os = \\\"linux\\\", any(target_endian = \\\"little\\\", any(target_arch = \\\"s390x\\\", target_arch = \\\"powerpc\\\")), any(target_arch = \\\"arm\\\", all(target_arch = \\\"aarch64\\\", target_pointer_width = \\\"64\\\"), target_arch = \\\"riscv64\\\", all(rustix_use_experimental_asm, target_arch = \\\"powerpc\\\"), all(rustix_use_experimental_asm, target_arch = \\\"powerpc64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"s390x\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips32r6\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64r6\\\"), target_arch = \\\"x86\\\", all(target_arch = \\\"x86_64\\\", target_pointer_width = \\\"64\\\")))))))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:wasm32-unknown-unknown\",\"@rules_rust//rust/platform:wasm32-wasip1\"],\n \"cfg(all(target_arch = \\\"aarch64\\\", target_env = \\\"msvc\\\", not(windows_raw_dylib)))\": [],\n \"cfg(all(target_arch = \\\"aarch64\\\", target_os = \\\"linux\\\"))\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\"],\n \"cfg(all(target_arch = \\\"aarch64\\\", target_vendor = \\\"apple\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n \"cfg(all(target_arch = \\\"loongarch64\\\", target_os = \\\"linux\\\"))\": [],\n \"cfg(all(target_arch = \\\"wasm32\\\", target_os = \\\"wasi\\\", target_env = \\\"p2\\\"))\": [],\n \"cfg(all(target_arch = \\\"x86\\\", target_env = \\\"gnu\\\", not(target_abi = \\\"llvm\\\"), not(windows_raw_dylib)))\": [],\n \"cfg(all(target_arch = \\\"x86\\\", target_env = \\\"gnu\\\", not(windows_raw_dylib)))\": [],\n \"cfg(all(target_arch = \\\"x86\\\", target_env = \\\"msvc\\\", not(windows_raw_dylib)))\": [],\n \"cfg(all(target_arch = \\\"x86_64\\\", target_env = \\\"gnu\\\", not(target_abi = \\\"llvm\\\"), not(windows_raw_dylib)))\": [\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\"],\n \"cfg(all(target_arch = \\\"x86_64\\\", target_env = \\\"msvc\\\", not(windows_raw_dylib)))\": [\"@rules_rust//rust/platform:x86_64-pc-windows-msvc\"],\n \"cfg(all(target_os = \\\"uefi\\\", getrandom_backend = \\\"efi_rng\\\"))\": [],\n \"cfg(any())\": [],\n \"cfg(any(target_arch = \\\"aarch64\\\", target_arch = \\\"x86_64\\\", target_arch = \\\"x86\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-pc-windows-msvc\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\"],\n \"cfg(any(target_os = \\\"dragonfly\\\", target_os = \\\"freebsd\\\", target_os = \\\"hurd\\\", target_os = \\\"illumos\\\", target_os = \\\"cygwin\\\", all(target_os = \\\"horizon\\\", target_arch = \\\"arm\\\")))\": [],\n \"cfg(any(target_os = \\\"haiku\\\", target_os = \\\"redox\\\", target_os = \\\"nto\\\", target_os = \\\"aix\\\"))\": [],\n \"cfg(any(target_os = \\\"ios\\\", target_os = \\\"visionos\\\", target_os = \\\"watchos\\\", target_os = \\\"tvos\\\"))\": [],\n \"cfg(any(target_os = \\\"macos\\\", target_os = \\\"openbsd\\\", target_os = \\\"vita\\\", target_os = \\\"emscripten\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n \"cfg(any(unix, target_os = \\\"wasi\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:wasm32-wasip1\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\"],\n \"cfg(not(all(target_arch = \\\"arm\\\", target_os = \\\"none\\\")))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:wasm32-unknown-unknown\",\"@rules_rust//rust/platform:wasm32-wasip1\",\"@rules_rust//rust/platform:x86_64-pc-windows-msvc\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\"],\n \"cfg(not(any(target_os = \\\"windows\\\", target_vendor = \\\"apple\\\")))\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:wasm32-unknown-unknown\",\"@rules_rust//rust/platform:wasm32-wasip1\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\"],\n \"cfg(not(target_arch = \\\"wasm32\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-pc-windows-msvc\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\"],\n \"cfg(target_arch = \\\"wasm32\\\")\": [\"@rules_rust//rust/platform:wasm32-unknown-unknown\",\"@rules_rust//rust/platform:wasm32-wasip1\"],\n \"cfg(target_feature = \\\"atomics\\\")\": [],\n \"cfg(target_os = \\\"hermit\\\")\": [],\n \"cfg(target_os = \\\"macos\\\")\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n \"cfg(target_os = \\\"netbsd\\\")\": [],\n \"cfg(target_os = \\\"redox\\\")\": [],\n \"cfg(target_os = \\\"solaris\\\")\": [],\n \"cfg(target_os = \\\"vxworks\\\")\": [],\n \"cfg(target_os = \\\"wasi\\\")\": [\"@rules_rust//rust/platform:wasm32-wasip1\"],\n \"cfg(target_os = \\\"windows\\\")\": [\"@rules_rust//rust/platform:x86_64-pc-windows-msvc\"],\n \"cfg(target_vendor = \\\"apple\\\")\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n \"cfg(unix)\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\"],\n \"cfg(windows)\": [\"@rules_rust//rust/platform:x86_64-pc-windows-msvc\"],\n \"cfg(windows_raw_dylib)\": [],\n \"i686-pc-windows-gnullvm\": [],\n \"wasm32-unknown-unknown\": [\"@rules_rust//rust/platform:wasm32-unknown-unknown\"],\n \"wasm32-wasip1\": [\"@rules_rust//rust/platform:wasm32-wasip1\"],\n \"x86_64-pc-windows-gnullvm\": [],\n \"x86_64-pc-windows-msvc\": [\"@rules_rust//rust/platform:x86_64-pc-windows-msvc\"],\n \"x86_64-unknown-linux-gnu\": [\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\"],\n \"x86_64-unknown-nixos-gnu\": [\"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\"],\n}\n\n###############################################################################\n\ndef crate_repositories():\n \"\"\"A macro for defining repositories for all generated crates.\n\n Returns:\n A list of repos visible to the module through the module extension.\n \"\"\"\n maybe(\n http_archive,\n name = \"crates__ahash-0.8.12\",\n sha256 = \"5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ahash/0.8.12/download\"],\n strip_prefix = \"ahash-0.8.12\",\n build_file = Label(\"@crates//crates:BUILD.ahash-0.8.12.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__aho-corasick-1.1.4\",\n sha256 = \"ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/aho-corasick/1.1.4/download\"],\n strip_prefix = \"aho-corasick-1.1.4\",\n build_file = Label(\"@crates//crates:BUILD.aho-corasick-1.1.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__anstream-0.6.21\",\n sha256 = \"43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstream/0.6.21/download\"],\n strip_prefix = \"anstream-0.6.21\",\n build_file = Label(\"@crates//crates:BUILD.anstream-0.6.21.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__anstyle-1.0.13\",\n sha256 = \"5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstyle/1.0.13/download\"],\n strip_prefix = \"anstyle-1.0.13\",\n build_file = Label(\"@crates//crates:BUILD.anstyle-1.0.13.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__anstyle-parse-0.2.7\",\n sha256 = \"4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstyle-parse/0.2.7/download\"],\n strip_prefix = \"anstyle-parse-0.2.7\",\n build_file = Label(\"@crates//crates:BUILD.anstyle-parse-0.2.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__anstyle-query-1.1.5\",\n sha256 = \"40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstyle-query/1.1.5/download\"],\n strip_prefix = \"anstyle-query-1.1.5\",\n build_file = Label(\"@crates//crates:BUILD.anstyle-query-1.1.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__anstyle-wincon-3.0.11\",\n sha256 = \"291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstyle-wincon/3.0.11/download\"],\n strip_prefix = \"anstyle-wincon-3.0.11\",\n build_file = Label(\"@crates//crates:BUILD.anstyle-wincon-3.0.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__anyhow-1.0.100\",\n sha256 = \"a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anyhow/1.0.100/download\"],\n strip_prefix = \"anyhow-1.0.100\",\n build_file = Label(\"@crates//crates:BUILD.anyhow-1.0.100.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__askama-0.14.0\",\n sha256 = \"f75363874b771be265f4ffe307ca705ef6f3baa19011c149da8674a87f1b75c4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/askama/0.14.0/download\"],\n strip_prefix = \"askama-0.14.0\",\n build_file = Label(\"@crates//crates:BUILD.askama-0.14.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__askama_derive-0.14.0\",\n sha256 = \"129397200fe83088e8a68407a8e2b1f826cf0086b21ccdb866a722c8bcd3a94f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/askama_derive/0.14.0/download\"],\n strip_prefix = \"askama_derive-0.14.0\",\n build_file = Label(\"@crates//crates:BUILD.askama_derive-0.14.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__askama_parser-0.14.0\",\n sha256 = \"d6ab5630b3d5eaf232620167977f95eb51f3432fc76852328774afbd242d4358\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/askama_parser/0.14.0/download\"],\n strip_prefix = \"askama_parser-0.14.0\",\n build_file = Label(\"@crates//crates:BUILD.askama_parser-0.14.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__async-trait-0.1.89\",\n sha256 = \"9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/async-trait/0.1.89/download\"],\n strip_prefix = \"async-trait-0.1.89\",\n build_file = Label(\"@crates//crates:BUILD.async-trait-0.1.89.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__atomic-waker-1.1.2\",\n sha256 = \"1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/atomic-waker/1.1.2/download\"],\n strip_prefix = \"atomic-waker-1.1.2\",\n build_file = Label(\"@crates//crates:BUILD.atomic-waker-1.1.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__axum-0.7.9\",\n sha256 = \"edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/axum/0.7.9/download\"],\n strip_prefix = \"axum-0.7.9\",\n build_file = Label(\"@crates//crates:BUILD.axum-0.7.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__axum-core-0.4.5\",\n sha256 = \"09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/axum-core/0.4.5/download\"],\n strip_prefix = \"axum-core-0.4.5\",\n build_file = Label(\"@crates//crates:BUILD.axum-core-0.4.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__base64-0.21.7\",\n sha256 = \"9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/base64/0.21.7/download\"],\n strip_prefix = \"base64-0.21.7\",\n build_file = Label(\"@crates//crates:BUILD.base64-0.21.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__basic-toml-0.1.10\",\n sha256 = \"ba62675e8242a4c4e806d12f11d136e626e6c8361d6b829310732241652a178a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/basic-toml/0.1.10/download\"],\n strip_prefix = \"basic-toml-0.1.10\",\n build_file = Label(\"@crates//crates:BUILD.basic-toml-0.1.10.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__bitflags-1.3.2\",\n sha256 = \"bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bitflags/1.3.2/download\"],\n strip_prefix = \"bitflags-1.3.2\",\n build_file = Label(\"@crates//crates:BUILD.bitflags-1.3.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__bitflags-2.10.0\",\n sha256 = \"812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bitflags/2.10.0/download\"],\n strip_prefix = \"bitflags-2.10.0\",\n build_file = Label(\"@crates//crates:BUILD.bitflags-2.10.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__block-buffer-0.10.4\",\n sha256 = \"3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/block-buffer/0.10.4/download\"],\n strip_prefix = \"block-buffer-0.10.4\",\n build_file = Label(\"@crates//crates:BUILD.block-buffer-0.10.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__bumpalo-3.19.0\",\n sha256 = \"46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bumpalo/3.19.0/download\"],\n strip_prefix = \"bumpalo-3.19.0\",\n build_file = Label(\"@crates//crates:BUILD.bumpalo-3.19.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__bytes-1.11.0\",\n sha256 = \"b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bytes/1.11.0/download\"],\n strip_prefix = \"bytes-1.11.0\",\n build_file = Label(\"@crates//crates:BUILD.bytes-1.11.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__cc-1.2.47\",\n sha256 = \"cd405d82c84ff7f35739f175f67d8b9fb7687a0e84ccdc78bd3568839827cf07\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cc/1.2.47/download\"],\n strip_prefix = \"cc-1.2.47\",\n build_file = Label(\"@crates//crates:BUILD.cc-1.2.47.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__cfg-if-1.0.4\",\n sha256 = \"9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cfg-if/1.0.4/download\"],\n strip_prefix = \"cfg-if-1.0.4\",\n build_file = Label(\"@crates//crates:BUILD.cfg-if-1.0.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__clap-4.5.53\",\n sha256 = \"c9e340e012a1bf4935f5282ed1436d1489548e8f72308207ea5df0e23d2d03f8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap/4.5.53/download\"],\n strip_prefix = \"clap-4.5.53\",\n build_file = Label(\"@crates//crates:BUILD.clap-4.5.53.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__clap_builder-4.5.53\",\n sha256 = \"d76b5d13eaa18c901fd2f7fca939fefe3a0727a953561fefdf3b2922b8569d00\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap_builder/4.5.53/download\"],\n strip_prefix = \"clap_builder-4.5.53\",\n build_file = Label(\"@crates//crates:BUILD.clap_builder-4.5.53.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__clap_derive-4.5.49\",\n sha256 = \"2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap_derive/4.5.49/download\"],\n strip_prefix = \"clap_derive-4.5.49\",\n build_file = Label(\"@crates//crates:BUILD.clap_derive-4.5.49.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__clap_lex-0.7.6\",\n sha256 = \"a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap_lex/0.7.6/download\"],\n strip_prefix = \"clap_lex-0.7.6\",\n build_file = Label(\"@crates//crates:BUILD.clap_lex-0.7.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__colorchoice-1.0.4\",\n sha256 = \"b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/colorchoice/1.0.4/download\"],\n strip_prefix = \"colorchoice-1.0.4\",\n build_file = Label(\"@crates//crates:BUILD.colorchoice-1.0.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__core-foundation-0.9.4\",\n sha256 = \"91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/core-foundation/0.9.4/download\"],\n strip_prefix = \"core-foundation-0.9.4\",\n build_file = Label(\"@crates//crates:BUILD.core-foundation-0.9.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__core-foundation-sys-0.8.7\",\n sha256 = \"773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/core-foundation-sys/0.8.7/download\"],\n strip_prefix = \"core-foundation-sys-0.8.7\",\n build_file = Label(\"@crates//crates:BUILD.core-foundation-sys-0.8.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__cpufeatures-0.2.17\",\n sha256 = \"59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cpufeatures/0.2.17/download\"],\n strip_prefix = \"cpufeatures-0.2.17\",\n build_file = Label(\"@crates//crates:BUILD.cpufeatures-0.2.17.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__crypto-common-0.1.7\",\n sha256 = \"78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/crypto-common/0.1.7/download\"],\n strip_prefix = \"crypto-common-0.1.7\",\n build_file = Label(\"@crates//crates:BUILD.crypto-common-0.1.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__digest-0.10.7\",\n sha256 = \"9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/digest/0.10.7/download\"],\n strip_prefix = \"digest-0.10.7\",\n build_file = Label(\"@crates//crates:BUILD.digest-0.10.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__displaydoc-0.2.5\",\n sha256 = \"97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/displaydoc/0.2.5/download\"],\n strip_prefix = \"displaydoc-0.2.5\",\n build_file = Label(\"@crates//crates:BUILD.displaydoc-0.2.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__dyn-clone-1.0.20\",\n sha256 = \"d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/dyn-clone/1.0.20/download\"],\n strip_prefix = \"dyn-clone-1.0.20\",\n build_file = Label(\"@crates//crates:BUILD.dyn-clone-1.0.20.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__either-1.15.0\",\n sha256 = \"48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/either/1.15.0/download\"],\n strip_prefix = \"either-1.15.0\",\n build_file = Label(\"@crates//crates:BUILD.either-1.15.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__encoding_rs-0.8.35\",\n sha256 = \"75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/encoding_rs/0.8.35/download\"],\n strip_prefix = \"encoding_rs-0.8.35\",\n build_file = Label(\"@crates//crates:BUILD.encoding_rs-0.8.35.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__equivalent-1.0.2\",\n sha256 = \"877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/equivalent/1.0.2/download\"],\n strip_prefix = \"equivalent-1.0.2\",\n build_file = Label(\"@crates//crates:BUILD.equivalent-1.0.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__errno-0.3.14\",\n sha256 = \"39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/errno/0.3.14/download\"],\n strip_prefix = \"errno-0.3.14\",\n build_file = Label(\"@crates//crates:BUILD.errno-0.3.14.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__fallible-iterator-0.3.0\",\n sha256 = \"2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/fallible-iterator/0.3.0/download\"],\n strip_prefix = \"fallible-iterator-0.3.0\",\n build_file = Label(\"@crates//crates:BUILD.fallible-iterator-0.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__fallible-streaming-iterator-0.1.9\",\n sha256 = \"7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/fallible-streaming-iterator/0.1.9/download\"],\n strip_prefix = \"fallible-streaming-iterator-0.1.9\",\n build_file = Label(\"@crates//crates:BUILD.fallible-streaming-iterator-0.1.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__fastrand-2.3.0\",\n sha256 = \"37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/fastrand/2.3.0/download\"],\n strip_prefix = \"fastrand-2.3.0\",\n build_file = Label(\"@crates//crates:BUILD.fastrand-2.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__find-msvc-tools-0.1.5\",\n sha256 = \"3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/find-msvc-tools/0.1.5/download\"],\n strip_prefix = \"find-msvc-tools-0.1.5\",\n build_file = Label(\"@crates//crates:BUILD.find-msvc-tools-0.1.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__fixedbitset-0.5.7\",\n sha256 = \"1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/fixedbitset/0.5.7/download\"],\n strip_prefix = \"fixedbitset-0.5.7\",\n build_file = Label(\"@crates//crates:BUILD.fixedbitset-0.5.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__fnv-1.0.7\",\n sha256 = \"3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/fnv/1.0.7/download\"],\n strip_prefix = \"fnv-1.0.7\",\n build_file = Label(\"@crates//crates:BUILD.fnv-1.0.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__foreign-types-0.3.2\",\n sha256 = \"f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/foreign-types/0.3.2/download\"],\n strip_prefix = \"foreign-types-0.3.2\",\n build_file = Label(\"@crates//crates:BUILD.foreign-types-0.3.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__foreign-types-shared-0.1.1\",\n sha256 = \"00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/foreign-types-shared/0.1.1/download\"],\n strip_prefix = \"foreign-types-shared-0.1.1\",\n build_file = Label(\"@crates//crates:BUILD.foreign-types-shared-0.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__form_urlencoded-1.2.2\",\n sha256 = \"cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/form_urlencoded/1.2.2/download\"],\n strip_prefix = \"form_urlencoded-1.2.2\",\n build_file = Label(\"@crates//crates:BUILD.form_urlencoded-1.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__futures-channel-0.3.31\",\n sha256 = \"2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-channel/0.3.31/download\"],\n strip_prefix = \"futures-channel-0.3.31\",\n build_file = Label(\"@crates//crates:BUILD.futures-channel-0.3.31.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__futures-core-0.3.31\",\n sha256 = \"05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-core/0.3.31/download\"],\n strip_prefix = \"futures-core-0.3.31\",\n build_file = Label(\"@crates//crates:BUILD.futures-core-0.3.31.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__futures-io-0.3.31\",\n sha256 = \"9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-io/0.3.31/download\"],\n strip_prefix = \"futures-io-0.3.31\",\n build_file = Label(\"@crates//crates:BUILD.futures-io-0.3.31.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__futures-sink-0.3.31\",\n sha256 = \"e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-sink/0.3.31/download\"],\n strip_prefix = \"futures-sink-0.3.31\",\n build_file = Label(\"@crates//crates:BUILD.futures-sink-0.3.31.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__futures-task-0.3.31\",\n sha256 = \"f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-task/0.3.31/download\"],\n strip_prefix = \"futures-task-0.3.31\",\n build_file = Label(\"@crates//crates:BUILD.futures-task-0.3.31.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__futures-util-0.3.31\",\n sha256 = \"9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-util/0.3.31/download\"],\n strip_prefix = \"futures-util-0.3.31\",\n build_file = Label(\"@crates//crates:BUILD.futures-util-0.3.31.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__generic-array-0.14.7\",\n sha256 = \"85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/generic-array/0.14.7/download\"],\n strip_prefix = \"generic-array-0.14.7\",\n build_file = Label(\"@crates//crates:BUILD.generic-array-0.14.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__getrandom-0.3.4\",\n sha256 = \"899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/getrandom/0.3.4/download\"],\n strip_prefix = \"getrandom-0.3.4\",\n build_file = Label(\"@crates//crates:BUILD.getrandom-0.3.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__h2-0.3.27\",\n sha256 = \"0beca50380b1fc32983fc1cb4587bfa4bb9e78fc259aad4a0032d2080309222d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/h2/0.3.27/download\"],\n strip_prefix = \"h2-0.3.27\",\n build_file = Label(\"@crates//crates:BUILD.h2-0.3.27.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__hashbrown-0.14.5\",\n sha256 = \"e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hashbrown/0.14.5/download\"],\n strip_prefix = \"hashbrown-0.14.5\",\n build_file = Label(\"@crates//crates:BUILD.hashbrown-0.14.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__hashbrown-0.16.1\",\n sha256 = \"841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hashbrown/0.16.1/download\"],\n strip_prefix = \"hashbrown-0.16.1\",\n build_file = Label(\"@crates//crates:BUILD.hashbrown-0.16.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__hashlink-0.9.1\",\n sha256 = \"6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hashlink/0.9.1/download\"],\n strip_prefix = \"hashlink-0.9.1\",\n build_file = Label(\"@crates//crates:BUILD.hashlink-0.9.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__heck-0.5.0\",\n sha256 = \"2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/heck/0.5.0/download\"],\n strip_prefix = \"heck-0.5.0\",\n build_file = Label(\"@crates//crates:BUILD.heck-0.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__http-0.2.12\",\n sha256 = \"601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/http/0.2.12/download\"],\n strip_prefix = \"http-0.2.12\",\n build_file = Label(\"@crates//crates:BUILD.http-0.2.12.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__http-1.4.0\",\n sha256 = \"e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/http/1.4.0/download\"],\n strip_prefix = \"http-1.4.0\",\n build_file = Label(\"@crates//crates:BUILD.http-1.4.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__http-body-0.4.6\",\n sha256 = \"7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/http-body/0.4.6/download\"],\n strip_prefix = \"http-body-0.4.6\",\n build_file = Label(\"@crates//crates:BUILD.http-body-0.4.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__http-body-1.0.1\",\n sha256 = \"1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/http-body/1.0.1/download\"],\n strip_prefix = \"http-body-1.0.1\",\n build_file = Label(\"@crates//crates:BUILD.http-body-1.0.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__http-body-util-0.1.3\",\n sha256 = \"b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/http-body-util/0.1.3/download\"],\n strip_prefix = \"http-body-util-0.1.3\",\n build_file = Label(\"@crates//crates:BUILD.http-body-util-0.1.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__httparse-1.10.1\",\n sha256 = \"6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/httparse/1.10.1/download\"],\n strip_prefix = \"httparse-1.10.1\",\n build_file = Label(\"@crates//crates:BUILD.httparse-1.10.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__httpdate-1.0.3\",\n sha256 = \"df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/httpdate/1.0.3/download\"],\n strip_prefix = \"httpdate-1.0.3\",\n build_file = Label(\"@crates//crates:BUILD.httpdate-1.0.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__hyper-0.14.32\",\n sha256 = \"41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hyper/0.14.32/download\"],\n strip_prefix = \"hyper-0.14.32\",\n build_file = Label(\"@crates//crates:BUILD.hyper-0.14.32.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__hyper-1.8.1\",\n sha256 = \"2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hyper/1.8.1/download\"],\n strip_prefix = \"hyper-1.8.1\",\n build_file = Label(\"@crates//crates:BUILD.hyper-1.8.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__hyper-tls-0.5.0\",\n sha256 = \"d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hyper-tls/0.5.0/download\"],\n strip_prefix = \"hyper-tls-0.5.0\",\n build_file = Label(\"@crates//crates:BUILD.hyper-tls-0.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__hyper-util-0.1.18\",\n sha256 = \"52e9a2a24dc5c6821e71a7030e1e14b7b632acac55c40e9d2e082c621261bb56\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hyper-util/0.1.18/download\"],\n strip_prefix = \"hyper-util-0.1.18\",\n build_file = Label(\"@crates//crates:BUILD.hyper-util-0.1.18.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__icu_collections-2.1.1\",\n sha256 = \"4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_collections/2.1.1/download\"],\n strip_prefix = \"icu_collections-2.1.1\",\n build_file = Label(\"@crates//crates:BUILD.icu_collections-2.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__icu_locale_core-2.1.1\",\n sha256 = \"edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_locale_core/2.1.1/download\"],\n strip_prefix = \"icu_locale_core-2.1.1\",\n build_file = Label(\"@crates//crates:BUILD.icu_locale_core-2.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__icu_normalizer-2.1.1\",\n sha256 = \"5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_normalizer/2.1.1/download\"],\n strip_prefix = \"icu_normalizer-2.1.1\",\n build_file = Label(\"@crates//crates:BUILD.icu_normalizer-2.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__icu_normalizer_data-2.1.1\",\n sha256 = \"7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_normalizer_data/2.1.1/download\"],\n strip_prefix = \"icu_normalizer_data-2.1.1\",\n build_file = Label(\"@crates//crates:BUILD.icu_normalizer_data-2.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__icu_properties-2.1.1\",\n sha256 = \"e93fcd3157766c0c8da2f8cff6ce651a31f0810eaa1c51ec363ef790bbb5fb99\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_properties/2.1.1/download\"],\n strip_prefix = \"icu_properties-2.1.1\",\n build_file = Label(\"@crates//crates:BUILD.icu_properties-2.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__icu_properties_data-2.1.1\",\n sha256 = \"02845b3647bb045f1100ecd6480ff52f34c35f82d9880e029d329c21d1054899\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_properties_data/2.1.1/download\"],\n strip_prefix = \"icu_properties_data-2.1.1\",\n build_file = Label(\"@crates//crates:BUILD.icu_properties_data-2.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__icu_provider-2.1.1\",\n sha256 = \"85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_provider/2.1.1/download\"],\n strip_prefix = \"icu_provider-2.1.1\",\n build_file = Label(\"@crates//crates:BUILD.icu_provider-2.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__idna-1.1.0\",\n sha256 = \"3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/idna/1.1.0/download\"],\n strip_prefix = \"idna-1.1.0\",\n build_file = Label(\"@crates//crates:BUILD.idna-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__idna_adapter-1.2.1\",\n sha256 = \"3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/idna_adapter/1.2.1/download\"],\n strip_prefix = \"idna_adapter-1.2.1\",\n build_file = Label(\"@crates//crates:BUILD.idna_adapter-1.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__indexmap-2.12.1\",\n sha256 = \"0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/indexmap/2.12.1/download\"],\n strip_prefix = \"indexmap-2.12.1\",\n build_file = Label(\"@crates//crates:BUILD.indexmap-2.12.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ipnet-2.11.0\",\n sha256 = \"469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ipnet/2.11.0/download\"],\n strip_prefix = \"ipnet-2.11.0\",\n build_file = Label(\"@crates//crates:BUILD.ipnet-2.11.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__is_terminal_polyfill-1.70.2\",\n sha256 = \"a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/is_terminal_polyfill/1.70.2/download\"],\n strip_prefix = \"is_terminal_polyfill-1.70.2\",\n build_file = Label(\"@crates//crates:BUILD.is_terminal_polyfill-1.70.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__itertools-0.14.0\",\n sha256 = \"2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/itertools/0.14.0/download\"],\n strip_prefix = \"itertools-0.14.0\",\n build_file = Label(\"@crates//crates:BUILD.itertools-0.14.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__itoa-1.0.15\",\n sha256 = \"4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/itoa/1.0.15/download\"],\n strip_prefix = \"itoa-1.0.15\",\n build_file = Label(\"@crates//crates:BUILD.itoa-1.0.15.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__js-sys-0.3.82\",\n sha256 = \"b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/js-sys/0.3.82/download\"],\n strip_prefix = \"js-sys-0.3.82\",\n build_file = Label(\"@crates//crates:BUILD.js-sys-0.3.82.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__lazy_static-1.5.0\",\n sha256 = \"bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/lazy_static/1.5.0/download\"],\n strip_prefix = \"lazy_static-1.5.0\",\n build_file = Label(\"@crates//crates:BUILD.lazy_static-1.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__libc-0.2.177\",\n sha256 = \"2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/libc/0.2.177/download\"],\n strip_prefix = \"libc-0.2.177\",\n build_file = Label(\"@crates//crates:BUILD.libc-0.2.177.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__libsqlite3-sys-0.28.0\",\n sha256 = \"0c10584274047cb335c23d3e61bcef8e323adae7c5c8c760540f73610177fc3f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/libsqlite3-sys/0.28.0/download\"],\n strip_prefix = \"libsqlite3-sys-0.28.0\",\n build_file = Label(\"@crates//crates:BUILD.libsqlite3-sys-0.28.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__linux-raw-sys-0.11.0\",\n sha256 = \"df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/linux-raw-sys/0.11.0/download\"],\n strip_prefix = \"linux-raw-sys-0.11.0\",\n build_file = Label(\"@crates//crates:BUILD.linux-raw-sys-0.11.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__litemap-0.8.1\",\n sha256 = \"6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/litemap/0.8.1/download\"],\n strip_prefix = \"litemap-0.8.1\",\n build_file = Label(\"@crates//crates:BUILD.litemap-0.8.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__lock_api-0.4.14\",\n sha256 = \"224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/lock_api/0.4.14/download\"],\n strip_prefix = \"lock_api-0.4.14\",\n build_file = Label(\"@crates//crates:BUILD.lock_api-0.4.14.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__log-0.4.28\",\n sha256 = \"34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/log/0.4.28/download\"],\n strip_prefix = \"log-0.4.28\",\n build_file = Label(\"@crates//crates:BUILD.log-0.4.28.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__matchit-0.7.3\",\n sha256 = \"0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/matchit/0.7.3/download\"],\n strip_prefix = \"matchit-0.7.3\",\n build_file = Label(\"@crates//crates:BUILD.matchit-0.7.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__memchr-2.7.6\",\n sha256 = \"f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/memchr/2.7.6/download\"],\n strip_prefix = \"memchr-2.7.6\",\n build_file = Label(\"@crates//crates:BUILD.memchr-2.7.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__mime-0.3.17\",\n sha256 = \"6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/mime/0.3.17/download\"],\n strip_prefix = \"mime-0.3.17\",\n build_file = Label(\"@crates//crates:BUILD.mime-0.3.17.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__mio-1.1.0\",\n sha256 = \"69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/mio/1.1.0/download\"],\n strip_prefix = \"mio-1.1.0\",\n build_file = Label(\"@crates//crates:BUILD.mio-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__multimap-0.10.1\",\n sha256 = \"1d87ecb2933e8aeadb3e3a02b828fed80a7528047e68b4f424523a0981a3a084\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/multimap/0.10.1/download\"],\n strip_prefix = \"multimap-0.10.1\",\n build_file = Label(\"@crates//crates:BUILD.multimap-0.10.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__native-tls-0.2.14\",\n sha256 = \"87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/native-tls/0.2.14/download\"],\n strip_prefix = \"native-tls-0.2.14\",\n build_file = Label(\"@crates//crates:BUILD.native-tls-0.2.14.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__nu-ansi-term-0.50.3\",\n sha256 = \"7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/nu-ansi-term/0.50.3/download\"],\n strip_prefix = \"nu-ansi-term-0.50.3\",\n build_file = Label(\"@crates//crates:BUILD.nu-ansi-term-0.50.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__once_cell-1.21.3\",\n sha256 = \"42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/once_cell/1.21.3/download\"],\n strip_prefix = \"once_cell-1.21.3\",\n build_file = Label(\"@crates//crates:BUILD.once_cell-1.21.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__once_cell_polyfill-1.70.2\",\n sha256 = \"384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/once_cell_polyfill/1.70.2/download\"],\n strip_prefix = \"once_cell_polyfill-1.70.2\",\n build_file = Label(\"@crates//crates:BUILD.once_cell_polyfill-1.70.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__openssl-0.10.75\",\n sha256 = \"08838db121398ad17ab8531ce9de97b244589089e290a384c900cb9ff7434328\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/openssl/0.10.75/download\"],\n strip_prefix = \"openssl-0.10.75\",\n build_file = Label(\"@crates//crates:BUILD.openssl-0.10.75.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__openssl-macros-0.1.1\",\n sha256 = \"a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/openssl-macros/0.1.1/download\"],\n strip_prefix = \"openssl-macros-0.1.1\",\n build_file = Label(\"@crates//crates:BUILD.openssl-macros-0.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__openssl-probe-0.1.6\",\n sha256 = \"d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/openssl-probe/0.1.6/download\"],\n strip_prefix = \"openssl-probe-0.1.6\",\n build_file = Label(\"@crates//crates:BUILD.openssl-probe-0.1.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__openssl-sys-0.9.111\",\n sha256 = \"82cab2d520aa75e3c58898289429321eb788c3106963d0dc886ec7a5f4adc321\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/openssl-sys/0.9.111/download\"],\n strip_prefix = \"openssl-sys-0.9.111\",\n build_file = Label(\"@crates//crates:BUILD.openssl-sys-0.9.111.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__parking_lot-0.12.5\",\n sha256 = \"93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/parking_lot/0.12.5/download\"],\n strip_prefix = \"parking_lot-0.12.5\",\n build_file = Label(\"@crates//crates:BUILD.parking_lot-0.12.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__parking_lot_core-0.9.12\",\n sha256 = \"2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/parking_lot_core/0.9.12/download\"],\n strip_prefix = \"parking_lot_core-0.9.12\",\n build_file = Label(\"@crates//crates:BUILD.parking_lot_core-0.9.12.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__percent-encoding-2.3.2\",\n sha256 = \"9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/percent-encoding/2.3.2/download\"],\n strip_prefix = \"percent-encoding-2.3.2\",\n build_file = Label(\"@crates//crates:BUILD.percent-encoding-2.3.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__petgraph-0.7.1\",\n sha256 = \"3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/petgraph/0.7.1/download\"],\n strip_prefix = \"petgraph-0.7.1\",\n build_file = Label(\"@crates//crates:BUILD.petgraph-0.7.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__pin-project-lite-0.2.16\",\n sha256 = \"3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pin-project-lite/0.2.16/download\"],\n strip_prefix = \"pin-project-lite-0.2.16\",\n build_file = Label(\"@crates//crates:BUILD.pin-project-lite-0.2.16.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__pin-utils-0.1.0\",\n sha256 = \"8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pin-utils/0.1.0/download\"],\n strip_prefix = \"pin-utils-0.1.0\",\n build_file = Label(\"@crates//crates:BUILD.pin-utils-0.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__pkg-config-0.3.32\",\n sha256 = \"7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pkg-config/0.3.32/download\"],\n strip_prefix = \"pkg-config-0.3.32\",\n build_file = Label(\"@crates//crates:BUILD.pkg-config-0.3.32.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__potential_utf-0.1.4\",\n sha256 = \"b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/potential_utf/0.1.4/download\"],\n strip_prefix = \"potential_utf-0.1.4\",\n build_file = Label(\"@crates//crates:BUILD.potential_utf-0.1.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__prettyplease-0.2.37\",\n sha256 = \"479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/prettyplease/0.2.37/download\"],\n strip_prefix = \"prettyplease-0.2.37\",\n build_file = Label(\"@crates//crates:BUILD.prettyplease-0.2.37.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__proc-macro2-1.0.103\",\n sha256 = \"5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/proc-macro2/1.0.103/download\"],\n strip_prefix = \"proc-macro2-1.0.103\",\n build_file = Label(\"@crates//crates:BUILD.proc-macro2-1.0.103.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__prost-0.13.5\",\n sha256 = \"2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/prost/0.13.5/download\"],\n strip_prefix = \"prost-0.13.5\",\n build_file = Label(\"@crates//crates:BUILD.prost-0.13.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__prost-build-0.13.5\",\n sha256 = \"be769465445e8c1474e9c5dac2018218498557af32d9ed057325ec9a41ae81bf\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/prost-build/0.13.5/download\"],\n strip_prefix = \"prost-build-0.13.5\",\n build_file = Label(\"@crates//crates:BUILD.prost-build-0.13.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__prost-derive-0.13.5\",\n sha256 = \"8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/prost-derive/0.13.5/download\"],\n strip_prefix = \"prost-derive-0.13.5\",\n build_file = Label(\"@crates//crates:BUILD.prost-derive-0.13.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__prost-types-0.13.5\",\n sha256 = \"52c2c1bf36ddb1a1c396b3601a3cec27c2462e45f07c386894ec3ccf5332bd16\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/prost-types/0.13.5/download\"],\n strip_prefix = \"prost-types-0.13.5\",\n build_file = Label(\"@crates//crates:BUILD.prost-types-0.13.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__quote-1.0.42\",\n sha256 = \"a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/quote/1.0.42/download\"],\n strip_prefix = \"quote-1.0.42\",\n build_file = Label(\"@crates//crates:BUILD.quote-1.0.42.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__r-efi-5.3.0\",\n sha256 = \"69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/r-efi/5.3.0/download\"],\n strip_prefix = \"r-efi-5.3.0\",\n build_file = Label(\"@crates//crates:BUILD.r-efi-5.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__redox_syscall-0.5.18\",\n sha256 = \"ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/redox_syscall/0.5.18/download\"],\n strip_prefix = \"redox_syscall-0.5.18\",\n build_file = Label(\"@crates//crates:BUILD.redox_syscall-0.5.18.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__regex-1.12.2\",\n sha256 = \"843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/regex/1.12.2/download\"],\n strip_prefix = \"regex-1.12.2\",\n build_file = Label(\"@crates//crates:BUILD.regex-1.12.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__regex-automata-0.4.13\",\n sha256 = \"5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/regex-automata/0.4.13/download\"],\n strip_prefix = \"regex-automata-0.4.13\",\n build_file = Label(\"@crates//crates:BUILD.regex-automata-0.4.13.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__regex-syntax-0.8.8\",\n sha256 = \"7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/regex-syntax/0.8.8/download\"],\n strip_prefix = \"regex-syntax-0.8.8\",\n build_file = Label(\"@crates//crates:BUILD.regex-syntax-0.8.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__reqwest-0.11.27\",\n sha256 = \"dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/reqwest/0.11.27/download\"],\n strip_prefix = \"reqwest-0.11.27\",\n build_file = Label(\"@crates//crates:BUILD.reqwest-0.11.27.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rusqlite-0.31.0\",\n sha256 = \"b838eba278d213a8beaf485bd313fd580ca4505a00d5871caeb1457c55322cae\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rusqlite/0.31.0/download\"],\n strip_prefix = \"rusqlite-0.31.0\",\n build_file = Label(\"@crates//crates:BUILD.rusqlite-0.31.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rustc-hash-2.1.1\",\n sha256 = \"357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustc-hash/2.1.1/download\"],\n strip_prefix = \"rustc-hash-2.1.1\",\n build_file = Label(\"@crates//crates:BUILD.rustc-hash-2.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rustix-1.1.2\",\n sha256 = \"cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustix/1.1.2/download\"],\n strip_prefix = \"rustix-1.1.2\",\n build_file = Label(\"@crates//crates:BUILD.rustix-1.1.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rustls-pemfile-1.0.4\",\n sha256 = \"1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustls-pemfile/1.0.4/download\"],\n strip_prefix = \"rustls-pemfile-1.0.4\",\n build_file = Label(\"@crates//crates:BUILD.rustls-pemfile-1.0.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rustversion-1.0.22\",\n sha256 = \"b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustversion/1.0.22/download\"],\n strip_prefix = \"rustversion-1.0.22\",\n build_file = Label(\"@crates//crates:BUILD.rustversion-1.0.22.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ryu-1.0.20\",\n sha256 = \"28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ryu/1.0.20/download\"],\n strip_prefix = \"ryu-1.0.20\",\n build_file = Label(\"@crates//crates:BUILD.ryu-1.0.20.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__schannel-0.1.28\",\n sha256 = \"891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/schannel/0.1.28/download\"],\n strip_prefix = \"schannel-0.1.28\",\n build_file = Label(\"@crates//crates:BUILD.schannel-0.1.28.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__schemars-0.8.22\",\n sha256 = \"3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/schemars/0.8.22/download\"],\n strip_prefix = \"schemars-0.8.22\",\n build_file = Label(\"@crates//crates:BUILD.schemars-0.8.22.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__schemars_derive-0.8.22\",\n sha256 = \"32e265784ad618884abaea0600a9adf15393368d840e0222d101a072f3f7534d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/schemars_derive/0.8.22/download\"],\n strip_prefix = \"schemars_derive-0.8.22\",\n build_file = Label(\"@crates//crates:BUILD.schemars_derive-0.8.22.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__scopeguard-1.2.0\",\n sha256 = \"94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/scopeguard/1.2.0/download\"],\n strip_prefix = \"scopeguard-1.2.0\",\n build_file = Label(\"@crates//crates:BUILD.scopeguard-1.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__security-framework-2.11.1\",\n sha256 = \"897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/security-framework/2.11.1/download\"],\n strip_prefix = \"security-framework-2.11.1\",\n build_file = Label(\"@crates//crates:BUILD.security-framework-2.11.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__security-framework-sys-2.15.0\",\n sha256 = \"cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/security-framework-sys/2.15.0/download\"],\n strip_prefix = \"security-framework-sys-2.15.0\",\n build_file = Label(\"@crates//crates:BUILD.security-framework-sys-2.15.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde-1.0.228\",\n sha256 = \"9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde/1.0.228/download\"],\n strip_prefix = \"serde-1.0.228\",\n build_file = Label(\"@crates//crates:BUILD.serde-1.0.228.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_core-1.0.228\",\n sha256 = \"41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_core/1.0.228/download\"],\n strip_prefix = \"serde_core-1.0.228\",\n build_file = Label(\"@crates//crates:BUILD.serde_core-1.0.228.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_derive-1.0.228\",\n sha256 = \"d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_derive/1.0.228/download\"],\n strip_prefix = \"serde_derive-1.0.228\",\n build_file = Label(\"@crates//crates:BUILD.serde_derive-1.0.228.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_derive_internals-0.29.1\",\n sha256 = \"18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_derive_internals/0.29.1/download\"],\n strip_prefix = \"serde_derive_internals-0.29.1\",\n build_file = Label(\"@crates//crates:BUILD.serde_derive_internals-0.29.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_json-1.0.145\",\n sha256 = \"402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_json/1.0.145/download\"],\n strip_prefix = \"serde_json-1.0.145\",\n build_file = Label(\"@crates//crates:BUILD.serde_json-1.0.145.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_path_to_error-0.1.20\",\n sha256 = \"10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_path_to_error/0.1.20/download\"],\n strip_prefix = \"serde_path_to_error-0.1.20\",\n build_file = Label(\"@crates//crates:BUILD.serde_path_to_error-0.1.20.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_spanned-0.6.9\",\n sha256 = \"bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_spanned/0.6.9/download\"],\n strip_prefix = \"serde_spanned-0.6.9\",\n build_file = Label(\"@crates//crates:BUILD.serde_spanned-0.6.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_urlencoded-0.7.1\",\n sha256 = \"d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_urlencoded/0.7.1/download\"],\n strip_prefix = \"serde_urlencoded-0.7.1\",\n build_file = Label(\"@crates//crates:BUILD.serde_urlencoded-0.7.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__sha2-0.10.9\",\n sha256 = \"a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/sha2/0.10.9/download\"],\n strip_prefix = \"sha2-0.10.9\",\n build_file = Label(\"@crates//crates:BUILD.sha2-0.10.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__sharded-slab-0.1.7\",\n sha256 = \"f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/sharded-slab/0.1.7/download\"],\n strip_prefix = \"sharded-slab-0.1.7\",\n build_file = Label(\"@crates//crates:BUILD.sharded-slab-0.1.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__shlex-1.3.0\",\n sha256 = \"0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/shlex/1.3.0/download\"],\n strip_prefix = \"shlex-1.3.0\",\n build_file = Label(\"@crates//crates:BUILD.shlex-1.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__signal-hook-registry-1.4.7\",\n sha256 = \"7664a098b8e616bdfcc2dc0e9ac44eb231eedf41db4e9fe95d8d32ec728dedad\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/signal-hook-registry/1.4.7/download\"],\n strip_prefix = \"signal-hook-registry-1.4.7\",\n build_file = Label(\"@crates//crates:BUILD.signal-hook-registry-1.4.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__slab-0.4.11\",\n sha256 = \"7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/slab/0.4.11/download\"],\n strip_prefix = \"slab-0.4.11\",\n build_file = Label(\"@crates//crates:BUILD.slab-0.4.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__smallvec-1.15.1\",\n sha256 = \"67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/smallvec/1.15.1/download\"],\n strip_prefix = \"smallvec-1.15.1\",\n build_file = Label(\"@crates//crates:BUILD.smallvec-1.15.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__socket2-0.5.10\",\n sha256 = \"e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/socket2/0.5.10/download\"],\n strip_prefix = \"socket2-0.5.10\",\n build_file = Label(\"@crates//crates:BUILD.socket2-0.5.10.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__socket2-0.6.1\",\n sha256 = \"17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/socket2/0.6.1/download\"],\n strip_prefix = \"socket2-0.6.1\",\n build_file = Label(\"@crates//crates:BUILD.socket2-0.6.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__stable_deref_trait-1.2.1\",\n sha256 = \"6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/stable_deref_trait/1.2.1/download\"],\n strip_prefix = \"stable_deref_trait-1.2.1\",\n build_file = Label(\"@crates//crates:BUILD.stable_deref_trait-1.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__strsim-0.11.1\",\n sha256 = \"7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/strsim/0.11.1/download\"],\n strip_prefix = \"strsim-0.11.1\",\n build_file = Label(\"@crates//crates:BUILD.strsim-0.11.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__syn-2.0.111\",\n sha256 = \"390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/syn/2.0.111/download\"],\n strip_prefix = \"syn-2.0.111\",\n build_file = Label(\"@crates//crates:BUILD.syn-2.0.111.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__sync_wrapper-0.1.2\",\n sha256 = \"2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/sync_wrapper/0.1.2/download\"],\n strip_prefix = \"sync_wrapper-0.1.2\",\n build_file = Label(\"@crates//crates:BUILD.sync_wrapper-0.1.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__sync_wrapper-1.0.2\",\n sha256 = \"0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/sync_wrapper/1.0.2/download\"],\n strip_prefix = \"sync_wrapper-1.0.2\",\n build_file = Label(\"@crates//crates:BUILD.sync_wrapper-1.0.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__synstructure-0.13.2\",\n sha256 = \"728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/synstructure/0.13.2/download\"],\n strip_prefix = \"synstructure-0.13.2\",\n build_file = Label(\"@crates//crates:BUILD.synstructure-0.13.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__system-configuration-0.5.1\",\n sha256 = \"ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/system-configuration/0.5.1/download\"],\n strip_prefix = \"system-configuration-0.5.1\",\n build_file = Label(\"@crates//crates:BUILD.system-configuration-0.5.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__system-configuration-sys-0.5.0\",\n sha256 = \"a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/system-configuration-sys/0.5.0/download\"],\n strip_prefix = \"system-configuration-sys-0.5.0\",\n build_file = Label(\"@crates//crates:BUILD.system-configuration-sys-0.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tempfile-3.23.0\",\n sha256 = \"2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tempfile/3.23.0/download\"],\n strip_prefix = \"tempfile-3.23.0\",\n build_file = Label(\"@crates//crates:BUILD.tempfile-3.23.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__thread_local-1.1.9\",\n sha256 = \"f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/thread_local/1.1.9/download\"],\n strip_prefix = \"thread_local-1.1.9\",\n build_file = Label(\"@crates//crates:BUILD.thread_local-1.1.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tinystr-0.8.2\",\n sha256 = \"42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tinystr/0.8.2/download\"],\n strip_prefix = \"tinystr-0.8.2\",\n build_file = Label(\"@crates//crates:BUILD.tinystr-0.8.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tokio-1.48.0\",\n sha256 = \"ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tokio/1.48.0/download\"],\n strip_prefix = \"tokio-1.48.0\",\n build_file = Label(\"@crates//crates:BUILD.tokio-1.48.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tokio-macros-2.6.0\",\n sha256 = \"af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tokio-macros/2.6.0/download\"],\n strip_prefix = \"tokio-macros-2.6.0\",\n build_file = Label(\"@crates//crates:BUILD.tokio-macros-2.6.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tokio-native-tls-0.3.1\",\n sha256 = \"bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tokio-native-tls/0.3.1/download\"],\n strip_prefix = \"tokio-native-tls-0.3.1\",\n build_file = Label(\"@crates//crates:BUILD.tokio-native-tls-0.3.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tokio-util-0.7.17\",\n sha256 = \"2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tokio-util/0.7.17/download\"],\n strip_prefix = \"tokio-util-0.7.17\",\n build_file = Label(\"@crates//crates:BUILD.tokio-util-0.7.17.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__toml-0.8.23\",\n sha256 = \"dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/toml/0.8.23/download\"],\n strip_prefix = \"toml-0.8.23\",\n build_file = Label(\"@crates//crates:BUILD.toml-0.8.23.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__toml_datetime-0.6.11\",\n sha256 = \"22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/toml_datetime/0.6.11/download\"],\n strip_prefix = \"toml_datetime-0.6.11\",\n build_file = Label(\"@crates//crates:BUILD.toml_datetime-0.6.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__toml_edit-0.22.27\",\n sha256 = \"41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/toml_edit/0.22.27/download\"],\n strip_prefix = \"toml_edit-0.22.27\",\n build_file = Label(\"@crates//crates:BUILD.toml_edit-0.22.27.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__toml_write-0.1.2\",\n sha256 = \"5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/toml_write/0.1.2/download\"],\n strip_prefix = \"toml_write-0.1.2\",\n build_file = Label(\"@crates//crates:BUILD.toml_write-0.1.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tower-0.4.13\",\n sha256 = \"b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tower/0.4.13/download\"],\n strip_prefix = \"tower-0.4.13\",\n build_file = Label(\"@crates//crates:BUILD.tower-0.4.13.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tower-0.5.2\",\n sha256 = \"d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tower/0.5.2/download\"],\n strip_prefix = \"tower-0.5.2\",\n build_file = Label(\"@crates//crates:BUILD.tower-0.5.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tower-http-0.5.2\",\n sha256 = \"1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tower-http/0.5.2/download\"],\n strip_prefix = \"tower-http-0.5.2\",\n build_file = Label(\"@crates//crates:BUILD.tower-http-0.5.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tower-layer-0.3.3\",\n sha256 = \"121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tower-layer/0.3.3/download\"],\n strip_prefix = \"tower-layer-0.3.3\",\n build_file = Label(\"@crates//crates:BUILD.tower-layer-0.3.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tower-service-0.3.3\",\n sha256 = \"8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tower-service/0.3.3/download\"],\n strip_prefix = \"tower-service-0.3.3\",\n build_file = Label(\"@crates//crates:BUILD.tower-service-0.3.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tracing-0.1.41\",\n sha256 = \"784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tracing/0.1.41/download\"],\n strip_prefix = \"tracing-0.1.41\",\n build_file = Label(\"@crates//crates:BUILD.tracing-0.1.41.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tracing-attributes-0.1.30\",\n sha256 = \"81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tracing-attributes/0.1.30/download\"],\n strip_prefix = \"tracing-attributes-0.1.30\",\n build_file = Label(\"@crates//crates:BUILD.tracing-attributes-0.1.30.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tracing-core-0.1.34\",\n sha256 = \"b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tracing-core/0.1.34/download\"],\n strip_prefix = \"tracing-core-0.1.34\",\n build_file = Label(\"@crates//crates:BUILD.tracing-core-0.1.34.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tracing-log-0.2.0\",\n sha256 = \"ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tracing-log/0.2.0/download\"],\n strip_prefix = \"tracing-log-0.2.0\",\n build_file = Label(\"@crates//crates:BUILD.tracing-log-0.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tracing-subscriber-0.3.20\",\n sha256 = \"2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tracing-subscriber/0.3.20/download\"],\n strip_prefix = \"tracing-subscriber-0.3.20\",\n build_file = Label(\"@crates//crates:BUILD.tracing-subscriber-0.3.20.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__try-lock-0.2.5\",\n sha256 = \"e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/try-lock/0.2.5/download\"],\n strip_prefix = \"try-lock-0.2.5\",\n build_file = Label(\"@crates//crates:BUILD.try-lock-0.2.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__typenum-1.19.0\",\n sha256 = \"562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/typenum/1.19.0/download\"],\n strip_prefix = \"typenum-1.19.0\",\n build_file = Label(\"@crates//crates:BUILD.typenum-1.19.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__unicode-ident-1.0.22\",\n sha256 = \"9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unicode-ident/1.0.22/download\"],\n strip_prefix = \"unicode-ident-1.0.22\",\n build_file = Label(\"@crates//crates:BUILD.unicode-ident-1.0.22.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__url-2.5.7\",\n sha256 = \"08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/url/2.5.7/download\"],\n strip_prefix = \"url-2.5.7\",\n build_file = Label(\"@crates//crates:BUILD.url-2.5.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__urlencoding-2.1.3\",\n sha256 = \"daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/urlencoding/2.1.3/download\"],\n strip_prefix = \"urlencoding-2.1.3\",\n build_file = Label(\"@crates//crates:BUILD.urlencoding-2.1.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__utf8_iter-1.0.4\",\n sha256 = \"b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/utf8_iter/1.0.4/download\"],\n strip_prefix = \"utf8_iter-1.0.4\",\n build_file = Label(\"@crates//crates:BUILD.utf8_iter-1.0.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__utf8parse-0.2.2\",\n sha256 = \"06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/utf8parse/0.2.2/download\"],\n strip_prefix = \"utf8parse-0.2.2\",\n build_file = Label(\"@crates//crates:BUILD.utf8parse-0.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__uuid-1.18.1\",\n sha256 = \"2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/uuid/1.18.1/download\"],\n strip_prefix = \"uuid-1.18.1\",\n build_file = Label(\"@crates//crates:BUILD.uuid-1.18.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__valuable-0.1.1\",\n sha256 = \"ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/valuable/0.1.1/download\"],\n strip_prefix = \"valuable-0.1.1\",\n build_file = Label(\"@crates//crates:BUILD.valuable-0.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__vcpkg-0.2.15\",\n sha256 = \"accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/vcpkg/0.2.15/download\"],\n strip_prefix = \"vcpkg-0.2.15\",\n build_file = Label(\"@crates//crates:BUILD.vcpkg-0.2.15.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__version_check-0.9.5\",\n sha256 = \"0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/version_check/0.9.5/download\"],\n strip_prefix = \"version_check-0.9.5\",\n build_file = Label(\"@crates//crates:BUILD.version_check-0.9.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__want-0.3.1\",\n sha256 = \"bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/want/0.3.1/download\"],\n strip_prefix = \"want-0.3.1\",\n build_file = Label(\"@crates//crates:BUILD.want-0.3.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__wasi-0.11.1-wasi-snapshot-preview1\",\n sha256 = \"ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasi/0.11.1+wasi-snapshot-preview1/download\"],\n strip_prefix = \"wasi-0.11.1+wasi-snapshot-preview1\",\n build_file = Label(\"@crates//crates:BUILD.wasi-0.11.1+wasi-snapshot-preview1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__wasip2-1.0.1-wasi-0.2.4\",\n sha256 = \"0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasip2/1.0.1+wasi-0.2.4/download\"],\n strip_prefix = \"wasip2-1.0.1+wasi-0.2.4\",\n build_file = Label(\"@crates//crates:BUILD.wasip2-1.0.1+wasi-0.2.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__wasm-bindgen-0.2.105\",\n sha256 = \"da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen/0.2.105/download\"],\n strip_prefix = \"wasm-bindgen-0.2.105\",\n build_file = Label(\"@crates//crates:BUILD.wasm-bindgen-0.2.105.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__wasm-bindgen-futures-0.4.55\",\n sha256 = \"551f88106c6d5e7ccc7cd9a16f312dd3b5d36ea8b4954304657d5dfba115d4a0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen-futures/0.4.55/download\"],\n strip_prefix = \"wasm-bindgen-futures-0.4.55\",\n build_file = Label(\"@crates//crates:BUILD.wasm-bindgen-futures-0.4.55.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__wasm-bindgen-macro-0.2.105\",\n sha256 = \"04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen-macro/0.2.105/download\"],\n strip_prefix = \"wasm-bindgen-macro-0.2.105\",\n build_file = Label(\"@crates//crates:BUILD.wasm-bindgen-macro-0.2.105.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__wasm-bindgen-macro-support-0.2.105\",\n sha256 = \"420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen-macro-support/0.2.105/download\"],\n strip_prefix = \"wasm-bindgen-macro-support-0.2.105\",\n build_file = Label(\"@crates//crates:BUILD.wasm-bindgen-macro-support-0.2.105.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__wasm-bindgen-shared-0.2.105\",\n sha256 = \"76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen-shared/0.2.105/download\"],\n strip_prefix = \"wasm-bindgen-shared-0.2.105\",\n build_file = Label(\"@crates//crates:BUILD.wasm-bindgen-shared-0.2.105.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__web-sys-0.3.82\",\n sha256 = \"3a1f95c0d03a47f4ae1f7a64643a6bb97465d9b740f0fa8f90ea33915c99a9a1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/web-sys/0.3.82/download\"],\n strip_prefix = \"web-sys-0.3.82\",\n build_file = Label(\"@crates//crates:BUILD.web-sys-0.3.82.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-link-0.2.1\",\n sha256 = \"f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-link/0.2.1/download\"],\n strip_prefix = \"windows-link-0.2.1\",\n build_file = Label(\"@crates//crates:BUILD.windows-link-0.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-sys-0.48.0\",\n sha256 = \"677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-sys/0.48.0/download\"],\n strip_prefix = \"windows-sys-0.48.0\",\n build_file = Label(\"@crates//crates:BUILD.windows-sys-0.48.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-sys-0.52.0\",\n sha256 = \"282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-sys/0.52.0/download\"],\n strip_prefix = \"windows-sys-0.52.0\",\n build_file = Label(\"@crates//crates:BUILD.windows-sys-0.52.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-sys-0.60.2\",\n sha256 = \"f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-sys/0.60.2/download\"],\n strip_prefix = \"windows-sys-0.60.2\",\n build_file = Label(\"@crates//crates:BUILD.windows-sys-0.60.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-sys-0.61.2\",\n sha256 = \"ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-sys/0.61.2/download\"],\n strip_prefix = \"windows-sys-0.61.2\",\n build_file = Label(\"@crates//crates:BUILD.windows-sys-0.61.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-targets-0.48.5\",\n sha256 = \"9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-targets/0.48.5/download\"],\n strip_prefix = \"windows-targets-0.48.5\",\n build_file = Label(\"@crates//crates:BUILD.windows-targets-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-targets-0.52.6\",\n sha256 = \"9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-targets/0.52.6/download\"],\n strip_prefix = \"windows-targets-0.52.6\",\n build_file = Label(\"@crates//crates:BUILD.windows-targets-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-targets-0.53.5\",\n sha256 = \"4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-targets/0.53.5/download\"],\n strip_prefix = \"windows-targets-0.53.5\",\n build_file = Label(\"@crates//crates:BUILD.windows-targets-0.53.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_aarch64_gnullvm-0.48.5\",\n sha256 = \"2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_aarch64_gnullvm/0.48.5/download\"],\n strip_prefix = \"windows_aarch64_gnullvm-0.48.5\",\n build_file = Label(\"@crates//crates:BUILD.windows_aarch64_gnullvm-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_aarch64_gnullvm-0.52.6\",\n sha256 = \"32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_aarch64_gnullvm/0.52.6/download\"],\n strip_prefix = \"windows_aarch64_gnullvm-0.52.6\",\n build_file = Label(\"@crates//crates:BUILD.windows_aarch64_gnullvm-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_aarch64_gnullvm-0.53.1\",\n sha256 = \"a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_aarch64_gnullvm/0.53.1/download\"],\n strip_prefix = \"windows_aarch64_gnullvm-0.53.1\",\n build_file = Label(\"@crates//crates:BUILD.windows_aarch64_gnullvm-0.53.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_aarch64_msvc-0.48.5\",\n sha256 = \"dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_aarch64_msvc/0.48.5/download\"],\n strip_prefix = \"windows_aarch64_msvc-0.48.5\",\n build_file = Label(\"@crates//crates:BUILD.windows_aarch64_msvc-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_aarch64_msvc-0.52.6\",\n sha256 = \"09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_aarch64_msvc/0.52.6/download\"],\n strip_prefix = \"windows_aarch64_msvc-0.52.6\",\n build_file = Label(\"@crates//crates:BUILD.windows_aarch64_msvc-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_aarch64_msvc-0.53.1\",\n sha256 = \"b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_aarch64_msvc/0.53.1/download\"],\n strip_prefix = \"windows_aarch64_msvc-0.53.1\",\n build_file = Label(\"@crates//crates:BUILD.windows_aarch64_msvc-0.53.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_i686_gnu-0.48.5\",\n sha256 = \"a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_gnu/0.48.5/download\"],\n strip_prefix = \"windows_i686_gnu-0.48.5\",\n build_file = Label(\"@crates//crates:BUILD.windows_i686_gnu-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_i686_gnu-0.52.6\",\n sha256 = \"8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_gnu/0.52.6/download\"],\n strip_prefix = \"windows_i686_gnu-0.52.6\",\n build_file = Label(\"@crates//crates:BUILD.windows_i686_gnu-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_i686_gnu-0.53.1\",\n sha256 = \"960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_gnu/0.53.1/download\"],\n strip_prefix = \"windows_i686_gnu-0.53.1\",\n build_file = Label(\"@crates//crates:BUILD.windows_i686_gnu-0.53.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_i686_gnullvm-0.52.6\",\n sha256 = \"0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_gnullvm/0.52.6/download\"],\n strip_prefix = \"windows_i686_gnullvm-0.52.6\",\n build_file = Label(\"@crates//crates:BUILD.windows_i686_gnullvm-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_i686_gnullvm-0.53.1\",\n sha256 = \"fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_gnullvm/0.53.1/download\"],\n strip_prefix = \"windows_i686_gnullvm-0.53.1\",\n build_file = Label(\"@crates//crates:BUILD.windows_i686_gnullvm-0.53.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_i686_msvc-0.48.5\",\n sha256 = \"8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_msvc/0.48.5/download\"],\n strip_prefix = \"windows_i686_msvc-0.48.5\",\n build_file = Label(\"@crates//crates:BUILD.windows_i686_msvc-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_i686_msvc-0.52.6\",\n sha256 = \"240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_msvc/0.52.6/download\"],\n strip_prefix = \"windows_i686_msvc-0.52.6\",\n build_file = Label(\"@crates//crates:BUILD.windows_i686_msvc-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_i686_msvc-0.53.1\",\n sha256 = \"1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_msvc/0.53.1/download\"],\n strip_prefix = \"windows_i686_msvc-0.53.1\",\n build_file = Label(\"@crates//crates:BUILD.windows_i686_msvc-0.53.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_x86_64_gnu-0.48.5\",\n sha256 = \"53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_gnu/0.48.5/download\"],\n strip_prefix = \"windows_x86_64_gnu-0.48.5\",\n build_file = Label(\"@crates//crates:BUILD.windows_x86_64_gnu-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_x86_64_gnu-0.52.6\",\n sha256 = \"147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_gnu/0.52.6/download\"],\n strip_prefix = \"windows_x86_64_gnu-0.52.6\",\n build_file = Label(\"@crates//crates:BUILD.windows_x86_64_gnu-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_x86_64_gnu-0.53.1\",\n sha256 = \"9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_gnu/0.53.1/download\"],\n strip_prefix = \"windows_x86_64_gnu-0.53.1\",\n build_file = Label(\"@crates//crates:BUILD.windows_x86_64_gnu-0.53.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_x86_64_gnullvm-0.48.5\",\n sha256 = \"0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_gnullvm/0.48.5/download\"],\n strip_prefix = \"windows_x86_64_gnullvm-0.48.5\",\n build_file = Label(\"@crates//crates:BUILD.windows_x86_64_gnullvm-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_x86_64_gnullvm-0.52.6\",\n sha256 = \"24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_gnullvm/0.52.6/download\"],\n strip_prefix = \"windows_x86_64_gnullvm-0.52.6\",\n build_file = Label(\"@crates//crates:BUILD.windows_x86_64_gnullvm-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_x86_64_gnullvm-0.53.1\",\n sha256 = \"0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_gnullvm/0.53.1/download\"],\n strip_prefix = \"windows_x86_64_gnullvm-0.53.1\",\n build_file = Label(\"@crates//crates:BUILD.windows_x86_64_gnullvm-0.53.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_x86_64_msvc-0.48.5\",\n sha256 = \"ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_msvc/0.48.5/download\"],\n strip_prefix = \"windows_x86_64_msvc-0.48.5\",\n build_file = Label(\"@crates//crates:BUILD.windows_x86_64_msvc-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_x86_64_msvc-0.52.6\",\n sha256 = \"589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_msvc/0.52.6/download\"],\n strip_prefix = \"windows_x86_64_msvc-0.52.6\",\n build_file = Label(\"@crates//crates:BUILD.windows_x86_64_msvc-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_x86_64_msvc-0.53.1\",\n sha256 = \"d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_msvc/0.53.1/download\"],\n strip_prefix = \"windows_x86_64_msvc-0.53.1\",\n build_file = Label(\"@crates//crates:BUILD.windows_x86_64_msvc-0.53.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__winnow-0.7.13\",\n sha256 = \"21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/winnow/0.7.13/download\"],\n strip_prefix = \"winnow-0.7.13\",\n build_file = Label(\"@crates//crates:BUILD.winnow-0.7.13.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__winreg-0.50.0\",\n sha256 = \"524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/winreg/0.50.0/download\"],\n strip_prefix = \"winreg-0.50.0\",\n build_file = Label(\"@crates//crates:BUILD.winreg-0.50.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__wit-bindgen-0.46.0\",\n sha256 = \"f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wit-bindgen/0.46.0/download\"],\n strip_prefix = \"wit-bindgen-0.46.0\",\n build_file = Label(\"@crates//crates:BUILD.wit-bindgen-0.46.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__writeable-0.6.2\",\n sha256 = \"9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/writeable/0.6.2/download\"],\n strip_prefix = \"writeable-0.6.2\",\n build_file = Label(\"@crates//crates:BUILD.writeable-0.6.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__yoke-0.8.1\",\n sha256 = \"72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/yoke/0.8.1/download\"],\n strip_prefix = \"yoke-0.8.1\",\n build_file = Label(\"@crates//crates:BUILD.yoke-0.8.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__yoke-derive-0.8.1\",\n sha256 = \"b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/yoke-derive/0.8.1/download\"],\n strip_prefix = \"yoke-derive-0.8.1\",\n build_file = Label(\"@crates//crates:BUILD.yoke-derive-0.8.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zerocopy-0.8.30\",\n sha256 = \"4ea879c944afe8a2b25fef16bb4ba234f47c694565e97383b36f3a878219065c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerocopy/0.8.30/download\"],\n strip_prefix = \"zerocopy-0.8.30\",\n build_file = Label(\"@crates//crates:BUILD.zerocopy-0.8.30.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zerocopy-derive-0.8.30\",\n sha256 = \"cf955aa904d6040f70dc8e9384444cb1030aed272ba3cb09bbc4ab9e7c1f34f5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerocopy-derive/0.8.30/download\"],\n strip_prefix = \"zerocopy-derive-0.8.30\",\n build_file = Label(\"@crates//crates:BUILD.zerocopy-derive-0.8.30.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zerofrom-0.1.6\",\n sha256 = \"50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerofrom/0.1.6/download\"],\n strip_prefix = \"zerofrom-0.1.6\",\n build_file = Label(\"@crates//crates:BUILD.zerofrom-0.1.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zerofrom-derive-0.1.6\",\n sha256 = \"d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerofrom-derive/0.1.6/download\"],\n strip_prefix = \"zerofrom-derive-0.1.6\",\n build_file = Label(\"@crates//crates:BUILD.zerofrom-derive-0.1.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zerotrie-0.2.3\",\n sha256 = \"2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerotrie/0.2.3/download\"],\n strip_prefix = \"zerotrie-0.2.3\",\n build_file = Label(\"@crates//crates:BUILD.zerotrie-0.2.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zerovec-0.11.5\",\n sha256 = \"6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerovec/0.11.5/download\"],\n strip_prefix = \"zerovec-0.11.5\",\n build_file = Label(\"@crates//crates:BUILD.zerovec-0.11.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zerovec-derive-0.11.2\",\n sha256 = \"eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerovec-derive/0.11.2/download\"],\n strip_prefix = \"zerovec-derive-0.11.2\",\n build_file = Label(\"@crates//crates:BUILD.zerovec-derive-0.11.2.bazel\"),\n )\n\n return [\n struct(repo=\"crates__askama-0.14.0\", is_dev_dep = False),\n struct(repo=\"crates__axum-0.7.9\", is_dev_dep = False),\n struct(repo=\"crates__clap-4.5.53\", is_dev_dep = False),\n struct(repo=\"crates__prost-0.13.5\", is_dev_dep = False),\n struct(repo=\"crates__prost-build-0.13.5\", is_dev_dep = False),\n struct(repo=\"crates__prost-types-0.13.5\", is_dev_dep = False),\n struct(repo=\"crates__regex-1.12.2\", is_dev_dep = False),\n struct(repo=\"crates__reqwest-0.11.27\", is_dev_dep = False),\n struct(repo=\"crates__rusqlite-0.31.0\", is_dev_dep = False),\n struct(repo=\"crates__schemars-0.8.22\", is_dev_dep = False),\n struct(repo=\"crates__serde-1.0.228\", is_dev_dep = False),\n struct(repo=\"crates__serde_json-1.0.145\", is_dev_dep = False),\n struct(repo=\"crates__sha2-0.10.9\", is_dev_dep = False),\n struct(repo=\"crates__tempfile-3.23.0\", is_dev_dep = False),\n struct(repo=\"crates__tokio-1.48.0\", is_dev_dep = False),\n struct(repo=\"crates__toml-0.8.23\", is_dev_dep = False),\n struct(repo=\"crates__tower-0.4.13\", is_dev_dep = False),\n struct(repo=\"crates__tower-http-0.5.2\", is_dev_dep = False),\n struct(repo=\"crates__tracing-0.1.41\", is_dev_dep = False),\n struct(repo=\"crates__tracing-subscriber-0.3.20\", is_dev_dep = False),\n struct(repo=\"crates__urlencoding-2.1.3\", is_dev_dep = False),\n struct(repo=\"crates__uuid-1.18.1\", is_dev_dep = False),\n ]\n" + "defs.bzl": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\"\"\"\n# `crates_repository` API\n\n- [aliases](#aliases)\n- [crate_deps](#crate_deps)\n- [all_crate_deps](#all_crate_deps)\n- [crate_repositories](#crate_repositories)\n\n\"\"\"\n\nload(\"@bazel_tools//tools/build_defs/repo:git.bzl\", \"new_git_repository\")\nload(\"@bazel_tools//tools/build_defs/repo:http.bzl\", \"http_archive\")\nload(\"@bazel_tools//tools/build_defs/repo:utils.bzl\", \"maybe\")\nload(\"@bazel_skylib//lib:selects.bzl\", \"selects\")\nload(\"@rules_rust//crate_universe/private:local_crate_mirror.bzl\", \"local_crate_mirror\")\n\n###############################################################################\n# MACROS API\n###############################################################################\n\n# An identifier that represent common dependencies (unconditional).\n_COMMON_CONDITION = \"\"\n\ndef _flatten_dependency_maps(all_dependency_maps):\n \"\"\"Flatten a list of dependency maps into one dictionary.\n\n Dependency maps have the following structure:\n\n ```python\n DEPENDENCIES_MAP = {\n # The first key in the map is a Bazel package\n # name of the workspace this file is defined in.\n \"workspace_member_package\": {\n\n # Not all dependencies are supported for all platforms.\n # the condition key is the condition required to be true\n # on the host platform.\n \"condition\": {\n\n # An alias to a crate target. # The label of the crate target the\n # Aliases are only crate names. # package name refers to.\n \"package_name\": \"@full//:label\",\n }\n }\n }\n ```\n\n Args:\n all_dependency_maps (list): A list of dicts as described above\n\n Returns:\n dict: A dictionary as described above\n \"\"\"\n dependencies = {}\n\n for workspace_deps_map in all_dependency_maps:\n for pkg_name, conditional_deps_map in workspace_deps_map.items():\n if pkg_name not in dependencies:\n non_frozen_map = dict()\n for key, values in conditional_deps_map.items():\n non_frozen_map.update({key: dict(values.items())})\n dependencies.setdefault(pkg_name, non_frozen_map)\n continue\n\n for condition, deps_map in conditional_deps_map.items():\n # If the condition has not been recorded, do so and continue\n if condition not in dependencies[pkg_name]:\n dependencies[pkg_name].setdefault(condition, dict(deps_map.items()))\n continue\n\n # Alert on any miss-matched dependencies\n inconsistent_entries = []\n for crate_name, crate_label in deps_map.items():\n existing = dependencies[pkg_name][condition].get(crate_name)\n if existing and existing != crate_label:\n inconsistent_entries.append((crate_name, existing, crate_label))\n dependencies[pkg_name][condition].update({crate_name: crate_label})\n\n return dependencies\n\ndef crate_deps(deps, package_name = None):\n \"\"\"Finds the fully qualified label of the requested crates for the package where this macro is called.\n\n Args:\n deps (list): The desired list of crate targets.\n package_name (str, optional): The package name of the set of dependencies to look up.\n Defaults to `native.package_name()`.\n\n Returns:\n list: A list of labels to generated rust targets (str)\n \"\"\"\n\n if not deps:\n return []\n\n if package_name == None:\n package_name = native.package_name()\n\n # Join both sets of dependencies\n dependencies = _flatten_dependency_maps([\n _NORMAL_DEPENDENCIES,\n _NORMAL_DEV_DEPENDENCIES,\n _PROC_MACRO_DEPENDENCIES,\n _PROC_MACRO_DEV_DEPENDENCIES,\n _BUILD_DEPENDENCIES,\n _BUILD_PROC_MACRO_DEPENDENCIES,\n ]).pop(package_name, {})\n\n # Combine all conditional packages so we can easily index over a flat list\n # TODO: Perhaps this should actually return select statements and maintain\n # the conditionals of the dependencies\n flat_deps = {}\n for deps_set in dependencies.values():\n for crate_name, crate_label in deps_set.items():\n flat_deps.update({crate_name: crate_label})\n\n missing_crates = []\n crate_targets = []\n for crate_target in deps:\n if crate_target not in flat_deps:\n missing_crates.append(crate_target)\n else:\n crate_targets.append(flat_deps[crate_target])\n\n if missing_crates:\n fail(\"Could not find crates `{}` among dependencies of `{}`. Available dependencies were `{}`\".format(\n missing_crates,\n package_name,\n dependencies,\n ))\n\n return crate_targets\n\ndef all_crate_deps(\n normal = False, \n normal_dev = False, \n proc_macro = False, \n proc_macro_dev = False,\n build = False,\n build_proc_macro = False,\n package_name = None):\n \"\"\"Finds the fully qualified label of all requested direct crate dependencies \\\n for the package where this macro is called.\n\n If no parameters are set, all normal dependencies are returned. Setting any one flag will\n otherwise impact the contents of the returned list.\n\n Args:\n normal (bool, optional): If True, normal dependencies are included in the\n output list.\n normal_dev (bool, optional): If True, normal dev dependencies will be\n included in the output list..\n proc_macro (bool, optional): If True, proc_macro dependencies are included\n in the output list.\n proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are\n included in the output list.\n build (bool, optional): If True, build dependencies are included\n in the output list.\n build_proc_macro (bool, optional): If True, build proc_macro dependencies are\n included in the output list.\n package_name (str, optional): The package name of the set of dependencies to look up.\n Defaults to `native.package_name()` when unset.\n\n Returns:\n list: A list of labels to generated rust targets (str)\n \"\"\"\n\n if package_name == None:\n package_name = native.package_name()\n\n # Determine the relevant maps to use\n all_dependency_maps = []\n if normal:\n all_dependency_maps.append(_NORMAL_DEPENDENCIES)\n if normal_dev:\n all_dependency_maps.append(_NORMAL_DEV_DEPENDENCIES)\n if proc_macro:\n all_dependency_maps.append(_PROC_MACRO_DEPENDENCIES)\n if proc_macro_dev:\n all_dependency_maps.append(_PROC_MACRO_DEV_DEPENDENCIES)\n if build:\n all_dependency_maps.append(_BUILD_DEPENDENCIES)\n if build_proc_macro:\n all_dependency_maps.append(_BUILD_PROC_MACRO_DEPENDENCIES)\n\n # Default to always using normal dependencies\n if not all_dependency_maps:\n all_dependency_maps.append(_NORMAL_DEPENDENCIES)\n\n dependencies = _flatten_dependency_maps(all_dependency_maps).pop(package_name, None)\n\n if not dependencies:\n if dependencies == None:\n fail(\"Tried to get all_crate_deps for package \" + package_name + \" but that package had no Cargo.toml file\")\n else:\n return []\n\n crate_deps = list(dependencies.pop(_COMMON_CONDITION, {}).values())\n for condition, deps in dependencies.items():\n crate_deps += selects.with_or({\n tuple(_CONDITIONS[condition]): deps.values(),\n \"//conditions:default\": [],\n })\n\n return crate_deps\n\ndef aliases(\n normal = False,\n normal_dev = False,\n proc_macro = False,\n proc_macro_dev = False,\n build = False,\n build_proc_macro = False,\n package_name = None):\n \"\"\"Produces a map of Crate alias names to their original label\n\n If no dependency kinds are specified, `normal` and `proc_macro` are used by default.\n Setting any one flag will otherwise determine the contents of the returned dict.\n\n Args:\n normal (bool, optional): If True, normal dependencies are included in the\n output list.\n normal_dev (bool, optional): If True, normal dev dependencies will be\n included in the output list..\n proc_macro (bool, optional): If True, proc_macro dependencies are included\n in the output list.\n proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are\n included in the output list.\n build (bool, optional): If True, build dependencies are included\n in the output list.\n build_proc_macro (bool, optional): If True, build proc_macro dependencies are\n included in the output list.\n package_name (str, optional): The package name of the set of dependencies to look up.\n Defaults to `native.package_name()` when unset.\n\n Returns:\n dict: The aliases of all associated packages\n \"\"\"\n if package_name == None:\n package_name = native.package_name()\n\n # Determine the relevant maps to use\n all_aliases_maps = []\n if normal:\n all_aliases_maps.append(_NORMAL_ALIASES)\n if normal_dev:\n all_aliases_maps.append(_NORMAL_DEV_ALIASES)\n if proc_macro:\n all_aliases_maps.append(_PROC_MACRO_ALIASES)\n if proc_macro_dev:\n all_aliases_maps.append(_PROC_MACRO_DEV_ALIASES)\n if build:\n all_aliases_maps.append(_BUILD_ALIASES)\n if build_proc_macro:\n all_aliases_maps.append(_BUILD_PROC_MACRO_ALIASES)\n\n # Default to always using normal aliases\n if not all_aliases_maps:\n all_aliases_maps.append(_NORMAL_ALIASES)\n all_aliases_maps.append(_PROC_MACRO_ALIASES)\n\n aliases = _flatten_dependency_maps(all_aliases_maps).pop(package_name, None)\n\n if not aliases:\n return dict()\n\n common_items = aliases.pop(_COMMON_CONDITION, {}).items()\n\n # If there are only common items in the dictionary, immediately return them\n if not len(aliases.keys()) == 1:\n return dict(common_items)\n\n # Build a single select statement where each conditional has accounted for the\n # common set of aliases.\n crate_aliases = {\"//conditions:default\": dict(common_items)}\n for condition, deps in aliases.items():\n condition_triples = _CONDITIONS[condition]\n for triple in condition_triples:\n if triple in crate_aliases:\n crate_aliases[triple].update(deps)\n else:\n crate_aliases.update({triple: dict(deps.items() + common_items)})\n\n return select(crate_aliases)\n\n###############################################################################\n# WORKSPACE MEMBER DEPS AND ALIASES\n###############################################################################\n\n_NORMAL_DEPENDENCIES = {\n \"\": {\n _COMMON_CONDITION: {\n \"askama\": Label(\"@crates//:askama-0.14.0\"),\n \"axum\": Label(\"@crates//:axum-0.7.9\"),\n \"clap\": Label(\"@crates//:clap-4.5.53\"),\n \"fs2\": Label(\"@crates//:fs2-0.4.3\"),\n \"libc\": Label(\"@crates//:libc-0.2.177\"),\n \"prost\": Label(\"@crates//:prost-0.13.5\"),\n \"prost-build\": Label(\"@crates//:prost-build-0.13.5\"),\n \"prost-types\": Label(\"@crates//:prost-types-0.13.5\"),\n \"regex\": Label(\"@crates//:regex-1.12.2\"),\n \"reqwest\": Label(\"@crates//:reqwest-0.11.27\"),\n \"rusqlite\": Label(\"@crates//:rusqlite-0.31.0\"),\n \"schemars\": Label(\"@crates//:schemars-0.8.22\"),\n \"serde\": Label(\"@crates//:serde-1.0.228\"),\n \"serde_json\": Label(\"@crates//:serde_json-1.0.145\"),\n \"sha2\": Label(\"@crates//:sha2-0.10.9\"),\n \"tempfile\": Label(\"@crates//:tempfile-3.23.0\"),\n \"tokio\": Label(\"@crates//:tokio-1.48.0\"),\n \"toml\": Label(\"@crates//:toml-0.8.23\"),\n \"tower\": Label(\"@crates//:tower-0.4.13\"),\n \"tower-http\": Label(\"@crates//:tower-http-0.5.2\"),\n \"tracing\": Label(\"@crates//:tracing-0.1.41\"),\n \"tracing-subscriber\": Label(\"@crates//:tracing-subscriber-0.3.20\"),\n \"urlencoding\": Label(\"@crates//:urlencoding-2.1.3\"),\n \"uuid\": Label(\"@crates//:uuid-1.18.1\"),\n },\n },\n}\n\n\n_NORMAL_ALIASES = {\n \"\": {\n _COMMON_CONDITION: {\n },\n },\n}\n\n\n_NORMAL_DEV_DEPENDENCIES = {\n \"\": {\n },\n}\n\n\n_NORMAL_DEV_ALIASES = {\n \"\": {\n },\n}\n\n\n_PROC_MACRO_DEPENDENCIES = {\n \"\": {\n },\n}\n\n\n_PROC_MACRO_ALIASES = {\n \"\": {\n },\n}\n\n\n_PROC_MACRO_DEV_DEPENDENCIES = {\n \"\": {\n },\n}\n\n\n_PROC_MACRO_DEV_ALIASES = {\n \"\": {\n },\n}\n\n\n_BUILD_DEPENDENCIES = {\n \"\": {\n },\n}\n\n\n_BUILD_ALIASES = {\n \"\": {\n },\n}\n\n\n_BUILD_PROC_MACRO_DEPENDENCIES = {\n \"\": {\n },\n}\n\n\n_BUILD_PROC_MACRO_ALIASES = {\n \"\": {\n },\n}\n\n\n_CONDITIONS = {\n \"aarch64-apple-darwin\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n \"aarch64-linux-android\": [],\n \"aarch64-pc-windows-gnullvm\": [],\n \"aarch64-unknown-linux-gnu\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\"],\n \"cfg(all(any(target_arch = \\\"x86_64\\\", target_arch = \\\"arm64ec\\\"), target_env = \\\"msvc\\\", not(windows_raw_dylib)))\": [\"@rules_rust//rust/platform:x86_64-pc-windows-msvc\"],\n \"cfg(all(any(target_os = \\\"linux\\\"), any(rustix_use_libc, miri, not(all(target_os = \\\"linux\\\", any(target_endian = \\\"little\\\", any(target_arch = \\\"s390x\\\", target_arch = \\\"powerpc\\\")), any(target_arch = \\\"arm\\\", all(target_arch = \\\"aarch64\\\", target_pointer_width = \\\"64\\\"), target_arch = \\\"riscv64\\\", all(rustix_use_experimental_asm, target_arch = \\\"powerpc\\\"), all(rustix_use_experimental_asm, target_arch = \\\"powerpc64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"s390x\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips32r6\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64r6\\\"), target_arch = \\\"x86\\\", all(target_arch = \\\"x86_64\\\", target_pointer_width = \\\"64\\\")))))))\": [],\n \"cfg(all(any(target_os = \\\"linux\\\", target_os = \\\"android\\\"), not(any(all(target_os = \\\"linux\\\", target_env = \\\"\\\"), getrandom_backend = \\\"custom\\\", getrandom_backend = \\\"linux_raw\\\", getrandom_backend = \\\"rdrand\\\", getrandom_backend = \\\"rndr\\\"))))\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\"],\n \"cfg(all(not(rustix_use_libc), not(miri), target_os = \\\"linux\\\", any(target_endian = \\\"little\\\", any(target_arch = \\\"s390x\\\", target_arch = \\\"powerpc\\\")), any(target_arch = \\\"arm\\\", all(target_arch = \\\"aarch64\\\", target_pointer_width = \\\"64\\\"), target_arch = \\\"riscv64\\\", all(rustix_use_experimental_asm, target_arch = \\\"powerpc\\\"), all(rustix_use_experimental_asm, target_arch = \\\"powerpc64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"s390x\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips32r6\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64r6\\\"), target_arch = \\\"x86\\\", all(target_arch = \\\"x86_64\\\", target_pointer_width = \\\"64\\\"))))\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\"],\n \"cfg(all(not(windows), any(rustix_use_libc, miri, not(all(target_os = \\\"linux\\\", any(target_endian = \\\"little\\\", any(target_arch = \\\"s390x\\\", target_arch = \\\"powerpc\\\")), any(target_arch = \\\"arm\\\", all(target_arch = \\\"aarch64\\\", target_pointer_width = \\\"64\\\"), target_arch = \\\"riscv64\\\", all(rustix_use_experimental_asm, target_arch = \\\"powerpc\\\"), all(rustix_use_experimental_asm, target_arch = \\\"powerpc64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"s390x\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips32r6\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64r6\\\"), target_arch = \\\"x86\\\", all(target_arch = \\\"x86_64\\\", target_pointer_width = \\\"64\\\")))))))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:wasm32-unknown-unknown\",\"@rules_rust//rust/platform:wasm32-wasip1\"],\n \"cfg(all(target_arch = \\\"aarch64\\\", target_env = \\\"msvc\\\", not(windows_raw_dylib)))\": [],\n \"cfg(all(target_arch = \\\"aarch64\\\", target_os = \\\"linux\\\"))\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\"],\n \"cfg(all(target_arch = \\\"aarch64\\\", target_vendor = \\\"apple\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n \"cfg(all(target_arch = \\\"loongarch64\\\", target_os = \\\"linux\\\"))\": [],\n \"cfg(all(target_arch = \\\"wasm32\\\", target_os = \\\"wasi\\\", target_env = \\\"p2\\\"))\": [],\n \"cfg(all(target_arch = \\\"x86\\\", target_env = \\\"gnu\\\", not(target_abi = \\\"llvm\\\"), not(windows_raw_dylib)))\": [],\n \"cfg(all(target_arch = \\\"x86\\\", target_env = \\\"gnu\\\", not(windows_raw_dylib)))\": [],\n \"cfg(all(target_arch = \\\"x86\\\", target_env = \\\"msvc\\\", not(windows_raw_dylib)))\": [],\n \"cfg(all(target_arch = \\\"x86_64\\\", target_env = \\\"gnu\\\", not(target_abi = \\\"llvm\\\"), not(windows_raw_dylib)))\": [\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\"],\n \"cfg(all(target_arch = \\\"x86_64\\\", target_env = \\\"msvc\\\", not(windows_raw_dylib)))\": [\"@rules_rust//rust/platform:x86_64-pc-windows-msvc\"],\n \"cfg(all(target_os = \\\"uefi\\\", getrandom_backend = \\\"efi_rng\\\"))\": [],\n \"cfg(any())\": [],\n \"cfg(any(target_arch = \\\"aarch64\\\", target_arch = \\\"x86_64\\\", target_arch = \\\"x86\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-pc-windows-msvc\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\"],\n \"cfg(any(target_os = \\\"dragonfly\\\", target_os = \\\"freebsd\\\", target_os = \\\"hurd\\\", target_os = \\\"illumos\\\", target_os = \\\"cygwin\\\", all(target_os = \\\"horizon\\\", target_arch = \\\"arm\\\")))\": [],\n \"cfg(any(target_os = \\\"haiku\\\", target_os = \\\"redox\\\", target_os = \\\"nto\\\", target_os = \\\"aix\\\"))\": [],\n \"cfg(any(target_os = \\\"ios\\\", target_os = \\\"visionos\\\", target_os = \\\"watchos\\\", target_os = \\\"tvos\\\"))\": [],\n \"cfg(any(target_os = \\\"macos\\\", target_os = \\\"openbsd\\\", target_os = \\\"vita\\\", target_os = \\\"emscripten\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n \"cfg(any(unix, target_os = \\\"wasi\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:wasm32-wasip1\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\"],\n \"cfg(not(all(target_arch = \\\"arm\\\", target_os = \\\"none\\\")))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:wasm32-unknown-unknown\",\"@rules_rust//rust/platform:wasm32-wasip1\",\"@rules_rust//rust/platform:x86_64-pc-windows-msvc\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\"],\n \"cfg(not(any(target_os = \\\"windows\\\", target_vendor = \\\"apple\\\")))\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:wasm32-unknown-unknown\",\"@rules_rust//rust/platform:wasm32-wasip1\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\"],\n \"cfg(not(target_arch = \\\"wasm32\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-pc-windows-msvc\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\"],\n \"cfg(target_arch = \\\"wasm32\\\")\": [\"@rules_rust//rust/platform:wasm32-unknown-unknown\",\"@rules_rust//rust/platform:wasm32-wasip1\"],\n \"cfg(target_feature = \\\"atomics\\\")\": [],\n \"cfg(target_os = \\\"hermit\\\")\": [],\n \"cfg(target_os = \\\"macos\\\")\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n \"cfg(target_os = \\\"netbsd\\\")\": [],\n \"cfg(target_os = \\\"redox\\\")\": [],\n \"cfg(target_os = \\\"solaris\\\")\": [],\n \"cfg(target_os = \\\"vxworks\\\")\": [],\n \"cfg(target_os = \\\"wasi\\\")\": [\"@rules_rust//rust/platform:wasm32-wasip1\"],\n \"cfg(target_os = \\\"windows\\\")\": [\"@rules_rust//rust/platform:x86_64-pc-windows-msvc\"],\n \"cfg(target_vendor = \\\"apple\\\")\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n \"cfg(unix)\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\"],\n \"cfg(windows)\": [\"@rules_rust//rust/platform:x86_64-pc-windows-msvc\"],\n \"cfg(windows_raw_dylib)\": [],\n \"i686-pc-windows-gnu\": [],\n \"i686-pc-windows-gnullvm\": [],\n \"wasm32-unknown-unknown\": [\"@rules_rust//rust/platform:wasm32-unknown-unknown\"],\n \"wasm32-wasip1\": [\"@rules_rust//rust/platform:wasm32-wasip1\"],\n \"x86_64-pc-windows-gnu\": [],\n \"x86_64-pc-windows-gnullvm\": [],\n \"x86_64-pc-windows-msvc\": [\"@rules_rust//rust/platform:x86_64-pc-windows-msvc\"],\n \"x86_64-unknown-linux-gnu\": [\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\"],\n \"x86_64-unknown-nixos-gnu\": [\"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\"],\n}\n\n###############################################################################\n\ndef crate_repositories():\n \"\"\"A macro for defining repositories for all generated crates.\n\n Returns:\n A list of repos visible to the module through the module extension.\n \"\"\"\n maybe(\n http_archive,\n name = \"crates__ahash-0.8.12\",\n sha256 = \"5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ahash/0.8.12/download\"],\n strip_prefix = \"ahash-0.8.12\",\n build_file = Label(\"@crates//crates:BUILD.ahash-0.8.12.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__aho-corasick-1.1.4\",\n sha256 = \"ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/aho-corasick/1.1.4/download\"],\n strip_prefix = \"aho-corasick-1.1.4\",\n build_file = Label(\"@crates//crates:BUILD.aho-corasick-1.1.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__anstream-0.6.21\",\n sha256 = \"43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstream/0.6.21/download\"],\n strip_prefix = \"anstream-0.6.21\",\n build_file = Label(\"@crates//crates:BUILD.anstream-0.6.21.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__anstyle-1.0.13\",\n sha256 = \"5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstyle/1.0.13/download\"],\n strip_prefix = \"anstyle-1.0.13\",\n build_file = Label(\"@crates//crates:BUILD.anstyle-1.0.13.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__anstyle-parse-0.2.7\",\n sha256 = \"4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstyle-parse/0.2.7/download\"],\n strip_prefix = \"anstyle-parse-0.2.7\",\n build_file = Label(\"@crates//crates:BUILD.anstyle-parse-0.2.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__anstyle-query-1.1.5\",\n sha256 = \"40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstyle-query/1.1.5/download\"],\n strip_prefix = \"anstyle-query-1.1.5\",\n build_file = Label(\"@crates//crates:BUILD.anstyle-query-1.1.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__anstyle-wincon-3.0.11\",\n sha256 = \"291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstyle-wincon/3.0.11/download\"],\n strip_prefix = \"anstyle-wincon-3.0.11\",\n build_file = Label(\"@crates//crates:BUILD.anstyle-wincon-3.0.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__anyhow-1.0.100\",\n sha256 = \"a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anyhow/1.0.100/download\"],\n strip_prefix = \"anyhow-1.0.100\",\n build_file = Label(\"@crates//crates:BUILD.anyhow-1.0.100.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__askama-0.14.0\",\n sha256 = \"f75363874b771be265f4ffe307ca705ef6f3baa19011c149da8674a87f1b75c4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/askama/0.14.0/download\"],\n strip_prefix = \"askama-0.14.0\",\n build_file = Label(\"@crates//crates:BUILD.askama-0.14.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__askama_derive-0.14.0\",\n sha256 = \"129397200fe83088e8a68407a8e2b1f826cf0086b21ccdb866a722c8bcd3a94f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/askama_derive/0.14.0/download\"],\n strip_prefix = \"askama_derive-0.14.0\",\n build_file = Label(\"@crates//crates:BUILD.askama_derive-0.14.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__askama_parser-0.14.0\",\n sha256 = \"d6ab5630b3d5eaf232620167977f95eb51f3432fc76852328774afbd242d4358\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/askama_parser/0.14.0/download\"],\n strip_prefix = \"askama_parser-0.14.0\",\n build_file = Label(\"@crates//crates:BUILD.askama_parser-0.14.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__async-trait-0.1.89\",\n sha256 = \"9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/async-trait/0.1.89/download\"],\n strip_prefix = \"async-trait-0.1.89\",\n build_file = Label(\"@crates//crates:BUILD.async-trait-0.1.89.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__atomic-waker-1.1.2\",\n sha256 = \"1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/atomic-waker/1.1.2/download\"],\n strip_prefix = \"atomic-waker-1.1.2\",\n build_file = Label(\"@crates//crates:BUILD.atomic-waker-1.1.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__axum-0.7.9\",\n sha256 = \"edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/axum/0.7.9/download\"],\n strip_prefix = \"axum-0.7.9\",\n build_file = Label(\"@crates//crates:BUILD.axum-0.7.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__axum-core-0.4.5\",\n sha256 = \"09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/axum-core/0.4.5/download\"],\n strip_prefix = \"axum-core-0.4.5\",\n build_file = Label(\"@crates//crates:BUILD.axum-core-0.4.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__base64-0.21.7\",\n sha256 = \"9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/base64/0.21.7/download\"],\n strip_prefix = \"base64-0.21.7\",\n build_file = Label(\"@crates//crates:BUILD.base64-0.21.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__basic-toml-0.1.10\",\n sha256 = \"ba62675e8242a4c4e806d12f11d136e626e6c8361d6b829310732241652a178a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/basic-toml/0.1.10/download\"],\n strip_prefix = \"basic-toml-0.1.10\",\n build_file = Label(\"@crates//crates:BUILD.basic-toml-0.1.10.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__bitflags-1.3.2\",\n sha256 = \"bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bitflags/1.3.2/download\"],\n strip_prefix = \"bitflags-1.3.2\",\n build_file = Label(\"@crates//crates:BUILD.bitflags-1.3.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__bitflags-2.10.0\",\n sha256 = \"812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bitflags/2.10.0/download\"],\n strip_prefix = \"bitflags-2.10.0\",\n build_file = Label(\"@crates//crates:BUILD.bitflags-2.10.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__block-buffer-0.10.4\",\n sha256 = \"3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/block-buffer/0.10.4/download\"],\n strip_prefix = \"block-buffer-0.10.4\",\n build_file = Label(\"@crates//crates:BUILD.block-buffer-0.10.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__bumpalo-3.19.0\",\n sha256 = \"46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bumpalo/3.19.0/download\"],\n strip_prefix = \"bumpalo-3.19.0\",\n build_file = Label(\"@crates//crates:BUILD.bumpalo-3.19.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__bytes-1.11.0\",\n sha256 = \"b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bytes/1.11.0/download\"],\n strip_prefix = \"bytes-1.11.0\",\n build_file = Label(\"@crates//crates:BUILD.bytes-1.11.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__cc-1.2.47\",\n sha256 = \"cd405d82c84ff7f35739f175f67d8b9fb7687a0e84ccdc78bd3568839827cf07\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cc/1.2.47/download\"],\n strip_prefix = \"cc-1.2.47\",\n build_file = Label(\"@crates//crates:BUILD.cc-1.2.47.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__cfg-if-1.0.4\",\n sha256 = \"9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cfg-if/1.0.4/download\"],\n strip_prefix = \"cfg-if-1.0.4\",\n build_file = Label(\"@crates//crates:BUILD.cfg-if-1.0.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__clap-4.5.53\",\n sha256 = \"c9e340e012a1bf4935f5282ed1436d1489548e8f72308207ea5df0e23d2d03f8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap/4.5.53/download\"],\n strip_prefix = \"clap-4.5.53\",\n build_file = Label(\"@crates//crates:BUILD.clap-4.5.53.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__clap_builder-4.5.53\",\n sha256 = \"d76b5d13eaa18c901fd2f7fca939fefe3a0727a953561fefdf3b2922b8569d00\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap_builder/4.5.53/download\"],\n strip_prefix = \"clap_builder-4.5.53\",\n build_file = Label(\"@crates//crates:BUILD.clap_builder-4.5.53.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__clap_derive-4.5.49\",\n sha256 = \"2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap_derive/4.5.49/download\"],\n strip_prefix = \"clap_derive-4.5.49\",\n build_file = Label(\"@crates//crates:BUILD.clap_derive-4.5.49.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__clap_lex-0.7.6\",\n sha256 = \"a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap_lex/0.7.6/download\"],\n strip_prefix = \"clap_lex-0.7.6\",\n build_file = Label(\"@crates//crates:BUILD.clap_lex-0.7.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__colorchoice-1.0.4\",\n sha256 = \"b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/colorchoice/1.0.4/download\"],\n strip_prefix = \"colorchoice-1.0.4\",\n build_file = Label(\"@crates//crates:BUILD.colorchoice-1.0.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__core-foundation-0.9.4\",\n sha256 = \"91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/core-foundation/0.9.4/download\"],\n strip_prefix = \"core-foundation-0.9.4\",\n build_file = Label(\"@crates//crates:BUILD.core-foundation-0.9.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__core-foundation-sys-0.8.7\",\n sha256 = \"773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/core-foundation-sys/0.8.7/download\"],\n strip_prefix = \"core-foundation-sys-0.8.7\",\n build_file = Label(\"@crates//crates:BUILD.core-foundation-sys-0.8.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__cpufeatures-0.2.17\",\n sha256 = \"59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cpufeatures/0.2.17/download\"],\n strip_prefix = \"cpufeatures-0.2.17\",\n build_file = Label(\"@crates//crates:BUILD.cpufeatures-0.2.17.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__crypto-common-0.1.7\",\n sha256 = \"78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/crypto-common/0.1.7/download\"],\n strip_prefix = \"crypto-common-0.1.7\",\n build_file = Label(\"@crates//crates:BUILD.crypto-common-0.1.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__digest-0.10.7\",\n sha256 = \"9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/digest/0.10.7/download\"],\n strip_prefix = \"digest-0.10.7\",\n build_file = Label(\"@crates//crates:BUILD.digest-0.10.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__displaydoc-0.2.5\",\n sha256 = \"97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/displaydoc/0.2.5/download\"],\n strip_prefix = \"displaydoc-0.2.5\",\n build_file = Label(\"@crates//crates:BUILD.displaydoc-0.2.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__dyn-clone-1.0.20\",\n sha256 = \"d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/dyn-clone/1.0.20/download\"],\n strip_prefix = \"dyn-clone-1.0.20\",\n build_file = Label(\"@crates//crates:BUILD.dyn-clone-1.0.20.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__either-1.15.0\",\n sha256 = \"48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/either/1.15.0/download\"],\n strip_prefix = \"either-1.15.0\",\n build_file = Label(\"@crates//crates:BUILD.either-1.15.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__encoding_rs-0.8.35\",\n sha256 = \"75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/encoding_rs/0.8.35/download\"],\n strip_prefix = \"encoding_rs-0.8.35\",\n build_file = Label(\"@crates//crates:BUILD.encoding_rs-0.8.35.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__equivalent-1.0.2\",\n sha256 = \"877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/equivalent/1.0.2/download\"],\n strip_prefix = \"equivalent-1.0.2\",\n build_file = Label(\"@crates//crates:BUILD.equivalent-1.0.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__errno-0.3.14\",\n sha256 = \"39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/errno/0.3.14/download\"],\n strip_prefix = \"errno-0.3.14\",\n build_file = Label(\"@crates//crates:BUILD.errno-0.3.14.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__fallible-iterator-0.3.0\",\n sha256 = \"2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/fallible-iterator/0.3.0/download\"],\n strip_prefix = \"fallible-iterator-0.3.0\",\n build_file = Label(\"@crates//crates:BUILD.fallible-iterator-0.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__fallible-streaming-iterator-0.1.9\",\n sha256 = \"7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/fallible-streaming-iterator/0.1.9/download\"],\n strip_prefix = \"fallible-streaming-iterator-0.1.9\",\n build_file = Label(\"@crates//crates:BUILD.fallible-streaming-iterator-0.1.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__fastrand-2.3.0\",\n sha256 = \"37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/fastrand/2.3.0/download\"],\n strip_prefix = \"fastrand-2.3.0\",\n build_file = Label(\"@crates//crates:BUILD.fastrand-2.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__find-msvc-tools-0.1.5\",\n sha256 = \"3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/find-msvc-tools/0.1.5/download\"],\n strip_prefix = \"find-msvc-tools-0.1.5\",\n build_file = Label(\"@crates//crates:BUILD.find-msvc-tools-0.1.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__fixedbitset-0.5.7\",\n sha256 = \"1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/fixedbitset/0.5.7/download\"],\n strip_prefix = \"fixedbitset-0.5.7\",\n build_file = Label(\"@crates//crates:BUILD.fixedbitset-0.5.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__fnv-1.0.7\",\n sha256 = \"3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/fnv/1.0.7/download\"],\n strip_prefix = \"fnv-1.0.7\",\n build_file = Label(\"@crates//crates:BUILD.fnv-1.0.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__foreign-types-0.3.2\",\n sha256 = \"f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/foreign-types/0.3.2/download\"],\n strip_prefix = \"foreign-types-0.3.2\",\n build_file = Label(\"@crates//crates:BUILD.foreign-types-0.3.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__foreign-types-shared-0.1.1\",\n sha256 = \"00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/foreign-types-shared/0.1.1/download\"],\n strip_prefix = \"foreign-types-shared-0.1.1\",\n build_file = Label(\"@crates//crates:BUILD.foreign-types-shared-0.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__form_urlencoded-1.2.2\",\n sha256 = \"cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/form_urlencoded/1.2.2/download\"],\n strip_prefix = \"form_urlencoded-1.2.2\",\n build_file = Label(\"@crates//crates:BUILD.form_urlencoded-1.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__fs2-0.4.3\",\n sha256 = \"9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/fs2/0.4.3/download\"],\n strip_prefix = \"fs2-0.4.3\",\n build_file = Label(\"@crates//crates:BUILD.fs2-0.4.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__futures-channel-0.3.31\",\n sha256 = \"2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-channel/0.3.31/download\"],\n strip_prefix = \"futures-channel-0.3.31\",\n build_file = Label(\"@crates//crates:BUILD.futures-channel-0.3.31.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__futures-core-0.3.31\",\n sha256 = \"05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-core/0.3.31/download\"],\n strip_prefix = \"futures-core-0.3.31\",\n build_file = Label(\"@crates//crates:BUILD.futures-core-0.3.31.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__futures-io-0.3.31\",\n sha256 = \"9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-io/0.3.31/download\"],\n strip_prefix = \"futures-io-0.3.31\",\n build_file = Label(\"@crates//crates:BUILD.futures-io-0.3.31.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__futures-sink-0.3.31\",\n sha256 = \"e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-sink/0.3.31/download\"],\n strip_prefix = \"futures-sink-0.3.31\",\n build_file = Label(\"@crates//crates:BUILD.futures-sink-0.3.31.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__futures-task-0.3.31\",\n sha256 = \"f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-task/0.3.31/download\"],\n strip_prefix = \"futures-task-0.3.31\",\n build_file = Label(\"@crates//crates:BUILD.futures-task-0.3.31.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__futures-util-0.3.31\",\n sha256 = \"9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-util/0.3.31/download\"],\n strip_prefix = \"futures-util-0.3.31\",\n build_file = Label(\"@crates//crates:BUILD.futures-util-0.3.31.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__generic-array-0.14.7\",\n sha256 = \"85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/generic-array/0.14.7/download\"],\n strip_prefix = \"generic-array-0.14.7\",\n build_file = Label(\"@crates//crates:BUILD.generic-array-0.14.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__getrandom-0.3.4\",\n sha256 = \"899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/getrandom/0.3.4/download\"],\n strip_prefix = \"getrandom-0.3.4\",\n build_file = Label(\"@crates//crates:BUILD.getrandom-0.3.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__h2-0.3.27\",\n sha256 = \"0beca50380b1fc32983fc1cb4587bfa4bb9e78fc259aad4a0032d2080309222d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/h2/0.3.27/download\"],\n strip_prefix = \"h2-0.3.27\",\n build_file = Label(\"@crates//crates:BUILD.h2-0.3.27.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__hashbrown-0.14.5\",\n sha256 = \"e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hashbrown/0.14.5/download\"],\n strip_prefix = \"hashbrown-0.14.5\",\n build_file = Label(\"@crates//crates:BUILD.hashbrown-0.14.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__hashbrown-0.16.1\",\n sha256 = \"841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hashbrown/0.16.1/download\"],\n strip_prefix = \"hashbrown-0.16.1\",\n build_file = Label(\"@crates//crates:BUILD.hashbrown-0.16.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__hashlink-0.9.1\",\n sha256 = \"6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hashlink/0.9.1/download\"],\n strip_prefix = \"hashlink-0.9.1\",\n build_file = Label(\"@crates//crates:BUILD.hashlink-0.9.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__heck-0.5.0\",\n sha256 = \"2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/heck/0.5.0/download\"],\n strip_prefix = \"heck-0.5.0\",\n build_file = Label(\"@crates//crates:BUILD.heck-0.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__http-0.2.12\",\n sha256 = \"601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/http/0.2.12/download\"],\n strip_prefix = \"http-0.2.12\",\n build_file = Label(\"@crates//crates:BUILD.http-0.2.12.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__http-1.4.0\",\n sha256 = \"e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/http/1.4.0/download\"],\n strip_prefix = \"http-1.4.0\",\n build_file = Label(\"@crates//crates:BUILD.http-1.4.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__http-body-0.4.6\",\n sha256 = \"7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/http-body/0.4.6/download\"],\n strip_prefix = \"http-body-0.4.6\",\n build_file = Label(\"@crates//crates:BUILD.http-body-0.4.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__http-body-1.0.1\",\n sha256 = \"1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/http-body/1.0.1/download\"],\n strip_prefix = \"http-body-1.0.1\",\n build_file = Label(\"@crates//crates:BUILD.http-body-1.0.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__http-body-util-0.1.3\",\n sha256 = \"b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/http-body-util/0.1.3/download\"],\n strip_prefix = \"http-body-util-0.1.3\",\n build_file = Label(\"@crates//crates:BUILD.http-body-util-0.1.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__httparse-1.10.1\",\n sha256 = \"6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/httparse/1.10.1/download\"],\n strip_prefix = \"httparse-1.10.1\",\n build_file = Label(\"@crates//crates:BUILD.httparse-1.10.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__httpdate-1.0.3\",\n sha256 = \"df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/httpdate/1.0.3/download\"],\n strip_prefix = \"httpdate-1.0.3\",\n build_file = Label(\"@crates//crates:BUILD.httpdate-1.0.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__hyper-0.14.32\",\n sha256 = \"41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hyper/0.14.32/download\"],\n strip_prefix = \"hyper-0.14.32\",\n build_file = Label(\"@crates//crates:BUILD.hyper-0.14.32.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__hyper-1.8.1\",\n sha256 = \"2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hyper/1.8.1/download\"],\n strip_prefix = \"hyper-1.8.1\",\n build_file = Label(\"@crates//crates:BUILD.hyper-1.8.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__hyper-tls-0.5.0\",\n sha256 = \"d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hyper-tls/0.5.0/download\"],\n strip_prefix = \"hyper-tls-0.5.0\",\n build_file = Label(\"@crates//crates:BUILD.hyper-tls-0.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__hyper-util-0.1.18\",\n sha256 = \"52e9a2a24dc5c6821e71a7030e1e14b7b632acac55c40e9d2e082c621261bb56\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hyper-util/0.1.18/download\"],\n strip_prefix = \"hyper-util-0.1.18\",\n build_file = Label(\"@crates//crates:BUILD.hyper-util-0.1.18.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__icu_collections-2.1.1\",\n sha256 = \"4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_collections/2.1.1/download\"],\n strip_prefix = \"icu_collections-2.1.1\",\n build_file = Label(\"@crates//crates:BUILD.icu_collections-2.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__icu_locale_core-2.1.1\",\n sha256 = \"edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_locale_core/2.1.1/download\"],\n strip_prefix = \"icu_locale_core-2.1.1\",\n build_file = Label(\"@crates//crates:BUILD.icu_locale_core-2.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__icu_normalizer-2.1.1\",\n sha256 = \"5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_normalizer/2.1.1/download\"],\n strip_prefix = \"icu_normalizer-2.1.1\",\n build_file = Label(\"@crates//crates:BUILD.icu_normalizer-2.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__icu_normalizer_data-2.1.1\",\n sha256 = \"7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_normalizer_data/2.1.1/download\"],\n strip_prefix = \"icu_normalizer_data-2.1.1\",\n build_file = Label(\"@crates//crates:BUILD.icu_normalizer_data-2.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__icu_properties-2.1.1\",\n sha256 = \"e93fcd3157766c0c8da2f8cff6ce651a31f0810eaa1c51ec363ef790bbb5fb99\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_properties/2.1.1/download\"],\n strip_prefix = \"icu_properties-2.1.1\",\n build_file = Label(\"@crates//crates:BUILD.icu_properties-2.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__icu_properties_data-2.1.1\",\n sha256 = \"02845b3647bb045f1100ecd6480ff52f34c35f82d9880e029d329c21d1054899\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_properties_data/2.1.1/download\"],\n strip_prefix = \"icu_properties_data-2.1.1\",\n build_file = Label(\"@crates//crates:BUILD.icu_properties_data-2.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__icu_provider-2.1.1\",\n sha256 = \"85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/icu_provider/2.1.1/download\"],\n strip_prefix = \"icu_provider-2.1.1\",\n build_file = Label(\"@crates//crates:BUILD.icu_provider-2.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__idna-1.1.0\",\n sha256 = \"3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/idna/1.1.0/download\"],\n strip_prefix = \"idna-1.1.0\",\n build_file = Label(\"@crates//crates:BUILD.idna-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__idna_adapter-1.2.1\",\n sha256 = \"3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/idna_adapter/1.2.1/download\"],\n strip_prefix = \"idna_adapter-1.2.1\",\n build_file = Label(\"@crates//crates:BUILD.idna_adapter-1.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__indexmap-2.12.1\",\n sha256 = \"0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/indexmap/2.12.1/download\"],\n strip_prefix = \"indexmap-2.12.1\",\n build_file = Label(\"@crates//crates:BUILD.indexmap-2.12.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ipnet-2.11.0\",\n sha256 = \"469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ipnet/2.11.0/download\"],\n strip_prefix = \"ipnet-2.11.0\",\n build_file = Label(\"@crates//crates:BUILD.ipnet-2.11.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__is_terminal_polyfill-1.70.2\",\n sha256 = \"a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/is_terminal_polyfill/1.70.2/download\"],\n strip_prefix = \"is_terminal_polyfill-1.70.2\",\n build_file = Label(\"@crates//crates:BUILD.is_terminal_polyfill-1.70.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__itertools-0.14.0\",\n sha256 = \"2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/itertools/0.14.0/download\"],\n strip_prefix = \"itertools-0.14.0\",\n build_file = Label(\"@crates//crates:BUILD.itertools-0.14.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__itoa-1.0.15\",\n sha256 = \"4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/itoa/1.0.15/download\"],\n strip_prefix = \"itoa-1.0.15\",\n build_file = Label(\"@crates//crates:BUILD.itoa-1.0.15.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__js-sys-0.3.82\",\n sha256 = \"b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/js-sys/0.3.82/download\"],\n strip_prefix = \"js-sys-0.3.82\",\n build_file = Label(\"@crates//crates:BUILD.js-sys-0.3.82.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__lazy_static-1.5.0\",\n sha256 = \"bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/lazy_static/1.5.0/download\"],\n strip_prefix = \"lazy_static-1.5.0\",\n build_file = Label(\"@crates//crates:BUILD.lazy_static-1.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__libc-0.2.177\",\n sha256 = \"2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/libc/0.2.177/download\"],\n strip_prefix = \"libc-0.2.177\",\n build_file = Label(\"@crates//crates:BUILD.libc-0.2.177.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__libsqlite3-sys-0.28.0\",\n sha256 = \"0c10584274047cb335c23d3e61bcef8e323adae7c5c8c760540f73610177fc3f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/libsqlite3-sys/0.28.0/download\"],\n strip_prefix = \"libsqlite3-sys-0.28.0\",\n build_file = Label(\"@crates//crates:BUILD.libsqlite3-sys-0.28.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__linux-raw-sys-0.11.0\",\n sha256 = \"df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/linux-raw-sys/0.11.0/download\"],\n strip_prefix = \"linux-raw-sys-0.11.0\",\n build_file = Label(\"@crates//crates:BUILD.linux-raw-sys-0.11.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__litemap-0.8.1\",\n sha256 = \"6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/litemap/0.8.1/download\"],\n strip_prefix = \"litemap-0.8.1\",\n build_file = Label(\"@crates//crates:BUILD.litemap-0.8.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__lock_api-0.4.14\",\n sha256 = \"224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/lock_api/0.4.14/download\"],\n strip_prefix = \"lock_api-0.4.14\",\n build_file = Label(\"@crates//crates:BUILD.lock_api-0.4.14.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__log-0.4.28\",\n sha256 = \"34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/log/0.4.28/download\"],\n strip_prefix = \"log-0.4.28\",\n build_file = Label(\"@crates//crates:BUILD.log-0.4.28.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__matchit-0.7.3\",\n sha256 = \"0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/matchit/0.7.3/download\"],\n strip_prefix = \"matchit-0.7.3\",\n build_file = Label(\"@crates//crates:BUILD.matchit-0.7.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__memchr-2.7.6\",\n sha256 = \"f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/memchr/2.7.6/download\"],\n strip_prefix = \"memchr-2.7.6\",\n build_file = Label(\"@crates//crates:BUILD.memchr-2.7.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__mime-0.3.17\",\n sha256 = \"6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/mime/0.3.17/download\"],\n strip_prefix = \"mime-0.3.17\",\n build_file = Label(\"@crates//crates:BUILD.mime-0.3.17.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__mio-1.1.0\",\n sha256 = \"69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/mio/1.1.0/download\"],\n strip_prefix = \"mio-1.1.0\",\n build_file = Label(\"@crates//crates:BUILD.mio-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__multimap-0.10.1\",\n sha256 = \"1d87ecb2933e8aeadb3e3a02b828fed80a7528047e68b4f424523a0981a3a084\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/multimap/0.10.1/download\"],\n strip_prefix = \"multimap-0.10.1\",\n build_file = Label(\"@crates//crates:BUILD.multimap-0.10.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__native-tls-0.2.14\",\n sha256 = \"87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/native-tls/0.2.14/download\"],\n strip_prefix = \"native-tls-0.2.14\",\n build_file = Label(\"@crates//crates:BUILD.native-tls-0.2.14.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__nu-ansi-term-0.50.3\",\n sha256 = \"7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/nu-ansi-term/0.50.3/download\"],\n strip_prefix = \"nu-ansi-term-0.50.3\",\n build_file = Label(\"@crates//crates:BUILD.nu-ansi-term-0.50.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__once_cell-1.21.3\",\n sha256 = \"42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/once_cell/1.21.3/download\"],\n strip_prefix = \"once_cell-1.21.3\",\n build_file = Label(\"@crates//crates:BUILD.once_cell-1.21.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__once_cell_polyfill-1.70.2\",\n sha256 = \"384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/once_cell_polyfill/1.70.2/download\"],\n strip_prefix = \"once_cell_polyfill-1.70.2\",\n build_file = Label(\"@crates//crates:BUILD.once_cell_polyfill-1.70.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__openssl-0.10.75\",\n sha256 = \"08838db121398ad17ab8531ce9de97b244589089e290a384c900cb9ff7434328\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/openssl/0.10.75/download\"],\n strip_prefix = \"openssl-0.10.75\",\n build_file = Label(\"@crates//crates:BUILD.openssl-0.10.75.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__openssl-macros-0.1.1\",\n sha256 = \"a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/openssl-macros/0.1.1/download\"],\n strip_prefix = \"openssl-macros-0.1.1\",\n build_file = Label(\"@crates//crates:BUILD.openssl-macros-0.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__openssl-probe-0.1.6\",\n sha256 = \"d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/openssl-probe/0.1.6/download\"],\n strip_prefix = \"openssl-probe-0.1.6\",\n build_file = Label(\"@crates//crates:BUILD.openssl-probe-0.1.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__openssl-sys-0.9.111\",\n sha256 = \"82cab2d520aa75e3c58898289429321eb788c3106963d0dc886ec7a5f4adc321\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/openssl-sys/0.9.111/download\"],\n strip_prefix = \"openssl-sys-0.9.111\",\n build_file = Label(\"@crates//crates:BUILD.openssl-sys-0.9.111.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__parking_lot-0.12.5\",\n sha256 = \"93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/parking_lot/0.12.5/download\"],\n strip_prefix = \"parking_lot-0.12.5\",\n build_file = Label(\"@crates//crates:BUILD.parking_lot-0.12.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__parking_lot_core-0.9.12\",\n sha256 = \"2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/parking_lot_core/0.9.12/download\"],\n strip_prefix = \"parking_lot_core-0.9.12\",\n build_file = Label(\"@crates//crates:BUILD.parking_lot_core-0.9.12.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__percent-encoding-2.3.2\",\n sha256 = \"9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/percent-encoding/2.3.2/download\"],\n strip_prefix = \"percent-encoding-2.3.2\",\n build_file = Label(\"@crates//crates:BUILD.percent-encoding-2.3.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__petgraph-0.7.1\",\n sha256 = \"3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/petgraph/0.7.1/download\"],\n strip_prefix = \"petgraph-0.7.1\",\n build_file = Label(\"@crates//crates:BUILD.petgraph-0.7.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__pin-project-lite-0.2.16\",\n sha256 = \"3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pin-project-lite/0.2.16/download\"],\n strip_prefix = \"pin-project-lite-0.2.16\",\n build_file = Label(\"@crates//crates:BUILD.pin-project-lite-0.2.16.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__pin-utils-0.1.0\",\n sha256 = \"8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pin-utils/0.1.0/download\"],\n strip_prefix = \"pin-utils-0.1.0\",\n build_file = Label(\"@crates//crates:BUILD.pin-utils-0.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__pkg-config-0.3.32\",\n sha256 = \"7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pkg-config/0.3.32/download\"],\n strip_prefix = \"pkg-config-0.3.32\",\n build_file = Label(\"@crates//crates:BUILD.pkg-config-0.3.32.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__potential_utf-0.1.4\",\n sha256 = \"b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/potential_utf/0.1.4/download\"],\n strip_prefix = \"potential_utf-0.1.4\",\n build_file = Label(\"@crates//crates:BUILD.potential_utf-0.1.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__prettyplease-0.2.37\",\n sha256 = \"479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/prettyplease/0.2.37/download\"],\n strip_prefix = \"prettyplease-0.2.37\",\n build_file = Label(\"@crates//crates:BUILD.prettyplease-0.2.37.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__proc-macro2-1.0.103\",\n sha256 = \"5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/proc-macro2/1.0.103/download\"],\n strip_prefix = \"proc-macro2-1.0.103\",\n build_file = Label(\"@crates//crates:BUILD.proc-macro2-1.0.103.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__prost-0.13.5\",\n sha256 = \"2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/prost/0.13.5/download\"],\n strip_prefix = \"prost-0.13.5\",\n build_file = Label(\"@crates//crates:BUILD.prost-0.13.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__prost-build-0.13.5\",\n sha256 = \"be769465445e8c1474e9c5dac2018218498557af32d9ed057325ec9a41ae81bf\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/prost-build/0.13.5/download\"],\n strip_prefix = \"prost-build-0.13.5\",\n build_file = Label(\"@crates//crates:BUILD.prost-build-0.13.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__prost-derive-0.13.5\",\n sha256 = \"8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/prost-derive/0.13.5/download\"],\n strip_prefix = \"prost-derive-0.13.5\",\n build_file = Label(\"@crates//crates:BUILD.prost-derive-0.13.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__prost-types-0.13.5\",\n sha256 = \"52c2c1bf36ddb1a1c396b3601a3cec27c2462e45f07c386894ec3ccf5332bd16\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/prost-types/0.13.5/download\"],\n strip_prefix = \"prost-types-0.13.5\",\n build_file = Label(\"@crates//crates:BUILD.prost-types-0.13.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__quote-1.0.42\",\n sha256 = \"a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/quote/1.0.42/download\"],\n strip_prefix = \"quote-1.0.42\",\n build_file = Label(\"@crates//crates:BUILD.quote-1.0.42.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__r-efi-5.3.0\",\n sha256 = \"69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/r-efi/5.3.0/download\"],\n strip_prefix = \"r-efi-5.3.0\",\n build_file = Label(\"@crates//crates:BUILD.r-efi-5.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__redox_syscall-0.5.18\",\n sha256 = \"ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/redox_syscall/0.5.18/download\"],\n strip_prefix = \"redox_syscall-0.5.18\",\n build_file = Label(\"@crates//crates:BUILD.redox_syscall-0.5.18.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__regex-1.12.2\",\n sha256 = \"843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/regex/1.12.2/download\"],\n strip_prefix = \"regex-1.12.2\",\n build_file = Label(\"@crates//crates:BUILD.regex-1.12.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__regex-automata-0.4.13\",\n sha256 = \"5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/regex-automata/0.4.13/download\"],\n strip_prefix = \"regex-automata-0.4.13\",\n build_file = Label(\"@crates//crates:BUILD.regex-automata-0.4.13.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__regex-syntax-0.8.8\",\n sha256 = \"7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/regex-syntax/0.8.8/download\"],\n strip_prefix = \"regex-syntax-0.8.8\",\n build_file = Label(\"@crates//crates:BUILD.regex-syntax-0.8.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__reqwest-0.11.27\",\n sha256 = \"dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/reqwest/0.11.27/download\"],\n strip_prefix = \"reqwest-0.11.27\",\n build_file = Label(\"@crates//crates:BUILD.reqwest-0.11.27.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rusqlite-0.31.0\",\n sha256 = \"b838eba278d213a8beaf485bd313fd580ca4505a00d5871caeb1457c55322cae\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rusqlite/0.31.0/download\"],\n strip_prefix = \"rusqlite-0.31.0\",\n build_file = Label(\"@crates//crates:BUILD.rusqlite-0.31.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rustc-hash-2.1.1\",\n sha256 = \"357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustc-hash/2.1.1/download\"],\n strip_prefix = \"rustc-hash-2.1.1\",\n build_file = Label(\"@crates//crates:BUILD.rustc-hash-2.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rustix-1.1.2\",\n sha256 = \"cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustix/1.1.2/download\"],\n strip_prefix = \"rustix-1.1.2\",\n build_file = Label(\"@crates//crates:BUILD.rustix-1.1.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rustls-pemfile-1.0.4\",\n sha256 = \"1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustls-pemfile/1.0.4/download\"],\n strip_prefix = \"rustls-pemfile-1.0.4\",\n build_file = Label(\"@crates//crates:BUILD.rustls-pemfile-1.0.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rustversion-1.0.22\",\n sha256 = \"b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustversion/1.0.22/download\"],\n strip_prefix = \"rustversion-1.0.22\",\n build_file = Label(\"@crates//crates:BUILD.rustversion-1.0.22.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ryu-1.0.20\",\n sha256 = \"28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ryu/1.0.20/download\"],\n strip_prefix = \"ryu-1.0.20\",\n build_file = Label(\"@crates//crates:BUILD.ryu-1.0.20.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__schannel-0.1.28\",\n sha256 = \"891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/schannel/0.1.28/download\"],\n strip_prefix = \"schannel-0.1.28\",\n build_file = Label(\"@crates//crates:BUILD.schannel-0.1.28.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__schemars-0.8.22\",\n sha256 = \"3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/schemars/0.8.22/download\"],\n strip_prefix = \"schemars-0.8.22\",\n build_file = Label(\"@crates//crates:BUILD.schemars-0.8.22.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__schemars_derive-0.8.22\",\n sha256 = \"32e265784ad618884abaea0600a9adf15393368d840e0222d101a072f3f7534d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/schemars_derive/0.8.22/download\"],\n strip_prefix = \"schemars_derive-0.8.22\",\n build_file = Label(\"@crates//crates:BUILD.schemars_derive-0.8.22.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__scopeguard-1.2.0\",\n sha256 = \"94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/scopeguard/1.2.0/download\"],\n strip_prefix = \"scopeguard-1.2.0\",\n build_file = Label(\"@crates//crates:BUILD.scopeguard-1.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__security-framework-2.11.1\",\n sha256 = \"897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/security-framework/2.11.1/download\"],\n strip_prefix = \"security-framework-2.11.1\",\n build_file = Label(\"@crates//crates:BUILD.security-framework-2.11.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__security-framework-sys-2.15.0\",\n sha256 = \"cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/security-framework-sys/2.15.0/download\"],\n strip_prefix = \"security-framework-sys-2.15.0\",\n build_file = Label(\"@crates//crates:BUILD.security-framework-sys-2.15.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde-1.0.228\",\n sha256 = \"9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde/1.0.228/download\"],\n strip_prefix = \"serde-1.0.228\",\n build_file = Label(\"@crates//crates:BUILD.serde-1.0.228.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_core-1.0.228\",\n sha256 = \"41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_core/1.0.228/download\"],\n strip_prefix = \"serde_core-1.0.228\",\n build_file = Label(\"@crates//crates:BUILD.serde_core-1.0.228.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_derive-1.0.228\",\n sha256 = \"d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_derive/1.0.228/download\"],\n strip_prefix = \"serde_derive-1.0.228\",\n build_file = Label(\"@crates//crates:BUILD.serde_derive-1.0.228.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_derive_internals-0.29.1\",\n sha256 = \"18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_derive_internals/0.29.1/download\"],\n strip_prefix = \"serde_derive_internals-0.29.1\",\n build_file = Label(\"@crates//crates:BUILD.serde_derive_internals-0.29.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_json-1.0.145\",\n sha256 = \"402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_json/1.0.145/download\"],\n strip_prefix = \"serde_json-1.0.145\",\n build_file = Label(\"@crates//crates:BUILD.serde_json-1.0.145.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_path_to_error-0.1.20\",\n sha256 = \"10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_path_to_error/0.1.20/download\"],\n strip_prefix = \"serde_path_to_error-0.1.20\",\n build_file = Label(\"@crates//crates:BUILD.serde_path_to_error-0.1.20.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_spanned-0.6.9\",\n sha256 = \"bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_spanned/0.6.9/download\"],\n strip_prefix = \"serde_spanned-0.6.9\",\n build_file = Label(\"@crates//crates:BUILD.serde_spanned-0.6.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_urlencoded-0.7.1\",\n sha256 = \"d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_urlencoded/0.7.1/download\"],\n strip_prefix = \"serde_urlencoded-0.7.1\",\n build_file = Label(\"@crates//crates:BUILD.serde_urlencoded-0.7.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__sha2-0.10.9\",\n sha256 = \"a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/sha2/0.10.9/download\"],\n strip_prefix = \"sha2-0.10.9\",\n build_file = Label(\"@crates//crates:BUILD.sha2-0.10.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__sharded-slab-0.1.7\",\n sha256 = \"f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/sharded-slab/0.1.7/download\"],\n strip_prefix = \"sharded-slab-0.1.7\",\n build_file = Label(\"@crates//crates:BUILD.sharded-slab-0.1.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__shlex-1.3.0\",\n sha256 = \"0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/shlex/1.3.0/download\"],\n strip_prefix = \"shlex-1.3.0\",\n build_file = Label(\"@crates//crates:BUILD.shlex-1.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__signal-hook-registry-1.4.7\",\n sha256 = \"7664a098b8e616bdfcc2dc0e9ac44eb231eedf41db4e9fe95d8d32ec728dedad\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/signal-hook-registry/1.4.7/download\"],\n strip_prefix = \"signal-hook-registry-1.4.7\",\n build_file = Label(\"@crates//crates:BUILD.signal-hook-registry-1.4.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__slab-0.4.11\",\n sha256 = \"7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/slab/0.4.11/download\"],\n strip_prefix = \"slab-0.4.11\",\n build_file = Label(\"@crates//crates:BUILD.slab-0.4.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__smallvec-1.15.1\",\n sha256 = \"67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/smallvec/1.15.1/download\"],\n strip_prefix = \"smallvec-1.15.1\",\n build_file = Label(\"@crates//crates:BUILD.smallvec-1.15.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__socket2-0.5.10\",\n sha256 = \"e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/socket2/0.5.10/download\"],\n strip_prefix = \"socket2-0.5.10\",\n build_file = Label(\"@crates//crates:BUILD.socket2-0.5.10.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__socket2-0.6.1\",\n sha256 = \"17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/socket2/0.6.1/download\"],\n strip_prefix = \"socket2-0.6.1\",\n build_file = Label(\"@crates//crates:BUILD.socket2-0.6.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__stable_deref_trait-1.2.1\",\n sha256 = \"6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/stable_deref_trait/1.2.1/download\"],\n strip_prefix = \"stable_deref_trait-1.2.1\",\n build_file = Label(\"@crates//crates:BUILD.stable_deref_trait-1.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__strsim-0.11.1\",\n sha256 = \"7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/strsim/0.11.1/download\"],\n strip_prefix = \"strsim-0.11.1\",\n build_file = Label(\"@crates//crates:BUILD.strsim-0.11.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__syn-2.0.111\",\n sha256 = \"390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/syn/2.0.111/download\"],\n strip_prefix = \"syn-2.0.111\",\n build_file = Label(\"@crates//crates:BUILD.syn-2.0.111.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__sync_wrapper-0.1.2\",\n sha256 = \"2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/sync_wrapper/0.1.2/download\"],\n strip_prefix = \"sync_wrapper-0.1.2\",\n build_file = Label(\"@crates//crates:BUILD.sync_wrapper-0.1.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__sync_wrapper-1.0.2\",\n sha256 = \"0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/sync_wrapper/1.0.2/download\"],\n strip_prefix = \"sync_wrapper-1.0.2\",\n build_file = Label(\"@crates//crates:BUILD.sync_wrapper-1.0.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__synstructure-0.13.2\",\n sha256 = \"728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/synstructure/0.13.2/download\"],\n strip_prefix = \"synstructure-0.13.2\",\n build_file = Label(\"@crates//crates:BUILD.synstructure-0.13.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__system-configuration-0.5.1\",\n sha256 = \"ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/system-configuration/0.5.1/download\"],\n strip_prefix = \"system-configuration-0.5.1\",\n build_file = Label(\"@crates//crates:BUILD.system-configuration-0.5.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__system-configuration-sys-0.5.0\",\n sha256 = \"a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/system-configuration-sys/0.5.0/download\"],\n strip_prefix = \"system-configuration-sys-0.5.0\",\n build_file = Label(\"@crates//crates:BUILD.system-configuration-sys-0.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tempfile-3.23.0\",\n sha256 = \"2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tempfile/3.23.0/download\"],\n strip_prefix = \"tempfile-3.23.0\",\n build_file = Label(\"@crates//crates:BUILD.tempfile-3.23.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__thread_local-1.1.9\",\n sha256 = \"f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/thread_local/1.1.9/download\"],\n strip_prefix = \"thread_local-1.1.9\",\n build_file = Label(\"@crates//crates:BUILD.thread_local-1.1.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tinystr-0.8.2\",\n sha256 = \"42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tinystr/0.8.2/download\"],\n strip_prefix = \"tinystr-0.8.2\",\n build_file = Label(\"@crates//crates:BUILD.tinystr-0.8.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tokio-1.48.0\",\n sha256 = \"ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tokio/1.48.0/download\"],\n strip_prefix = \"tokio-1.48.0\",\n build_file = Label(\"@crates//crates:BUILD.tokio-1.48.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tokio-macros-2.6.0\",\n sha256 = \"af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tokio-macros/2.6.0/download\"],\n strip_prefix = \"tokio-macros-2.6.0\",\n build_file = Label(\"@crates//crates:BUILD.tokio-macros-2.6.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tokio-native-tls-0.3.1\",\n sha256 = \"bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tokio-native-tls/0.3.1/download\"],\n strip_prefix = \"tokio-native-tls-0.3.1\",\n build_file = Label(\"@crates//crates:BUILD.tokio-native-tls-0.3.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tokio-util-0.7.17\",\n sha256 = \"2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tokio-util/0.7.17/download\"],\n strip_prefix = \"tokio-util-0.7.17\",\n build_file = Label(\"@crates//crates:BUILD.tokio-util-0.7.17.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__toml-0.8.23\",\n sha256 = \"dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/toml/0.8.23/download\"],\n strip_prefix = \"toml-0.8.23\",\n build_file = Label(\"@crates//crates:BUILD.toml-0.8.23.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__toml_datetime-0.6.11\",\n sha256 = \"22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/toml_datetime/0.6.11/download\"],\n strip_prefix = \"toml_datetime-0.6.11\",\n build_file = Label(\"@crates//crates:BUILD.toml_datetime-0.6.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__toml_edit-0.22.27\",\n sha256 = \"41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/toml_edit/0.22.27/download\"],\n strip_prefix = \"toml_edit-0.22.27\",\n build_file = Label(\"@crates//crates:BUILD.toml_edit-0.22.27.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__toml_write-0.1.2\",\n sha256 = \"5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/toml_write/0.1.2/download\"],\n strip_prefix = \"toml_write-0.1.2\",\n build_file = Label(\"@crates//crates:BUILD.toml_write-0.1.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tower-0.4.13\",\n sha256 = \"b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tower/0.4.13/download\"],\n strip_prefix = \"tower-0.4.13\",\n build_file = Label(\"@crates//crates:BUILD.tower-0.4.13.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tower-0.5.2\",\n sha256 = \"d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tower/0.5.2/download\"],\n strip_prefix = \"tower-0.5.2\",\n build_file = Label(\"@crates//crates:BUILD.tower-0.5.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tower-http-0.5.2\",\n sha256 = \"1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tower-http/0.5.2/download\"],\n strip_prefix = \"tower-http-0.5.2\",\n build_file = Label(\"@crates//crates:BUILD.tower-http-0.5.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tower-layer-0.3.3\",\n sha256 = \"121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tower-layer/0.3.3/download\"],\n strip_prefix = \"tower-layer-0.3.3\",\n build_file = Label(\"@crates//crates:BUILD.tower-layer-0.3.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tower-service-0.3.3\",\n sha256 = \"8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tower-service/0.3.3/download\"],\n strip_prefix = \"tower-service-0.3.3\",\n build_file = Label(\"@crates//crates:BUILD.tower-service-0.3.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tracing-0.1.41\",\n sha256 = \"784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tracing/0.1.41/download\"],\n strip_prefix = \"tracing-0.1.41\",\n build_file = Label(\"@crates//crates:BUILD.tracing-0.1.41.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tracing-attributes-0.1.31\",\n sha256 = \"7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tracing-attributes/0.1.31/download\"],\n strip_prefix = \"tracing-attributes-0.1.31\",\n build_file = Label(\"@crates//crates:BUILD.tracing-attributes-0.1.31.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tracing-core-0.1.35\",\n sha256 = \"7a04e24fab5c89c6a36eb8558c9656f30d81de51dfa4d3b45f26b21d61fa0a6c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tracing-core/0.1.35/download\"],\n strip_prefix = \"tracing-core-0.1.35\",\n build_file = Label(\"@crates//crates:BUILD.tracing-core-0.1.35.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tracing-log-0.2.0\",\n sha256 = \"ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tracing-log/0.2.0/download\"],\n strip_prefix = \"tracing-log-0.2.0\",\n build_file = Label(\"@crates//crates:BUILD.tracing-log-0.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tracing-subscriber-0.3.20\",\n sha256 = \"2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tracing-subscriber/0.3.20/download\"],\n strip_prefix = \"tracing-subscriber-0.3.20\",\n build_file = Label(\"@crates//crates:BUILD.tracing-subscriber-0.3.20.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__try-lock-0.2.5\",\n sha256 = \"e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/try-lock/0.2.5/download\"],\n strip_prefix = \"try-lock-0.2.5\",\n build_file = Label(\"@crates//crates:BUILD.try-lock-0.2.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__typenum-1.19.0\",\n sha256 = \"562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/typenum/1.19.0/download\"],\n strip_prefix = \"typenum-1.19.0\",\n build_file = Label(\"@crates//crates:BUILD.typenum-1.19.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__unicode-ident-1.0.22\",\n sha256 = \"9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unicode-ident/1.0.22/download\"],\n strip_prefix = \"unicode-ident-1.0.22\",\n build_file = Label(\"@crates//crates:BUILD.unicode-ident-1.0.22.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__url-2.5.7\",\n sha256 = \"08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/url/2.5.7/download\"],\n strip_prefix = \"url-2.5.7\",\n build_file = Label(\"@crates//crates:BUILD.url-2.5.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__urlencoding-2.1.3\",\n sha256 = \"daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/urlencoding/2.1.3/download\"],\n strip_prefix = \"urlencoding-2.1.3\",\n build_file = Label(\"@crates//crates:BUILD.urlencoding-2.1.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__utf8_iter-1.0.4\",\n sha256 = \"b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/utf8_iter/1.0.4/download\"],\n strip_prefix = \"utf8_iter-1.0.4\",\n build_file = Label(\"@crates//crates:BUILD.utf8_iter-1.0.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__utf8parse-0.2.2\",\n sha256 = \"06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/utf8parse/0.2.2/download\"],\n strip_prefix = \"utf8parse-0.2.2\",\n build_file = Label(\"@crates//crates:BUILD.utf8parse-0.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__uuid-1.18.1\",\n sha256 = \"2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/uuid/1.18.1/download\"],\n strip_prefix = \"uuid-1.18.1\",\n build_file = Label(\"@crates//crates:BUILD.uuid-1.18.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__valuable-0.1.1\",\n sha256 = \"ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/valuable/0.1.1/download\"],\n strip_prefix = \"valuable-0.1.1\",\n build_file = Label(\"@crates//crates:BUILD.valuable-0.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__vcpkg-0.2.15\",\n sha256 = \"accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/vcpkg/0.2.15/download\"],\n strip_prefix = \"vcpkg-0.2.15\",\n build_file = Label(\"@crates//crates:BUILD.vcpkg-0.2.15.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__version_check-0.9.5\",\n sha256 = \"0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/version_check/0.9.5/download\"],\n strip_prefix = \"version_check-0.9.5\",\n build_file = Label(\"@crates//crates:BUILD.version_check-0.9.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__want-0.3.1\",\n sha256 = \"bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/want/0.3.1/download\"],\n strip_prefix = \"want-0.3.1\",\n build_file = Label(\"@crates//crates:BUILD.want-0.3.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__wasi-0.11.1-wasi-snapshot-preview1\",\n sha256 = \"ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasi/0.11.1+wasi-snapshot-preview1/download\"],\n strip_prefix = \"wasi-0.11.1+wasi-snapshot-preview1\",\n build_file = Label(\"@crates//crates:BUILD.wasi-0.11.1+wasi-snapshot-preview1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__wasip2-1.0.1-wasi-0.2.4\",\n sha256 = \"0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasip2/1.0.1+wasi-0.2.4/download\"],\n strip_prefix = \"wasip2-1.0.1+wasi-0.2.4\",\n build_file = Label(\"@crates//crates:BUILD.wasip2-1.0.1+wasi-0.2.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__wasm-bindgen-0.2.105\",\n sha256 = \"da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen/0.2.105/download\"],\n strip_prefix = \"wasm-bindgen-0.2.105\",\n build_file = Label(\"@crates//crates:BUILD.wasm-bindgen-0.2.105.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__wasm-bindgen-futures-0.4.55\",\n sha256 = \"551f88106c6d5e7ccc7cd9a16f312dd3b5d36ea8b4954304657d5dfba115d4a0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen-futures/0.4.55/download\"],\n strip_prefix = \"wasm-bindgen-futures-0.4.55\",\n build_file = Label(\"@crates//crates:BUILD.wasm-bindgen-futures-0.4.55.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__wasm-bindgen-macro-0.2.105\",\n sha256 = \"04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen-macro/0.2.105/download\"],\n strip_prefix = \"wasm-bindgen-macro-0.2.105\",\n build_file = Label(\"@crates//crates:BUILD.wasm-bindgen-macro-0.2.105.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__wasm-bindgen-macro-support-0.2.105\",\n sha256 = \"420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen-macro-support/0.2.105/download\"],\n strip_prefix = \"wasm-bindgen-macro-support-0.2.105\",\n build_file = Label(\"@crates//crates:BUILD.wasm-bindgen-macro-support-0.2.105.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__wasm-bindgen-shared-0.2.105\",\n sha256 = \"76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen-shared/0.2.105/download\"],\n strip_prefix = \"wasm-bindgen-shared-0.2.105\",\n build_file = Label(\"@crates//crates:BUILD.wasm-bindgen-shared-0.2.105.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__web-sys-0.3.82\",\n sha256 = \"3a1f95c0d03a47f4ae1f7a64643a6bb97465d9b740f0fa8f90ea33915c99a9a1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/web-sys/0.3.82/download\"],\n strip_prefix = \"web-sys-0.3.82\",\n build_file = Label(\"@crates//crates:BUILD.web-sys-0.3.82.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__winapi-0.3.9\",\n sha256 = \"5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/winapi/0.3.9/download\"],\n strip_prefix = \"winapi-0.3.9\",\n build_file = Label(\"@crates//crates:BUILD.winapi-0.3.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__winapi-i686-pc-windows-gnu-0.4.0\",\n sha256 = \"ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/winapi-i686-pc-windows-gnu/0.4.0/download\"],\n strip_prefix = \"winapi-i686-pc-windows-gnu-0.4.0\",\n build_file = Label(\"@crates//crates:BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__winapi-x86_64-pc-windows-gnu-0.4.0\",\n sha256 = \"712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/winapi-x86_64-pc-windows-gnu/0.4.0/download\"],\n strip_prefix = \"winapi-x86_64-pc-windows-gnu-0.4.0\",\n build_file = Label(\"@crates//crates:BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-link-0.2.1\",\n sha256 = \"f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-link/0.2.1/download\"],\n strip_prefix = \"windows-link-0.2.1\",\n build_file = Label(\"@crates//crates:BUILD.windows-link-0.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-sys-0.48.0\",\n sha256 = \"677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-sys/0.48.0/download\"],\n strip_prefix = \"windows-sys-0.48.0\",\n build_file = Label(\"@crates//crates:BUILD.windows-sys-0.48.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-sys-0.52.0\",\n sha256 = \"282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-sys/0.52.0/download\"],\n strip_prefix = \"windows-sys-0.52.0\",\n build_file = Label(\"@crates//crates:BUILD.windows-sys-0.52.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-sys-0.60.2\",\n sha256 = \"f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-sys/0.60.2/download\"],\n strip_prefix = \"windows-sys-0.60.2\",\n build_file = Label(\"@crates//crates:BUILD.windows-sys-0.60.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-sys-0.61.2\",\n sha256 = \"ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-sys/0.61.2/download\"],\n strip_prefix = \"windows-sys-0.61.2\",\n build_file = Label(\"@crates//crates:BUILD.windows-sys-0.61.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-targets-0.48.5\",\n sha256 = \"9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-targets/0.48.5/download\"],\n strip_prefix = \"windows-targets-0.48.5\",\n build_file = Label(\"@crates//crates:BUILD.windows-targets-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-targets-0.52.6\",\n sha256 = \"9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-targets/0.52.6/download\"],\n strip_prefix = \"windows-targets-0.52.6\",\n build_file = Label(\"@crates//crates:BUILD.windows-targets-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-targets-0.53.5\",\n sha256 = \"4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-targets/0.53.5/download\"],\n strip_prefix = \"windows-targets-0.53.5\",\n build_file = Label(\"@crates//crates:BUILD.windows-targets-0.53.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_aarch64_gnullvm-0.48.5\",\n sha256 = \"2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_aarch64_gnullvm/0.48.5/download\"],\n strip_prefix = \"windows_aarch64_gnullvm-0.48.5\",\n build_file = Label(\"@crates//crates:BUILD.windows_aarch64_gnullvm-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_aarch64_gnullvm-0.52.6\",\n sha256 = \"32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_aarch64_gnullvm/0.52.6/download\"],\n strip_prefix = \"windows_aarch64_gnullvm-0.52.6\",\n build_file = Label(\"@crates//crates:BUILD.windows_aarch64_gnullvm-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_aarch64_gnullvm-0.53.1\",\n sha256 = \"a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_aarch64_gnullvm/0.53.1/download\"],\n strip_prefix = \"windows_aarch64_gnullvm-0.53.1\",\n build_file = Label(\"@crates//crates:BUILD.windows_aarch64_gnullvm-0.53.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_aarch64_msvc-0.48.5\",\n sha256 = \"dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_aarch64_msvc/0.48.5/download\"],\n strip_prefix = \"windows_aarch64_msvc-0.48.5\",\n build_file = Label(\"@crates//crates:BUILD.windows_aarch64_msvc-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_aarch64_msvc-0.52.6\",\n sha256 = \"09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_aarch64_msvc/0.52.6/download\"],\n strip_prefix = \"windows_aarch64_msvc-0.52.6\",\n build_file = Label(\"@crates//crates:BUILD.windows_aarch64_msvc-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_aarch64_msvc-0.53.1\",\n sha256 = \"b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_aarch64_msvc/0.53.1/download\"],\n strip_prefix = \"windows_aarch64_msvc-0.53.1\",\n build_file = Label(\"@crates//crates:BUILD.windows_aarch64_msvc-0.53.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_i686_gnu-0.48.5\",\n sha256 = \"a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_gnu/0.48.5/download\"],\n strip_prefix = \"windows_i686_gnu-0.48.5\",\n build_file = Label(\"@crates//crates:BUILD.windows_i686_gnu-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_i686_gnu-0.52.6\",\n sha256 = \"8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_gnu/0.52.6/download\"],\n strip_prefix = \"windows_i686_gnu-0.52.6\",\n build_file = Label(\"@crates//crates:BUILD.windows_i686_gnu-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_i686_gnu-0.53.1\",\n sha256 = \"960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_gnu/0.53.1/download\"],\n strip_prefix = \"windows_i686_gnu-0.53.1\",\n build_file = Label(\"@crates//crates:BUILD.windows_i686_gnu-0.53.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_i686_gnullvm-0.52.6\",\n sha256 = \"0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_gnullvm/0.52.6/download\"],\n strip_prefix = \"windows_i686_gnullvm-0.52.6\",\n build_file = Label(\"@crates//crates:BUILD.windows_i686_gnullvm-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_i686_gnullvm-0.53.1\",\n sha256 = \"fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_gnullvm/0.53.1/download\"],\n strip_prefix = \"windows_i686_gnullvm-0.53.1\",\n build_file = Label(\"@crates//crates:BUILD.windows_i686_gnullvm-0.53.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_i686_msvc-0.48.5\",\n sha256 = \"8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_msvc/0.48.5/download\"],\n strip_prefix = \"windows_i686_msvc-0.48.5\",\n build_file = Label(\"@crates//crates:BUILD.windows_i686_msvc-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_i686_msvc-0.52.6\",\n sha256 = \"240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_msvc/0.52.6/download\"],\n strip_prefix = \"windows_i686_msvc-0.52.6\",\n build_file = Label(\"@crates//crates:BUILD.windows_i686_msvc-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_i686_msvc-0.53.1\",\n sha256 = \"1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_msvc/0.53.1/download\"],\n strip_prefix = \"windows_i686_msvc-0.53.1\",\n build_file = Label(\"@crates//crates:BUILD.windows_i686_msvc-0.53.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_x86_64_gnu-0.48.5\",\n sha256 = \"53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_gnu/0.48.5/download\"],\n strip_prefix = \"windows_x86_64_gnu-0.48.5\",\n build_file = Label(\"@crates//crates:BUILD.windows_x86_64_gnu-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_x86_64_gnu-0.52.6\",\n sha256 = \"147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_gnu/0.52.6/download\"],\n strip_prefix = \"windows_x86_64_gnu-0.52.6\",\n build_file = Label(\"@crates//crates:BUILD.windows_x86_64_gnu-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_x86_64_gnu-0.53.1\",\n sha256 = \"9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_gnu/0.53.1/download\"],\n strip_prefix = \"windows_x86_64_gnu-0.53.1\",\n build_file = Label(\"@crates//crates:BUILD.windows_x86_64_gnu-0.53.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_x86_64_gnullvm-0.48.5\",\n sha256 = \"0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_gnullvm/0.48.5/download\"],\n strip_prefix = \"windows_x86_64_gnullvm-0.48.5\",\n build_file = Label(\"@crates//crates:BUILD.windows_x86_64_gnullvm-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_x86_64_gnullvm-0.52.6\",\n sha256 = \"24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_gnullvm/0.52.6/download\"],\n strip_prefix = \"windows_x86_64_gnullvm-0.52.6\",\n build_file = Label(\"@crates//crates:BUILD.windows_x86_64_gnullvm-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_x86_64_gnullvm-0.53.1\",\n sha256 = \"0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_gnullvm/0.53.1/download\"],\n strip_prefix = \"windows_x86_64_gnullvm-0.53.1\",\n build_file = Label(\"@crates//crates:BUILD.windows_x86_64_gnullvm-0.53.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_x86_64_msvc-0.48.5\",\n sha256 = \"ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_msvc/0.48.5/download\"],\n strip_prefix = \"windows_x86_64_msvc-0.48.5\",\n build_file = Label(\"@crates//crates:BUILD.windows_x86_64_msvc-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_x86_64_msvc-0.52.6\",\n sha256 = \"589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_msvc/0.52.6/download\"],\n strip_prefix = \"windows_x86_64_msvc-0.52.6\",\n build_file = Label(\"@crates//crates:BUILD.windows_x86_64_msvc-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows_x86_64_msvc-0.53.1\",\n sha256 = \"d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_msvc/0.53.1/download\"],\n strip_prefix = \"windows_x86_64_msvc-0.53.1\",\n build_file = Label(\"@crates//crates:BUILD.windows_x86_64_msvc-0.53.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__winnow-0.7.14\",\n sha256 = \"5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/winnow/0.7.14/download\"],\n strip_prefix = \"winnow-0.7.14\",\n build_file = Label(\"@crates//crates:BUILD.winnow-0.7.14.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__winreg-0.50.0\",\n sha256 = \"524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/winreg/0.50.0/download\"],\n strip_prefix = \"winreg-0.50.0\",\n build_file = Label(\"@crates//crates:BUILD.winreg-0.50.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__wit-bindgen-0.46.0\",\n sha256 = \"f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wit-bindgen/0.46.0/download\"],\n strip_prefix = \"wit-bindgen-0.46.0\",\n build_file = Label(\"@crates//crates:BUILD.wit-bindgen-0.46.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__writeable-0.6.2\",\n sha256 = \"9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/writeable/0.6.2/download\"],\n strip_prefix = \"writeable-0.6.2\",\n build_file = Label(\"@crates//crates:BUILD.writeable-0.6.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__yoke-0.8.1\",\n sha256 = \"72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/yoke/0.8.1/download\"],\n strip_prefix = \"yoke-0.8.1\",\n build_file = Label(\"@crates//crates:BUILD.yoke-0.8.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__yoke-derive-0.8.1\",\n sha256 = \"b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/yoke-derive/0.8.1/download\"],\n strip_prefix = \"yoke-derive-0.8.1\",\n build_file = Label(\"@crates//crates:BUILD.yoke-derive-0.8.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zerocopy-0.8.30\",\n sha256 = \"4ea879c944afe8a2b25fef16bb4ba234f47c694565e97383b36f3a878219065c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerocopy/0.8.30/download\"],\n strip_prefix = \"zerocopy-0.8.30\",\n build_file = Label(\"@crates//crates:BUILD.zerocopy-0.8.30.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zerocopy-derive-0.8.30\",\n sha256 = \"cf955aa904d6040f70dc8e9384444cb1030aed272ba3cb09bbc4ab9e7c1f34f5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerocopy-derive/0.8.30/download\"],\n strip_prefix = \"zerocopy-derive-0.8.30\",\n build_file = Label(\"@crates//crates:BUILD.zerocopy-derive-0.8.30.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zerofrom-0.1.6\",\n sha256 = \"50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerofrom/0.1.6/download\"],\n strip_prefix = \"zerofrom-0.1.6\",\n build_file = Label(\"@crates//crates:BUILD.zerofrom-0.1.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zerofrom-derive-0.1.6\",\n sha256 = \"d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerofrom-derive/0.1.6/download\"],\n strip_prefix = \"zerofrom-derive-0.1.6\",\n build_file = Label(\"@crates//crates:BUILD.zerofrom-derive-0.1.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zerotrie-0.2.3\",\n sha256 = \"2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerotrie/0.2.3/download\"],\n strip_prefix = \"zerotrie-0.2.3\",\n build_file = Label(\"@crates//crates:BUILD.zerotrie-0.2.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zerovec-0.11.5\",\n sha256 = \"6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerovec/0.11.5/download\"],\n strip_prefix = \"zerovec-0.11.5\",\n build_file = Label(\"@crates//crates:BUILD.zerovec-0.11.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zerovec-derive-0.11.2\",\n sha256 = \"eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerovec-derive/0.11.2/download\"],\n strip_prefix = \"zerovec-derive-0.11.2\",\n build_file = Label(\"@crates//crates:BUILD.zerovec-derive-0.11.2.bazel\"),\n )\n\n return [\n struct(repo=\"crates__askama-0.14.0\", is_dev_dep = False),\n struct(repo=\"crates__axum-0.7.9\", is_dev_dep = False),\n struct(repo=\"crates__clap-4.5.53\", is_dev_dep = False),\n struct(repo=\"crates__fs2-0.4.3\", is_dev_dep = False),\n struct(repo=\"crates__libc-0.2.177\", is_dev_dep = False),\n struct(repo=\"crates__prost-0.13.5\", is_dev_dep = False),\n struct(repo=\"crates__prost-build-0.13.5\", is_dev_dep = False),\n struct(repo=\"crates__prost-types-0.13.5\", is_dev_dep = False),\n struct(repo=\"crates__regex-1.12.2\", is_dev_dep = False),\n struct(repo=\"crates__reqwest-0.11.27\", is_dev_dep = False),\n struct(repo=\"crates__rusqlite-0.31.0\", is_dev_dep = False),\n struct(repo=\"crates__schemars-0.8.22\", is_dev_dep = False),\n struct(repo=\"crates__serde-1.0.228\", is_dev_dep = False),\n struct(repo=\"crates__serde_json-1.0.145\", is_dev_dep = False),\n struct(repo=\"crates__sha2-0.10.9\", is_dev_dep = False),\n struct(repo=\"crates__tempfile-3.23.0\", is_dev_dep = False),\n struct(repo=\"crates__tokio-1.48.0\", is_dev_dep = False),\n struct(repo=\"crates__toml-0.8.23\", is_dev_dep = False),\n struct(repo=\"crates__tower-0.4.13\", is_dev_dep = False),\n struct(repo=\"crates__tower-http-0.5.2\", is_dev_dep = False),\n struct(repo=\"crates__tracing-0.1.41\", is_dev_dep = False),\n struct(repo=\"crates__tracing-subscriber-0.3.20\", is_dev_dep = False),\n struct(repo=\"crates__urlencoding-2.1.3\", is_dev_dep = False),\n struct(repo=\"crates__uuid-1.18.1\", is_dev_dep = False),\n ]\n" } } }, @@ -948,7 +948,7 @@ "https://static.crates.io/crates/askama_parser/0.14.0/download" ], "strip_prefix": "askama_parser-0.14.0", - "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"askama_parser\",\n deps = [\n \"@crates__memchr-2.7.6//:memchr\",\n \"@crates__serde-1.0.228//:serde\",\n \"@crates__winnow-0.7.13//:winnow\",\n ],\n proc_macro_deps = [\n \"@crates__serde_derive-1.0.228//:serde_derive\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"config\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=askama_parser\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.14.0\",\n)\n" + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"askama_parser\",\n deps = [\n \"@crates__memchr-2.7.6//:memchr\",\n \"@crates__serde-1.0.228//:serde\",\n \"@crates__winnow-0.7.14//:winnow\",\n ],\n proc_macro_deps = [\n \"@crates__serde_derive-1.0.228//:serde_derive\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"config\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=askama_parser\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.14.0\",\n)\n" } }, "crates__async-trait-0.1.89": { @@ -1559,6 +1559,22 @@ "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"form_urlencoded\",\n deps = [\n \"@crates__percent-encoding-2.3.2//:percent_encoding\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"alloc\",\n \"default\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=form_urlencoded\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.2.2\",\n)\n" } }, + "crates__fs2-0.4.3": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/fs2/0.4.3/download" + ], + "strip_prefix": "fs2-0.4.3", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"fs2\",\n deps = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [\n \"@crates__libc-0.2.177//:libc\", # cfg(unix)\n ],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [\n \"@crates__libc-0.2.177//:libc\", # cfg(unix)\n ],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [\n \"@crates__winapi-0.3.9//:winapi\", # cfg(windows)\n ],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [\n \"@crates__libc-0.2.177//:libc\", # cfg(unix)\n ],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [\n \"@crates__libc-0.2.177//:libc\", # cfg(unix)\n ],\n \"//conditions:default\": [],\n }),\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2015\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=fs2\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.4.3\",\n)\n" + } + }, "crates__futures-channel-0.3.31": { "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", "attributes": { @@ -3572,7 +3588,7 @@ "https://static.crates.io/crates/toml_edit/0.22.27/download" ], "strip_prefix": "toml_edit-0.22.27", - "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"toml_edit\",\n deps = [\n \"@crates__indexmap-2.12.1//:indexmap\",\n \"@crates__serde-1.0.228//:serde\",\n \"@crates__serde_spanned-0.6.9//:serde_spanned\",\n \"@crates__toml_datetime-0.6.11//:toml_datetime\",\n \"@crates__toml_write-0.1.2//:toml_write\",\n \"@crates__winnow-0.7.13//:winnow\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"display\",\n \"parse\",\n \"serde\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=toml_edit\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.22.27\",\n)\n" + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"toml_edit\",\n deps = [\n \"@crates__indexmap-2.12.1//:indexmap\",\n \"@crates__serde-1.0.228//:serde\",\n \"@crates__serde_spanned-0.6.9//:serde_spanned\",\n \"@crates__toml_datetime-0.6.11//:toml_datetime\",\n \"@crates__toml_write-0.1.2//:toml_write\",\n \"@crates__winnow-0.7.14//:winnow\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"display\",\n \"parse\",\n \"serde\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=toml_edit\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.22.27\",\n)\n" } }, "crates__toml_write-0.1.2": { @@ -3684,39 +3700,39 @@ "https://static.crates.io/crates/tracing/0.1.41/download" ], "strip_prefix": "tracing-0.1.41", - "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"tracing\",\n deps = [\n \"@crates__log-0.4.28//:log\",\n \"@crates__pin-project-lite-0.2.16//:pin_project_lite\",\n \"@crates__tracing-core-0.1.34//:tracing_core\",\n ],\n proc_macro_deps = [\n \"@crates__tracing-attributes-0.1.30//:tracing_attributes\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"attributes\",\n \"default\",\n \"log\",\n \"std\",\n \"tracing-attributes\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=tracing\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.41\",\n)\n" + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"tracing\",\n deps = [\n \"@crates__log-0.4.28//:log\",\n \"@crates__pin-project-lite-0.2.16//:pin_project_lite\",\n \"@crates__tracing-core-0.1.35//:tracing_core\",\n ],\n proc_macro_deps = [\n \"@crates__tracing-attributes-0.1.31//:tracing_attributes\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"attributes\",\n \"default\",\n \"log\",\n \"std\",\n \"tracing-attributes\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=tracing\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.41\",\n)\n" } }, - "crates__tracing-attributes-0.1.30": { + "crates__tracing-attributes-0.1.31": { "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", "attributes": { "patch_args": [], "patch_tool": "", "patches": [], "remote_patch_strip": 1, - "sha256": "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903", + "sha256": "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da", "type": "tar.gz", "urls": [ - "https://static.crates.io/crates/tracing-attributes/0.1.30/download" + "https://static.crates.io/crates/tracing-attributes/0.1.31/download" ], - "strip_prefix": "tracing-attributes-0.1.30", - "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_proc_macro\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_proc_macro(\n name = \"tracing_attributes\",\n deps = [\n \"@crates__proc-macro2-1.0.103//:proc_macro2\",\n \"@crates__quote-1.0.42//:quote\",\n \"@crates__syn-2.0.111//:syn\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=tracing-attributes\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.30\",\n)\n" + "strip_prefix": "tracing-attributes-0.1.31", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_proc_macro\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_proc_macro(\n name = \"tracing_attributes\",\n deps = [\n \"@crates__proc-macro2-1.0.103//:proc_macro2\",\n \"@crates__quote-1.0.42//:quote\",\n \"@crates__syn-2.0.111//:syn\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=tracing-attributes\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.31\",\n)\n" } }, - "crates__tracing-core-0.1.34": { + "crates__tracing-core-0.1.35": { "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", "attributes": { "patch_args": [], "patch_tool": "", "patches": [], "remote_patch_strip": 1, - "sha256": "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678", + "sha256": "7a04e24fab5c89c6a36eb8558c9656f30d81de51dfa4d3b45f26b21d61fa0a6c", "type": "tar.gz", "urls": [ - "https://static.crates.io/crates/tracing-core/0.1.34/download" + "https://static.crates.io/crates/tracing-core/0.1.35/download" ], - "strip_prefix": "tracing-core-0.1.34", - "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"tracing_core\",\n deps = [\n \"@crates__once_cell-1.21.3//:once_cell\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"default\",\n \"once_cell\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=tracing-core\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.34\",\n)\n" + "strip_prefix": "tracing-core-0.1.35", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"tracing_core\",\n deps = [\n \"@crates__once_cell-1.21.3//:once_cell\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"default\",\n \"once_cell\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=tracing-core\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.35\",\n)\n" } }, "crates__tracing-log-0.2.0": { @@ -3732,7 +3748,7 @@ "https://static.crates.io/crates/tracing-log/0.2.0/download" ], "strip_prefix": "tracing-log-0.2.0", - "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"tracing_log\",\n deps = [\n \"@crates__log-0.4.28//:log\",\n \"@crates__once_cell-1.21.3//:once_cell\",\n \"@crates__tracing-core-0.1.34//:tracing_core\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"log-tracer\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=tracing-log\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.0\",\n)\n" + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"tracing_log\",\n deps = [\n \"@crates__log-0.4.28//:log\",\n \"@crates__once_cell-1.21.3//:once_cell\",\n \"@crates__tracing-core-0.1.35//:tracing_core\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"log-tracer\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=tracing-log\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.0\",\n)\n" } }, "crates__tracing-subscriber-0.3.20": { @@ -3748,7 +3764,7 @@ "https://static.crates.io/crates/tracing-subscriber/0.3.20/download" ], "strip_prefix": "tracing-subscriber-0.3.20", - "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"tracing_subscriber\",\n deps = [\n \"@crates__nu-ansi-term-0.50.3//:nu_ansi_term\",\n \"@crates__sharded-slab-0.1.7//:sharded_slab\",\n \"@crates__smallvec-1.15.1//:smallvec\",\n \"@crates__thread_local-1.1.9//:thread_local\",\n \"@crates__tracing-core-0.1.34//:tracing_core\",\n \"@crates__tracing-log-0.2.0//:tracing_log\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"alloc\",\n \"ansi\",\n \"default\",\n \"fmt\",\n \"nu-ansi-term\",\n \"registry\",\n \"sharded-slab\",\n \"smallvec\",\n \"std\",\n \"thread_local\",\n \"tracing-log\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=tracing-subscriber\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.3.20\",\n)\n" + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"tracing_subscriber\",\n deps = [\n \"@crates__nu-ansi-term-0.50.3//:nu_ansi_term\",\n \"@crates__sharded-slab-0.1.7//:sharded_slab\",\n \"@crates__smallvec-1.15.1//:smallvec\",\n \"@crates__thread_local-1.1.9//:thread_local\",\n \"@crates__tracing-core-0.1.35//:tracing_core\",\n \"@crates__tracing-log-0.2.0//:tracing_log\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"alloc\",\n \"ansi\",\n \"default\",\n \"fmt\",\n \"nu-ansi-term\",\n \"registry\",\n \"sharded-slab\",\n \"smallvec\",\n \"std\",\n \"thread_local\",\n \"tracing-log\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=tracing-subscriber\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.3.20\",\n)\n" } }, "crates__try-lock-0.2.5": { @@ -4071,6 +4087,54 @@ "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"web_sys\",\n deps = [\n \"@crates__js-sys-0.3.82//:js_sys\",\n \"@crates__wasm-bindgen-0.2.105//:wasm_bindgen\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"AbortController\",\n \"AbortSignal\",\n \"Blob\",\n \"BlobPropertyBag\",\n \"EventTarget\",\n \"File\",\n \"FormData\",\n \"Headers\",\n \"ReadableStream\",\n \"Request\",\n \"RequestCredentials\",\n \"RequestInit\",\n \"RequestMode\",\n \"Response\",\n \"ServiceWorkerGlobalScope\",\n \"Window\",\n \"WorkerGlobalScope\",\n \"default\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=web-sys\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.3.82\",\n)\n" } }, + "crates__winapi-0.3.9": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/winapi/0.3.9/download" + ], + "strip_prefix": "winapi-0.3.9", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"winapi\",\n deps = [\n \"@crates__winapi-0.3.9//:build_script_build\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"fileapi\",\n \"handleapi\",\n \"processthreadsapi\",\n \"std\",\n \"winbase\",\n \"winerror\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2015\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=winapi\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.3.9\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"fileapi\",\n \"handleapi\",\n \"processthreadsapi\",\n \"std\",\n \"winbase\",\n \"winerror\",\n ],\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n edition = \"2015\",\n pkg_name = \"winapi\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=winapi\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.3.9\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crates__winapi-i686-pc-windows-gnu-0.4.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/winapi-i686-pc-windows-gnu/0.4.0/download" + ], + "strip_prefix": "winapi-i686-pc-windows-gnu-0.4.0", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"winapi_i686_pc_windows_gnu\",\n deps = [\n \"@crates__winapi-i686-pc-windows-gnu-0.4.0//:build_script_build\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2015\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=winapi-i686-pc-windows-gnu\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.4.0\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n edition = \"2015\",\n pkg_name = \"winapi-i686-pc-windows-gnu\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=winapi-i686-pc-windows-gnu\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.4.0\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crates__winapi-x86_64-pc-windows-gnu-0.4.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/winapi-x86_64-pc-windows-gnu/0.4.0/download" + ], + "strip_prefix": "winapi-x86_64-pc-windows-gnu-0.4.0", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"winapi_x86_64_pc_windows_gnu\",\n deps = [\n \"@crates__winapi-x86_64-pc-windows-gnu-0.4.0//:build_script_build\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2015\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=winapi-x86_64-pc-windows-gnu\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.4.0\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n edition = \"2015\",\n pkg_name = \"winapi-x86_64-pc-windows-gnu\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=winapi-x86_64-pc-windows-gnu\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.4.0\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, "crates__windows-link-0.2.1": { "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", "attributes": { @@ -4567,20 +4631,20 @@ "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_x86_64_msvc\",\n deps = [\n \"@crates__windows_x86_64_msvc-0.53.1//:build_script_build\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_x86_64_msvc\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.53.1\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n edition = \"2021\",\n pkg_name = \"windows_x86_64_msvc\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_x86_64_msvc\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.53.1\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" } }, - "crates__winnow-0.7.13": { + "crates__winnow-0.7.14": { "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", "attributes": { "patch_args": [], "patch_tool": "", "patches": [], "remote_patch_strip": 1, - "sha256": "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf", + "sha256": "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829", "type": "tar.gz", "urls": [ - "https://static.crates.io/crates/winnow/0.7.13/download" + "https://static.crates.io/crates/winnow/0.7.14/download" ], - "strip_prefix": "winnow-0.7.13", - "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"winnow\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"alloc\",\n \"default\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=winnow\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.7.13\",\n)\n" + "strip_prefix": "winnow-0.7.14", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'databuild'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"winnow\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"alloc\",\n \"default\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=winnow\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.7.14\",\n)\n" } }, "crates__winreg-0.50.0": { diff --git a/databuild/BUILD.bazel b/databuild/BUILD.bazel index 7111579..c4ac567 100644 --- a/databuild/BUILD.bazel +++ b/databuild/BUILD.bazel @@ -33,9 +33,12 @@ rust_library( deps = [ "@crates//:askama", "@crates//:axum", + "@crates//:fs2", + "@crates//:libc", "@crates//:prost", "@crates//:prost-types", "@crates//:regex", + "@crates//:reqwest", "@crates//:rusqlite", "@crates//:schemars", "@crates//:serde", @@ -56,6 +59,9 @@ rust_test( crate = ":lib", data = ["//databuild/test:test_job_helper"], env = {"RUST_BACKTRACE": "1"}, + deps = [ + "@crates//:tempfile", + ], ) # DataBuild CLI binary diff --git a/databuild/cli_main.rs b/databuild/cli_main.rs index 0f26b29..a285c21 100644 --- a/databuild/cli_main.rs +++ b/databuild/cli_main.rs @@ -1,21 +1,24 @@ use clap::{Parser, Subcommand}; use reqwest::blocking::Client; +use std::path::Path; use std::sync::{Arc, RwLock}; use std::time::Duration; use tokio::sync::{broadcast, mpsc}; use lib::build_event_log::SqliteBELStorage; use lib::build_state::BuildState; use lib::config::DatabuildConfig; +use lib::daemon::{self, DaemonizeResult}; use lib::http_server::{create_router, AppState}; use lib::orchestrator::{Orchestrator, OrchestratorConfig}; +use lib::server_lock::ServerLock; #[derive(Parser)] #[command(name = "databuild")] #[command(about = "DataBuild CLI - Build system for data pipelines", long_about = None)] struct Cli { - /// Server URL - #[arg(long, default_value = "http://localhost:3538", global = true)] - server: String, + /// Path to configuration file (JSON or TOML) + #[arg(long, default_value = "databuild.json", global = true)] + config: String, #[command(subcommand)] command: Commands, @@ -25,19 +28,21 @@ struct Cli { enum Commands { /// Start the DataBuild HTTP server Serve { - /// Port to listen on - #[arg(long, default_value = "3538")] - port: u16, - - /// Database URL (default: :memory: for in-memory SQLite) - #[arg(long, default_value = ":memory:")] - database: String, - - /// Path to configuration file (JSON or TOML) + /// Port to listen on (auto-selected if not specified) #[arg(long)] - config: Option, + port: Option, + + /// Run as a daemon (internal flag, used by auto-start) + #[arg(long, hide = true)] + daemon: bool, }, + /// Stop the running server + Stop, + + /// Show server status + Status, + /// Create a new want (trigger partition builds) Want { /// Partition references to build (e.g., "data/users", "metrics/daily") @@ -81,60 +86,159 @@ enum JobRunsCommands { List, } +/// Load config and return (config, graph_label, config_hash) +fn load_config(config_path: &str) -> (DatabuildConfig, String) { + let config = DatabuildConfig::from_file(config_path).unwrap_or_else(|e| { + eprintln!("Failed to load config from {}: {}", config_path, e); + std::process::exit(1); + }); + let config_hash = ServerLock::hash_config(Path::new(config_path)).unwrap_or_else(|e| { + eprintln!("Failed to hash config: {}", e); + std::process::exit(1); + }); + (config, config_hash) +} + +/// Ensure server is running, return the server URL +fn ensure_server(config_path: &str) -> String { + let (config, config_hash) = load_config(config_path); + + match daemon::ensure_server_running(Path::new(config_path), &config.graph_label, &config_hash) { + Ok(DaemonizeResult::Started { port }) => { + eprintln!("Started server on port {}", port); + format!("http://127.0.0.1:{}", port) + } + Ok(DaemonizeResult::AlreadyRunning { port }) => { + format!("http://127.0.0.1:{}", port) + } + Err(e) => { + eprintln!("Failed to start server: {}", e); + std::process::exit(1); + } + } +} + fn main() { let cli = Cli::parse(); match cli.command { - Commands::Serve { port, database, config } => { - cmd_serve(port, &database, config.as_deref()); + Commands::Serve { port, daemon: _ } => { + let (config, _config_hash) = load_config(&cli.config); + // Ensure graph directory exists (for log file, lock file, etc.) + let _ = ServerLock::new(&config.graph_label).unwrap_or_else(|e| { + eprintln!("Failed to create graph directory: {}", e); + std::process::exit(1); + }); + let database = config.effective_bel_uri(); + let actual_port = port.unwrap_or_else(|| { + daemon::find_available_port(3538).unwrap_or_else(|e| { + eprintln!("Failed to find available port: {}", e); + std::process::exit(1); + }) + }); + cmd_serve(actual_port, &database, &cli.config, &config); + } + Commands::Stop => { + cmd_stop(&cli.config); + } + Commands::Status => { + cmd_status(&cli.config); } Commands::Want { partitions } => { - cmd_want(&cli.server, partitions); + let server_url = ensure_server(&cli.config); + cmd_want(&server_url, partitions); } Commands::Wants { command } => match command { WantsCommands::List => { - cmd_wants_list(&cli.server); + let server_url = ensure_server(&cli.config); + cmd_wants_list(&server_url); } }, Commands::Partitions { command } => match command { Some(PartitionsCommands::List) | None => { - cmd_partitions_list(&cli.server); + let server_url = ensure_server(&cli.config); + cmd_partitions_list(&server_url); } }, Commands::JobRuns { command } => match command { Some(JobRunsCommands::List) | None => { - cmd_job_runs_list(&cli.server); + let server_url = ensure_server(&cli.config); + cmd_job_runs_list(&server_url); } }, } } +fn cmd_stop(config_path: &str) { + let (config, _) = load_config(config_path); + + match daemon::stop_server(&config.graph_label) { + Ok(()) => { + println!("Server stopped"); + } + Err(e) => { + eprintln!("Failed to stop server: {}", e); + std::process::exit(1); + } + } +} + +fn cmd_status(config_path: &str) { + let (config, config_hash) = load_config(config_path); + let lock = ServerLock::new(&config.graph_label).unwrap_or_else(|e| { + eprintln!("Failed to access lock: {}", e); + std::process::exit(1); + }); + + match lock.read_state() { + Ok(Some(state)) => { + let running = ServerLock::is_process_running(state.pid); + let healthy = if running { daemon::health_check(state.port) } else { false }; + let config_changed = state.config_hash != config_hash; + + println!("DataBuild Server Status"); + println!("━━━━━━━━━━━━━━━━━━━━━━━━"); + println!("Graph: {}", config.graph_label); + println!("Status: {}", if healthy { "Running" } else if running { "Unhealthy" } else { "Stopped" }); + println!("PID: {}", state.pid); + println!("Port: {}", state.port); + println!("Database: {}", config.effective_bel_uri()); + if config_changed { + println!(); + println!("⚠ Config has changed since server started"); + } + } + Ok(None) => { + println!("DataBuild Server Status"); + println!("━━━━━━━━━━━━━━━━━━━━━━━━"); + println!("Graph: {}", config.graph_label); + println!("Database: {}", config.effective_bel_uri()); + println!("Status: Not running"); + } + Err(e) => { + eprintln!("Failed to read server state: {}", e); + std::process::exit(1); + } + } +} + // ============================================================================ // Command Implementations // ============================================================================ #[tokio::main] -async fn cmd_serve(port: u16, database: &str, config_path: Option<&str>) { +async fn cmd_serve(port: u16, database: &str, config_path: &str, config: &DatabuildConfig) { // Initialize logging tracing_subscriber::fmt::init(); - // Load configuration if provided - let jobs = if let Some(path) = config_path { - match DatabuildConfig::from_file(path) { - Ok(config) => { - println!("Loaded configuration from: {}", path); - println!(" Jobs: {}", config.jobs.len()); - config.into_job_configurations() - } - Err(e) => { - eprintln!("Failed to load configuration from {}: {}", path, e); - std::process::exit(1); - } - } - } else { - Vec::new() - }; + println!("Loaded configuration from: {}", config_path); + println!(" Graph: {}", config.graph_label); + println!(" Jobs: {}", config.jobs.len()); + println!(" Idle timeout: {}s", config.idle_timeout_seconds); + + let jobs = config.clone().into_job_configurations(); + let idle_timeout_secs = config.idle_timeout_seconds; // Create SQLite BEL storage (shared between orchestrator and HTTP server) let bel_storage = Arc::new( @@ -208,7 +312,7 @@ async fn cmd_serve(port: u16, database: &str, config_path: Option<&str>) { let idle_state = state.clone(); let idle_shutdown_tx = shutdown_tx.clone(); tokio::spawn(async move { - let idle_timeout = Duration::from_secs(3 * 60 * 60); // 3 hours + let idle_timeout = Duration::from_secs(idle_timeout_secs); loop { tokio::time::sleep(Duration::from_secs(60)).await; @@ -221,8 +325,8 @@ async fn cmd_serve(port: u16, database: &str, config_path: Option<&str>) { if now - last_request > idle_timeout.as_millis() as u64 { eprintln!( - "Server idle for {} hours, shutting down", - idle_timeout.as_secs() / 3600 + "Server idle for {}s, shutting down", + idle_timeout.as_secs() ); let _ = idle_shutdown_tx.send(()); break; diff --git a/databuild/config.rs b/databuild/config.rs index 47cbc05..dc5a7e0 100644 --- a/databuild/config.rs +++ b/databuild/config.rs @@ -4,13 +4,38 @@ use crate::util::DatabuildError; use std::fs; use std::path::Path; +/// Default idle timeout in seconds (1 hour) +pub const DEFAULT_IDLE_TIMEOUT_SECONDS: u64 = 3600; + /// Configuration file format for DataBuild application -#[derive(Debug, serde::Deserialize)] +#[derive(Debug, Clone, serde::Deserialize, serde::Serialize)] pub struct DatabuildConfig { + /// Unique identifier for this graph, used for `.databuild/${graph_label}/` directory + pub graph_label: String, + + /// Server auto-shutdown after this many seconds of inactivity (default: 3600) + #[serde(default = "default_idle_timeout")] + pub idle_timeout_seconds: u64, + + /// BEL storage URI. Defaults to `.databuild/${graph_label}/bel.sqlite` if not specified. + /// + /// Supported formats: + /// - Relative path: `path/to/bel.sqlite` (resolved relative to config file) + /// - Absolute path: `/var/data/bel.sqlite` + /// - SQLite URI: `sqlite:///path/to/bel.sqlite` or `sqlite::memory:` + /// - Future: `postgresql://user:pass@host/db` + #[serde(default)] + pub bel_uri: Option, + /// List of job configurations + #[serde(default)] pub jobs: Vec, } +fn default_idle_timeout() -> u64 { + DEFAULT_IDLE_TIMEOUT_SECONDS +} + impl DatabuildConfig { /// Load configuration from a file, auto-detecting format from extension pub fn from_file>(path: P) -> Result { @@ -47,6 +72,16 @@ impl DatabuildConfig { pub fn into_job_configurations(self) -> Vec { self.jobs.into_iter().map(|jc| jc.into()).collect() } + + /// Get the effective BEL URI, resolving defaults based on graph_label. + /// + /// If `bel_uri` is not set, returns the default path `.databuild/${graph_label}/bel.sqlite`. + /// Relative paths are not resolved here - that's the caller's responsibility. + pub fn effective_bel_uri(&self) -> String { + self.bel_uri.clone().unwrap_or_else(|| { + format!(".databuild/{}/bel.sqlite", self.graph_label) + }) + } } #[cfg(test)] @@ -57,6 +92,7 @@ mod tests { fn test_parse_json_config() { let json = r#" { + "graph_label": "test_graph", "jobs": [ { "label": "//test:job_alpha", @@ -69,13 +105,44 @@ mod tests { "#; let config = DatabuildConfig::from_json(json).unwrap(); + assert_eq!(config.graph_label, "test_graph"); + assert_eq!(config.idle_timeout_seconds, DEFAULT_IDLE_TIMEOUT_SECONDS); assert_eq!(config.jobs.len(), 1); assert_eq!(config.jobs[0].label, "//test:job_alpha"); } + #[test] + fn test_parse_json_config_with_idle_timeout() { + let json = r#" + { + "graph_label": "test_graph", + "idle_timeout_seconds": 7200, + "jobs": [] + } + "#; + + let config = DatabuildConfig::from_json(json).unwrap(); + assert_eq!(config.graph_label, "test_graph"); + assert_eq!(config.idle_timeout_seconds, 7200); + assert_eq!(config.jobs.len(), 0); + } + + #[test] + fn test_effective_bel_uri() { + // Default: derives from graph_label + let config = DatabuildConfig::from_json(r#"{ "graph_label": "my_graph" }"#).unwrap(); + assert_eq!(config.effective_bel_uri(), ".databuild/my_graph/bel.sqlite"); + + // Custom: uses provided value + let config = DatabuildConfig::from_json(r#"{ "graph_label": "my_graph", "bel_uri": "postgresql://localhost/db" }"#).unwrap(); + assert_eq!(config.effective_bel_uri(), "postgresql://localhost/db"); + } + #[test] fn test_parse_toml_config() { let toml = r#" + graph_label = "test_graph" + [[jobs]] label = "//test:job_alpha" entrypoint = "/usr/bin/python3" @@ -86,6 +153,8 @@ mod tests { "#; let config = DatabuildConfig::from_toml(toml).unwrap(); + assert_eq!(config.graph_label, "test_graph"); + assert_eq!(config.idle_timeout_seconds, DEFAULT_IDLE_TIMEOUT_SECONDS); assert_eq!(config.jobs.len(), 1); assert_eq!(config.jobs[0].label, "//test:job_alpha"); } diff --git a/databuild/daemon.rs b/databuild/daemon.rs new file mode 100644 index 0000000..1ac1ab8 --- /dev/null +++ b/databuild/daemon.rs @@ -0,0 +1,213 @@ +//! Server daemonization for CLI-server automation. +//! +//! Implements the classic double-fork pattern to create a proper Unix daemon. + +use crate::server_lock::{ServerLock, ServerLockState}; +use crate::util::DatabuildError; +use std::fs::OpenOptions; +use std::path::Path; +use std::process::{Child, Command, Stdio}; + +/// Result of attempting to start a daemonized server. +pub enum DaemonizeResult { + /// Server was started, here's the port. + Started { port: u16 }, + /// Server was already running at this port. + AlreadyRunning { port: u16 }, +} + +/// Find an available port starting from the given port. +pub fn find_available_port(start_port: u16) -> Result { + for port in start_port..=start_port + 100 { + if let Ok(listener) = std::net::TcpListener::bind(format!("127.0.0.1:{}", port)) { + drop(listener); + return Ok(port); + } + } + Err(DatabuildError::from(format!( + "No available port found in range {}..{}", + start_port, + start_port + 100 + ))) +} + +/// Check if the server at the given port is healthy. +pub fn health_check(port: u16) -> bool { + let url = format!("http://127.0.0.1:{}/health", port); + match reqwest::blocking::get(&url) { + Ok(resp) => resp.status().is_success(), + Err(_) => false, + } +} + +/// Wait for the server at the given port to become healthy. +/// Returns Ok(()) if healthy within timeout, Err otherwise. +pub fn wait_for_health(port: u16, timeout_ms: u64) -> Result<(), DatabuildError> { + let start = std::time::Instant::now(); + let timeout = std::time::Duration::from_millis(timeout_ms); + + while start.elapsed() < timeout { + if health_check(port) { + return Ok(()); + } + std::thread::sleep(std::time::Duration::from_millis(100)); + } + + Err(DatabuildError::from(format!( + "Server did not become healthy within {}ms", + timeout_ms + ))) +} + +/// Spawn the server as a daemon process. +/// +/// This re-executes the current binary with `serve` command and special flags +/// to indicate it should daemonize itself. +pub fn spawn_daemon( + config_path: &Path, + port: u16, + log_path: &Path, +) -> Result { + // Get the current executable path + let exe = std::env::current_exe() + .map_err(|e| DatabuildError::from(format!("Failed to get current executable: {}", e)))?; + + // Open log file for stdout/stderr redirection + let log_file = OpenOptions::new() + .create(true) + .append(true) + .open(log_path) + .map_err(|e| DatabuildError::from(format!("Failed to open log file: {}", e)))?; + + let log_file_err = log_file + .try_clone() + .map_err(|e| DatabuildError::from(format!("Failed to clone log file: {}", e)))?; + + // Spawn the daemon process + let child = Command::new(exe) + .arg("serve") + .arg("--port") + .arg(port.to_string()) + .arg("--config") + .arg(config_path) + .arg("--daemon") + .stdin(Stdio::null()) + .stdout(Stdio::from(log_file)) + .stderr(Stdio::from(log_file_err)) + .spawn() + .map_err(|e| DatabuildError::from(format!("Failed to spawn daemon: {}", e)))?; + + Ok(child) +} + +/// Attempt to start the server, or connect to an existing one. +/// +/// This is the main entry point for CLI commands that need the server running. +pub fn ensure_server_running( + config_path: &Path, + graph_label: &str, + config_hash: &str, +) -> Result { + let mut lock = ServerLock::new(graph_label)?; + + // Try to acquire the lock + if lock.try_lock()? { + // We got the lock, so no server is running + // Find an available port + let port = find_available_port(3538)?; + + // Write initial state (we'll update after server starts) + let state = ServerLockState { + pid: std::process::id(), + port, + started_at: ServerLock::now_millis(), + config_hash: config_hash.to_string(), + }; + lock.write_state(&state)?; + + // Spawn the daemon + let log_path = lock.log_path(); + let mut child = spawn_daemon(config_path, port, &log_path)?; + + // Update state with actual PID + let pid = child.id(); + let state = ServerLockState { + pid, + port, + started_at: ServerLock::now_millis(), + config_hash: config_hash.to_string(), + }; + lock.write_state(&state)?; + + // Release the lock so the daemon can grab it + drop(lock); + + // Wait for server to become healthy + wait_for_health(port, 10000)?; + + Ok(DaemonizeResult::Started { port }) + } else { + // Server is already running, read the port + let state = lock + .read_state()? + .ok_or_else(|| DatabuildError::from("Lock held but no state found"))?; + + // Verify server is actually healthy + if !health_check(state.port) { + return Err(DatabuildError::from(format!( + "Server at port {} appears unhealthy. Try 'databuild stop' and retry.", + state.port + ))); + } + + // Check if config has changed + if state.config_hash != config_hash { + eprintln!( + "Warning: Config has changed since server started.\n\ + Run 'databuild stop && databuild serve' to apply changes." + ); + } + + Ok(DaemonizeResult::AlreadyRunning { port: state.port }) + } +} + +/// Stop a running server. +pub fn stop_server(graph_label: &str) -> Result<(), DatabuildError> { + let lock = ServerLock::new(graph_label)?; + let state = lock + .read_state()? + .ok_or_else(|| DatabuildError::from("No server is running"))?; + + // Check if process exists + if !ServerLock::is_process_running(state.pid) { + // Process already dead, clean up stale lock + lock.remove_stale_lock()?; + return Ok(()); + } + + // Send SIGTERM to the server + #[cfg(unix)] + unsafe { + libc::kill(state.pid as i32, libc::SIGTERM); + } + + // Wait for process to exit (with timeout) + let start = std::time::Instant::now(); + let timeout = std::time::Duration::from_secs(10); + + while start.elapsed() < timeout { + if !ServerLock::is_process_running(state.pid) { + return Ok(()); + } + std::thread::sleep(std::time::Duration::from_millis(100)); + } + + // If still running after timeout, force kill + #[cfg(unix)] + unsafe { + libc::kill(state.pid as i32, libc::SIGKILL); + } + + Ok(()) +} diff --git a/databuild/lib.rs b/databuild/lib.rs index 5b4bfb0..dc76cab 100644 --- a/databuild/lib.rs +++ b/databuild/lib.rs @@ -2,6 +2,7 @@ pub mod build_event_log; pub mod build_state; pub mod commands; pub mod config; +pub mod daemon; mod data_deps; mod event_transforms; pub mod http_server; @@ -11,6 +12,7 @@ mod job_run_state; mod mock_job_run; pub mod orchestrator; mod partition_state; +pub mod server_lock; mod util; mod want_state; pub mod web; diff --git a/databuild/server_lock.rs b/databuild/server_lock.rs new file mode 100644 index 0000000..b6bec71 --- /dev/null +++ b/databuild/server_lock.rs @@ -0,0 +1,300 @@ +//! Server lock file management for CLI-server automation. +//! +//! This module handles the `.databuild/${graph_label}/server.lock` file which: +//! 1. Acts as a file lock to prevent multiple servers for the same graph +//! 2. Stores runtime state (PID, port, start time, config hash) + +use crate::util::DatabuildError; +use fs2::FileExt; +use sha2::{Digest, Sha256}; +use std::fs::{self, File, OpenOptions}; +use std::io::{Read, Write}; +use std::path::{Path, PathBuf}; + +/// Runtime state stored in the server.lock file +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] +pub struct ServerLockState { + /// Server process ID + pub pid: u32, + /// HTTP port the server is listening on + pub port: u16, + /// Unix timestamp (milliseconds) when server started + pub started_at: u64, + /// SHA256 hash of config file contents (for detecting config changes) + pub config_hash: String, +} + +/// Manages the server lock file and .databuild directory structure. +pub struct ServerLock { + /// Path to the .databuild/${graph_label}/ directory + graph_dir: PathBuf, + /// Path to the server.lock file + lock_path: PathBuf, + /// Open file handle (holds the lock while alive) + lock_file: Option, +} + +impl ServerLock { + /// Create a ServerLock for the given graph label, using the current directory. + /// Creates the .databuild/${graph_label}/ directory if it doesn't exist. + pub fn new(graph_label: &str) -> Result { + Self::new_in_dir(Path::new("."), graph_label) + } + + /// Create a ServerLock for the given graph label in the specified base directory. + /// Creates the .databuild/${graph_label}/ directory if it doesn't exist. + pub fn new_in_dir(base_dir: &Path, graph_label: &str) -> Result { + let graph_dir = base_dir.join(".databuild").join(graph_label); + fs::create_dir_all(&graph_dir) + .map_err(|e| DatabuildError::from(format!("Failed to create graph directory: {}", e)))?; + + let lock_path = graph_dir.join("server.lock"); + + Ok(Self { + graph_dir, + lock_path, + lock_file: None, + }) + } + + /// Path to the graph directory (`.databuild/${graph_label}/`) + pub fn graph_dir(&self) -> &Path { + &self.graph_dir + } + + /// Path to the server log file + pub fn log_path(&self) -> PathBuf { + self.graph_dir.join("server.log") + } + + /// Try to acquire an exclusive lock on the server.lock file. + /// Returns Ok(true) if lock acquired (server not running). + /// Returns Ok(false) if lock is held by another process (server running). + pub fn try_lock(&mut self) -> Result { + let file = OpenOptions::new() + .read(true) + .write(true) + .create(true) + .truncate(false) + .open(&self.lock_path) + .map_err(|e| DatabuildError::from(format!("Failed to open lock file: {}", e)))?; + + match file.try_lock_exclusive() { + Ok(()) => { + self.lock_file = Some(file); + Ok(true) + } + Err(e) if e.kind() == std::io::ErrorKind::WouldBlock => { + // Lock is held by another process + Ok(false) + } + Err(e) => Err(DatabuildError::from(format!("Failed to acquire lock: {}", e))), + } + } + + /// Write the server state to the lock file. + /// Must have acquired the lock first via try_lock(). + pub fn write_state(&mut self, state: &ServerLockState) -> Result<(), DatabuildError> { + let file = self + .lock_file + .as_mut() + .ok_or_else(|| DatabuildError::from("Lock not acquired"))?; + + // Truncate and write new content + file.set_len(0) + .map_err(|e| DatabuildError::from(format!("Failed to truncate lock file: {}", e)))?; + + let content = serde_json::to_string_pretty(state) + .map_err(|e| DatabuildError::from(format!("Failed to serialize state: {}", e)))?; + + // Seek to beginning + use std::io::Seek; + file.seek(std::io::SeekFrom::Start(0)) + .map_err(|e| DatabuildError::from(format!("Failed to seek: {}", e)))?; + + file.write_all(content.as_bytes()) + .map_err(|e| DatabuildError::from(format!("Failed to write state: {}", e)))?; + + file.flush() + .map_err(|e| DatabuildError::from(format!("Failed to flush: {}", e)))?; + + Ok(()) + } + + /// Read the server state from the lock file. + /// Can be called without holding the lock (to read port from running server). + pub fn read_state(&self) -> Result, DatabuildError> { + if !self.lock_path.exists() { + return Ok(None); + } + + let mut file = File::open(&self.lock_path) + .map_err(|e| DatabuildError::from(format!("Failed to open lock file: {}", e)))?; + + let mut content = String::new(); + file.read_to_string(&mut content) + .map_err(|e| DatabuildError::from(format!("Failed to read lock file: {}", e)))?; + + if content.trim().is_empty() { + return Ok(None); + } + + let state: ServerLockState = serde_json::from_str(&content) + .map_err(|e| DatabuildError::from(format!("Failed to parse lock file: {}", e)))?; + + Ok(Some(state)) + } + + /// Check if the process with the given PID is still running. + pub fn is_process_running(pid: u32) -> bool { + // On Unix, sending signal 0 checks if process exists + #[cfg(unix)] + { + use std::os::unix::process::CommandExt; + unsafe { + libc::kill(pid as i32, 0) == 0 + } + } + #[cfg(not(unix))] + { + // On non-Unix, assume process is running if we can't check + true + } + } + + /// Delete a stale lock file (when process has crashed). + pub fn remove_stale_lock(&self) -> Result<(), DatabuildError> { + if self.lock_path.exists() { + fs::remove_file(&self.lock_path) + .map_err(|e| DatabuildError::from(format!("Failed to remove stale lock: {}", e)))?; + } + Ok(()) + } + + /// Compute SHA256 hash of config file contents. + pub fn hash_config(config_path: &Path) -> Result { + let content = fs::read_to_string(config_path) + .map_err(|e| DatabuildError::from(format!("Failed to read config: {}", e)))?; + + let mut hasher = Sha256::new(); + hasher.update(content.as_bytes()); + let result = hasher.finalize(); + + Ok(format!("sha256:{:x}", result)) + } + + /// Get current timestamp in milliseconds since Unix epoch. + pub fn now_millis() -> u64 { + std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .unwrap() + .as_millis() as u64 + } +} + +impl Drop for ServerLock { + fn drop(&mut self) { + // Lock is automatically released when file is closed + if let Some(file) = self.lock_file.take() { + let _ = file.unlock(); + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + use tempfile::tempdir; + + #[test] + fn test_server_lock_acquire() { + let temp = tempdir().unwrap(); + let mut lock = ServerLock::new_in_dir(temp.path(), "test_graph").unwrap(); + assert!(lock.try_lock().unwrap(), "Lock should succeed"); + } + + #[test] + fn test_server_lock_state_read_write() { + let temp = tempdir().unwrap(); + let mut lock = ServerLock::new_in_dir(temp.path(), "test_graph").unwrap(); + assert!(lock.try_lock().unwrap()); + + let state = ServerLockState { + pid: 12345, + port: 8080, + started_at: 1701234567890, + config_hash: "sha256:abc123".to_string(), + }; + + lock.write_state(&state).unwrap(); + + // Read it back (via a fresh ServerLock to test read without lock) + let lock2 = ServerLock::new_in_dir(temp.path(), "test_graph").unwrap(); + let read_state = lock2.read_state().unwrap().unwrap(); + assert_eq!(read_state.pid, 12345); + assert_eq!(read_state.port, 8080); + assert_eq!(read_state.started_at, 1701234567890); + assert_eq!(read_state.config_hash, "sha256:abc123"); + } + + #[test] + fn test_server_lock_graph_dir() { + let temp = tempdir().unwrap(); + let lock = ServerLock::new_in_dir(temp.path(), "my_graph").unwrap(); + assert!(lock.graph_dir().ends_with(".databuild/my_graph")); + } + + #[test] + fn test_server_lock_log_path() { + let temp = tempdir().unwrap(); + let lock = ServerLock::new_in_dir(temp.path(), "my_graph").unwrap(); + assert!(lock.log_path().ends_with(".databuild/my_graph/server.log")); + } + + #[test] + fn test_hash_config() { + let temp = tempdir().unwrap(); + let config_path = temp.path().join("config.json"); + fs::write(&config_path, r#"{"graph_label": "test"}"#).unwrap(); + + let hash = ServerLock::hash_config(&config_path).unwrap(); + assert!(hash.starts_with("sha256:")); + assert!(hash.len() > 10); + } + + #[test] + fn test_hash_config_deterministic() { + let temp = tempdir().unwrap(); + let config_path = temp.path().join("config.json"); + fs::write(&config_path, r#"{"graph_label": "test"}"#).unwrap(); + + let hash1 = ServerLock::hash_config(&config_path).unwrap(); + let hash2 = ServerLock::hash_config(&config_path).unwrap(); + assert_eq!(hash1, hash2, "Same content should produce same hash"); + } + + #[test] + fn test_read_state_nonexistent() { + let temp = tempdir().unwrap(); + let lock = ServerLock::new_in_dir(temp.path(), "nonexistent_graph").unwrap(); + let state = lock.read_state().unwrap(); + assert!(state.is_none(), "Reading nonexistent lock file should return None"); + } + + #[test] + fn test_now_millis() { + let before = std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .unwrap() + .as_millis() as u64; + + let now = ServerLock::now_millis(); + + let after = std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .unwrap() + .as_millis() as u64; + + assert!(now >= before && now <= after, "now_millis should be between before and after"); + } +} diff --git a/databuild/util.rs b/databuild/util.rs index cfd5738..ab5e6c7 100644 --- a/databuild/util.rs +++ b/databuild/util.rs @@ -78,6 +78,12 @@ impl From for DatabuildError { } } +impl From<&str> for DatabuildError { + fn from(value: &str) -> Self { + Self::new(value) + } +} + impl std::fmt::Display for DatabuildError { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(f, "{}", self.msg) diff --git a/docs/design/cli-server-automation.md b/docs/design/cli-server-automation.md new file mode 100644 index 0000000..337264a --- /dev/null +++ b/docs/design/cli-server-automation.md @@ -0,0 +1,330 @@ +# CLI-Server Automation + +This document describes how the DataBuild CLI automatically manages the HTTP server lifecycle, providing a "magical" experience where users don't need to think about starting or stopping servers. + +## Goals + +1. **Zero-config startup**: Running `databuild want data/alpha` should "just work" without manual server management +2. **Workspace isolation**: Multiple graphs can run independently with separate servers and databases +3. **Resource efficiency**: Servers auto-shutdown after idle timeout +4. **Transparency**: Users can inspect server state and logs when needed + +## Design Overview + +### Architecture + +``` +┌─────────────────────────────────────────────────────────────┐ +│ CLI Process │ +│ databuild want data/alpha │ +│ │ +│ 1. Load config (databuild.json) │ +│ 2. Check .databuild/${graph_label}/server.lock │ +│ 3. If not running → daemonize server │ +│ 4. Forward request to http://localhost:${port}/api/wants │ +└─────────────────────────────────────────────────────────────┘ + │ + ▼ +┌─────────────────────────────────────────────────────────────┐ +│ Daemonized Server │ +│ PID: 12345, Port: 8080 │ +│ │ +│ - Holds file lock on server.lock │ +│ - Writes logs to server.log │ +│ - Auto-shutdown after idle_timeout_seconds │ +└─────────────────────────────────────────────────────────────┘ + │ + ▼ +┌─────────────────────────────────────────────────────────────┐ +│ .databuild/${graph_label}/ │ +│ │ +│ server.lock - Lock file + runtime state (JSON) │ +│ bel.sqlite - Build Event Log database │ +│ server.log - Server stdout/stderr │ +└─────────────────────────────────────────────────────────────┘ +``` + +### Directory Structure + +``` +project/ +├── databuild.json # User-authored config +├── .databuild/ +│ └── ${graph_label}/ # e.g., "podcast_reviews" +│ ├── server.lock # Runtime state + file lock +│ ├── bel.sqlite # Build Event Log (SQLite) +│ └── server.log # Server logs +``` + +## Configuration + +### Extended Config Schema + +The `databuild.json` (or custom config file) is extended with: + +```json +{ + "graph_label": "podcast_reviews", + "idle_timeout_seconds": 3600, + "jobs": [ + { + "label": "//examples:daily_summaries", + "entrypoint": "./jobs/daily_summaries.sh", + "environment": { "OUTPUT_DIR": "/data/output" }, + "partition_patterns": ["daily_summaries/.*"] + } + ] +} +``` + +| Field | Type | Default | Description | +|-------|------|---------|-------------| +| `graph_label` | string | **required** | Unique identifier for this graph, used for `.databuild/${graph_label}/` directory | +| `idle_timeout_seconds` | u64 | 3600 | Server auto-shutdown after this many seconds of inactivity | +| `jobs` | array | [] | Job configurations (existing schema) | + +### Runtime State (server.lock) + +The `server.lock` file serves dual purposes: +1. **File lock**: Prevents multiple servers for the same graph +2. **Runtime state**: Contains current server information + +```json +{ + "pid": 12345, + "port": 8080, + "started_at": 1701234567890, + "config_hash": "sha256:abc123..." +} +``` + +| Field | Description | +|-------|-------------| +| `pid` | Server process ID | +| `port` | HTTP port the server is listening on | +| `started_at` | Unix timestamp (milliseconds) when server started | +| `config_hash` | Hash of config file contents (for detecting config changes) | + +## CLI Commands + +### Existing Commands (Enhanced) + +All commands that interact with the server now auto-start if needed: + +```bash +# Creates want, auto-starting server if not running +databuild want data/alpha data/beta + +# Lists wants, auto-starting server if not running +databuild wants list + +# Lists partitions +databuild partitions list + +# Lists job runs +databuild job-runs list +``` + +### New Commands + +```bash +# Explicitly start server (for users who want manual control) +databuild serve +databuild serve --config ./custom-config.json + +# Show server status +databuild status + +# Graceful shutdown +databuild stop +``` + +### Command: `databuild status` + +Shows current server state: + +``` +DataBuild Server Status +━━━━━━━━━━━━━━━━━━━━━━━━ +Graph: podcast_reviews +Status: Running +PID: 12345 +Port: 8080 +Uptime: 2h 34m +Database: .databuild/podcast_reviews/bel.sqlite + +Active Job Runs: 2 +Pending Wants: 5 +``` + +### Command: `databuild stop` + +Gracefully shuts down the server: + +```bash +$ databuild stop +Stopping DataBuild server (PID 12345)... +Server stopped. +``` + +## Server Lifecycle + +### Startup Flow + +``` +CLI invocation (e.g., databuild want data/alpha) + │ + ▼ +Load databuild.json (or --config path) + │ + ▼ +Extract graph_label from config + │ + ▼ +Ensure .databuild/${graph_label}/ exists + │ + ▼ +Try flock(server.lock, LOCK_EX | LOCK_NB) + │ + ├─── Lock acquired → Server not running (or crashed) + │ │ + │ ▼ + │ Find available port (start from 3538, increment if busy) + │ │ + │ ▼ + │ Daemonize: fork → setsid → fork → redirect I/O + │ │ + │ ▼ + │ Child: Start server, hold lock, write server.lock JSON + │ Parent: Wait for health check, then proceed + │ + └─── Lock blocked → Server already running + │ + ▼ + Read port from server.lock + │ + ▼ + Health check (GET /health) + │ + ├─── Success → Use this server + │ + └─── Failure → Wait and retry (server starting up) + │ + ▼ +Forward request to http://localhost:${port}/api/... +``` + +### Daemonization + +The server daemonizes using the classic double-fork pattern: + +1. **First fork**: Parent returns immediately to CLI +2. **setsid()**: Become session leader, detach from terminal +3. **Second fork**: Prevent re-acquiring terminal +4. **Redirect I/O**: stdout/stderr → `server.log`, stdin → `/dev/null` +5. **Write lock file**: PID, port, started_at, config_hash +6. **Start serving**: Hold file lock for lifetime of process + +### Idle Timeout + +The server monitors request activity: + +1. Track `last_request_time` (updated on each HTTP request) +2. Background task checks every 60 seconds +3. If `now - last_request_time > idle_timeout_seconds` → graceful shutdown + +### Graceful Shutdown + +On shutdown (idle timeout, SIGTERM, or `databuild stop`): + +1. Stop accepting new connections +2. Wait for in-flight requests to complete (with timeout) +3. Signal orchestrator to stop +4. Wait for orchestrator thread to finish +5. Release file lock (automatic on process exit) +6. Exit + +## Port Selection + +When starting a new server: + +1. Start with default port 3538 +2. Try to bind; if port in use, increment and retry +3. Store selected port in `server.lock` +4. CLI reads port from lock file, not from config + +This handles the case where the preferred port is occupied by another process. + +## Config Change Detection + +The `config_hash` field in `server.lock` enables detecting when the config file has changed since the server started: + +1. On CLI invocation, compute hash of current config file +2. Compare with `config_hash` in `server.lock` +3. If different, warn user: + ``` + Warning: Config has changed since server started. + Run 'databuild stop && databuild serve' to apply changes. + ``` + +We don't auto-restart because that could interrupt in-progress builds. + +## Error Handling + +### Stale Lock File + +If `server.lock` exists but the lock is not held (process crashed): + +1. Delete the stale `server.lock` +2. Proceed with normal startup + +### Server Unreachable + +If lock is held but health check fails repeatedly: + +1. Log warning: "Server appears unresponsive" +2. After N retries, suggest: "Try 'kill -9 ${pid}' and retry" + +### Port Conflict + +If preferred port is in use: + +1. Automatically try next port (3539, 3540, ...) +2. Store actual port in `server.lock` +3. CLI reads from lock file, so it always connects to correct port + +## Future Considerations + +### Multi-Graph Scenarios + +The `graph_label` based directory structure supports multiple graphs in the same workspace. Each graph has independent: +- Server process +- Port allocation +- BEL database +- Idle timeout + +### Remote Servers + +The current design assumes localhost. Future extensions could support: +- Remote server URLs in config +- SSH tunneling +- Cloud-hosted servers + +### Job Re-entrance + +Currently, if a server crashes mid-build, job runs are orphaned. Future work: +- Detect orphaned job runs on startup +- Resume or mark as failed +- Track external job processes (e.g., Databricks jobs) + +## Implementation Checklist + +- [ ] Extend `DatabuildConfig` with `graph_label` and `idle_timeout_seconds` +- [ ] Create `ServerLock` struct for reading/writing lock file +- [ ] Implement file locking with `flock()` +- [ ] Implement daemonization (double-fork pattern) +- [ ] Add auto-start logic to existing CLI commands +- [ ] Add `databuild stop` command +- [ ] Add `databuild status` command +- [ ] Update example configs with `graph_label` +- [ ] Add integration tests for server lifecycle diff --git a/examples/multihop/config.json b/examples/multihop/config.json index 878cbcd..43fc22b 100644 --- a/examples/multihop/config.json +++ b/examples/multihop/config.json @@ -1,4 +1,5 @@ { + "graph_label": "multihop", "jobs": [ { "label": "//examples/multihop:job_alpha",