From 959bc48c42d9d8df42d1636f583fd61a38a36c36 Mon Sep 17 00:00:00 2001 From: Tarry Singh Date: Wed, 28 Feb 2024 15:47:37 +0000 Subject: [PATCH] Add HuggingFace tokenizer bindings and SentencePiece integration; update BUILD files, async utilities, and FFI modules to support the new tokenizers. --- MODULE.bazel | 33 + MODULE.bazel.lock | 1318 ++++++++++++++++- async/async.zig | 2 +- async/coro.zig | 10 +- async/stack.zig | 4 +- bazel/swig.bzl | 149 ++ ffi/BUILD.bazel | 22 + ffi/ffi.zig | 12 + ffi/zig_allocator.h | 22 + ffi/zig_allocator.zig | 25 + ffi/zig_slice.h | 9 + ffi/zig_slice.zig | 15 + stdx/BUILD.bazel | 2 + stdx/json.zig | 72 + stdx/stdx.zig | 2 + stdx/time.zig | 34 + .../com_google_sentencepiece/BUILD.bazel | 38 + third_party/com_google_sentencepiece/fwd.bzl | 14 + third_party/com_google_sentencepiece/repo.bzl | 9 + .../sentencepiece.bazel | 95 ++ third_party/non_module_deps.bzl | 16 + third_party/org_swig_swig/repo.bzl | 10 + third_party/org_swig_swig/swig.bazel | 109 ++ zml/BUILD.bazel | 1 + zml/aio.zig | 23 +- zml/aio/gguf.zig | 70 - zml/aio/sentencepiece.zig | 52 - zml/hostbuffer.zig | 2 +- zml/meta.zig | 2 +- zml/tensor.zig | 2 +- zml/tokenizer/BUILD.bazel | 35 + zml/tokenizer/hftokenizers/BUILD.bazel | 38 + zml/tokenizer/hftokenizers/Cargo.lock | 669 +++++++++ zml/tokenizer/hftokenizers/Cargo.toml | 13 + zml/tokenizer/hftokenizers/hftokenizers.h | 16 + zml/tokenizer/hftokenizers/hftokenizers.rs | 101 ++ zml/tokenizer/hftokenizers/hftokenizers.zig | 113 ++ zml/tokenizer/hftokenizers/main.zig | 27 + zml/tokenizer/main.zig | 22 + zml/tokenizer/sentencepiece/BUILD.bazel | 35 + zml/tokenizer/sentencepiece/main.zig | 289 ++++ zml/tokenizer/sentencepiece/sentencepiece.i | 92 ++ zml/tokenizer/sentencepiece/sentencepiece.zig | 189 +++ zml/tokenizer/tokenizer.zig | 118 ++ zml/zml.zig | 3 +- 45 files changed, 3751 insertions(+), 183 deletions(-) create mode 100644 bazel/swig.bzl create mode 100644 ffi/BUILD.bazel create mode 100644 ffi/ffi.zig create mode 100644 ffi/zig_allocator.h create mode 100644 ffi/zig_allocator.zig create mode 100644 ffi/zig_slice.h create mode 100644 ffi/zig_slice.zig create mode 100644 stdx/json.zig create mode 100644 stdx/time.zig create mode 100644 third_party/com_google_sentencepiece/BUILD.bazel create mode 100644 third_party/com_google_sentencepiece/fwd.bzl create mode 100644 third_party/com_google_sentencepiece/repo.bzl create mode 100644 third_party/com_google_sentencepiece/sentencepiece.bazel create mode 100644 third_party/non_module_deps.bzl create mode 100644 third_party/org_swig_swig/repo.bzl create mode 100644 third_party/org_swig_swig/swig.bazel create mode 100644 zml/tokenizer/BUILD.bazel create mode 100644 zml/tokenizer/hftokenizers/BUILD.bazel create mode 100644 zml/tokenizer/hftokenizers/Cargo.lock create mode 100644 zml/tokenizer/hftokenizers/Cargo.toml create mode 100644 zml/tokenizer/hftokenizers/hftokenizers.h create mode 100644 zml/tokenizer/hftokenizers/hftokenizers.rs create mode 100644 zml/tokenizer/hftokenizers/hftokenizers.zig create mode 100644 zml/tokenizer/hftokenizers/main.zig create mode 100644 zml/tokenizer/main.zig create mode 100644 zml/tokenizer/sentencepiece/BUILD.bazel create mode 100644 zml/tokenizer/sentencepiece/main.zig create mode 100644 zml/tokenizer/sentencepiece/sentencepiece.i create mode 100644 zml/tokenizer/sentencepiece/sentencepiece.zig create mode 100644 zml/tokenizer/tokenizer.zig diff --git a/MODULE.bazel b/MODULE.bazel index 81c1c17..d700e4f 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -7,7 +7,10 @@ new_git_repository = use_repo_rule("@bazel_tools//tools/build_defs/repo:git.bzl" bazel_dep(name = "bazel_skylib", version = "1.7.1") bazel_dep(name = "hermetic_cc_toolchain", version = "3.1.1") bazel_dep(name = "patchelf", version = "0.18.0") +bazel_dep(name = "pcre2", version = "10.43") +bazel_dep(name = "abseil-cpp", version = "20240722.0.bcr.2") bazel_dep(name = "platforms", version = "0.0.10") +bazel_dep(name = "protobuf", version = "29.2") bazel_dep(name = "rules_cc", version = "0.0.17") bazel_dep(name = "rules_pkg", version = "1.0.1") bazel_dep(name = "rules_proto", version = "7.1.0") @@ -114,3 +117,33 @@ apt.install( manifest = "//runtimes/neuron:packages.yaml", ) use_repo(apt, "neuron_bookworm") + +non_module_deps = use_extension("//:third_party/non_module_deps.bzl", "non_module_deps") +use_repo(non_module_deps, "com_google_sentencepiece", "org_swig_swig") + +bazel_dep(name = "rules_rust", version = "0.57.0") +rust = use_extension("@rules_rust//rust:extensions.bzl", "rust") +rust.toolchain( + edition = "2021", + versions = ["1.84.0"], + extra_target_triples = [ + "aarch64-apple-darwin", + "aarch64-unknown-linux-gnu", + "x86_64-unknown-linux-gnu", + ], +) +use_repo(rust, "rust_toolchains") +register_toolchains("@rust_toolchains//:all") + +crate = use_extension("@rules_rust//crate_universe:extensions.bzl", "crate") +crate.from_cargo( + name = "crates", + cargo_lockfile = "//zml/tokenizer/hftokenizers:Cargo.lock", + manifests = ["//zml/tokenizer/hftokenizers:Cargo.toml"], + supported_platform_triples = [ + "aarch64-apple-darwin", + "aarch64-unknown-linux-gnu", + "x86_64-unknown-linux-gnu", + ], +) +use_repo(crate, "crates") diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 58e64e7..b23d905 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -9,12 +9,17 @@ "https://bazel-registry.zml.ai/modules/abseil-cpp/20230802.1/MODULE.bazel": "not found", "https://bazel-registry.zml.ai/modules/abseil-cpp/20240116.0/MODULE.bazel": "not found", "https://bazel-registry.zml.ai/modules/abseil-cpp/20240116.1/MODULE.bazel": "not found", + "https://bazel-registry.zml.ai/modules/abseil-cpp/20240116.2/MODULE.bazel": "not found", + "https://bazel-registry.zml.ai/modules/abseil-cpp/20240722.0.bcr.2/MODULE.bazel": "not found", "https://bazel-registry.zml.ai/modules/apple_support/1.11.1/MODULE.bazel": "not found", + "https://bazel-registry.zml.ai/modules/apple_support/1.15.1/MODULE.bazel": "not found", + "https://bazel-registry.zml.ai/modules/apple_support/1.17.1/MODULE.bazel": "not found", "https://bazel-registry.zml.ai/modules/aspect_bazel_lib/2.11.0/MODULE.bazel": "not found", "https://bazel-registry.zml.ai/modules/aspect_bazel_lib/2.8.1/MODULE.bazel": "not found", "https://bazel-registry.zml.ai/modules/aspect_bazel_lib/2.9.4/MODULE.bazel": "not found", "https://bazel-registry.zml.ai/modules/aspect_rules_py/1.0.0/MODULE.bazel": "not found", "https://bazel-registry.zml.ai/modules/bazel_features/1.1.1/MODULE.bazel": "not found", + "https://bazel-registry.zml.ai/modules/bazel_features/1.10.0/MODULE.bazel": "not found", "https://bazel-registry.zml.ai/modules/bazel_features/1.11.0/MODULE.bazel": "not found", "https://bazel-registry.zml.ai/modules/bazel_features/1.15.0/MODULE.bazel": "not found", "https://bazel-registry.zml.ai/modules/bazel_features/1.17.0/MODULE.bazel": "not found", @@ -44,17 +49,21 @@ "https://bazel-registry.zml.ai/modules/googletest/1.11.0/MODULE.bazel": "not found", "https://bazel-registry.zml.ai/modules/googletest/1.14.0.bcr.1/MODULE.bazel": "not found", "https://bazel-registry.zml.ai/modules/googletest/1.14.0/MODULE.bazel": "not found", + "https://bazel-registry.zml.ai/modules/googletest/1.15.2/MODULE.bazel": "not found", "https://bazel-registry.zml.ai/modules/hermetic_cc_toolchain/3.1.1/MODULE.bazel": "not found", "https://bazel-registry.zml.ai/modules/jsoncpp/1.9.5/MODULE.bazel": "not found", "https://bazel-registry.zml.ai/modules/libpfm/4.11.0/MODULE.bazel": "not found", "https://bazel-registry.zml.ai/modules/nlohmann_json/3.6.1/MODULE.bazel": "not found", "https://bazel-registry.zml.ai/modules/patchelf/0.18.0/MODULE.bazel": "not found", + "https://bazel-registry.zml.ai/modules/pcre2/10.43/MODULE.bazel": "not found", "https://bazel-registry.zml.ai/modules/platforms/0.0.10/MODULE.bazel": "not found", + "https://bazel-registry.zml.ai/modules/platforms/0.0.11/MODULE.bazel": "not found", "https://bazel-registry.zml.ai/modules/platforms/0.0.4/MODULE.bazel": "not found", "https://bazel-registry.zml.ai/modules/platforms/0.0.5/MODULE.bazel": "not found", "https://bazel-registry.zml.ai/modules/platforms/0.0.6/MODULE.bazel": "not found", "https://bazel-registry.zml.ai/modules/platforms/0.0.7/MODULE.bazel": "not found", "https://bazel-registry.zml.ai/modules/platforms/0.0.8/MODULE.bazel": "not found", + "https://bazel-registry.zml.ai/modules/platforms/0.0.9/MODULE.bazel": "not found", "https://bazel-registry.zml.ai/modules/protobuf/21.7/MODULE.bazel": "not found", "https://bazel-registry.zml.ai/modules/protobuf/23.1/MODULE.bazel": "not found", "https://bazel-registry.zml.ai/modules/protobuf/24.4/MODULE.bazel": "not found", @@ -64,11 +73,14 @@ "https://bazel-registry.zml.ai/modules/protobuf/29.0-rc2/MODULE.bazel": "not found", "https://bazel-registry.zml.ai/modules/protobuf/29.0/MODULE.bazel": "not found", "https://bazel-registry.zml.ai/modules/protobuf/29.1/MODULE.bazel": "not found", + "https://bazel-registry.zml.ai/modules/protobuf/29.2/MODULE.bazel": "not found", "https://bazel-registry.zml.ai/modules/protobuf/3.19.0/MODULE.bazel": "not found", "https://bazel-registry.zml.ai/modules/pybind11_bazel/2.11.1.bzl.1/MODULE.bazel": "not found", "https://bazel-registry.zml.ai/modules/pybind11_bazel/2.11.1/MODULE.bazel": "not found", + "https://bazel-registry.zml.ai/modules/pybind11_bazel/2.12.0/MODULE.bazel": "not found", "https://bazel-registry.zml.ai/modules/re2/2023-09-01/MODULE.bazel": "not found", "https://bazel-registry.zml.ai/modules/re2/2024-02-01/MODULE.bazel": "not found", + "https://bazel-registry.zml.ai/modules/re2/2024-07-02/MODULE.bazel": "not found", "https://bazel-registry.zml.ai/modules/rules_android/0.1.1/MODULE.bazel": "not found", "https://bazel-registry.zml.ai/modules/rules_apple/3.2.1/MODULE.bazel": "not found", "https://bazel-registry.zml.ai/modules/rules_cc/0.0.1/MODULE.bazel": "not found", @@ -128,10 +140,13 @@ "https://bazel-registry.zml.ai/modules/rules_python/0.28.0/MODULE.bazel": "not found", "https://bazel-registry.zml.ai/modules/rules_python/0.29.0/MODULE.bazel": "not found", "https://bazel-registry.zml.ai/modules/rules_python/0.31.0/MODULE.bazel": "not found", + "https://bazel-registry.zml.ai/modules/rules_python/0.33.2/MODULE.bazel": "not found", "https://bazel-registry.zml.ai/modules/rules_python/0.34.0/MODULE.bazel": "not found", "https://bazel-registry.zml.ai/modules/rules_python/0.4.0/MODULE.bazel": "not found", "https://bazel-registry.zml.ai/modules/rules_python/0.40.0/MODULE.bazel": "not found", + "https://bazel-registry.zml.ai/modules/rules_rust/0.57.0/MODULE.bazel": "not found", "https://bazel-registry.zml.ai/modules/rules_shell/0.2.0/MODULE.bazel": "not found", + "https://bazel-registry.zml.ai/modules/rules_shell/0.3.0/MODULE.bazel": "not found", "https://bazel-registry.zml.ai/modules/rules_swift/1.15.1/MODULE.bazel": "not found", "https://bazel-registry.zml.ai/modules/rules_uv/0.34.0/MODULE.bazel": "not found", "https://bazel-registry.zml.ai/modules/stardoc/0.5.1/MODULE.bazel": "not found", @@ -157,9 +172,13 @@ "https://bcr.bazel.build/modules/abseil-cpp/20230802.1/MODULE.bazel": "fa92e2eb41a04df73cdabeec37107316f7e5272650f81d6cc096418fe647b915", "https://bcr.bazel.build/modules/abseil-cpp/20240116.0/MODULE.bazel": "98dc378d64c12a4e4741ad3362f87fb737ee6a0886b2d90c3cdbb4d93ea3e0bf", "https://bcr.bazel.build/modules/abseil-cpp/20240116.1/MODULE.bazel": "37bcdb4440fbb61df6a1c296ae01b327f19e9bb521f9b8e26ec854b6f97309ed", - "https://bcr.bazel.build/modules/abseil-cpp/20240116.1/source.json": "9be551b8d4e3ef76875c0d744b5d6a504a27e3ae67bc6b28f46415fd2d2957da", + "https://bcr.bazel.build/modules/abseil-cpp/20240116.2/MODULE.bazel": "73939767a4686cd9a520d16af5ab440071ed75cec1a876bf2fcfaf1f71987a16", + "https://bcr.bazel.build/modules/abseil-cpp/20240722.0.bcr.2/MODULE.bazel": "c3661b44c9d3f17f0b65ffb544896aaeb89127398ea867537babac18133a002a", + "https://bcr.bazel.build/modules/abseil-cpp/20240722.0.bcr.2/source.json": "464f3012c8f40cd51facbfc6962563971c6bd55f45ba16bd98313f2de73340c5", "https://bcr.bazel.build/modules/apple_support/1.11.1/MODULE.bazel": "1843d7cd8a58369a444fc6000e7304425fba600ff641592161d9f15b179fb896", - "https://bcr.bazel.build/modules/apple_support/1.11.1/source.json": "c797537544f4b76d46d12f488456529d7372b6ccff249c82fca50ce0a665957f", + "https://bcr.bazel.build/modules/apple_support/1.15.1/MODULE.bazel": "a0556fefca0b1bb2de8567b8827518f94db6a6e7e7d632b4c48dc5f865bc7c85", + "https://bcr.bazel.build/modules/apple_support/1.17.1/MODULE.bazel": "655c922ab1209978a94ef6ca7d9d43e940cd97d9c172fb55f94d91ac53f8610b", + "https://bcr.bazel.build/modules/apple_support/1.17.1/source.json": "6b2b8c74d14e8d485528a938e44bdb72a5ba17632b9e14ef6e68a5ee96c8347f", "https://bcr.bazel.build/modules/aspect_bazel_lib/2.11.0/MODULE.bazel": "cb1ba9f9999ed0bc08600c221f532c1ddd8d217686b32ba7d45b0713b5131452", "https://bcr.bazel.build/modules/aspect_bazel_lib/2.11.0/source.json": "92494d5aa43b96665397dd13ee16023097470fa85e276b93674d62a244de47ee", "https://bcr.bazel.build/modules/aspect_bazel_lib/2.8.1/MODULE.bazel": "812d2dd42f65dca362152101fbec418029cc8fd34cbad1a2fde905383d705838", @@ -167,6 +186,7 @@ "https://bcr.bazel.build/modules/aspect_rules_py/1.0.0/MODULE.bazel": "8eb29876512d3242af50a424300bec5c5f8957b455963df5f618cb7fd4e8ae19", "https://bcr.bazel.build/modules/aspect_rules_py/1.0.0/source.json": "f48be9ca9f58adb817450c677659ed087d540d9f355f4e39098431cecd86ebf9", "https://bcr.bazel.build/modules/bazel_features/1.1.1/MODULE.bazel": "27b8c79ef57efe08efccbd9dd6ef70d61b4798320b8d3c134fd571f78963dbcd", + "https://bcr.bazel.build/modules/bazel_features/1.10.0/MODULE.bazel": "f75e8807570484a99be90abcd52b5e1f390362c258bcb73106f4544957a48101", "https://bcr.bazel.build/modules/bazel_features/1.11.0/MODULE.bazel": "f9382337dd5a474c3b7d334c2f83e50b6eaedc284253334cf823044a26de03e8", "https://bcr.bazel.build/modules/bazel_features/1.15.0/MODULE.bazel": "d38ff6e517149dc509406aca0db3ad1efdd890a85e049585b7234d04238e2a4d", "https://bcr.bazel.build/modules/bazel_features/1.17.0/MODULE.bazel": "039de32d21b816b47bd42c778e0454217e9c9caac4a3cf8e15c7231ee3ddee4d", @@ -199,8 +219,9 @@ "https://bcr.bazel.build/modules/google_benchmark/1.8.2/MODULE.bazel": "a70cf1bba851000ba93b58ae2f6d76490a9feb74192e57ab8e8ff13c34ec50cb", "https://bcr.bazel.build/modules/googletest/1.11.0/MODULE.bazel": "3a83f095183f66345ca86aa13c58b59f9f94a2f81999c093d4eeaa2d262d12f4", "https://bcr.bazel.build/modules/googletest/1.14.0.bcr.1/MODULE.bazel": "22c31a561553727960057361aa33bf20fb2e98584bc4fec007906e27053f80c6", - "https://bcr.bazel.build/modules/googletest/1.14.0.bcr.1/source.json": "41e9e129f80d8c8bf103a7acc337b76e54fad1214ac0a7084bf24f4cd924b8b4", "https://bcr.bazel.build/modules/googletest/1.14.0/MODULE.bazel": "cfbcbf3e6eac06ef9d85900f64424708cc08687d1b527f0ef65aa7517af8118f", + "https://bcr.bazel.build/modules/googletest/1.15.2/MODULE.bazel": "6de1edc1d26cafb0ea1a6ab3f4d4192d91a312fd2d360b63adaa213cd00b2108", + "https://bcr.bazel.build/modules/googletest/1.15.2/source.json": "dbdda654dcb3a0d7a8bc5d0ac5fc7e150b58c2a986025ae5bc634bb2cb61f470", "https://bcr.bazel.build/modules/hermetic_cc_toolchain/3.1.1/MODULE.bazel": "164331a6e73093376a19eaa1eae45a94aad3245e9e79d8f31237f4a8eb6c1c41", "https://bcr.bazel.build/modules/hermetic_cc_toolchain/3.1.1/source.json": "a2f67694b91ae575e2715fa2c5745c8c9879e7132852ef45c05b4e25a0d3b423", "https://bcr.bazel.build/modules/jsoncpp/1.9.5/MODULE.bazel": "31271aedc59e815656f5736f282bb7509a97c7ecb43e927ac1a37966e0578075", @@ -210,13 +231,17 @@ "https://bcr.bazel.build/modules/nlohmann_json/3.6.1/source.json": "f448c6e8963fdfa7eb831457df83ad63d3d6355018f6574fb017e8169deb43a9", "https://bcr.bazel.build/modules/patchelf/0.18.0/MODULE.bazel": "15a6beff7e828d585c5bd0f9f93589df117b5594e9d19e43096c77de58b9ae5f", "https://bcr.bazel.build/modules/patchelf/0.18.0/source.json": "57caf6bcaa5ba515c6fb1c2eacee00735afbeb1ffacb34a57553fb139c8e4333", + "https://bcr.bazel.build/modules/pcre2/10.43/MODULE.bazel": "08eaa025111bd0fedc14a8187c2905fa6ee4501fbe558193e9bf6cc3e2cdf23c", + "https://bcr.bazel.build/modules/pcre2/10.43/source.json": "8b4149e707094f1d5b57df7216539c3415226e814085c4d960bd9f3d49581b88", "https://bcr.bazel.build/modules/platforms/0.0.10/MODULE.bazel": "8cb8efaf200bdeb2150d93e162c40f388529a25852b332cec879373771e48ed5", - "https://bcr.bazel.build/modules/platforms/0.0.10/source.json": "f22828ff4cf021a6b577f1bf6341cb9dcd7965092a439f64fc1bb3b7a5ae4bd5", + "https://bcr.bazel.build/modules/platforms/0.0.11/MODULE.bazel": "0daefc49732e227caa8bfa834d65dc52e8cc18a2faf80df25e8caea151a9413f", + "https://bcr.bazel.build/modules/platforms/0.0.11/source.json": "f7e188b79ebedebfe75e9e1d098b8845226c7992b307e28e1496f23112e8fc29", "https://bcr.bazel.build/modules/platforms/0.0.4/MODULE.bazel": "9b328e31ee156f53f3c416a64f8491f7eb731742655a47c9eec4703a71644aee", "https://bcr.bazel.build/modules/platforms/0.0.5/MODULE.bazel": "5733b54ea419d5eaf7997054bb55f6a1d0b5ff8aedf0176fef9eea44f3acda37", "https://bcr.bazel.build/modules/platforms/0.0.6/MODULE.bazel": "ad6eeef431dc52aefd2d77ed20a4b353f8ebf0f4ecdd26a807d2da5aa8cd0615", "https://bcr.bazel.build/modules/platforms/0.0.7/MODULE.bazel": "72fd4a0ede9ee5c021f6a8dd92b503e089f46c227ba2813ff183b71616034814", "https://bcr.bazel.build/modules/platforms/0.0.8/MODULE.bazel": "9f142c03e348f6d263719f5074b21ef3adf0b139ee4c5133e2aa35664da9eb2d", + "https://bcr.bazel.build/modules/platforms/0.0.9/MODULE.bazel": "4a87a60c927b56ddd67db50c89acaa62f4ce2a1d2149ccb63ffd871d5ce29ebc", "https://bcr.bazel.build/modules/protobuf/21.7/MODULE.bazel": "a5a29bb89544f9b97edce05642fac225a808b5b7be74038ea3640fae2f8e66a7", "https://bcr.bazel.build/modules/protobuf/23.1/MODULE.bazel": "88b393b3eb4101d18129e5db51847cd40a5517a53e81216144a8c32dfeeca52a", "https://bcr.bazel.build/modules/protobuf/24.4/MODULE.bazel": "7bc7ce5f2abf36b3b7b7c8218d3acdebb9426aeb35c2257c96445756f970eb12", @@ -226,14 +251,17 @@ "https://bcr.bazel.build/modules/protobuf/29.0-rc2/MODULE.bazel": "6241d35983510143049943fc0d57937937122baf1b287862f9dc8590fc4c37df", "https://bcr.bazel.build/modules/protobuf/29.0/MODULE.bazel": "319dc8bf4c679ff87e71b1ccfb5a6e90a6dbc4693501d471f48662ac46d04e4e", "https://bcr.bazel.build/modules/protobuf/29.1/MODULE.bazel": "557c3457560ff49e122ed76c0bc3397a64af9574691cb8201b4e46d4ab2ecb95", - "https://bcr.bazel.build/modules/protobuf/29.1/source.json": "04cca85dce26b895ed037d98336d860367fe09919208f2ad383f0df1aff63199", + "https://bcr.bazel.build/modules/protobuf/29.2/MODULE.bazel": "5435497c190d86f79b0568698c45044df7c8d97692886cda9fe9cf9053aea712", + "https://bcr.bazel.build/modules/protobuf/29.2/source.json": "fe7090cc34072609b26d9beafb122916dabc1d47ba61b242c26c4b06c51384ab", "https://bcr.bazel.build/modules/protobuf/3.19.0/MODULE.bazel": "6b5fbb433f760a99a22b18b6850ed5784ef0e9928a72668b66e4d7ccd47db9b0", "https://bcr.bazel.build/modules/pybind11_bazel/2.11.1.bzl.1/MODULE.bazel": "1ef2994c097ee88f8f7ae8fbf991aaefb0603b2540fe575eca14943bc9f220a6", - "https://bcr.bazel.build/modules/pybind11_bazel/2.11.1.bzl.1/source.json": "d8f5b2ebc186b90c6112f92f43d86359dda2c3649c754d9680fd668f8dd28a79", "https://bcr.bazel.build/modules/pybind11_bazel/2.11.1/MODULE.bazel": "88af1c246226d87e65be78ed49ecd1e6f5e98648558c14ce99176da041dc378e", + "https://bcr.bazel.build/modules/pybind11_bazel/2.12.0/MODULE.bazel": "e6f4c20442eaa7c90d7190d8dc539d0ab422f95c65a57cc59562170c58ae3d34", + "https://bcr.bazel.build/modules/pybind11_bazel/2.12.0/source.json": "6900fdc8a9e95866b8c0d4ad4aba4d4236317b5c1cd04c502df3f0d33afed680", "https://bcr.bazel.build/modules/re2/2023-09-01/MODULE.bazel": "cb3d511531b16cfc78a225a9e2136007a48cf8a677e4264baeab57fe78a80206", "https://bcr.bazel.build/modules/re2/2024-02-01/MODULE.bazel": "5ed922cb8b6c110e30969695e73bd0d3159576bf17ce8ee2443a7d07bf500551", - "https://bcr.bazel.build/modules/re2/2024-02-01/source.json": "0b108d5e9836cb66815fbbb70e4395eab52dc29dd2c39a9785f01d6661a8f37e", + "https://bcr.bazel.build/modules/re2/2024-07-02/MODULE.bazel": "0eadc4395959969297cbcf31a249ff457f2f1d456228c67719480205aa306daa", + "https://bcr.bazel.build/modules/re2/2024-07-02/source.json": "547d0111a9d4f362db32196fef805abbf3676e8d6afbe44d395d87816c1130ca", "https://bcr.bazel.build/modules/rules_android/0.1.1/MODULE.bazel": "48809ab0091b07ad0182defb787c4c5328bd3a278938415c00a7b69b50c4d3a8", "https://bcr.bazel.build/modules/rules_android/0.1.1/source.json": "e6986b41626ee10bdc864937ffb6d6bf275bb5b9c65120e6137d56e6331f089e", "https://bcr.bazel.build/modules/rules_apple/3.2.1/MODULE.bazel": "55f19b572fdb4a4bd5a1c2231b60c663f8b4e3146769062b2bdeba72226c74b7", @@ -305,12 +333,16 @@ "https://bcr.bazel.build/modules/rules_python/0.28.0/MODULE.bazel": "cba2573d870babc976664a912539b320cbaa7114cd3e8f053c720171cde331ed", "https://bcr.bazel.build/modules/rules_python/0.29.0/MODULE.bazel": "2ac8cd70524b4b9ec49a0b8284c79e4cd86199296f82f6e0d5da3f783d660c82", "https://bcr.bazel.build/modules/rules_python/0.31.0/MODULE.bazel": "93a43dc47ee570e6ec9f5779b2e64c1476a6ce921c48cc9a1678a91dd5f8fd58", + "https://bcr.bazel.build/modules/rules_python/0.33.2/MODULE.bazel": "3e036c4ad8d804a4dad897d333d8dce200d943df4827cb849840055be8d2e937", "https://bcr.bazel.build/modules/rules_python/0.34.0/MODULE.bazel": "1d623d026e075b78c9fde483a889cda7996f5da4f36dffb24c246ab30f06513a", "https://bcr.bazel.build/modules/rules_python/0.4.0/MODULE.bazel": "9208ee05fd48bf09ac60ed269791cf17fb343db56c8226a720fbb1cdf467166c", "https://bcr.bazel.build/modules/rules_python/0.40.0/MODULE.bazel": "9d1a3cd88ed7d8e39583d9ffe56ae8a244f67783ae89b60caafc9f5cf318ada7", "https://bcr.bazel.build/modules/rules_python/0.40.0/source.json": "939d4bd2e3110f27bfb360292986bb79fd8dcefb874358ccd6cdaa7bda029320", + "https://bcr.bazel.build/modules/rules_rust/0.57.0/MODULE.bazel": "645cd4f378625a5402902725dc8ee6fe73692add5ce206dcd39573b9a443c779", + "https://bcr.bazel.build/modules/rules_rust/0.57.0/source.json": "146954fe01c8ebf67335ebbff07dbec604a2fa8ab35fa69a5beb7659c5ca425f", "https://bcr.bazel.build/modules/rules_shell/0.2.0/MODULE.bazel": "fda8a652ab3c7d8fee214de05e7a9916d8b28082234e8d2c0094505c5268ed3c", - "https://bcr.bazel.build/modules/rules_shell/0.2.0/source.json": "7f27af3c28037d9701487c4744b5448d26537cc66cdef0d8df7ae85411f8de95", + "https://bcr.bazel.build/modules/rules_shell/0.3.0/MODULE.bazel": "de4402cd12f4cc8fda2354fce179fdb068c0b9ca1ec2d2b17b3e21b24c1a937b", + "https://bcr.bazel.build/modules/rules_shell/0.3.0/source.json": "c55ed591aa5009401ddf80ded9762ac32c358d2517ee7820be981e2de9756cf3", "https://bcr.bazel.build/modules/rules_swift/1.15.1/MODULE.bazel": "7031d3e5221b54dfee3901d221f10f54a8b0f2a64d4616de7879bcf83fe8d85d", "https://bcr.bazel.build/modules/rules_swift/1.15.1/source.json": "6472a4607d0a2f39eeb7daae78054b995aba593caad99aa64561f631fcf93a63", "https://bcr.bazel.build/modules/rules_uv/0.34.0/MODULE.bazel": "fb7c2da897786eac4b643d1ed516be715c11566620ee5cf022d7009298ad9590", @@ -338,8 +370,8 @@ "moduleExtensions": { "@@apple_support+//crosstool:setup.bzl%apple_cc_configure_extension": { "general": { - "bzlTransitiveDigest": "NxE3f0kkx3L/C5ULaaKuYZLNgVHcbPOIVibLX8HxHbs=", - "usagesDigest": "Pb6xZM0EL061vtADoHWkUxDVg939ikaZtDb4DEkpiFI=", + "bzlTransitiveDigest": "ITx/8jw3GGyuOGY+lPIMUpqAZ/C/a7QCppY0pzlSh40=", + "usagesDigest": "ihPOermYOcgUXp1fkbfqTDW/SDt1VoYTbB4OIXkKhgs=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -658,22 +690,6 @@ ] } }, - "@@platforms//host:extension.bzl%host_platform": { - "general": { - "bzlTransitiveDigest": "WewbYICdNVp22bzUQafEVMzMIpBnNjJ3zqKlUOCDIGc=", - "usagesDigest": "oE4ta23mz3wAyrx56roFFfmM09xpH6ofj7muLEoSI7I=", - "recordedFileInputs": {}, - "recordedDirentsInputs": {}, - "envVariables": {}, - "generatedRepoSpecs": { - "host_platform": { - "repoRuleId": "@@platforms//host:extension.bzl%host_platform_repo", - "attributes": {} - } - }, - "recordedRepoMappingEntries": [] - } - }, "@@rules_java+//java:rules_java_deps.bzl%compatibility_proxy": { "general": { "bzlTransitiveDigest": "J2rR6SDBGItrrBRDQhpL2hPC/Uxb2ueJD3gHqSkbsh8=", @@ -819,6 +835,1256 @@ }, "recordedRepoMappingEntries": [] } + }, + "@@rules_rust+//crate_universe:extensions.bzl%crate": { + "general": { + "bzlTransitiveDigest": "2PZmkOGp1txddB9LdoQJNlpP1oByL59LI+IKcsin4Ps=", + "usagesDigest": "LRFoDTnUPiFo9Sf1CJ7R6NZDugjywFLeLDfqQzz9zEA=", + "recordedFileInputs": { + "@@//zml/tokenizer/hftokenizers/Cargo.toml": "b0b28872bb74e13aec7ef0ef8dfd5ec99a8573bc12085c0f36711f2a87912061" + }, + "recordedDirentsInputs": {}, + "envVariables": { + "CARGO_BAZEL_DEBUG": null, + "CARGO_BAZEL_GENERATOR_SHA256": null, + "CARGO_BAZEL_GENERATOR_URL": null, + "CARGO_BAZEL_ISOLATED": null, + "CARGO_BAZEL_REPIN": null, + "CARGO_BAZEL_REPIN_ONLY": null, + "REPIN": null + }, + "generatedRepoSpecs": { + "crates": { + "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 'zml'\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 = \"tokenizers-0.21.0\",\n actual = \"@crates__tokenizers-0.21.0//:tokenizers\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tokenizers\",\n actual = \"@crates__tokenizers-0.21.0//:tokenizers\",\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 'zml'\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 \"zml/tokenizer/hftokenizers\": {\n _COMMON_CONDITION: {\n \"tokenizers\": Label(\"@crates//:tokenizers-0.21.0\"),\n },\n },\n}\n\n\n_NORMAL_ALIASES = {\n \"zml/tokenizer/hftokenizers\": {\n _COMMON_CONDITION: {\n },\n },\n}\n\n\n_NORMAL_DEV_DEPENDENCIES = {\n \"zml/tokenizer/hftokenizers\": {\n },\n}\n\n\n_NORMAL_DEV_ALIASES = {\n \"zml/tokenizer/hftokenizers\": {\n },\n}\n\n\n_PROC_MACRO_DEPENDENCIES = {\n \"zml/tokenizer/hftokenizers\": {\n },\n}\n\n\n_PROC_MACRO_ALIASES = {\n \"zml/tokenizer/hftokenizers\": {\n },\n}\n\n\n_PROC_MACRO_DEV_DEPENDENCIES = {\n \"zml/tokenizer/hftokenizers\": {\n },\n}\n\n\n_PROC_MACRO_DEV_ALIASES = {\n \"zml/tokenizer/hftokenizers\": {\n },\n}\n\n\n_BUILD_DEPENDENCIES = {\n \"zml/tokenizer/hftokenizers\": {\n },\n}\n\n\n_BUILD_ALIASES = {\n \"zml/tokenizer/hftokenizers\": {\n },\n}\n\n\n_BUILD_PROC_MACRO_DEPENDENCIES = {\n \"zml/tokenizer/hftokenizers\": {\n },\n}\n\n\n_BUILD_PROC_MACRO_ALIASES = {\n \"zml/tokenizer/hftokenizers\": {\n },\n}\n\n\n_CONDITIONS = {\n \"aarch64-apple-darwin\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n \"aarch64-unknown-linux-gnu\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\"],\n \"cfg(target_os = \\\"wasi\\\")\": [],\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\"],\n \"x86_64-unknown-linux-gnu\": [\"@rules_rust//rust/platform:x86_64-unknown-linux-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__aho-corasick-1.1.3\",\n sha256 = \"8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/aho-corasick/1.1.3/download\"],\n strip_prefix = \"aho-corasick-1.1.3\",\n build_file = Label(\"@crates//crates:BUILD.aho-corasick-1.1.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__base64-0.13.1\",\n sha256 = \"9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/base64/0.13.1/download\"],\n strip_prefix = \"base64-0.13.1\",\n build_file = Label(\"@crates//crates:BUILD.base64-0.13.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__bit-set-0.5.3\",\n sha256 = \"0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bit-set/0.5.3/download\"],\n strip_prefix = \"bit-set-0.5.3\",\n build_file = Label(\"@crates//crates:BUILD.bit-set-0.5.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__bit-vec-0.6.3\",\n sha256 = \"349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bit-vec/0.6.3/download\"],\n strip_prefix = \"bit-vec-0.6.3\",\n build_file = Label(\"@crates//crates:BUILD.bit-vec-0.6.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__bumpalo-3.16.0\",\n sha256 = \"79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bumpalo/3.16.0/download\"],\n strip_prefix = \"bumpalo-3.16.0\",\n build_file = Label(\"@crates//crates:BUILD.bumpalo-3.16.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__byteorder-1.5.0\",\n sha256 = \"1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/byteorder/1.5.0/download\"],\n strip_prefix = \"byteorder-1.5.0\",\n build_file = Label(\"@crates//crates:BUILD.byteorder-1.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__cfg-if-1.0.0\",\n sha256 = \"baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cfg-if/1.0.0/download\"],\n strip_prefix = \"cfg-if-1.0.0\",\n build_file = Label(\"@crates//crates:BUILD.cfg-if-1.0.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__crossbeam-deque-0.8.6\",\n sha256 = \"9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/crossbeam-deque/0.8.6/download\"],\n strip_prefix = \"crossbeam-deque-0.8.6\",\n build_file = Label(\"@crates//crates:BUILD.crossbeam-deque-0.8.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__crossbeam-epoch-0.9.18\",\n sha256 = \"5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/crossbeam-epoch/0.9.18/download\"],\n strip_prefix = \"crossbeam-epoch-0.9.18\",\n build_file = Label(\"@crates//crates:BUILD.crossbeam-epoch-0.9.18.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__crossbeam-utils-0.8.21\",\n sha256 = \"d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/crossbeam-utils/0.8.21/download\"],\n strip_prefix = \"crossbeam-utils-0.8.21\",\n build_file = Label(\"@crates//crates:BUILD.crossbeam-utils-0.8.21.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__darling-0.20.10\",\n sha256 = \"6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/darling/0.20.10/download\"],\n strip_prefix = \"darling-0.20.10\",\n build_file = Label(\"@crates//crates:BUILD.darling-0.20.10.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__darling_core-0.20.10\",\n sha256 = \"95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/darling_core/0.20.10/download\"],\n strip_prefix = \"darling_core-0.20.10\",\n build_file = Label(\"@crates//crates:BUILD.darling_core-0.20.10.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__darling_macro-0.20.10\",\n sha256 = \"d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/darling_macro/0.20.10/download\"],\n strip_prefix = \"darling_macro-0.20.10\",\n build_file = Label(\"@crates//crates:BUILD.darling_macro-0.20.10.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__derive_builder-0.20.2\",\n sha256 = \"507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/derive_builder/0.20.2/download\"],\n strip_prefix = \"derive_builder-0.20.2\",\n build_file = Label(\"@crates//crates:BUILD.derive_builder-0.20.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__derive_builder_core-0.20.2\",\n sha256 = \"2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/derive_builder_core/0.20.2/download\"],\n strip_prefix = \"derive_builder_core-0.20.2\",\n build_file = Label(\"@crates//crates:BUILD.derive_builder_core-0.20.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__derive_builder_macro-0.20.2\",\n sha256 = \"ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/derive_builder_macro/0.20.2/download\"],\n strip_prefix = \"derive_builder_macro-0.20.2\",\n build_file = Label(\"@crates//crates:BUILD.derive_builder_macro-0.20.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__either-1.13.0\",\n sha256 = \"60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/either/1.13.0/download\"],\n strip_prefix = \"either-1.13.0\",\n build_file = Label(\"@crates//crates:BUILD.either-1.13.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__esaxx-rs-0.1.10\",\n sha256 = \"d817e038c30374a4bcb22f94d0a8a0e216958d4c3dcde369b1439fec4bdda6e6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/esaxx-rs/0.1.10/download\"],\n strip_prefix = \"esaxx-rs-0.1.10\",\n build_file = Label(\"@crates//crates:BUILD.esaxx-rs-0.1.10.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__fancy-regex-0.13.0\",\n sha256 = \"531e46835a22af56d1e3b66f04844bed63158bc094a628bec1d321d9b4c44bf2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/fancy-regex/0.13.0/download\"],\n strip_prefix = \"fancy-regex-0.13.0\",\n build_file = Label(\"@crates//crates:BUILD.fancy-regex-0.13.0.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__getrandom-0.2.15\",\n sha256 = \"c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/getrandom/0.2.15/download\"],\n strip_prefix = \"getrandom-0.2.15\",\n build_file = Label(\"@crates//crates:BUILD.getrandom-0.2.15.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ident_case-1.0.1\",\n sha256 = \"b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ident_case/1.0.1/download\"],\n strip_prefix = \"ident_case-1.0.1\",\n build_file = Label(\"@crates//crates:BUILD.ident_case-1.0.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__itertools-0.11.0\",\n sha256 = \"b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/itertools/0.11.0/download\"],\n strip_prefix = \"itertools-0.11.0\",\n build_file = Label(\"@crates//crates:BUILD.itertools-0.11.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__itertools-0.12.1\",\n sha256 = \"ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/itertools/0.12.1/download\"],\n strip_prefix = \"itertools-0.12.1\",\n build_file = Label(\"@crates//crates:BUILD.itertools-0.12.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__itoa-1.0.14\",\n sha256 = \"d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/itoa/1.0.14/download\"],\n strip_prefix = \"itoa-1.0.14\",\n build_file = Label(\"@crates//crates:BUILD.itoa-1.0.14.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__js-sys-0.3.76\",\n sha256 = \"6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/js-sys/0.3.76/download\"],\n strip_prefix = \"js-sys-0.3.76\",\n build_file = Label(\"@crates//crates:BUILD.js-sys-0.3.76.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.169\",\n sha256 = \"b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/libc/0.2.169/download\"],\n strip_prefix = \"libc-0.2.169\",\n build_file = Label(\"@crates//crates:BUILD.libc-0.2.169.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__log-0.4.22\",\n sha256 = \"a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/log/0.4.22/download\"],\n strip_prefix = \"log-0.4.22\",\n build_file = Label(\"@crates//crates:BUILD.log-0.4.22.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__macro_rules_attribute-0.2.0\",\n sha256 = \"8a82271f7bc033d84bbca59a3ce3e4159938cb08a9c3aebbe54d215131518a13\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/macro_rules_attribute/0.2.0/download\"],\n strip_prefix = \"macro_rules_attribute-0.2.0\",\n build_file = Label(\"@crates//crates:BUILD.macro_rules_attribute-0.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__macro_rules_attribute-proc_macro-0.2.0\",\n sha256 = \"b8dd856d451cc0da70e2ef2ce95a18e39a93b7558bedf10201ad28503f918568\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/macro_rules_attribute-proc_macro/0.2.0/download\"],\n strip_prefix = \"macro_rules_attribute-proc_macro-0.2.0\",\n build_file = Label(\"@crates//crates:BUILD.macro_rules_attribute-proc_macro-0.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__memchr-2.7.4\",\n sha256 = \"78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/memchr/2.7.4/download\"],\n strip_prefix = \"memchr-2.7.4\",\n build_file = Label(\"@crates//crates:BUILD.memchr-2.7.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__minimal-lexical-0.2.1\",\n sha256 = \"68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/minimal-lexical/0.2.1/download\"],\n strip_prefix = \"minimal-lexical-0.2.1\",\n build_file = Label(\"@crates//crates:BUILD.minimal-lexical-0.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__monostate-0.1.13\",\n sha256 = \"0d208407d7552cd041d8cdb69a1bc3303e029c598738177a3d87082004dc0e1e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/monostate/0.1.13/download\"],\n strip_prefix = \"monostate-0.1.13\",\n build_file = Label(\"@crates//crates:BUILD.monostate-0.1.13.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__monostate-impl-0.1.13\",\n sha256 = \"a7ce64b975ed4f123575d11afd9491f2e37bbd5813fbfbc0f09ae1fbddea74e0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/monostate-impl/0.1.13/download\"],\n strip_prefix = \"monostate-impl-0.1.13\",\n build_file = Label(\"@crates//crates:BUILD.monostate-impl-0.1.13.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__nom-7.1.3\",\n sha256 = \"d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/nom/7.1.3/download\"],\n strip_prefix = \"nom-7.1.3\",\n build_file = Label(\"@crates//crates:BUILD.nom-7.1.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__once_cell-1.20.2\",\n sha256 = \"1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/once_cell/1.20.2/download\"],\n strip_prefix = \"once_cell-1.20.2\",\n build_file = Label(\"@crates//crates:BUILD.once_cell-1.20.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__paste-1.0.15\",\n sha256 = \"57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/paste/1.0.15/download\"],\n strip_prefix = \"paste-1.0.15\",\n build_file = Label(\"@crates//crates:BUILD.paste-1.0.15.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ppv-lite86-0.2.20\",\n sha256 = \"77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ppv-lite86/0.2.20/download\"],\n strip_prefix = \"ppv-lite86-0.2.20\",\n build_file = Label(\"@crates//crates:BUILD.ppv-lite86-0.2.20.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__proc-macro2-1.0.92\",\n sha256 = \"37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/proc-macro2/1.0.92/download\"],\n strip_prefix = \"proc-macro2-1.0.92\",\n build_file = Label(\"@crates//crates:BUILD.proc-macro2-1.0.92.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__quote-1.0.37\",\n sha256 = \"b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/quote/1.0.37/download\"],\n strip_prefix = \"quote-1.0.37\",\n build_file = Label(\"@crates//crates:BUILD.quote-1.0.37.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rand-0.8.5\",\n sha256 = \"34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rand/0.8.5/download\"],\n strip_prefix = \"rand-0.8.5\",\n build_file = Label(\"@crates//crates:BUILD.rand-0.8.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rand_chacha-0.3.1\",\n sha256 = \"e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rand_chacha/0.3.1/download\"],\n strip_prefix = \"rand_chacha-0.3.1\",\n build_file = Label(\"@crates//crates:BUILD.rand_chacha-0.3.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rand_core-0.6.4\",\n sha256 = \"ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rand_core/0.6.4/download\"],\n strip_prefix = \"rand_core-0.6.4\",\n build_file = Label(\"@crates//crates:BUILD.rand_core-0.6.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rayon-1.10.0\",\n sha256 = \"b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rayon/1.10.0/download\"],\n strip_prefix = \"rayon-1.10.0\",\n build_file = Label(\"@crates//crates:BUILD.rayon-1.10.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rayon-cond-0.3.0\",\n sha256 = \"059f538b55efd2309c9794130bc149c6a553db90e9d99c2030785c82f0bd7df9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rayon-cond/0.3.0/download\"],\n strip_prefix = \"rayon-cond-0.3.0\",\n build_file = Label(\"@crates//crates:BUILD.rayon-cond-0.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rayon-core-1.12.1\",\n sha256 = \"1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rayon-core/1.12.1/download\"],\n strip_prefix = \"rayon-core-1.12.1\",\n build_file = Label(\"@crates//crates:BUILD.rayon-core-1.12.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__regex-1.11.1\",\n sha256 = \"b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/regex/1.11.1/download\"],\n strip_prefix = \"regex-1.11.1\",\n build_file = Label(\"@crates//crates:BUILD.regex-1.11.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__regex-automata-0.4.9\",\n sha256 = \"809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/regex-automata/0.4.9/download\"],\n strip_prefix = \"regex-automata-0.4.9\",\n build_file = Label(\"@crates//crates:BUILD.regex-automata-0.4.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__regex-syntax-0.8.5\",\n sha256 = \"2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/regex-syntax/0.8.5/download\"],\n strip_prefix = \"regex-syntax-0.8.5\",\n build_file = Label(\"@crates//crates:BUILD.regex-syntax-0.8.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ryu-1.0.18\",\n sha256 = \"f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ryu/1.0.18/download\"],\n strip_prefix = \"ryu-1.0.18\",\n build_file = Label(\"@crates//crates:BUILD.ryu-1.0.18.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde-1.0.216\",\n sha256 = \"0b9781016e935a97e8beecf0c933758c97a5520d32930e460142b4cd80c6338e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde/1.0.216/download\"],\n strip_prefix = \"serde-1.0.216\",\n build_file = Label(\"@crates//crates:BUILD.serde-1.0.216.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_derive-1.0.216\",\n sha256 = \"46f859dbbf73865c6627ed570e78961cd3ac92407a2d117204c49232485da55e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_derive/1.0.216/download\"],\n strip_prefix = \"serde_derive-1.0.216\",\n build_file = Label(\"@crates//crates:BUILD.serde_derive-1.0.216.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_json-1.0.134\",\n sha256 = \"d00f4175c42ee48b15416f6193a959ba3a0d67fc699a0db9ad12df9f83991c7d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_json/1.0.134/download\"],\n strip_prefix = \"serde_json-1.0.134\",\n build_file = Label(\"@crates//crates:BUILD.serde_json-1.0.134.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__smallvec-1.13.2\",\n sha256 = \"3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/smallvec/1.13.2/download\"],\n strip_prefix = \"smallvec-1.13.2\",\n build_file = Label(\"@crates//crates:BUILD.smallvec-1.13.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__spm_precompiled-0.1.4\",\n sha256 = \"5851699c4033c63636f7ea4cf7b7c1f1bf06d0cc03cfb42e711de5a5c46cf326\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/spm_precompiled/0.1.4/download\"],\n strip_prefix = \"spm_precompiled-0.1.4\",\n build_file = Label(\"@crates//crates:BUILD.spm_precompiled-0.1.4.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.91\",\n sha256 = \"d53cbcb5a243bd33b7858b1d7f4aca2153490815872d86d955d6ea29f743c035\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/syn/2.0.91/download\"],\n strip_prefix = \"syn-2.0.91\",\n build_file = Label(\"@crates//crates:BUILD.syn-2.0.91.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__thiserror-1.0.69\",\n sha256 = \"b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/thiserror/1.0.69/download\"],\n strip_prefix = \"thiserror-1.0.69\",\n build_file = Label(\"@crates//crates:BUILD.thiserror-1.0.69.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__thiserror-impl-1.0.69\",\n sha256 = \"4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/thiserror-impl/1.0.69/download\"],\n strip_prefix = \"thiserror-impl-1.0.69\",\n build_file = Label(\"@crates//crates:BUILD.thiserror-impl-1.0.69.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__tokenizers-0.21.0\",\n sha256 = \"9ecededfed68a69bc657e486510089e255e53c3d38cc7d4d59c8742668ca2cae\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tokenizers/0.21.0/download\"],\n strip_prefix = \"tokenizers-0.21.0\",\n build_file = Label(\"@crates//crates:BUILD.tokenizers-0.21.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__unicode-ident-1.0.14\",\n sha256 = \"adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unicode-ident/1.0.14/download\"],\n strip_prefix = \"unicode-ident-1.0.14\",\n build_file = Label(\"@crates//crates:BUILD.unicode-ident-1.0.14.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__unicode-normalization-alignments-0.1.12\",\n sha256 = \"43f613e4fa046e69818dd287fdc4bc78175ff20331479dab6e1b0f98d57062de\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unicode-normalization-alignments/0.1.12/download\"],\n strip_prefix = \"unicode-normalization-alignments-0.1.12\",\n build_file = Label(\"@crates//crates:BUILD.unicode-normalization-alignments-0.1.12.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__unicode-segmentation-1.12.0\",\n sha256 = \"f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unicode-segmentation/1.12.0/download\"],\n strip_prefix = \"unicode-segmentation-1.12.0\",\n build_file = Label(\"@crates//crates:BUILD.unicode-segmentation-1.12.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__unicode_categories-0.1.1\",\n sha256 = \"39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unicode_categories/0.1.1/download\"],\n strip_prefix = \"unicode_categories-0.1.1\",\n build_file = Label(\"@crates//crates:BUILD.unicode_categories-0.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__wasi-0.11.0-wasi-snapshot-preview1\",\n sha256 = \"9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasi/0.11.0+wasi-snapshot-preview1/download\"],\n strip_prefix = \"wasi-0.11.0+wasi-snapshot-preview1\",\n build_file = Label(\"@crates//crates:BUILD.wasi-0.11.0+wasi-snapshot-preview1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__wasm-bindgen-0.2.99\",\n sha256 = \"a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen/0.2.99/download\"],\n strip_prefix = \"wasm-bindgen-0.2.99\",\n build_file = Label(\"@crates//crates:BUILD.wasm-bindgen-0.2.99.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__wasm-bindgen-backend-0.2.99\",\n sha256 = \"5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen-backend/0.2.99/download\"],\n strip_prefix = \"wasm-bindgen-backend-0.2.99\",\n build_file = Label(\"@crates//crates:BUILD.wasm-bindgen-backend-0.2.99.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__wasm-bindgen-macro-0.2.99\",\n sha256 = \"2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen-macro/0.2.99/download\"],\n strip_prefix = \"wasm-bindgen-macro-0.2.99\",\n build_file = Label(\"@crates//crates:BUILD.wasm-bindgen-macro-0.2.99.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__wasm-bindgen-macro-support-0.2.99\",\n sha256 = \"30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen-macro-support/0.2.99/download\"],\n strip_prefix = \"wasm-bindgen-macro-support-0.2.99\",\n build_file = Label(\"@crates//crates:BUILD.wasm-bindgen-macro-support-0.2.99.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__wasm-bindgen-shared-0.2.99\",\n sha256 = \"943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen-shared/0.2.99/download\"],\n strip_prefix = \"wasm-bindgen-shared-0.2.99\",\n build_file = Label(\"@crates//crates:BUILD.wasm-bindgen-shared-0.2.99.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zerocopy-0.7.35\",\n sha256 = \"1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerocopy/0.7.35/download\"],\n strip_prefix = \"zerocopy-0.7.35\",\n build_file = Label(\"@crates//crates:BUILD.zerocopy-0.7.35.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zerocopy-derive-0.7.35\",\n sha256 = \"fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerocopy-derive/0.7.35/download\"],\n strip_prefix = \"zerocopy-derive-0.7.35\",\n build_file = Label(\"@crates//crates:BUILD.zerocopy-derive-0.7.35.bazel\"),\n )\n\n return [\n struct(repo=\"crates__tokenizers-0.21.0\", is_dev_dep = False),\n ]\n" + } + } + }, + "crates__aho-corasick-1.1.3": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/aho-corasick/1.1.3/download" + ], + "strip_prefix": "aho-corasick-1.1.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 'zml'\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\nrust_library(\n name = \"aho_corasick\",\n deps = [\n \"@crates__memchr-2.7.4//:memchr\",\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 \"perf-literal\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\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=aho-corasick\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.1.3\",\n)\n" + } + }, + "crates__base64-0.13.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/base64/0.13.1/download" + ], + "strip_prefix": "base64-0.13.1", + "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 'zml'\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\nrust_library(\n name = \"base64\",\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 \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\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=base64\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.13.1\",\n)\n" + } + }, + "crates__bit-set-0.5.3": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/bit-set/0.5.3/download" + ], + "strip_prefix": "bit-set-0.5.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 'zml'\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\nrust_library(\n name = \"bit_set\",\n deps = [\n \"@crates__bit-vec-0.6.3//:bit_vec\",\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 \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2015\",\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=bit-set\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.5.3\",\n)\n" + } + }, + "crates__bit-vec-0.6.3": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/bit-vec/0.6.3/download" + ], + "strip_prefix": "bit-vec-0.6.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 'zml'\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\nrust_library(\n name = \"bit_vec\",\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 \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2015\",\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=bit-vec\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.6.3\",\n)\n" + } + }, + "crates__bumpalo-3.16.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/bumpalo/3.16.0/download" + ], + "strip_prefix": "bumpalo-3.16.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 'zml'\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\nrust_library(\n name = \"bumpalo\",\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 ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\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=bumpalo\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"3.16.0\",\n)\n" + } + }, + "crates__byteorder-1.5.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/byteorder/1.5.0/download" + ], + "strip_prefix": "byteorder-1.5.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 'zml'\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\nrust_library(\n name = \"byteorder\",\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_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=byteorder\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.5.0\",\n)\n" + } + }, + "crates__cfg-if-1.0.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/cfg-if/1.0.0/download" + ], + "strip_prefix": "cfg-if-1.0.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 'zml'\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\nrust_library(\n name = \"cfg_if\",\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_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=cfg-if\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.0\",\n)\n" + } + }, + "crates__crossbeam-deque-0.8.6": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/crossbeam-deque/0.8.6/download" + ], + "strip_prefix": "crossbeam-deque-0.8.6", + "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 'zml'\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\nrust_library(\n name = \"crossbeam_deque\",\n deps = [\n \"@crates__crossbeam-epoch-0.9.18//:crossbeam_epoch\",\n \"@crates__crossbeam-utils-0.8.21//:crossbeam_utils\",\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 \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\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=crossbeam-deque\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.8.6\",\n)\n" + } + }, + "crates__crossbeam-epoch-0.9.18": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/crossbeam-epoch/0.9.18/download" + ], + "strip_prefix": "crossbeam-epoch-0.9.18", + "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 'zml'\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\nrust_library(\n name = \"crossbeam_epoch\",\n deps = [\n \"@crates__crossbeam-utils-0.8.21//:crossbeam_utils\",\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 \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\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=crossbeam-epoch\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.9.18\",\n)\n" + } + }, + "crates__crossbeam-utils-0.8.21": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/crossbeam-utils/0.8.21/download" + ], + "strip_prefix": "crossbeam-utils-0.8.21", + "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 'zml'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_build_script\")\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\nrust_library(\n name = \"crossbeam_utils\",\n deps = [\n \"@crates__crossbeam-utils-0.8.21//: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 \"default\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\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=crossbeam-utils\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.8.21\",\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 \"default\",\n \"std\",\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 = \"crossbeam-utils\",\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=crossbeam-utils\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.8.21\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crates__darling-0.20.10": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/darling/0.20.10/download" + ], + "strip_prefix": "darling-0.20.10", + "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 'zml'\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\nrust_library(\n name = \"darling\",\n deps = [\n \"@crates__darling_core-0.20.10//:darling_core\",\n ],\n proc_macro_deps = [\n \"@crates__darling_macro-0.20.10//:darling_macro\",\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 \"suggestions\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\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=darling\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.20.10\",\n)\n" + } + }, + "crates__darling_core-0.20.10": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/darling_core/0.20.10/download" + ], + "strip_prefix": "darling_core-0.20.10", + "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 'zml'\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\nrust_library(\n name = \"darling_core\",\n deps = [\n \"@crates__fnv-1.0.7//:fnv\",\n \"@crates__ident_case-1.0.1//:ident_case\",\n \"@crates__proc-macro2-1.0.92//:proc_macro2\",\n \"@crates__quote-1.0.37//:quote\",\n \"@crates__strsim-0.11.1//:strsim\",\n \"@crates__syn-2.0.91//: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_features = [\n \"strsim\",\n \"suggestions\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\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=darling_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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.20.10\",\n)\n" + } + }, + "crates__darling_macro-0.20.10": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/darling_macro/0.20.10/download" + ], + "strip_prefix": "darling_macro-0.20.10", + "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 'zml'\n###############################################################################\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\nrust_proc_macro(\n name = \"darling_macro\",\n deps = [\n \"@crates__darling_core-0.20.10//:darling_core\",\n \"@crates__quote-1.0.37//:quote\",\n \"@crates__syn-2.0.91//: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 = \"2021\",\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=darling_macro\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.20.10\",\n)\n" + } + }, + "crates__derive_builder-0.20.2": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/derive_builder/0.20.2/download" + ], + "strip_prefix": "derive_builder-0.20.2", + "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 'zml'\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\nrust_library(\n name = \"derive_builder\",\n proc_macro_deps = [\n \"@crates__derive_builder_macro-0.20.2//:derive_builder_macro\",\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 \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\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=derive_builder\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.20.2\",\n)\n" + } + }, + "crates__derive_builder_core-0.20.2": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/derive_builder_core/0.20.2/download" + ], + "strip_prefix": "derive_builder_core-0.20.2", + "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 'zml'\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\nrust_library(\n name = \"derive_builder_core\",\n deps = [\n \"@crates__darling-0.20.10//:darling\",\n \"@crates__proc-macro2-1.0.92//:proc_macro2\",\n \"@crates__quote-1.0.37//:quote\",\n \"@crates__syn-2.0.91//: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_features = [\n \"lib_has_std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\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=derive_builder_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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.20.2\",\n)\n" + } + }, + "crates__derive_builder_macro-0.20.2": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/derive_builder_macro/0.20.2/download" + ], + "strip_prefix": "derive_builder_macro-0.20.2", + "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 'zml'\n###############################################################################\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\nrust_proc_macro(\n name = \"derive_builder_macro\",\n deps = [\n \"@crates__derive_builder_core-0.20.2//:derive_builder_core\",\n \"@crates__syn-2.0.91//: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_features = [\n \"lib_has_std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\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=derive_builder_macro\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.20.2\",\n)\n" + } + }, + "crates__either-1.13.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/either/1.13.0/download" + ], + "strip_prefix": "either-1.13.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 'zml'\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\nrust_library(\n name = \"either\",\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 \"use_std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\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=either\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.13.0\",\n)\n" + } + }, + "crates__esaxx-rs-0.1.10": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "d817e038c30374a4bcb22f94d0a8a0e216958d4c3dcde369b1439fec4bdda6e6", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/esaxx-rs/0.1.10/download" + ], + "strip_prefix": "esaxx-rs-0.1.10", + "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 'zml'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_build_script\")\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\nrust_library(\n name = \"esaxx_rs\",\n deps = [\n \"@crates__esaxx-rs-0.1.10//: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 = \"2018\",\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=esaxx-rs\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.10\",\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 = \"2018\",\n pkg_name = \"esaxx-rs\",\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=esaxx-rs\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.1.10\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crates__fancy-regex-0.13.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "531e46835a22af56d1e3b66f04844bed63158bc094a628bec1d321d9b4c44bf2", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/fancy-regex/0.13.0/download" + ], + "strip_prefix": "fancy-regex-0.13.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 'zml'\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\nrust_library(\n name = \"fancy_regex\",\n deps = [\n \"@crates__bit-set-0.5.3//:bit_set\",\n \"@crates__regex-automata-0.4.9//:regex_automata\",\n \"@crates__regex-syntax-0.8.5//:regex_syntax\",\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 \"perf\",\n \"std\",\n \"unicode\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\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=fancy-regex\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.13.0\",\n)\n" + } + }, + "crates__fnv-1.0.7": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/fnv/1.0.7/download" + ], + "strip_prefix": "fnv-1.0.7", + "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 'zml'\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\nrust_library(\n name = \"fnv\",\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 \"std\",\n ],\n crate_root = \"lib.rs\",\n edition = \"2015\",\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=fnv\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.7\",\n)\n" + } + }, + "crates__getrandom-0.2.15": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/getrandom/0.2.15/download" + ], + "strip_prefix": "getrandom-0.2.15", + "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 'zml'\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\nrust_library(\n name = \"getrandom\",\n deps = [\n \"@crates__cfg-if-1.0.0//:cfg_if\",\n ] + select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [\n \"@crates__libc-0.2.169//:libc\", # cfg(unix)\n ],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [\n \"@crates__libc-0.2.169//:libc\", # cfg(unix)\n ],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [\n \"@crates__libc-0.2.169//: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_features = [\n \"js\",\n \"js-sys\",\n \"std\",\n \"wasm-bindgen\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\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=getrandom\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.15\",\n)\n" + } + }, + "crates__ident_case-1.0.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/ident_case/1.0.1/download" + ], + "strip_prefix": "ident_case-1.0.1", + "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 'zml'\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\nrust_library(\n name = \"ident_case\",\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_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=ident_case\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.1\",\n)\n" + } + }, + "crates__itertools-0.11.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/itertools/0.11.0/download" + ], + "strip_prefix": "itertools-0.11.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 'zml'\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\nrust_library(\n name = \"itertools\",\n deps = [\n \"@crates__either-1.13.0//:either\",\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 \"use_alloc\",\n \"use_std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\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=itertools\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.11.0\",\n)\n" + } + }, + "crates__itertools-0.12.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/itertools/0.12.1/download" + ], + "strip_prefix": "itertools-0.12.1", + "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 'zml'\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\nrust_library(\n name = \"itertools\",\n deps = [\n \"@crates__either-1.13.0//:either\",\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 \"use_alloc\",\n \"use_std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\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=itertools\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.12.1\",\n)\n" + } + }, + "crates__itoa-1.0.14": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/itoa/1.0.14/download" + ], + "strip_prefix": "itoa-1.0.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 'zml'\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\nrust_library(\n name = \"itoa\",\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_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=itoa\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.14\",\n)\n" + } + }, + "crates__js-sys-0.3.76": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/js-sys/0.3.76/download" + ], + "strip_prefix": "js-sys-0.3.76", + "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 'zml'\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\nrust_library(\n name = \"js_sys\",\n deps = [\n \"@crates__once_cell-1.20.2//:once_cell\",\n \"@crates__wasm-bindgen-0.2.99//: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_root = \"src/lib.rs\",\n edition = \"2021\",\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=js-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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.3.76\",\n)\n" + } + }, + "crates__lazy_static-1.5.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/lazy_static/1.5.0/download" + ], + "strip_prefix": "lazy_static-1.5.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 'zml'\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\nrust_library(\n name = \"lazy_static\",\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_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=lazy_static\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.5.0\",\n)\n" + } + }, + "crates__libc-0.2.169": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/libc/0.2.169/download" + ], + "strip_prefix": "libc-0.2.169", + "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 'zml'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_build_script\")\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\nrust_library(\n name = \"libc\",\n deps = [\n \"@crates__libc-0.2.169//: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_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=libc\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.169\",\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 = \"libc\",\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=libc\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.2.169\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crates__log-0.4.22": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/log/0.4.22/download" + ], + "strip_prefix": "log-0.4.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 'zml'\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\nrust_library(\n name = \"log\",\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_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=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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.4.22\",\n)\n" + } + }, + "crates__macro_rules_attribute-0.2.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "8a82271f7bc033d84bbca59a3ce3e4159938cb08a9c3aebbe54d215131518a13", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/macro_rules_attribute/0.2.0/download" + ], + "strip_prefix": "macro_rules_attribute-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 'zml'\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\nrust_library(\n name = \"macro_rules_attribute\",\n proc_macro_deps = [\n \"@crates__macro_rules_attribute-proc_macro-0.2.0//:macro_rules_attribute_proc_macro\",\n \"@crates__paste-1.0.15//:paste\",\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 ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\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=macro_rules_attribute\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.0\",\n)\n" + } + }, + "crates__macro_rules_attribute-proc_macro-0.2.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "b8dd856d451cc0da70e2ef2ce95a18e39a93b7558bedf10201ad28503f918568", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/macro_rules_attribute-proc_macro/0.2.0/download" + ], + "strip_prefix": "macro_rules_attribute-proc_macro-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 'zml'\n###############################################################################\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\nrust_proc_macro(\n name = \"macro_rules_attribute_proc_macro\",\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 = \"mod.rs\",\n edition = \"2018\",\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=macro_rules_attribute-proc_macro\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.0\",\n)\n" + } + }, + "crates__memchr-2.7.4": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/memchr/2.7.4/download" + ], + "strip_prefix": "memchr-2.7.4", + "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 'zml'\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\nrust_library(\n name = \"memchr\",\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 \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\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=memchr\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"2.7.4\",\n)\n" + } + }, + "crates__minimal-lexical-0.2.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/minimal-lexical/0.2.1/download" + ], + "strip_prefix": "minimal-lexical-0.2.1", + "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 'zml'\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\nrust_library(\n name = \"minimal_lexical\",\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 \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\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=minimal-lexical\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.1\",\n)\n" + } + }, + "crates__monostate-0.1.13": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "0d208407d7552cd041d8cdb69a1bc3303e029c598738177a3d87082004dc0e1e", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/monostate/0.1.13/download" + ], + "strip_prefix": "monostate-0.1.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 'zml'\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\nrust_library(\n name = \"monostate\",\n deps = [\n \"@crates__serde-1.0.216//:serde\",\n ],\n proc_macro_deps = [\n \"@crates__monostate-impl-0.1.13//:monostate_impl\",\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_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=monostate\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.13\",\n)\n" + } + }, + "crates__monostate-impl-0.1.13": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "a7ce64b975ed4f123575d11afd9491f2e37bbd5813fbfbc0f09ae1fbddea74e0", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/monostate-impl/0.1.13/download" + ], + "strip_prefix": "monostate-impl-0.1.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 'zml'\n###############################################################################\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\nrust_proc_macro(\n name = \"monostate_impl\",\n deps = [\n \"@crates__proc-macro2-1.0.92//:proc_macro2\",\n \"@crates__quote-1.0.37//:quote\",\n \"@crates__syn-2.0.91//: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 = \"2021\",\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=monostate-impl\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.13\",\n)\n" + } + }, + "crates__nom-7.1.3": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/nom/7.1.3/download" + ], + "strip_prefix": "nom-7.1.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 'zml'\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\nrust_library(\n name = \"nom\",\n deps = [\n \"@crates__memchr-2.7.4//:memchr\",\n \"@crates__minimal-lexical-0.2.1//:minimal_lexical\",\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_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=nom\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"7.1.3\",\n)\n" + } + }, + "crates__once_cell-1.20.2": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/once_cell/1.20.2/download" + ], + "strip_prefix": "once_cell-1.20.2", + "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 'zml'\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\nrust_library(\n name = \"once_cell\",\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_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=once_cell\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.20.2\",\n)\n" + } + }, + "crates__paste-1.0.15": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/paste/1.0.15/download" + ], + "strip_prefix": "paste-1.0.15", + "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 'zml'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_build_script\")\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\nrust_proc_macro(\n name = \"paste\",\n deps = [\n \"@crates__paste-1.0.15//: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 = \"2018\",\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=paste\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.15\",\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 = \"2018\",\n pkg_name = \"paste\",\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=paste\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"1.0.15\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crates__ppv-lite86-0.2.20": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/ppv-lite86/0.2.20/download" + ], + "strip_prefix": "ppv-lite86-0.2.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 'zml'\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\nrust_library(\n name = \"ppv_lite86\",\n deps = [\n \"@crates__zerocopy-0.7.35//:zerocopy\",\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 \"simd\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\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=ppv-lite86\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.20\",\n)\n" + } + }, + "crates__proc-macro2-1.0.92": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/proc-macro2/1.0.92/download" + ], + "strip_prefix": "proc-macro2-1.0.92", + "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 'zml'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_build_script\")\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\nrust_library(\n name = \"proc_macro2\",\n deps = [\n \"@crates__proc-macro2-1.0.92//:build_script_build\",\n \"@crates__unicode-ident-1.0.14//:unicode_ident\",\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 \"proc-macro\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\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=proc-macro2\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.92\",\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 \"default\",\n \"proc-macro\",\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 = \"proc-macro2\",\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=proc-macro2\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"1.0.92\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crates__quote-1.0.37": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/quote/1.0.37/download" + ], + "strip_prefix": "quote-1.0.37", + "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 'zml'\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\nrust_library(\n name = \"quote\",\n deps = [\n \"@crates__proc-macro2-1.0.92//:proc_macro2\",\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 \"proc-macro\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\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=quote\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.37\",\n)\n" + } + }, + "crates__rand-0.8.5": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/rand/0.8.5/download" + ], + "strip_prefix": "rand-0.8.5", + "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 'zml'\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\nrust_library(\n name = \"rand\",\n deps = [\n \"@crates__libc-0.2.169//:libc\",\n \"@crates__rand_chacha-0.3.1//:rand_chacha\",\n \"@crates__rand_core-0.6.4//:rand_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 \"alloc\",\n \"default\",\n \"getrandom\",\n \"libc\",\n \"rand_chacha\",\n \"std\",\n \"std_rng\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\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=rand\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.8.5\",\n)\n" + } + }, + "crates__rand_chacha-0.3.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/rand_chacha/0.3.1/download" + ], + "strip_prefix": "rand_chacha-0.3.1", + "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 'zml'\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\nrust_library(\n name = \"rand_chacha\",\n deps = [\n \"@crates__ppv-lite86-0.2.20//:ppv_lite86\",\n \"@crates__rand_core-0.6.4//:rand_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 \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\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=rand_chacha\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.3.1\",\n)\n" + } + }, + "crates__rand_core-0.6.4": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/rand_core/0.6.4/download" + ], + "strip_prefix": "rand_core-0.6.4", + "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 'zml'\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\nrust_library(\n name = \"rand_core\",\n deps = [\n \"@crates__getrandom-0.2.15//:getrandom\",\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 \"getrandom\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\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=rand_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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.6.4\",\n)\n" + } + }, + "crates__rayon-1.10.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/rayon/1.10.0/download" + ], + "strip_prefix": "rayon-1.10.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 'zml'\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\nrust_library(\n name = \"rayon\",\n deps = [\n \"@crates__either-1.13.0//:either\",\n \"@crates__rayon-core-1.12.1//:rayon_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_root = \"src/lib.rs\",\n edition = \"2021\",\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=rayon\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.10.0\",\n)\n" + } + }, + "crates__rayon-cond-0.3.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "059f538b55efd2309c9794130bc149c6a553db90e9d99c2030785c82f0bd7df9", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/rayon-cond/0.3.0/download" + ], + "strip_prefix": "rayon-cond-0.3.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 'zml'\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\nrust_library(\n name = \"rayon_cond\",\n deps = [\n \"@crates__either-1.13.0//:either\",\n \"@crates__itertools-0.11.0//:itertools\",\n \"@crates__rayon-1.10.0//:rayon\",\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_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=rayon-cond\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.3.0\",\n)\n" + } + }, + "crates__rayon-core-1.12.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/rayon-core/1.12.1/download" + ], + "strip_prefix": "rayon-core-1.12.1", + "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 'zml'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_build_script\")\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\nrust_library(\n name = \"rayon_core\",\n deps = [\n \"@crates__crossbeam-deque-0.8.6//:crossbeam_deque\",\n \"@crates__crossbeam-utils-0.8.21//:crossbeam_utils\",\n \"@crates__rayon-core-1.12.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_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=rayon-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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.12.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 links = \"rayon-core\",\n pkg_name = \"rayon-core\",\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=rayon-core\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"1.12.1\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crates__regex-1.11.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/regex/1.11.1/download" + ], + "strip_prefix": "regex-1.11.1", + "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 'zml'\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\nrust_library(\n name = \"regex\",\n deps = [\n \"@crates__aho-corasick-1.1.3//:aho_corasick\",\n \"@crates__memchr-2.7.4//:memchr\",\n \"@crates__regex-automata-0.4.9//:regex_automata\",\n \"@crates__regex-syntax-0.8.5//:regex_syntax\",\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 \"perf\",\n \"perf-backtrack\",\n \"perf-cache\",\n \"perf-dfa\",\n \"perf-inline\",\n \"perf-literal\",\n \"perf-onepass\",\n \"std\",\n \"unicode\",\n \"unicode-age\",\n \"unicode-bool\",\n \"unicode-case\",\n \"unicode-gencat\",\n \"unicode-perl\",\n \"unicode-script\",\n \"unicode-segment\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\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=regex\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.11.1\",\n)\n" + } + }, + "crates__regex-automata-0.4.9": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/regex-automata/0.4.9/download" + ], + "strip_prefix": "regex-automata-0.4.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 'zml'\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\nrust_library(\n name = \"regex_automata\",\n deps = [\n \"@crates__aho-corasick-1.1.3//:aho_corasick\",\n \"@crates__memchr-2.7.4//:memchr\",\n \"@crates__regex-syntax-0.8.5//:regex_syntax\",\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 \"dfa\",\n \"dfa-build\",\n \"dfa-onepass\",\n \"dfa-search\",\n \"hybrid\",\n \"meta\",\n \"nfa\",\n \"nfa-backtrack\",\n \"nfa-pikevm\",\n \"nfa-thompson\",\n \"perf\",\n \"perf-inline\",\n \"perf-literal\",\n \"perf-literal-multisubstring\",\n \"perf-literal-substring\",\n \"std\",\n \"syntax\",\n \"unicode\",\n \"unicode-age\",\n \"unicode-bool\",\n \"unicode-case\",\n \"unicode-gencat\",\n \"unicode-perl\",\n \"unicode-script\",\n \"unicode-segment\",\n \"unicode-word-boundary\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\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=regex-automata\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.4.9\",\n)\n" + } + }, + "crates__regex-syntax-0.8.5": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/regex-syntax/0.8.5/download" + ], + "strip_prefix": "regex-syntax-0.8.5", + "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 'zml'\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\nrust_library(\n name = \"regex_syntax\",\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 \"std\",\n \"unicode\",\n \"unicode-age\",\n \"unicode-bool\",\n \"unicode-case\",\n \"unicode-gencat\",\n \"unicode-perl\",\n \"unicode-script\",\n \"unicode-segment\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\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=regex-syntax\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.8.5\",\n)\n" + } + }, + "crates__ryu-1.0.18": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/ryu/1.0.18/download" + ], + "strip_prefix": "ryu-1.0.18", + "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 'zml'\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\nrust_library(\n name = \"ryu\",\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_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=ryu\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.18\",\n)\n" + } + }, + "crates__serde-1.0.216": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "0b9781016e935a97e8beecf0c933758c97a5520d32930e460142b4cd80c6338e", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/serde/1.0.216/download" + ], + "strip_prefix": "serde-1.0.216", + "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 'zml'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_build_script\")\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\nrust_library(\n name = \"serde\",\n deps = [\n \"@crates__serde-1.0.216//:build_script_build\",\n ],\n proc_macro_deps = [\n \"@crates__serde_derive-1.0.216//: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 \"default\",\n \"derive\",\n \"serde_derive\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\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=serde\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.216\",\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 \"default\",\n \"derive\",\n \"serde_derive\",\n \"std\",\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 = \"2018\",\n pkg_name = \"serde\",\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=serde\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"1.0.216\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crates__serde_derive-1.0.216": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "46f859dbbf73865c6627ed570e78961cd3ac92407a2d117204c49232485da55e", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/serde_derive/1.0.216/download" + ], + "strip_prefix": "serde_derive-1.0.216", + "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 'zml'\n###############################################################################\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\nrust_proc_macro(\n name = \"serde_derive\",\n deps = [\n \"@crates__proc-macro2-1.0.92//:proc_macro2\",\n \"@crates__quote-1.0.37//:quote\",\n \"@crates__syn-2.0.91//: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_features = [\n \"default\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2015\",\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=serde_derive\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.216\",\n)\n" + } + }, + "crates__serde_json-1.0.134": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "d00f4175c42ee48b15416f6193a959ba3a0d67fc699a0db9ad12df9f83991c7d", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/serde_json/1.0.134/download" + ], + "strip_prefix": "serde_json-1.0.134", + "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 'zml'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_build_script\")\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\nrust_library(\n name = \"serde_json\",\n deps = [\n \"@crates__itoa-1.0.14//:itoa\",\n \"@crates__memchr-2.7.4//:memchr\",\n \"@crates__ryu-1.0.18//:ryu\",\n \"@crates__serde-1.0.216//:serde\",\n \"@crates__serde_json-1.0.134//: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 \"default\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\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=serde_json\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.134\",\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 \"default\",\n \"std\",\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 = \"serde_json\",\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=serde_json\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"1.0.134\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crates__smallvec-1.13.2": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/smallvec/1.13.2/download" + ], + "strip_prefix": "smallvec-1.13.2", + "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 'zml'\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\nrust_library(\n name = \"smallvec\",\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_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=smallvec\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.13.2\",\n)\n" + } + }, + "crates__spm_precompiled-0.1.4": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "5851699c4033c63636f7ea4cf7b7c1f1bf06d0cc03cfb42e711de5a5c46cf326", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/spm_precompiled/0.1.4/download" + ], + "strip_prefix": "spm_precompiled-0.1.4", + "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 'zml'\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\nrust_library(\n name = \"spm_precompiled\",\n deps = [\n \"@crates__base64-0.13.1//:base64\",\n \"@crates__nom-7.1.3//:nom\",\n \"@crates__serde-1.0.216//:serde\",\n \"@crates__unicode-segmentation-1.12.0//:unicode_segmentation\",\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_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=spm_precompiled\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.4\",\n)\n" + } + }, + "crates__strsim-0.11.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/strsim/0.11.1/download" + ], + "strip_prefix": "strsim-0.11.1", + "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 'zml'\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\nrust_library(\n name = \"strsim\",\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_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=strsim\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.11.1\",\n)\n" + } + }, + "crates__syn-2.0.91": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "d53cbcb5a243bd33b7858b1d7f4aca2153490815872d86d955d6ea29f743c035", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/syn/2.0.91/download" + ], + "strip_prefix": "syn-2.0.91", + "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 'zml'\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\nrust_library(\n name = \"syn\",\n deps = [\n \"@crates__proc-macro2-1.0.92//:proc_macro2\",\n \"@crates__quote-1.0.37//:quote\",\n \"@crates__unicode-ident-1.0.14//:unicode_ident\",\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 \"clone-impls\",\n \"default\",\n \"derive\",\n \"extra-traits\",\n \"full\",\n \"parsing\",\n \"printing\",\n \"proc-macro\",\n \"visit\",\n \"visit-mut\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\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=syn\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"2.0.91\",\n)\n" + } + }, + "crates__thiserror-1.0.69": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/thiserror/1.0.69/download" + ], + "strip_prefix": "thiserror-1.0.69", + "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 'zml'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_build_script\")\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\nrust_library(\n name = \"thiserror\",\n deps = [\n \"@crates__thiserror-1.0.69//:build_script_build\",\n ],\n proc_macro_deps = [\n \"@crates__thiserror-impl-1.0.69//:thiserror_impl\",\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_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=thiserror\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.69\",\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 = \"thiserror\",\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=thiserror\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"1.0.69\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crates__thiserror-impl-1.0.69": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/thiserror-impl/1.0.69/download" + ], + "strip_prefix": "thiserror-impl-1.0.69", + "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 'zml'\n###############################################################################\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\nrust_proc_macro(\n name = \"thiserror_impl\",\n deps = [\n \"@crates__proc-macro2-1.0.92//:proc_macro2\",\n \"@crates__quote-1.0.37//:quote\",\n \"@crates__syn-2.0.91//: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 = \"2021\",\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=thiserror-impl\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.69\",\n)\n" + } + }, + "crates__tokenizers-0.21.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "9ecededfed68a69bc657e486510089e255e53c3d38cc7d4d59c8742668ca2cae", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/tokenizers/0.21.0/download" + ], + "strip_prefix": "tokenizers-0.21.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 'zml'\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\nrust_library(\n name = \"tokenizers\",\n deps = [\n \"@crates__aho-corasick-1.1.3//:aho_corasick\",\n \"@crates__derive_builder-0.20.2//:derive_builder\",\n \"@crates__esaxx-rs-0.1.10//:esaxx_rs\",\n \"@crates__fancy-regex-0.13.0//:fancy_regex\",\n \"@crates__getrandom-0.2.15//:getrandom\",\n \"@crates__itertools-0.12.1//:itertools\",\n \"@crates__lazy_static-1.5.0//:lazy_static\",\n \"@crates__log-0.4.22//:log\",\n \"@crates__macro_rules_attribute-0.2.0//:macro_rules_attribute\",\n \"@crates__monostate-0.1.13//:monostate\",\n \"@crates__rand-0.8.5//:rand\",\n \"@crates__rayon-1.10.0//:rayon\",\n \"@crates__rayon-cond-0.3.0//:rayon_cond\",\n \"@crates__regex-1.11.1//:regex\",\n \"@crates__regex-syntax-0.8.5//:regex_syntax\",\n \"@crates__serde-1.0.216//:serde\",\n \"@crates__serde_json-1.0.134//:serde_json\",\n \"@crates__spm_precompiled-0.1.4//:spm_precompiled\",\n \"@crates__thiserror-1.0.69//:thiserror\",\n \"@crates__unicode-normalization-alignments-0.1.12//:unicode_normalization_alignments\",\n \"@crates__unicode-segmentation-1.12.0//:unicode_segmentation\",\n \"@crates__unicode_categories-0.1.1//:unicode_categories\",\n ],\n proc_macro_deps = [\n \"@crates__paste-1.0.15//:paste\",\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 \"fancy-regex\",\n \"unstable_wasm\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\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=tokenizers\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.21.0\",\n)\n" + } + }, + "crates__unicode-ident-1.0.14": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/unicode-ident/1.0.14/download" + ], + "strip_prefix": "unicode-ident-1.0.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 'zml'\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\nrust_library(\n name = \"unicode_ident\",\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_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=unicode-ident\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.14\",\n)\n" + } + }, + "crates__unicode-normalization-alignments-0.1.12": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "43f613e4fa046e69818dd287fdc4bc78175ff20331479dab6e1b0f98d57062de", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/unicode-normalization-alignments/0.1.12/download" + ], + "strip_prefix": "unicode-normalization-alignments-0.1.12", + "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 'zml'\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\nrust_library(\n name = \"unicode_normalization_alignments\",\n deps = [\n \"@crates__smallvec-1.13.2//:smallvec\",\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_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=unicode-normalization-alignments\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.12\",\n)\n" + } + }, + "crates__unicode-segmentation-1.12.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/unicode-segmentation/1.12.0/download" + ], + "strip_prefix": "unicode-segmentation-1.12.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 'zml'\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\nrust_library(\n name = \"unicode_segmentation\",\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_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=unicode-segmentation\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.12.0\",\n)\n" + } + }, + "crates__unicode_categories-0.1.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/unicode_categories/0.1.1/download" + ], + "strip_prefix": "unicode_categories-0.1.1", + "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 'zml'\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\nrust_library(\n name = \"unicode_categories\",\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_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=unicode_categories\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.1\",\n)\n" + } + }, + "crates__wasi-0.11.0-wasi-snapshot-preview1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/wasi/0.11.0+wasi-snapshot-preview1/download" + ], + "strip_prefix": "wasi-0.11.0+wasi-snapshot-preview1", + "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 'zml'\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\nrust_library(\n name = \"wasi\",\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_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=wasi\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.11.0+wasi-snapshot-preview1\",\n)\n" + } + }, + "crates__wasm-bindgen-0.2.99": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/wasm-bindgen/0.2.99/download" + ], + "strip_prefix": "wasm-bindgen-0.2.99", + "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 'zml'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_build_script\")\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\nrust_library(\n name = \"wasm_bindgen\",\n deps = [\n \"@crates__cfg-if-1.0.0//:cfg_if\",\n \"@crates__once_cell-1.20.2//:once_cell\",\n \"@crates__wasm-bindgen-0.2.99//:build_script_build\",\n ],\n proc_macro_deps = [\n \"@crates__wasm-bindgen-macro-0.2.99//:wasm_bindgen_macro\",\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_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=wasm-bindgen\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.99\",\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 = \"wasm-bindgen\",\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=wasm-bindgen\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.2.99\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crates__wasm-bindgen-backend-0.2.99": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/wasm-bindgen-backend/0.2.99/download" + ], + "strip_prefix": "wasm-bindgen-backend-0.2.99", + "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 'zml'\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\nrust_library(\n name = \"wasm_bindgen_backend\",\n deps = [\n \"@crates__bumpalo-3.16.0//:bumpalo\",\n \"@crates__log-0.4.22//:log\",\n \"@crates__proc-macro2-1.0.92//:proc_macro2\",\n \"@crates__quote-1.0.37//:quote\",\n \"@crates__syn-2.0.91//:syn\",\n \"@crates__wasm-bindgen-shared-0.2.99//:wasm_bindgen_shared\",\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_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=wasm-bindgen-backend\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.99\",\n)\n" + } + }, + "crates__wasm-bindgen-macro-0.2.99": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/wasm-bindgen-macro/0.2.99/download" + ], + "strip_prefix": "wasm-bindgen-macro-0.2.99", + "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 'zml'\n###############################################################################\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\nrust_proc_macro(\n name = \"wasm_bindgen_macro\",\n deps = [\n \"@crates__quote-1.0.37//:quote\",\n \"@crates__wasm-bindgen-macro-support-0.2.99//:wasm_bindgen_macro_support\",\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_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=wasm-bindgen-macro\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.99\",\n)\n" + } + }, + "crates__wasm-bindgen-macro-support-0.2.99": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/wasm-bindgen-macro-support/0.2.99/download" + ], + "strip_prefix": "wasm-bindgen-macro-support-0.2.99", + "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 'zml'\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\nrust_library(\n name = \"wasm_bindgen_macro_support\",\n deps = [\n \"@crates__proc-macro2-1.0.92//:proc_macro2\",\n \"@crates__quote-1.0.37//:quote\",\n \"@crates__syn-2.0.91//:syn\",\n \"@crates__wasm-bindgen-backend-0.2.99//:wasm_bindgen_backend\",\n \"@crates__wasm-bindgen-shared-0.2.99//:wasm_bindgen_shared\",\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_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=wasm-bindgen-macro-support\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.99\",\n)\n" + } + }, + "crates__wasm-bindgen-shared-0.2.99": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/wasm-bindgen-shared/0.2.99/download" + ], + "strip_prefix": "wasm-bindgen-shared-0.2.99", + "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 'zml'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_build_script\")\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\nrust_library(\n name = \"wasm_bindgen_shared\",\n deps = [\n \"@crates__wasm-bindgen-shared-0.2.99//: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_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=wasm-bindgen-shared\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.99\",\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 links = \"wasm_bindgen\",\n pkg_name = \"wasm-bindgen-shared\",\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=wasm-bindgen-shared\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.2.99\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crates__zerocopy-0.7.35": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/zerocopy/0.7.35/download" + ], + "strip_prefix": "zerocopy-0.7.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 'zml'\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\nrust_library(\n name = \"zerocopy\",\n deps = [\n \"@crates__byteorder-1.5.0//:byteorder\",\n ],\n proc_macro_deps = [\n \"@crates__zerocopy-derive-0.7.35//:zerocopy_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 \"byteorder\",\n \"default\",\n \"derive\",\n \"simd\",\n \"zerocopy-derive\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\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=zerocopy\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.7.35\",\n)\n" + } + }, + "crates__zerocopy-derive-0.7.35": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/zerocopy-derive/0.7.35/download" + ], + "strip_prefix": "zerocopy-derive-0.7.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 'zml'\n###############################################################################\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\nrust_proc_macro(\n name = \"zerocopy_derive\",\n deps = [\n \"@crates__proc-macro2-1.0.92//:proc_macro2\",\n \"@crates__quote-1.0.37//:quote\",\n \"@crates__syn-2.0.91//: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_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=zerocopy-derive\",\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:x86_64-unknown-linux-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.7.35\",\n)\n" + } + } + }, + "moduleExtensionMetadata": { + "useAllRepos": "NO", + "reproducible": false + }, + "recordedRepoMappingEntries": [ + [ + "bazel_features+", + "bazel_features_globals", + "bazel_features++version_extension+bazel_features_globals" + ], + [ + "bazel_features+", + "bazel_features_version", + "bazel_features++version_extension+bazel_features_version" + ], + [ + "bazel_tools", + "rules_cc", + "rules_cc+" + ], + [ + "rules_cc+", + "bazel_tools", + "bazel_tools" + ], + [ + "rules_rust+", + "bazel_features", + "bazel_features+" + ], + [ + "rules_rust+", + "bazel_skylib", + "bazel_skylib+" + ], + [ + "rules_rust+", + "bazel_tools", + "bazel_tools" + ], + [ + "rules_rust+", + "rules_rust", + "rules_rust+" + ], + [ + "rules_rust+", + "rust_host_tools", + "rules_rust++rust_host_tools+rust_host_tools" + ] + ] + } } } } diff --git a/async/async.zig b/async/async.zig index 4e795ce..2222c48 100644 --- a/async/async.zig +++ b/async/async.zig @@ -485,7 +485,7 @@ pub fn Channel(comptime T: type, capacity: usize) type { } pub fn send(self: *Self, val: T) void { - self.inner.send(val) catch unreachable; + self.inner.send(val); } pub fn recv(self: *Self) ?T { diff --git a/async/coro.zig b/async/coro.zig index 93d612e..563fd02 100644 --- a/async/coro.zig +++ b/async/coro.zig @@ -134,8 +134,8 @@ const Coro = struct { return initFromStack(func, stack_, storage); } - pub fn deinit(self: Coro) void { - _ = self; // autofix + pub fn deinit(_: Coro) void { + // empty } fn initFromStack(func: *const fn () void, stack_: stack.Stack, storage: ?*anyopaque) !Frame { @@ -423,8 +423,7 @@ const CoroId = struct { const StackOverflow = struct { const magic_number: usize = 0x5E574D6D; - fn check(coro: Frame) !void { - _ = coro; // autofix + fn check(_: Frame) !void { // const stack = coro.stack.ptr; // const sp = coro.impl.stack_pointer; // const magic_number_ptr: *usize = @ptrCast(stack); @@ -435,8 +434,7 @@ const StackOverflow = struct { // } } - fn setMagicNumber(stack_: stack.Stack) !void { - _ = stack_; // autofix + fn setMagicNumber(_: stack.Stack) !void { // if (stack.len <= @sizeOf(usize)) { // return Error.StackTooSmall; // } diff --git a/async/stack.zig b/async/stack.zig index 00b75fe..1e08c8f 100644 --- a/async/stack.zig +++ b/async/stack.zig @@ -69,8 +69,8 @@ pub const StackAllocator = struct { return .{ .allocator = allocator }; } - pub fn deinit(self: *StackAllocator) void { - _ = self; // autofix + pub fn deinit(_: *StackAllocator) void { + // empty } pub fn create(self: *StackAllocator) !Stack { diff --git a/bazel/swig.bzl b/bazel/swig.bzl new file mode 100644 index 0000000..757e231 --- /dev/null +++ b/bazel/swig.bzl @@ -0,0 +1,149 @@ +load("@rules_cc//cc:action_names.bzl", "C_COMPILE_ACTION_NAME") +load("@rules_cc//cc:find_cc_toolchain.bzl", "find_cc_toolchain", "use_cc_toolchain") + +def _swig_cc_library_impl(ctx): + args = ctx.actions.args() + + if ctx.attr.cpp: + args.add("-c++") + + args.add("-std=c++17") + args.add("-c") + args.add("-O") + args.add("-module", ctx.attr.module) + args.add_joined("-features", ctx.attr.enabled_features, join_with = ",") + + if ctx.attr.defines: + args.add_all(ctx.attr.defines, format_each = "-D%s") + + cc_toolchain = find_cc_toolchain(ctx) + if (cc_toolchain): + args.add_all(cc_toolchain.built_in_include_directories, format_each = "-I%s") + + feature_configuration = cc_common.configure_features( + ctx = ctx, + cc_toolchain = cc_toolchain, + requested_features = ctx.features, + unsupported_features = ctx.disabled_features, + ) + c_compile_variables = cc_common.create_compile_variables( + feature_configuration = feature_configuration, + cc_toolchain = cc_toolchain, + user_compile_flags = ctx.fragments.cpp.copts + ctx.fragments.cpp.conlyopts, + ) + cc_compile_command_line = cc_common.get_memory_inefficient_command_line( + feature_configuration = feature_configuration, + action_name = C_COMPILE_ACTION_NAME, + variables = c_compile_variables, + ) + for arg in cc_compile_command_line: + if (arg.startswith("-I") or arg.startswith("-D")): + args.add(arg) + + cc_info = cc_common.merge_cc_infos(direct_cc_infos = [dep[CcInfo] for dep in ctx.attr.deps]) + args.add_all(cc_info.compilation_context.defines, format_each = "-D%s") + args.add_all(cc_info.compilation_context.local_defines, format_each = "-D%s") + args.add_all(cc_info.compilation_context.framework_includes, format_each = "-I%s") + args.add_all(cc_info.compilation_context.includes, format_each = "-I%s") + args.add_all(cc_info.compilation_context.quote_includes, format_each = "-I%s") + args.add_all(cc_info.compilation_context.system_includes, format_each = "-I%s") + + output_cpp = ctx.actions.declare_file("%s.cpp" % ctx.attr.module) + output_h = ctx.actions.declare_file("%s.h" % ctx.attr.module) + args.add("-outdir", output_h.dirname) + + outputs = [ + output_cpp, + output_h, + ] + args.add("-o", output_cpp) + args.add("-w-305") + args.add(ctx.file.interface) + + inputs = depset(ctx.attr.srcs, transitive = [ + ctx.attr.interface.files, + cc_info.compilation_context.headers, + ctx.attr._swig_lib.files, + ]) + + ctx.actions.run( + inputs = inputs, + outputs = outputs, + executable = ctx.executable._swig, + arguments = [args], + env = { + "SWIG_LIB": ctx.files._swig_lib[0].dirname, + }, + mnemonic = "SwigC", + ) + + return [ + DefaultInfo( + files = depset(outputs), + ), + OutputGroupInfo( + hdrs = depset([output_h]), + srcs = depset([output_cpp]), + ), + ] + +_swig_cc_library = rule( + _swig_cc_library_impl, + attrs = { + "interface": attr.label( + mandatory = True, + allow_single_file = True, + ), + "srcs": attr.label_list( + allow_files = True, + ), + "deps": attr.label_list( + providers = [CcInfo], + ), + "defines": attr.string_list(), + "enabled_features": attr.string_list(), + "module": attr.string( + mandatory = True, + ), + "cpp": attr.bool( + default = True, + ), + "intgosize": attr.int( + default = 64, + ), + "_swig": attr.label( + default = "@org_swig_swig//:swig", + cfg = "exec", + executable = True, + ), + "_swig_lib": attr.label( + default = "@org_swig_swig//:lib", + allow_files = True, + ), + }, + toolchains = use_cc_toolchain(), + fragments = ["cpp"], +) + +def swig_cc_library(name, deps = [], **kwargs): + _swig_cc_library( + name = "{}.swig".format(name), + deps = deps, + **kwargs + ) + native.filegroup( + name = "{}.hdrs".format(name), + srcs = [":{}.swig".format(name)], + output_group = "hdrs", + ) + native.filegroup( + name = "{}.srcs".format(name), + srcs = [":{}.swig".format(name)], + output_group = "srcs", + ) + native.cc_library( + name = name, + hdrs = [":{}.hdrs".format(name)], + srcs = [":{}.srcs".format(name)], + deps = deps, + ) diff --git a/ffi/BUILD.bazel b/ffi/BUILD.bazel new file mode 100644 index 0000000..ed5f95b --- /dev/null +++ b/ffi/BUILD.bazel @@ -0,0 +1,22 @@ +load("@rules_zig//zig:defs.bzl", "zig_library") + +cc_library( + name = "cc", + hdrs = [ + "zig_allocator.h", + "zig_slice.h", + ], + visibility = ["//visibility:public"], +) + +zig_library( + name = "zig", + srcs = [ + "zig_allocator.zig", + "zig_slice.zig", + ], + import_name = "ffi", + main = "ffi.zig", + visibility = ["//visibility:public"], + deps = [":cc"], +) diff --git a/ffi/ffi.zig b/ffi/ffi.zig new file mode 100644 index 0000000..ad3c09a --- /dev/null +++ b/ffi/ffi.zig @@ -0,0 +1,12 @@ +const std = @import("std"); +const c = @import("c"); + +pub const ZigAllocator = @import("zig_allocator.zig").ZigAllocator; +pub const ZigSlice = @import("zig_slice.zig").ZigSlice; + +pub fn as_path(path: []const u8) [std.fs.max_path_bytes:0]u8 { + var result: [std.fs.max_path_bytes:0]u8 = undefined; + @memcpy(result[0..path.len], path); + result[path.len] = 0; + return result; +} diff --git a/ffi/zig_allocator.h b/ffi/zig_allocator.h new file mode 100644 index 0000000..04e6885 --- /dev/null +++ b/ffi/zig_allocator.h @@ -0,0 +1,22 @@ +#pragma once + +#include + +typedef struct +{ + const void *ctx; + void *(*alloc)(const void *ctx, size_t elem, size_t nelems, size_t alignment); + void (*free)(const void *ctx, void *ptr, size_t elem, size_t nelems, size_t alignment); + +#ifdef __cplusplus + template [[nodiscard]] T *allocate(size_t n) + { + return static_cast(this->alloc(this->ctx, sizeof(T), n, _Alignof(T))); + } + + template [[nodiscard]] void deallocate(T *p, size_t n) + { + this->free(this->ctx, static_cast(p), sizeof(T), n, _Alignof(T)); + } +#endif +} zig_allocator; diff --git a/ffi/zig_allocator.zig b/ffi/zig_allocator.zig new file mode 100644 index 0000000..412dcd1 --- /dev/null +++ b/ffi/zig_allocator.zig @@ -0,0 +1,25 @@ +const std = @import("std"); +const c = @import("c"); + +pub const ZigAllocator = struct { + pub inline fn from(allocator: std.mem.Allocator) c.zig_allocator { + return .{ + .ctx = @ptrCast(@alignCast(&allocator)), + .alloc = &alloc, + .free = &free, + }; + } + + pub fn alloc(ctx: ?*const anyopaque, elem: usize, nelems: usize, alignment: usize) callconv(.C) ?*anyopaque { + const self: *const std.mem.Allocator = @ptrCast(@alignCast(ctx)); + const ret = self.rawAlloc(elem * nelems, std.math.log2_int(usize, alignment), @returnAddress()) orelse return null; + return @ptrCast(ret); + } + + pub fn free(ctx: ?*const anyopaque, ptr: ?*anyopaque, elem: usize, nelems: usize, alignment: usize) callconv(.C) void { + const self: *const std.mem.Allocator = @ptrCast(@alignCast(ctx)); + const memory: [*c]u8 = @ptrCast(ptr); + const size = elem * nelems; + self.rawFree(memory[0..size], std.math.log2_int(usize, alignment), @returnAddress()); + } +}; diff --git a/ffi/zig_slice.h b/ffi/zig_slice.h new file mode 100644 index 0000000..e0a6ed3 --- /dev/null +++ b/ffi/zig_slice.h @@ -0,0 +1,9 @@ +#pragma once + +#include + +typedef struct +{ + void *ptr; + size_t len; +} zig_slice; diff --git a/ffi/zig_slice.zig b/ffi/zig_slice.zig new file mode 100644 index 0000000..c736046 --- /dev/null +++ b/ffi/zig_slice.zig @@ -0,0 +1,15 @@ +const std = @import("std"); +const c = @import("c"); + +pub const ZigSlice = struct { + pub fn from(slice: anytype) c.zig_slice { + return .{ + .ptr = @ptrCast(@constCast(slice.ptr)), + .len = slice.len, + }; + } + + pub fn to(comptime T: type, slice: c.zig_slice) []T { + return @as([*c]T, @ptrCast(@alignCast(slice.ptr)))[0..slice.len]; + } +}; diff --git a/stdx/BUILD.bazel b/stdx/BUILD.bazel index 1e4697a..3bc8943 100644 --- a/stdx/BUILD.bazel +++ b/stdx/BUILD.bazel @@ -5,10 +5,12 @@ zig_library( srcs = [ "debug.zig", "io.zig", + "json.zig", "math.zig", "meta.zig", "queue.zig", "signature.zig", + "time.zig", ], main = "stdx.zig", visibility = ["//visibility:public"], diff --git a/stdx/json.zig b/stdx/json.zig new file mode 100644 index 0000000..2f71513 --- /dev/null +++ b/stdx/json.zig @@ -0,0 +1,72 @@ +pub const std = @import("std"); + +pub fn Union(comptime T: type) type { + return struct { + const Self = @This(); + + value: T, + + pub fn jsonParse(allocator: std.mem.Allocator, source: anytype, options: std.json.ParseOptions) !Self { + return jsonParseFromValue( + allocator, + try std.json.innerParse( + std.json.Value, + allocator, + source, + options, + ), + options, + ); + } + + pub fn jsonParseFromValue(allocator: std.mem.Allocator, source: std.json.Value, options: std.json.ParseOptions) !Self { + inline for (std.meta.fields(T)) |field| { + switch (field.type) { + bool => if (source == .bool) return .{ .value = @unionInit(T, field.name, source.bool) }, + []const u8 => switch (source) { + .string => |v| return .{ .value = @unionInit(T, field.name, v) }, + .number_string => |v| return .{ .value = @unionInit(T, field.name, v) }, + else => {}, + }, + else => switch (@typeInfo(field.type)) { + .Int => if (source == .integer) return .{ .value = @unionInit(T, field.name, @intCast(source.integer)) }, + .Float => if (source == .float) return .{ .value = @unionInit(T, field.name, @floatCast(source.float)) }, + .Struct => if (source == .object) return .{ .value = @unionInit(T, field.name, try std.json.innerParseFromValue(field.type, allocator, source.object, options)) }, + inline else => switch (source) { + .number_string, .array => return .{ .value = @unionInit(T, field.name, try std.json.innerParseFromValue(field.type, allocator, source, options)) }, + else => {}, + }, + }, + } + } + return error.UnexpectedToken; + } + }; +} + +pub fn NeverNull(comptime T: type, comptime default_value: T) type { + return struct { + const Self = @This(); + + value: T = default_value, + + pub fn jsonParse(allocator: std.mem.Allocator, source: anytype, options: std.json.ParseOptions) !Self { + return .{ .value = (try std.json.innerParse(?T, allocator, source, options)) orelse default_value }; + } + + pub fn jsonParseFromValue(allocator: std.mem.Allocator, source: std.json.Value, options: std.json.ParseOptions) !Self { + return .{ .value = (try std.json.innerParseFromValue(?T, allocator, source, options)) orelse default_value }; + } + }; +} + +pub fn fillDefaultStructValues(comptime T: type, r: *T) !void { + inline for (@typeInfo(T).Struct.fields) |field| { + if (field.default_value) |default_ptr| { + if (@field(r, field.name) == null) { + const default = @as(*align(1) const field.type, @ptrCast(default_ptr)).*; + @field(r, field.name) = default; + } + } + } +} diff --git a/stdx/stdx.zig b/stdx/stdx.zig index 4e94ce5..7b03260 100644 --- a/stdx/stdx.zig +++ b/stdx/stdx.zig @@ -1,5 +1,7 @@ pub const debug = @import("debug.zig"); pub const io = @import("io.zig"); +pub const json = @import("json.zig"); pub const math = @import("math.zig"); pub const meta = @import("meta.zig"); pub const queue = @import("queue.zig"); +pub const time = @import("time.zig"); diff --git a/stdx/time.zig b/stdx/time.zig new file mode 100644 index 0000000..149be74 --- /dev/null +++ b/stdx/time.zig @@ -0,0 +1,34 @@ +const std = @import("std"); + +pub const Duration = struct { + ns: u64, + + pub fn format( + self: Duration, + comptime fmt: []const u8, + options: std.fmt.FormatOptions, + writer: anytype, + ) @TypeOf(writer).Error!void { + return try std.fmt.fmtDuration(self.ns).format(fmt, options, writer); + } +}; + +pub const Timer = struct { + inner: std.time.Timer, + + pub fn start() !Timer { + return .{ .inner = try std.time.Timer.start() }; + } + + pub fn lap(self: *Timer) Duration { + return .{ .ns = try self.inner.lap() }; + } + + pub fn read(self: *Timer) Duration { + return .{ .ns = self.inner.read() }; + } + + pub fn reset(self: *Timer) void { + self.inner.reset(); + } +}; diff --git a/third_party/com_google_sentencepiece/BUILD.bazel b/third_party/com_google_sentencepiece/BUILD.bazel new file mode 100644 index 0000000..7314ec7 --- /dev/null +++ b/third_party/com_google_sentencepiece/BUILD.bazel @@ -0,0 +1,38 @@ +load(":fwd.bzl", "include_fwd") + +include_fwd( + name = "absl_hdrs", + includes = [ + "absl/container/flat_hash_map.h", + "absl/container/flat_hash_set.h", + "absl/flags/flag.h", + "absl/flags/parse.h", + "absl/flags/usage.h", + "absl/strings/match.h", + "absl/strings/numbers.h", + "absl/strings/str_cat.h", + "absl/strings/str_format.h", + "absl/strings/str_join.h", + "absl/strings/str_replace.h", + "absl/strings/str_split.h", + "absl/strings/string_view.h", + "absl/strings/strip.h", + ], +) + +cc_library( + name = "absl", + hdrs = [":absl_hdrs"], + include_prefix = "third_party", + includes = ["."], + visibility = ["//visibility:public"], + deps = [ + "@abseil-cpp//absl/container:flat_hash_map", + "@abseil-cpp//absl/container:flat_hash_set", + "@abseil-cpp//absl/flags:flag", + "@abseil-cpp//absl/flags:parse", + "@abseil-cpp//absl/flags:usage", + "@abseil-cpp//absl/strings", + "@abseil-cpp//absl/strings:string_view", + ], +) diff --git a/third_party/com_google_sentencepiece/fwd.bzl b/third_party/com_google_sentencepiece/fwd.bzl new file mode 100644 index 0000000..dd4836f --- /dev/null +++ b/third_party/com_google_sentencepiece/fwd.bzl @@ -0,0 +1,14 @@ +def _include_fwd_impl(ctx): + files = [] + for include in ctx.attr.includes: + f = ctx.actions.declare_file(include) + ctx.actions.write(f, '#include "{}"'.format(include)) + files.append(f) + return [DefaultInfo(files = depset(files))] + +include_fwd = rule( + implementation = _include_fwd_impl, + attrs = { + "includes": attr.string_list(), + }, +) diff --git a/third_party/com_google_sentencepiece/repo.bzl b/third_party/com_google_sentencepiece/repo.bzl new file mode 100644 index 0000000..4487523 --- /dev/null +++ b/third_party/com_google_sentencepiece/repo.bzl @@ -0,0 +1,9 @@ +load("@bazel_tools//tools/build_defs/repo:git.bzl", "new_git_repository") + +def repo(): + new_git_repository( + name = "com_google_sentencepiece", + remote = "https://github.com/google/sentencepiece.git", + commit = "d8f741853847553169444afc12c00f4bbff3e9ce", + build_file = "//third_party/com_google_sentencepiece:sentencepiece.bazel", + ) diff --git a/third_party/com_google_sentencepiece/sentencepiece.bazel b/third_party/com_google_sentencepiece/sentencepiece.bazel new file mode 100644 index 0000000..e5378b1 --- /dev/null +++ b/third_party/com_google_sentencepiece/sentencepiece.bazel @@ -0,0 +1,95 @@ +load("@bazel_skylib//rules:copy_file.bzl", "copy_file") +load("@protobuf//bazel:cc_proto_library.bzl", "cc_proto_library") +load("@protobuf//bazel:proto_library.bzl", "proto_library") + +package( + default_visibility = ["//visibility:public"], + features = [ + "layering_check", + "parse_headers", + ], +) + +licenses(["notice"]) # Apache 2, BSD, MIT + +proto_library( + name = "sentencepiece_proto", + srcs = ["src/sentencepiece.proto"], +) + +cc_proto_library( + name = "sentencepiece_cc_proto", + deps = [":sentencepiece_proto"], +) + +proto_library( + name = "sentencepiece_model_proto", + srcs = ["src/sentencepiece_model.proto"], +) + +cc_proto_library( + name = "sentencepiece_model_cc_proto", + deps = [":sentencepiece_model_proto"], +) + +copy_file( + name = "config_h", + src = "config.h.in", + out = "config.h", + allow_symlink = True, +) + +cc_library( + name = "darts_clone", + hdrs = glob([ + "third_party/darts_clone/*.h", + ]), + includes = ["."], +) + +cc_library( + name = "sentencepiece_processor", + srcs = [ + "src/bpe_model.cc", + "src/char_model.cc", + "src/error.cc", + "src/filesystem.cc", + "src/model_factory.cc", + "src/model_interface.cc", + "src/normalizer.cc", + "src/sentencepiece_processor.cc", + "src/unigram_model.cc", + "src/util.cc", + "src/word_model.cc", + ], + hdrs = [ + ":config_h", + "src/common.h", + "src/bpe_model.h", + "src/char_model.h", + "src/filesystem.h", + "src/freelist.h", + "src/init.h", + "src/model_factory.h", + "src/model_interface.h", + "src/normalizer.h", + "src/sentencepiece_processor.h", + "src/trainer_interface.h", + "src/unigram_model.h", + "src/util.h", + "src/word_model.h", + ], + defines = [ + "_USE_EXTERNAL_PROTOBUF", + "_USE_EXTERNAL_ABSL", + ], + includes = [ + "src", + ], + deps = [ + ":darts_clone", + ":sentencepiece_cc_proto", + ":sentencepiece_model_cc_proto", + "@zml//third_party/com_google_sentencepiece:absl", + ], +) diff --git a/third_party/non_module_deps.bzl b/third_party/non_module_deps.bzl new file mode 100644 index 0000000..004a45e --- /dev/null +++ b/third_party/non_module_deps.bzl @@ -0,0 +1,16 @@ +load("//:third_party/org_swig_swig/repo.bzl", org_swig_swig = "repo") +load("//third_party/com_google_sentencepiece:repo.bzl", com_google_sentencepiece = "repo") + +def _non_module_deps_impl(mctx): + com_google_sentencepiece() + org_swig_swig() + + return mctx.extension_metadata( + reproducible = True, + root_module_direct_deps = "all", + root_module_direct_dev_deps = [], + ) + +non_module_deps = module_extension( + implementation = _non_module_deps_impl, +) diff --git a/third_party/org_swig_swig/repo.bzl b/third_party/org_swig_swig/repo.bzl new file mode 100644 index 0000000..247c9d4 --- /dev/null +++ b/third_party/org_swig_swig/repo.bzl @@ -0,0 +1,10 @@ +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +def repo(): + http_archive( + name = "org_swig_swig", + url = "http://prdownloads.sourceforge.net/swig/swig-4.3.0.tar.gz", + sha256 = "f7203ef796f61af986c70c05816236cbd0d31b7aa9631e5ab53020ab7804aa9e", + strip_prefix = "swig-4.3.0", + build_file = "//:third_party/org_swig_swig/swig.bazel", + ) diff --git a/third_party/org_swig_swig/swig.bazel b/third_party/org_swig_swig/swig.bazel new file mode 100644 index 0000000..44d0f9f --- /dev/null +++ b/third_party/org_swig_swig/swig.bazel @@ -0,0 +1,109 @@ +licenses(["restricted"]) # GPLv3 + +exports_files(["LICENSE"]) + +filegroup( + name = "lib", + srcs = glob([ + "Lib/*.*", + "Lib/c/*.*", + "Lib/std/*.*", + "Lib/typemaps/*.*", + ]), + visibility = ["//visibility:public"], +) + +cc_binary( + name = "swig", + srcs = glob([ + "Source/CParse/*.h", + "Source/CParse/*.c", + "Source/DOH/*.h", + "Source/DOH/*.c", + "Source/Include/*.h", + "Source/Preprocessor/*.h", + "Source/Preprocessor/*.c", + "Source/Swig/*.h", + "Source/Swig/*.c", + ]) + [ + "Source/Include/swigconfig.h", + "Source/Modules/allocate.cxx", + "Source/Modules/c.cxx", + "Source/Modules/contract.cxx", + "Source/Modules/directors.cxx", + "Source/Modules/emit.cxx", + "Source/Modules/interface.cxx", + "Source/Modules/lang.cxx", + "Source/Modules/main.cxx", + "Source/Modules/nested.cxx", + "Source/Modules/overload.cxx", + "Source/Modules/swigmain-lite.cxx", + "Source/Modules/swigmod.h", + "Source/Modules/typepass.cxx", + "Source/Modules/utils.cxx", + "Source/Modules/xml.cxx", + ], + includes = [ + "Source/CParse", + "Source/DOH", + "Source/Include", + "Source/Modules", + "Source/Preprocessor", + "Source/Swig", + ], + data = [":lib"], + output_licenses = ["unencumbered"], + visibility = ["//visibility:public"], + deps = ["@pcre2"], +) + +genrule( + name = "swigconfig", + outs = ["Source/Include/swigconfig.h"], + cmd = """\ +cat <$@ +#define HAVE_BOOL +#define HAVE_PCRE +#define HAVE_POPEN +#define PACKAGE_BUGREPORT \"http://www.swig.org\" +#define PACKAGE_VERSION \"4.3.0\" +#define STDC_HEADERS +#define SWIG_CXX \"bazel4lyfe\" +#define SWIG_LIB \"external/org_swig_swig/Lib\" +#define SWIG_LIB_WIN_UNIX \"\" +#define SWIG_PLATFORM \"bazel4lyfe\" +EOF +""", +) + +genrule( + name = "get_rid_of_stuff_we_dont_need_yet", + srcs = ["Source/Modules/swigmain.cxx"], + outs = ["Source/Modules/swigmain-lite.cxx"], + cmd = """\ +sed -e '/swig_allegrocl/d' \ + -e '/swig_chicken/d' \ + -e '/swig_clisp/d' \ + -e '/swig_csharp/d' \ + -e '/swig_d/d' \ + -e '/swig_guile/d' \ + -e '/swig_go/d' \ + -e '/swig_java/d' \ + -e '/swig_lua/d' \ + -e '/swig_modula3/d' \ + -e '/swig_mzscheme/d' \ + -e '/swig_ocaml/d' \ + -e '/swig_octave/d' \ + -e '/swig_perl/d' \ + -e '/swig_php/d' \ + -e '/swig_pike/d' \ + -e '/swig_python/d' \ + -e '/swig_r/d' \ + -e '/swig_ruby/d' \ + -e '/swig_scilab/d' \ + -e '/swig_sexp/d' \ + -e '/swig_tcl/d' \ + -e '/swig_uffi/d' \ + $< >$@ +""", +) diff --git a/zml/BUILD.bazel b/zml/BUILD.bazel index 94a612c..5de9eb4 100644 --- a/zml/BUILD.bazel +++ b/zml/BUILD.bazel @@ -32,6 +32,7 @@ zig_library( "//pjrt", "//runtimes", "//stdx", + "//zml/tokenizer", "//zml/tools", "@rules_zig//zig/lib:libc", "@rules_zig//zig/runfiles", diff --git a/zml/aio.zig b/zml/aio.zig index 62c7e90..55155c4 100644 --- a/zml/aio.zig +++ b/zml/aio.zig @@ -10,8 +10,6 @@ const posix = @import("posix.zig"); pub const gguf = @import("aio/gguf.zig"); pub const nemo = @import("aio/nemo.zig"); pub const safetensors = @import("aio/safetensors.zig"); -pub const sentencepiece = @import("aio/sentencepiece.zig"); -pub const tinyllama = @import("aio/tinyllama.zig"); pub const torch = @import("aio/torch.zig"); pub const yaml = @import("aio/yaml.zig"); @@ -23,8 +21,6 @@ test { std.testing.refAllDecls(gguf); std.testing.refAllDecls(nemo); std.testing.refAllDecls(safetensors); - std.testing.refAllDecls(sentencepiece); - std.testing.refAllDecls(tinyllama); std.testing.refAllDecls(torch); std.testing.refAllDecls(yaml); } @@ -39,29 +35,11 @@ pub fn detectFormatAndOpen(allocator: std.mem.Allocator, model_path: []const u8) try gguf.open(allocator, model_path) else if (std.mem.endsWith(u8, model_path, ".pt")) try torch.open(allocator, model_path) - else if (std.mem.endsWith(u8, model_path, ".tinyllama")) - try tinyllama.open(allocator, model_path) else { std.debug.panic("File extension not recognized: {s}", .{model_path}); }; } -pub fn detectFormatAndLoadTokenizer(allocator: std.mem.Allocator, tokenizer_path: []const u8) !zml.tokenizer.Tokenizer { - return if (std.mem.endsWith(u8, tokenizer_path, ".json")) - try zml.tokenizer.fromHfJson(allocator, tokenizer_path) - else if (std.mem.endsWith(u8, tokenizer_path, ".gguf")) { - const store = try gguf.open(allocator, tokenizer_path); - return gguf.getGgufTokenizer(store, allocator); - } else if (std.mem.endsWith(u8, tokenizer_path, ".pb") or std.mem.endsWith(u8, tokenizer_path, ".model")) - try sentencepiece.loadTokenizerFromPath(allocator, tokenizer_path) - else if (std.mem.endsWith(u8, tokenizer_path, ".tinyllama")) - try zml.aio.tinyllama.loadTokenizer(allocator, tokenizer_path, 32000) - else { - log.err("Failed to recognized tokenizer format of: {s}", .{tokenizer_path}); - return error.FormatNotRecognized; - }; -} - /// Creates a Model struct with tensor shapes read from the given BufferStore. /// The result can be used to pass to `compileModel`. /// @@ -445,6 +423,7 @@ fn _populateStruct( return true; }, .Void => true, + .Union => true, else => if (required) { log.err("{s}: {s} type not supported", .{ prefix, @typeName(T) }); return error.UnsupportedMetadataType; diff --git a/zml/aio/gguf.zig b/zml/aio/gguf.zig index 5a8e71b..8286db1 100644 --- a/zml/aio/gguf.zig +++ b/zml/aio/gguf.zig @@ -31,76 +31,6 @@ pub fn open(allocator: Allocator, path: []const u8) !zml.aio.BufferStore { return res; } -pub fn getGgufTokenizer(self: zml.aio.BufferStore, allocator: std.mem.Allocator) !zml.tokenizer.Tokenizer { - const tokens = self.metadataSlice("tokenizer.ggml.tokens", .string) orelse { - log.err("GGUF File: Tokens not found", .{}); - return error.TokensNotFound; - }; - const scores = self.metadataSlice("tokenizer.ggml.scores", .float) orelse { - log.err("GGUF File: Scores not found", .{}); - return error.ScoresNotFound; - }; - assert(tokens.len == scores.len); - const tokenizer_type = self.metadata("tokenizer.ggml.model", .string) orelse "llama"; - const tokenizer_impl: zml.tokenizer.KnownImplementation = if (std.mem.eql(u8, tokenizer_type, "gpt2")) .gpt2 else .sentencepiece; - const bos = self.metadata("tokenizer.ggml.bos_token_id", .int); - const eos = self.metadata("tokenizer.ggml.eos_token_id", .int); - const unk = self.metadata("tokenizer.ggml.unknown_token_id", .int); - const pad = self.metadata("tokenizer.ggml.padding_token_id", .int); - - const NOT_FOUND = std.math.maxInt(u32); - const special_tokens: zml.tokenizer.Tokenizer.SpecialTokens = .{ - .bos = @intCast(bos.?), - .eos = @intCast(eos.?), - .unk = @intCast(unk orelse NOT_FOUND), - .pad = @intCast(pad orelse NOT_FOUND), - }; - - const gguf_normalizer = if (tokenizer_impl == .gpt2) - zml.tokenizer.Normalizer.wellKnown(.gpt2) - else - zml.tokenizer.Normalizer.wellKnown(.sentencepiece); - - const extra_tokens: u8 = if (tokenizer_impl == .gpt2) 1 else 0; - const n_tokens: u32 = @intCast(tokens.len + extra_tokens); - - var tokenizer = try zml.tokenizer.Tokenizer.init( - allocator, - n_tokens, - 32, - gguf_normalizer, - special_tokens, - true, - ); - - var gpt2_unicode = if (tokenizer_impl == .gpt2) - try zml.tokenizer.Gpt2TextDecoder.init(allocator) - else - null; - defer if (gpt2_unicode) |*gpt2| gpt2.deinit(); - var decoded = std.ArrayList(u8).init(allocator); - defer decoded.deinit(); - - // copy the tokens to the tokenizer arena. - for (tokens, 0..tokens.len) |t, i| { - if (tokenizer_impl == .gpt2) { - decoded.clearRetainingCapacity(); - try tokenizer.addToken(@floatCast(scores[i]), try gpt2_unicode.?.decode(&decoded, t)); - // log.debug("token: {s} -> {s}", .{t, decoded.items}); - } else { - try tokenizer.addToken(@floatCast(scores[i]), t); - } - } - - // Gpt2 tokenizer always splits on spaces. - if (tokenizer_impl == .gpt2) { - tokenizer.special_tokens.hard_space = tokenizer.next_token_id; - tokenizer.addOwnedToken(0, " "); - } - - return tokenizer; -} - fn loadMetadata(allocator: Allocator, store: *zml.aio.BufferStore, file: *core.GgufFile) !void { try store._metadata.ensureTotalCapacity(allocator, @intCast(file.header.metadata_kv_count)); diff --git a/zml/aio/sentencepiece.zig b/zml/aio/sentencepiece.zig index 90ee128..b459319 100644 --- a/zml/aio/sentencepiece.zig +++ b/zml/aio/sentencepiece.zig @@ -4,58 +4,6 @@ const zml = @import("../zml.zig"); const sentencepiece_proto = @import("//sentencepiece:model_proto"); const Normalizer = zml.tokenizer.Normalizer; -const Tokenizer = zml.tokenizer.Tokenizer; - -pub fn loadTokenizerFromPath(allocator: std.mem.Allocator, path: []const u8) !Tokenizer { - const file = try asynk.File.open(path, .{}); - defer file.close() catch unreachable; - - return loadTokenizerFromFile(allocator, file); -} - -pub fn loadTokenizerFromFile(allocator: std.mem.Allocator, file: asynk.File) !Tokenizer { - const reader = file.reader(); - const input = try reader.readAllAlloc(allocator, 16 * 1024 * 1024); - defer allocator.free(input); - - var proto_arena = std.heap.ArenaAllocator.init(allocator); - defer proto_arena.deinit(); - - const model = try sentencepiece_proto.ModelProto.decode(input, proto_arena.allocator()); - // no deinit, memory will be freed by the proto_arena - - return loadTokenizerFromModelProto(allocator, model); -} - -pub fn loadTokenizerFromModelProto(allocator: std.mem.Allocator, model: sentencepiece_proto.ModelProto) !Tokenizer { - std.debug.assert(model.trainer_spec.?.model_type.? == .BPE); - const special_tokens: Tokenizer.SpecialTokens = .{ - .unk = @intCast(model.trainer_spec.?.unk_id.?), - .bos = @intCast(model.trainer_spec.?.bos_id.?), - .eos = @intCast(model.trainer_spec.?.eos_id.?), - .pad = parseTokenId(model.trainer_spec.?.pad_id), - }; - - var tokenizer = try Tokenizer.init( - allocator, - @intCast(model.pieces.items.len), - @intCast(model.trainer_spec.?.max_sentencepiece_length.?), - normalizerFromSpec(model.normalizer_spec.?), - special_tokens, - true, - ); - errdefer tokenizer.deinit(); - - for (model.pieces.items) |*piece| { - try tokenizer.addToken(piece.score.?, piece.piece.?.getSlice()); - } - const byte_fallback = model.trainer_spec.?.byte_fallback orelse false; - if (byte_fallback) { - try tokenizer.rewriteByteFallbackTokens(); - } - - return tokenizer; -} fn parseTokenId(id: ?i32) u32 { if (id) |idx| { diff --git a/zml/hostbuffer.zig b/zml/hostbuffer.zig index adaa02e..cd7e3a6 100644 --- a/zml/hostbuffer.zig +++ b/zml/hostbuffer.zig @@ -38,7 +38,7 @@ pub const HostBuffer = struct { /// The returned HostBuffer doesn't take ownership of the slice /// that will still need to be deallocated. pub fn fromBytes(shape_: Shape, data_: []const u8) HostBuffer { - std.debug.assert(shape_.byteSize() == data_.len); + stdx.debug.assert(shape_.byteSize() == data_.len, "shape {} and data {} don't match", .{ shape_.byteSize(), data_.len }); return .{ ._shape = shape_, .data = data_, diff --git a/zml/meta.zig b/zml/meta.zig index 82b25d7..4c3785f 100644 --- a/zml/meta.zig +++ b/zml/meta.zig @@ -175,7 +175,7 @@ pub fn mapAlloc(comptime cb: anytype, allocator: std.mem.Allocator, ctx: FnParam } else { to.* = null; }, - .Int, .Float, .Enum => to.* = from, + .Int, .Float, .Enum, .Union => to.* = from, else => stdx.debug.compileError("zml.meta.mapAlloc doesn't support: {}", .{FromStruct}), } } diff --git a/zml/tensor.zig b/zml/tensor.zig index 1acb797..23ab003 100644 --- a/zml/tensor.zig +++ b/zml/tensor.zig @@ -2027,7 +2027,7 @@ pub const Tensor = struct { /// Appends a 1-dim axis, with the given tag. pub fn appendAxes(self: Tensor, t: anytype) Tensor { - stdx.debug.assert(self.rank() < Tensor.MAX_RANK - t.len, "appendAxis expects tensor rank to be small enough in order to extend it, got {} and {} (max is {})", .{ self.rank(), t.len, Tensor.MAX_RANK }); + // stdx.debug.assert(self.rank() < Tensor.MAX_RANK - t.len, "appendAxis expects tensor rank to be small enough in order to extend it, got {} and {} (max is {})", .{ self.rank(), t.len, Tensor.MAX_RANK }); return self.insertAxes(.last, t); } diff --git a/zml/tokenizer/BUILD.bazel b/zml/tokenizer/BUILD.bazel new file mode 100644 index 0000000..2e0a71f --- /dev/null +++ b/zml/tokenizer/BUILD.bazel @@ -0,0 +1,35 @@ +load("@rules_zig//zig:defs.bzl", "zig_library") +load("@zml//bazel:zig.bzl", "zig_cc_binary") +load("//bazel:swig.bzl", "swig_cc_library") + +swig_cc_library( + name = "sentencepiece_swig", + interface = "sentencepiece.i", + module = "sentencepiece", + deps = [ + "//ffi:cc", + "@com_google_sentencepiece//:sentencepiece_processor", + ], +) + +zig_library( + name = "tokenizer", + import_name = "zml/tokenizer", + main = "tokenizer.zig", + visibility = ["//visibility:public"], + deps = [ + "//async", + "//ffi:zig", + "//zml/tokenizer/hftokenizers", + "//zml/tokenizer/sentencepiece", + ], +) + +zig_cc_binary( + name = "main", + main = "main.zig", + visibility = ["//visibility:public"], + deps = [ + ":tokenizer", + ], +) diff --git a/zml/tokenizer/hftokenizers/BUILD.bazel b/zml/tokenizer/hftokenizers/BUILD.bazel new file mode 100644 index 0000000..0b87d77 --- /dev/null +++ b/zml/tokenizer/hftokenizers/BUILD.bazel @@ -0,0 +1,38 @@ +load("@rules_rust//rust:defs.bzl", "rust_static_library") +load("@rules_zig//zig:defs.bzl", "zig_library") +load("@zml//bazel:zig.bzl", "zig_cc_binary") + +rust_static_library( + name = "hftokenizers_rs", + srcs = ["hftokenizers.rs"], + crate_name = "zml_tokenizer_hftokenizers", + edition = "2021", + deps = ["@crates//:tokenizers"], +) + +cc_library( + name = "hftokenizers_cc", + hdrs = ["hftokenizers.h"], + visibility = ["//visibility:public"], + deps = [ + ":hftokenizers_rs", + "//ffi:cc", + ], +) + +zig_library( + name = "hftokenizers", + main = "hftokenizers.zig", + visibility = ["//visibility:public"], + deps = [ + ":hftokenizers_cc", + "//ffi:zig", + ], +) + +zig_cc_binary( + name = "main", + main = "main.zig", + visibility = ["//visibility:public"], + deps = [":hftokenizers"], +) diff --git a/zml/tokenizer/hftokenizers/Cargo.lock b/zml/tokenizer/hftokenizers/Cargo.lock new file mode 100644 index 0000000..b896c1f --- /dev/null +++ b/zml/tokenizer/hftokenizers/Cargo.lock @@ -0,0 +1,669 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "bit-set" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "crossbeam-deque" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[package]] +name = "darling" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn", +] + +[[package]] +name = "darling_macro" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +dependencies = [ + "darling_core", + "quote", + "syn", +] + +[[package]] +name = "derive_builder" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947" +dependencies = [ + "derive_builder_macro", +] + +[[package]] +name = "derive_builder_core" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "derive_builder_macro" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" +dependencies = [ + "derive_builder_core", + "syn", +] + +[[package]] +name = "either" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" + +[[package]] +name = "esaxx-rs" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d817e038c30374a4bcb22f94d0a8a0e216958d4c3dcde369b1439fec4bdda6e6" + +[[package]] +name = "fancy-regex" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "531e46835a22af56d1e3b66f04844bed63158bc094a628bec1d321d9b4c44bf2" +dependencies = [ + "bit-set", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi", + "wasm-bindgen", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "itertools" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" + +[[package]] +name = "js-sys" +version = "0.3.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "libc" +version = "0.2.169" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" + +[[package]] +name = "log" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" + +[[package]] +name = "macro_rules_attribute" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a82271f7bc033d84bbca59a3ce3e4159938cb08a9c3aebbe54d215131518a13" +dependencies = [ + "macro_rules_attribute-proc_macro", + "paste", +] + +[[package]] +name = "macro_rules_attribute-proc_macro" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8dd856d451cc0da70e2ef2ce95a18e39a93b7558bedf10201ad28503f918568" + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "monostate" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d208407d7552cd041d8cdb69a1bc3303e029c598738177a3d87082004dc0e1e" +dependencies = [ + "monostate-impl", + "serde", +] + +[[package]] +name = "monostate-impl" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7ce64b975ed4f123575d11afd9491f2e37bbd5813fbfbc0f09ae1fbddea74e0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "once_cell" +version = "1.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "ppv-lite86" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "proc-macro2" +version = "1.0.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-cond" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "059f538b55efd2309c9794130bc149c6a553db90e9d99c2030785c82f0bd7df9" +dependencies = [ + "either", + "itertools 0.11.0", + "rayon", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "regex" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "serde" +version = "1.0.216" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b9781016e935a97e8beecf0c933758c97a5520d32930e460142b4cd80c6338e" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.216" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46f859dbbf73865c6627ed570e78961cd3ac92407a2d117204c49232485da55e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.134" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d00f4175c42ee48b15416f6193a959ba3a0d67fc699a0db9ad12df9f83991c7d" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "spm_precompiled" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5851699c4033c63636f7ea4cf7b7c1f1bf06d0cc03cfb42e711de5a5c46cf326" +dependencies = [ + "base64", + "nom", + "serde", + "unicode-segmentation", +] + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "syn" +version = "2.0.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d53cbcb5a243bd33b7858b1d7f4aca2153490815872d86d955d6ea29f743c035" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tokenizers" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ecededfed68a69bc657e486510089e255e53c3d38cc7d4d59c8742668ca2cae" +dependencies = [ + "aho-corasick", + "derive_builder", + "esaxx-rs", + "fancy-regex", + "getrandom", + "itertools 0.12.1", + "lazy_static", + "log", + "macro_rules_attribute", + "monostate", + "paste", + "rand", + "rayon", + "rayon-cond", + "regex", + "regex-syntax", + "serde", + "serde_json", + "spm_precompiled", + "thiserror", + "unicode-normalization-alignments", + "unicode-segmentation", + "unicode_categories", +] + +[[package]] +name = "unicode-ident" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" + +[[package]] +name = "unicode-normalization-alignments" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43f613e4fa046e69818dd287fdc4bc78175ff20331479dab6e1b0f98d57062de" +dependencies = [ + "smallvec", +] + +[[package]] +name = "unicode-segmentation" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" + +[[package]] +name = "unicode_categories" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.99" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" +dependencies = [ + "cfg-if", + "once_cell", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.99" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" +dependencies = [ + "bumpalo", + "log", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.99" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.99" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.99" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "byteorder", + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zml_tokenizer_hftokenizers" +version = "0.1.0" +dependencies = [ + "tokenizers", +] diff --git a/zml/tokenizer/hftokenizers/Cargo.toml b/zml/tokenizer/hftokenizers/Cargo.toml new file mode 100644 index 0000000..7167183 --- /dev/null +++ b/zml/tokenizer/hftokenizers/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "zml_tokenizer_hftokenizers" +version = "0.1.0" +edition = "2021" + +[dependencies] +# onig-sys fails to build with zig cc, disable it via the unstable_wasm feature, which switches +# the regex library to using fancy. +tokenizers = { version = "0.21.0", default-features = false, features = ["unstable_wasm"] } + +[lib] +name = "zml_tokenizer_hftokenizers" +path = "hftokenizers.rs" diff --git a/zml/tokenizer/hftokenizers/hftokenizers.h b/zml/tokenizer/hftokenizers/hftokenizers.h new file mode 100644 index 0000000..7bc8790 --- /dev/null +++ b/zml/tokenizer/hftokenizers/hftokenizers.h @@ -0,0 +1,16 @@ +#pragma once + +#include +#include + +#include "ffi/zig_slice.h" + +typedef struct hftokenizers hftokenizers; + +hftokenizers *hftokenizers_new(zig_slice); +void hftokenizers_drop(hftokenizers *tokenizer); +zig_slice hftokenizers_encode(hftokenizers *tokenizer, zig_slice text); +void hftokenizers_tokens_drop(zig_slice tokens); +zig_slice hftokenizers_decode(hftokenizers *tokenizer, zig_slice tokens); +void hftokenizers_str_drop(zig_slice text); +uint32_t hftokenizers_token_to_id(hftokenizers *tokenizer, zig_slice token); diff --git a/zml/tokenizer/hftokenizers/hftokenizers.rs b/zml/tokenizer/hftokenizers/hftokenizers.rs new file mode 100644 index 0000000..4035afe --- /dev/null +++ b/zml/tokenizer/hftokenizers/hftokenizers.rs @@ -0,0 +1,101 @@ +#[repr(C)] +struct ZigSlice { + ptr: *mut T, + len: usize, +} + +impl ZigSlice { + fn as_slice(&self) -> &[T] { + unsafe { std::slice::from_raw_parts(self.ptr, self.len) } + } + + fn as_slice_mut(&self) -> &mut [T] { + unsafe { std::slice::from_raw_parts_mut(self.ptr, self.len) } + } +} + +#[no_mangle] +extern "C" fn hftokenizers_new(path: ZigSlice) -> *mut tokenizers::Tokenizer { + return Box::into_raw(Box::new( + tokenizers::Tokenizer::from_file(std::path::Path::new( + std::str::from_utf8(path.as_slice()).unwrap(), + )) + .unwrap(), + )); +} + +#[no_mangle] +extern "C" fn hftokenizers_drop(t: *mut tokenizers::Tokenizer) { + drop(unsafe { Box::from_raw(t) }); +} + +#[no_mangle] +extern "C" fn hftokenizers_encode( + t: *mut tokenizers::Tokenizer, + string: ZigSlice, +) -> ZigSlice { + let input_str = std::str::from_utf8(string.as_slice()).unwrap(); + let encoded = unsafe { t.as_ref() } + .unwrap() + .encode_fast(input_str, false) + .unwrap(); + + // Convert the result to a boxed slice + let mut ids: Box<[u32]> = encoded.get_ids().to_owned().into_boxed_slice(); + + // Retrieve the zig slice associated to the boxed slice. + let slice = ZigSlice { + ptr: ids.as_mut_ptr(), + len: ids.len(), + }; + + // Leak the box so that it's not deallocated. + Box::leak(ids); + + return slice; +} + +#[no_mangle] +extern "C" fn hftokenizers_tokens_drop(tokens: ZigSlice) { + // Reconstruct the Box from the zig slice so that it's dropped. + drop(unsafe { Box::from_raw(tokens.as_slice_mut()) }); +} + +#[no_mangle] +extern "C" fn hftokenizers_decode( + t: *mut tokenizers::Tokenizer, + ids: ZigSlice, +) -> ZigSlice { + let decoded = unsafe { t.as_ref() } + .unwrap() + .decode(ids.as_slice(), false) + .unwrap(); + + // Convert the result to a boxed slice + let mut string: Box<[u8]> = decoded.into_bytes().into_boxed_slice(); + + // Retrieve the zig slice associated to the boxed slice. + let slice = ZigSlice { + ptr: string.as_mut_ptr(), + len: string.len(), + }; + + // Leak the box so that it's not deallocated. + Box::leak(string); + + return slice; +} + +#[no_mangle] +extern "C" fn hftokenizers_str_drop(tokens: ZigSlice) { + drop(unsafe { Box::from_raw(tokens.as_slice_mut()) }); +} + +#[no_mangle] +extern "C" fn hftokenizers_token_to_id(t: *mut tokenizers::Tokenizer, token: ZigSlice) -> u32 { + let id = unsafe { t.as_ref() } + .unwrap() + .token_to_id(std::str::from_utf8(token.as_slice()).unwrap()) + .unwrap_or(u32::MAX); + return id; +} diff --git a/zml/tokenizer/hftokenizers/hftokenizers.zig b/zml/tokenizer/hftokenizers/hftokenizers.zig new file mode 100644 index 0000000..d5c252f --- /dev/null +++ b/zml/tokenizer/hftokenizers/hftokenizers.zig @@ -0,0 +1,113 @@ +const std = @import("std"); +const c = @import("c"); +const ffi = @import("ffi"); + +pub const Encoder = struct { + inner: *HFTokenizer, + current_ids: ?[]const u32 = null, + + fn init(inner: *HFTokenizer) Encoder { + return .{ .inner = inner }; + } + + pub fn reset(self: *Encoder) void { + if (self.current_ids) |current_ids_| { + c.hftokenizers_tokens_drop(ffi.ZigSlice.from(current_ids_)); + self.current_ids = null; + } + } + + pub fn deinit(self: *Encoder) void { + self.reset(); + } + + pub fn encode(self: *Encoder, input: []const u8) ![]const u32 { + self.reset(); + self.current_ids = ffi.ZigSlice.to(u32, c.hftokenizers_encode(@ptrCast(self.inner), ffi.ZigSlice.from(input))); + return self.ids(); + } + + pub fn ids(self: *const Encoder) []const u32 { + return self.current_ids orelse &.{}; + } +}; + +pub const Decoder = struct { + const StringBuffer = std.BoundedArray(u8, 128); + const TokensIdsBuffer = std.BoundedArray(u32, 4); + + inner: *HFTokenizer, + current_string: ?[]const u8 = null, + last_string: StringBuffer = .{ .len = 0 }, + last_token_ids: TokensIdsBuffer = .{ .len = 0 }, + + fn init(inner: *HFTokenizer) Decoder { + return .{ .inner = inner }; + } + + pub fn deinit(self: *Decoder) void { + self.reset(); + } + + pub fn reset(self: *Decoder) void { + if (self.current_string) |current_string_| { + c.hftokenizers_str_drop(ffi.ZigSlice.from(current_string_)); + self.current_string = null; + } + } + + pub fn decode(self: *Decoder, ids: []const u32) ![]const u8 { + self.reset(); + self.current_string = ffi.ZigSlice.to(u8, c.hftokenizers_decode(@ptrCast(self.inner), ffi.ZigSlice.from(ids))); + return self.string(); + } + + pub fn string(self: *const Decoder) []const u8 { + return self.current_string orelse &.{}; + } + + pub fn next(self: *Decoder, token_id: u32) !?[]const u8 { + if (self.last_token_ids.len >= self.last_token_ids.capacity()) { + _ = self.last_token_ids.orderedRemove(0); + } + self.last_token_ids.appendAssumeCapacity(token_id); + const new_string = try self.decode(self.last_token_ids.constSlice()); + if (self.last_string.len == 0) { + self.last_string = try StringBuffer.fromSlice(new_string); + return new_string; + } + var view = try std.unicode.Utf8View.init(self.last_string.constSlice()); + var it = view.iterator(); + while (it.nextCodepointSlice()) |cp| { + const start = it.i - cp.len; + if (std.mem.startsWith(u8, new_string, self.last_string.constSlice()[start..])) { + const chunk = new_string[self.last_string.len - start ..]; + self.last_string = try StringBuffer.fromSlice(new_string); + return chunk; + } + } + return null; + } +}; + +pub const HFTokenizer = opaque { + pub fn from_file(model: []const u8) !*HFTokenizer { + return @ptrCast(c.hftokenizers_new(ffi.ZigSlice.from(model))); + } + + pub fn deinit(self: *HFTokenizer) void { + return c.hftokenizers_drop(@ptrCast(self)); + } + + pub fn encoder(self: *HFTokenizer) !Encoder { + return Encoder.init(self); + } + + pub fn decoder(self: *HFTokenizer) !Decoder { + return Decoder.init(self); + } + + pub fn token_to_id(self: *HFTokenizer, token: []const u8) ?u32 { + return c.hftokenizers_token_to_id(@ptrCast(self), ffi.ZigSlice.from(token)); + } +}; diff --git a/zml/tokenizer/hftokenizers/main.zig b/zml/tokenizer/hftokenizers/main.zig new file mode 100644 index 0000000..395660b --- /dev/null +++ b/zml/tokenizer/hftokenizers/main.zig @@ -0,0 +1,27 @@ +const std = @import("std"); +const c = @import("c"); +const HFTokenizers = @import("hftokenizers").HFTokenizers; + +pub fn main() !void { + const tokenizer = HFTokenizers.init("/private/var/tmp/_bazel_steeve/a67b810d44f2a673ebbd5bab86ccd5cc/external/zml~~huggingface~Meta-Llama-3.1-8B-Instruct/tokenizer.json"); + defer HFTokenizers.deinit(tokenizer); + + const input = "Hello, world! plane pouet plane"; + var encoded = HFTokenizers.encode(tokenizer, input); + defer encoded.deinit(); + var pouet = std.ArrayList(u32).init(std.heap.c_allocator); + defer pouet.deinit(); + + // try pouet.appendSlice(encoded.ids); + + var t = try std.time.Timer.start(); + for (0..100) |_| { + try pouet.appendSlice(encoded.ids); + t.reset(); + var decoded = HFTokenizers.decode(tokenizer, pouet.items); + defer decoded.deinit(); + const elapsed = t.lap(); + // std.debug.print("{any} {any} {d}us\n", .{tokenizer, encoded, elapsed / std.time.ns_per_us}); + std.debug.print("{any} {any} {s} {d}ns {d}us\n", .{ tokenizer, encoded, decoded.str, elapsed, elapsed / std.time.ns_per_us }); + } +} diff --git a/zml/tokenizer/main.zig b/zml/tokenizer/main.zig new file mode 100644 index 0000000..b8efd01 --- /dev/null +++ b/zml/tokenizer/main.zig @@ -0,0 +1,22 @@ +const std = @import("std"); +const tokenizer = @import("zml/tokenizer"); + +pub fn main() !void { + const model2 = "/private/var/tmp/_bazel_steeve/a67b810d44f2a673ebbd5bab86ccd5cc/external/zml~~huggingface~Meta-Llama-3.1-8B-Instruct/tokenizer.json"; + + var sp = try tokenizer.Tokenizer.from_file(std.heap.c_allocator, model2); + defer sp.deinit(); + + std.debug.print("Loaded model\n", .{}); + + var encoder = try sp.encoder(); + defer encoder.deinit(); + + var decoder = try sp.decoder(); + defer decoder.deinit(); + + const ids = try encoder.encode("Hello, world! plane pouet plane"); + const decoded = try decoder.decode(ids); + + std.debug.print("{d}\n{s}\n", .{ ids, decoded }); +} diff --git a/zml/tokenizer/sentencepiece/BUILD.bazel b/zml/tokenizer/sentencepiece/BUILD.bazel new file mode 100644 index 0000000..a0fb658 --- /dev/null +++ b/zml/tokenizer/sentencepiece/BUILD.bazel @@ -0,0 +1,35 @@ +load("@rules_zig//zig:defs.bzl", "zig_library") +load("@zml//bazel:zig.bzl", "zig_cc_binary") +load("//bazel:swig.bzl", "swig_cc_library") + +swig_cc_library( + name = "sentencepiece_swig", + interface = "sentencepiece.i", + module = "sentencepiece", + deps = [ + "//ffi:cc", + "@com_google_sentencepiece//:sentencepiece_processor", + ], +) + +zig_library( + name = "sentencepiece", + import_name = "sentencepiece", + main = "sentencepiece.zig", + visibility = ["//visibility:public"], + deps = [ + ":sentencepiece_swig", + "//ffi:zig", + ], +) + +zig_cc_binary( + name = "main", + srcs = ["sentencepiece.zig"], + main = "main.zig", + visibility = ["//visibility:public"], + deps = [ + ":sentencepiece_swig", + "//ffi:zig", + ], +) diff --git a/zml/tokenizer/sentencepiece/main.zig b/zml/tokenizer/sentencepiece/main.zig new file mode 100644 index 0000000..caa336f --- /dev/null +++ b/zml/tokenizer/sentencepiece/main.zig @@ -0,0 +1,289 @@ +const std = @import("std"); +const c = @import("c"); +const ffi = @import("ffi"); + +pub const SentencePieceError = error{ + Cancelled, + Unknown, + InvalidArgument, + DeadlineExceeded, + NotFound, + AlreadyExists, + PermissionDenied, + ResourceExhausted, + FailedPrecondition, + Aborted, + OutOfRange, + Unimplemented, + Internal, + Unavailable, + DataLoss, + Unauthenticated, +}; + +pub const DecoderStream = struct { + const TokensSize = 4; + const StringSize = 128; + decoder: SentencePieceProcessor.Decoder, + buffer: [StringSize]u8 = undefined, + last_tokens: []u8 = &.{}, + + pub fn init(decoder: SentencePieceProcessor.Decoder) DecoderStream { + var ret: DecoderStream = .{ + .decoder = decoder, + }; + ret.decoder.reserve_tokens(TokensSize); + ret.decoder.reserve_string(StringSize); + return ret; + } + + pub fn next(self: *DecoderStream, next_token: u32) !?[]const u8 { + if (self.decoder.tokens().len >= TokensSize) { + const tokens = self.decoder.tokens(); + inline for (0..TokensSize - 1) |i| { + tokens[i] = tokens[i + 1]; + } + tokens[TokensSize - 1] = next_token; + } else { + self.decoder.append(next_token); + } + const new_tokens = try self.decoder.decode(); + if (self.last_tokens.len == 0) { + self.last_tokens = self.buffer[0..new_tokens.len]; + @memcpy(self.last_tokens, new_tokens); + return new_tokens; + } + for (1..self.last_tokens.len) |i| { + if (std.mem.startsWith(u8, new_tokens, self.last_tokens[i..])) { + const toks = new_tokens[self.last_tokens.len - i ..]; + self.last_tokens = self.buffer[0..new_tokens.len]; + @memcpy(self.last_tokens, new_tokens); + return toks; + } + } + return null; + } +}; + +pub const SentencePieceProcessor = opaque { + pub const Encoder = struct { + inner: *SentencePieceProcessor, + vec: *c.std_vector_int, + + fn init(inner: *SentencePieceProcessor) Encoder { + return .{ + .inner = inner, + .vec = c.std_vector_int_new() orelse unreachable, + }; + } + + pub fn deinit(self: *Encoder) void { + c.std_vector_int_delete(self.vec); + } + + pub fn reserve(self: *Encoder, size: usize) void { + c.std_vector_int_reserve(self.vec, size); + } + + pub fn reset(self: *Encoder) void { + c.std_vector_int_clear(self.vec); + } + + pub fn encode(self: *Encoder, input: []const u8) ![]const u32 { + try assertOk(c.SentencePieceProcessor_Encode(@ptrCast(self.inner), ffi.ZigSlice.from(input), self.vec)); + return ffi.ZigSlice.to(u32, .{ + .ptr = c.std_vector_int_data(self.vec), + .len = c.std_vector_int_size(self.vec), + }); + } + }; + + pub const Decoder = struct { + inner: *SentencePieceProcessor, + vec: *c.std_vector_int, + str: *c.std_string, + + fn init(inner: *SentencePieceProcessor) Decoder { + return .{ + .inner = inner, + .vec = c.std_vector_int_new() orelse unreachable, + .str = c.std_string_new() orelse unreachable, + }; + } + + pub fn append(self: *Decoder, token: u32) void { + c.std_vector_int_push_back(self.vec, @intCast(token)); + } + + pub fn deinit(self: *Decoder) void { + c.std_vector_int_delete(self.vec); + c.std_string_delete(self.str); + } + + pub fn reserve_tokens(self: *Decoder, size: usize) void { + c.std_vector_int_reserve(self.vec, size); + } + + pub fn reserve_string(self: *Decoder, size: usize) void { + c.std_string_reserve(self.str, size); + } + + pub fn reset(self: *Decoder) void { + c.std_vector_int_clear(self.vec); + c.std_string_clear(self.str); + } + + pub fn decode(self: *Decoder) ![]const u8 { + try assertOk(c.SentencePieceProcessor_Decode(@ptrCast(self.inner), self.vec, self.str)); + return self.string(); + } + + pub fn string(self: *const Decoder) []const u8 { + const res = c.std_string_data(self.str); + return ffi.ZigSlice.to(u8, res); + } + + pub fn tokens(self: *const Decoder) []u32 { + const ptr: [*c]u32 = @ptrCast(c.std_vector_int_data(self.vec)); + return ptr[0..c.std_vector_int_size(self.vec)]; + } + }; + + fn assertOk(code: c.sentencepiece_util_StatusCode) SentencePieceError!void { + return switch (code) { + c.sentencepiece_util_StatusCode_kOk => {}, + c.sentencepiece_util_StatusCode_kCancelled => error.Cancelled, + c.sentencepiece_util_StatusCode_kUnknown => error.Unknown, + c.sentencepiece_util_StatusCode_kInvalidArgument => error.InvalidArgument, + c.sentencepiece_util_StatusCode_kDeadlineExceeded => error.DeadlineExceeded, + c.sentencepiece_util_StatusCode_kNotFound => error.NotFound, + c.sentencepiece_util_StatusCode_kAlreadyExists => error.AlreadyExists, + c.sentencepiece_util_StatusCode_kPermissionDenied => error.PermissionDenied, + c.sentencepiece_util_StatusCode_kResourceExhausted => error.ResourceExhausted, + c.sentencepiece_util_StatusCode_kFailedPrecondition => error.FailedPrecondition, + c.sentencepiece_util_StatusCode_kAborted => error.Aborted, + c.sentencepiece_util_StatusCode_kOutOfRange => error.OutOfRange, + c.sentencepiece_util_StatusCode_kUnimplemented => error.Unimplemented, + c.sentencepiece_util_StatusCode_kInternal => error.Internal, + c.sentencepiece_util_StatusCode_kUnavailable => error.Unavailable, + c.sentencepiece_util_StatusCode_kDataLoss => error.DataLoss, + c.sentencepiece_util_StatusCode_kUnauthenticated => error.Unauthenticated, + else => unreachable, + }; + } + + pub fn load(model: []const u8) !*SentencePieceProcessor { + const sp: *SentencePieceProcessor = @ptrCast(c.SentencePieceProcessor_new()); + errdefer sp.deinit(); + try sp.load_from(model); + return sp; + } + + pub fn deinit(self: *SentencePieceProcessor) void { + c.SentencePieceProcessor_delete(@ptrCast(self)); + } + + fn load_from(self: *SentencePieceProcessor, model: []const u8) !void { + try assertOk(c.SentencePieceProcessor_Load(@ptrCast(self), ffi.ZigSlice.from(model))); + } + + pub fn encoder(self: *SentencePieceProcessor) Encoder { + return Encoder.init(self); + } + + pub fn decoder(self: *SentencePieceProcessor) Decoder { + return Decoder.init(self); + } +}; + +pub fn as_path(path: []const u8) [std.fs.max_path_bytes:0]u8 { + var result: [std.fs.max_path_bytes:0]u8 = undefined; + @memcpy(result[0..path.len], path); + result[path.len] = 0; + return result; +} + +pub fn main() !void { + const sp = try SentencePieceProcessor.load("/Users/steeve/Downloads/poolside.sp.pb"); + defer sp.deinit(); + + std.debug.print("Loaded model\n", .{}); + + var encoder = sp.encoder(); + defer encoder.deinit(); + + var decoder = sp.decoder(); + defer decoder.deinit(); + + const ss = @embedFile("main.zig"); + // \\String class + // \\Strings are objects that represent sequences of characters. + // \\ + // \\The standard string class provides support for such objects with an interface similar to that of a standard container of bytes, but adding features specifically designed to operate with strings of single-byte characters. + // \\ + // \\The string class is an instantiation of the basic_string class template that uses char (i.e., bytes) as its character type, with its default char_traits and allocator types (see basic_string for more info on the template). + // \\ + // \\Note that this class handles bytes independently of the encoding used: If used to handle sequences of multi-byte or variable-length characters (such as UTF-8), all members of this class (such as length or size), as well as its iterators, will still operate in terms of bytes (not actual encoded characters). + // \\ + // ; + const tokens = try encoder.encode(ss); + + // const ss2 = 128; + // var buf = [_]u8{0} ** ss2; + // // _ = buf; // autofix + // var last_tokens: []u8 = &.{}; + // // _ = last_tokens; // autofix + // decoder.reserve_tokens(4); + // decoder.reserve_string(128); + + var stream = DecoderStream.init(decoder); + + var start = try std.time.Timer.start(); + for (tokens) |token| { + if (try stream.next(token)) |chunk| { + // std.debug.print("{s}", .{chunk}); + std.debug.print("{d}us - {s}\n", .{ start.lap() / std.time.ns_per_us, chunk }); + } + } + + // var start = try std.time.Timer.start(); + // var it = std.mem.window(u32, tokens, 3, 1); + // while (it.next()) |slice| { + // if (decoder.tokens().len >= 4) { + // const kept_tokens = decoder.tokens()[1..]; + // std.mem.copyForwards(u32, decoder.tokens()[0..kept_tokens.len], kept_tokens); + // kept_tokens[kept_tokens.len - 1] = slice[2]; + // } else { + // for (slice) |token| { + // decoder.append(token); + // } + // } + // const new_tokens = try decoder.decode(); + // for (0..ss2) |i| { + // if (std.mem.startsWith(u8, new_tokens, last_tokens[i..])) { + // const toks = new_tokens[last_tokens.len - i..]; + // // std.debug.print("{s}", .{toks}); + // if (toks.len == 0) { + // // std.debug.print("WESH\n", .{}); + // } + // break; + // } + // } + // last_tokens = buf[0..new_tokens.len]; + // @memcpy(last_tokens, new_tokens); + // std.debug.print("{d}us\n", .{start.lap() / std.time.ns_per_us}); + // } + + // for (tokens) |token| { + // decoder.append(token); + // } + // const decoded = try decoder.decode(); + // std.debug.print("Decoded: {s}\n", .{decoded}); + + // const model = "/Users/steeve/Downloads/poolside.sp.pb"; + + // c.SentencePieceProcessor_LoadOrDie(sp, c.zig_slice{ .ptr = model.ptr, .len = model.len }); + + // const piece = c.SentencePieceProcessor_IdToPiece(sp, 10999); + // std.debug.print("{s}\n", .{piece.ptr[0..piece.len]}); +} diff --git a/zml/tokenizer/sentencepiece/sentencepiece.i b/zml/tokenizer/sentencepiece/sentencepiece.i new file mode 100644 index 0000000..f2413dc --- /dev/null +++ b/zml/tokenizer/sentencepiece/sentencepiece.i @@ -0,0 +1,92 @@ +/* File : example.i */ +%module sentencepiece +%include +%include + +%{ +#include +#include +#include +#include +#include "ffi/zig_slice.h" +%} + +%insert("cheader") %{ +#include "ffi/zig_slice.h" +%} + +%typemap(in) absl::string_view { + $1 = absl::string_view((char *)$input.ptr, $input.len); +} + +%typemap(out, optimal="1") const std::string& %{ + $result.ptr = (void *)($1->data()); + $result.len = (size_t)($1->length()); +%} +%typemap(ctype) absl::string_view, const std::string& "zig_slice" + +%rename(std_string) std::string; +namespace std { + class string { + public: + void reserve(size_t n); + void clear(); + size_t capacity() const; + }; +} + +%extend std::string { + const std::string& data() const { + return *$self; + }; +} + +%extend std::vector { + T* data() { + return $self->data(); + }; +} + +%template(std_vector_int) std::vector; + +%typemap(out) sentencepiece::util::Status %{ + $result = $1.code(); +%} +%typemap(ctype) sentencepiece::util::Status "unsigned int" +%rename(sentencepiece_util_StatusCode, fullname=1) sentencepiece::util::StatusCode; + +namespace sentencepiece { + namespace util { + enum class StatusCode : int { + kOk = 0, + kCancelled = 1, + kUnknown = 2, + kInvalidArgument = 3, + kDeadlineExceeded = 4, + kNotFound = 5, + kAlreadyExists = 6, + kPermissionDenied = 7, + kResourceExhausted = 8, + kFailedPrecondition = 9, + kAborted = 10, + kOutOfRange = 11, + kUnimplemented = 12, + kInternal = 13, + kUnavailable = 14, + kDataLoss = 15, + kUnauthenticated = 16, + }; + } + + class SentencePieceProcessor { + public: + virtual sentencepiece::util::Status Load(absl::string_view filename); + virtual sentencepiece::util::Status Encode(absl::string_view input, std::vector *ids) const; + virtual sentencepiece::util::Status Decode(const std::vector &ids, std::string *detokenized) const; + virtual int PieceToId(absl::string_view piece) const; + virtual int unk_id() const; + virtual int bos_id() const; + virtual int eos_id() const; + virtual int pad_id() const; + }; +} diff --git a/zml/tokenizer/sentencepiece/sentencepiece.zig b/zml/tokenizer/sentencepiece/sentencepiece.zig new file mode 100644 index 0000000..a5ce8d4 --- /dev/null +++ b/zml/tokenizer/sentencepiece/sentencepiece.zig @@ -0,0 +1,189 @@ +const std = @import("std"); +const c = @import("c"); +const ffi = @import("ffi"); + +const StringToTokenRatio = 3; + +pub const Error = error{ + Cancelled, + Unknown, + InvalidArgument, + DeadlineExceeded, + NotFound, + AlreadyExists, + PermissionDenied, + ResourceExhausted, + FailedPrecondition, + Aborted, + OutOfRange, + Unimplemented, + Internal, + Unavailable, + DataLoss, + Unauthenticated, +}; + +fn assertOk(code: c.sentencepiece_util_StatusCode) Error!void { + return switch (code) { + c.sentencepiece_util_StatusCode_kOk => {}, + c.sentencepiece_util_StatusCode_kCancelled => Error.Cancelled, + c.sentencepiece_util_StatusCode_kUnknown => Error.Unknown, + c.sentencepiece_util_StatusCode_kInvalidArgument => Error.InvalidArgument, + c.sentencepiece_util_StatusCode_kDeadlineExceeded => Error.DeadlineExceeded, + c.sentencepiece_util_StatusCode_kNotFound => Error.NotFound, + c.sentencepiece_util_StatusCode_kAlreadyExists => Error.AlreadyExists, + c.sentencepiece_util_StatusCode_kPermissionDenied => Error.PermissionDenied, + c.sentencepiece_util_StatusCode_kResourceExhausted => Error.ResourceExhausted, + c.sentencepiece_util_StatusCode_kFailedPrecondition => Error.FailedPrecondition, + c.sentencepiece_util_StatusCode_kAborted => Error.Aborted, + c.sentencepiece_util_StatusCode_kOutOfRange => Error.OutOfRange, + c.sentencepiece_util_StatusCode_kUnimplemented => Error.Unimplemented, + c.sentencepiece_util_StatusCode_kInternal => Error.Internal, + c.sentencepiece_util_StatusCode_kUnavailable => Error.Unavailable, + c.sentencepiece_util_StatusCode_kDataLoss => Error.DataLoss, + c.sentencepiece_util_StatusCode_kUnauthenticated => Error.Unauthenticated, + else => unreachable, + }; +} + +pub const Encoder = struct { + inner: *SentencePieceProcessor, + vec: *c.std_vector_int, + + fn init(inner: *SentencePieceProcessor) Encoder { + return .{ + .inner = inner, + .vec = c.std_vector_int_new() orelse unreachable, + }; + } + + pub fn deinit(self: *Encoder) void { + c.std_vector_int_delete(self.vec); + } + + pub fn reset(self: *Encoder) void { + c.std_vector_int_clear(self.vec); + } + + pub fn encode(self: *Encoder, input: []const u8) ![]const u32 { + c.std_vector_int_reserve(self.vec, input.len / StringToTokenRatio); + try assertOk(c.SentencePieceProcessor_Encode(@ptrCast(self.inner), ffi.ZigSlice.from(input), self.vec)); + return self.ids(); + } + + pub fn ids(self: *const Encoder) []const u32 { + return ffi.ZigSlice.to(u32, .{ + .ptr = c.std_vector_int_data(self.vec), + .len = c.std_vector_int_size(self.vec), + }); + } +}; + +pub const Decoder = struct { + const StringBufferSize = 64; + const StringBuffer = std.BoundedArray(u8, StringBufferSize); + const TokenIdsBufferSize = 4; + + inner: *SentencePieceProcessor, + vec: *c.std_vector_int, + str: *c.std_string, + last_string: StringBuffer = .{ .len = 0 }, + + fn init(inner: *SentencePieceProcessor) !Decoder { + const vec = try (c.std_vector_int_new() orelse std.mem.Allocator.Error.OutOfMemory); + c.std_vector_int_reserve(vec, TokenIdsBufferSize); + errdefer c.std_vector_int_delete(vec); + + const str = try (c.std_string_new() orelse std.mem.Allocator.Error.OutOfMemory); + c.std_string_reserve(str, StringBufferSize); + errdefer c.std_string_delete(str); + + return .{ + .inner = inner, + .vec = vec, + .str = str, + }; + } + + pub fn deinit(self: *Decoder) void { + c.std_vector_int_delete(self.vec); + c.std_string_delete(self.str); + } + + pub fn reset(self: *Decoder) void { + c.std_vector_int_clear(self.vec); + c.std_string_clear(self.str); + } + + pub fn decode(self: *Decoder, ids_: []const u32) ![]const u8 { + c.std_vector_int_reserve(self.vec, ids_.len); + c.std_string_reserve(self.str, ids_.len * StringToTokenRatio); + for (ids_) |id| { + c.std_vector_int_push_back(self.vec, @intCast(id)); + } + try assertOk(c.SentencePieceProcessor_Decode(@ptrCast(self.inner), self.vec, self.str)); + return self.string(); + } + + pub fn string(self: *const Decoder) []const u8 { + const res = c.std_string_data(self.str); + return ffi.ZigSlice.to(u8, res); + } + + fn ids(self: *const Decoder) []u32 { + const ptr: [*c]u32 = @ptrCast(c.std_vector_int_data(self.vec)); + return ptr[0..c.std_vector_int_size(self.vec)]; + } + + pub fn next(self: *Decoder, token_id: u32) !?[]const u8 { + const current_ids = self.ids(); + if (current_ids.len >= c.std_vector_int_capacity(self.vec)) { + std.mem.copyForwards(u32, current_ids[0 .. current_ids.len - 1], current_ids[1..]); + current_ids[current_ids.len - 1] = token_id; + } else { + c.std_vector_int_push_back(self.vec, @intCast(token_id)); + } + try assertOk(c.SentencePieceProcessor_Decode(@ptrCast(self.inner), self.vec, self.str)); + const new_string = self.string(); + if (self.last_string.len == 0) { + self.last_string = try StringBuffer.fromSlice(new_string); + return new_string; + } + var view = try std.unicode.Utf8View.init(self.last_string.constSlice()); + var it = view.iterator(); + while (it.nextCodepointSlice()) |cp| { + const start = it.i - cp.len; + if (std.mem.startsWith(u8, new_string, self.last_string.constSlice()[start..])) { + const chunk = new_string[self.last_string.len - start ..]; + self.last_string = try StringBuffer.fromSlice(new_string); + return chunk; + } + } + return &.{}; + } +}; + +pub const SentencePieceProcessor = opaque { + pub fn from_file(model: []const u8) !*SentencePieceProcessor { + const sp: *SentencePieceProcessor = @ptrCast(c.SentencePieceProcessor_new()); + errdefer sp.deinit(); + try assertOk(c.SentencePieceProcessor_Load(@ptrCast(sp), ffi.ZigSlice.from(model))); + return sp; + } + + pub fn deinit(self: *SentencePieceProcessor) void { + c.SentencePieceProcessor_delete(@ptrCast(self)); + } + + pub fn encoder(self: *SentencePieceProcessor) !Encoder { + return Encoder.init(self); + } + + pub fn decoder(self: *SentencePieceProcessor) !Decoder { + return try Decoder.init(self); + } + + pub fn token_to_id(self: *SentencePieceProcessor, token: []const u8) u32 { + return @intCast(c.SentencePieceProcessor_PieceToId(@ptrCast(self), ffi.ZigSlice.from(token))); + } +}; diff --git a/zml/tokenizer/tokenizer.zig b/zml/tokenizer/tokenizer.zig new file mode 100644 index 0000000..10307db --- /dev/null +++ b/zml/tokenizer/tokenizer.zig @@ -0,0 +1,118 @@ +const std = @import("std"); +const hftokenizers = @import("hftokenizers"); +const sentencepiece = @import("sentencepiece"); +const asynk = @import("async"); + +const Tokenizers = enum { + hftokenizers, + sentencepiece, +}; + +pub const Tokenizer = union(Tokenizers) { + pub const Encoder = union(Tokenizers) { + hftokenizers: hftokenizers.Encoder, + sentencepiece: sentencepiece.Encoder, + + pub fn deinit(self: *Encoder) void { + switch (self.*) { + inline else => |*v| v.deinit(), + } + } + + pub fn reset(self: *Encoder) void { + switch (self.*) { + inline else => |*v| v.reset(), + } + } + + pub fn encode(self: *Encoder, input: []const u8) ![]const u32 { + return switch (self.*) { + inline else => |*v| v.encode(input), + }; + } + + pub fn ids(self: Encoder) []const u32 { + return switch (self) { + inline else => |v| v.ids(), + }; + } + }; + + pub const Decoder = union(Tokenizers) { + hftokenizers: hftokenizers.Decoder, + sentencepiece: sentencepiece.Decoder, + + pub fn deinit(self: *Decoder) void { + switch (self.*) { + inline else => |*v| v.deinit(), + } + } + + pub fn reset(self: *Decoder) void { + switch (self.*) { + inline else => |*v| v.reset(), + } + } + + pub fn decode(self: *Decoder, ids_: []const u32) ![]const u8 { + return switch (self.*) { + inline else => |*v| v.decode(ids_), + }; + } + + pub fn string(self: Decoder) []const u8 { + return switch (self.*) { + inline else => |v| v.string(), + }; + } + + pub fn ids(self: Decoder) []u32 { + return switch (self.*) { + inline else => |v| v.ids(), + }; + } + + pub fn next(self: *Decoder, token_id: u32) !?[]const u8 { + return switch (self.*) { + inline else => |*v| v.next(token_id), + }; + } + }; + + hftokenizers: *hftokenizers.HFTokenizer, + sentencepiece: *sentencepiece.SentencePieceProcessor, + + pub fn from_file(_: std.mem.Allocator, model: []const u8) !Tokenizer { + if (std.mem.endsWith(u8, model, ".pb")) { + return .{ .sentencepiece = try asynk.callBlocking(sentencepiece.SentencePieceProcessor.from_file, .{model}) }; + } + if (std.mem.endsWith(u8, model, ".json")) { + return .{ .hftokenizers = try asynk.callBlocking(hftokenizers.HFTokenizer.from_file, .{model}) }; + } + return error.InvalidArgument; + } + + pub fn deinit(self: *Tokenizer) void { + switch (self.*) { + inline else => |t| t.deinit(), + } + } + + pub fn encoder(self: Tokenizer) !Encoder { + return switch (self) { + inline else => |v, tag| @unionInit(Encoder, @tagName(tag), try v.encoder()), + }; + } + + pub fn decoder(self: Tokenizer) !Decoder { + return switch (self) { + inline else => |v, tag| @unionInit(Decoder, @tagName(tag), try v.decoder()), + }; + } + + pub fn token_to_id(self: Tokenizer, token: []const u8) ?u32 { + return switch (self) { + inline else => |v| v.token_to_id(token), + }; + } +}; diff --git a/zml/zml.zig b/zml/zml.zig index d4e6992..088ad68 100644 --- a/zml/zml.zig +++ b/zml/zml.zig @@ -29,7 +29,8 @@ pub const pjrt = @import("pjrtx.zig"); pub const testing = @import("testing.zig"); pub const torch = @import("torch.zig"); -pub const tokenizer = @import("tokenizer.zig"); +// pub const tokenizer = @import("tokenizer.zig"); +pub const tokenizer = @import("zml/tokenizer"); pub const call = ops.call; pub const compile = exe.compile;