From 610a9b91b46efb3b4d5705f40c23e9968365d6b8 Mon Sep 17 00:00:00 2001 From: "eclipse-otterdog[bot]" <158182605+eclipse-otterdog[bot]@users.noreply.github.com> Date: Sun, 26 Oct 2025 19:52:39 +0000 Subject: [PATCH 01/59] Initial commit --- .github/workflows/copyright.yml | 24 ++++++++++++ .github/workflows/docs-cleanup.yml | 29 +++++++++++++++ .github/workflows/docs.yml | 43 ++++++++++++++++++++++ .github/workflows/format.yml | 26 +++++++++++++ .github/workflows/gitlint.yml | 31 ++++++++++++++++ .github/workflows/license_check.yml | 32 ++++++++++++++++ BUILD | 48 ++++++++++++++++++++++++ MODULE.bazel | 57 +++++++++++++++++++++++++++++ examples/BUILD | 8 ++++ examples/Cargo.lock | 18 +++++++++ project_config.bzl | 5 +++ src/BUILD | 0 12 files changed, 321 insertions(+) create mode 100644 .github/workflows/copyright.yml create mode 100644 .github/workflows/docs-cleanup.yml create mode 100644 .github/workflows/docs.yml create mode 100644 .github/workflows/format.yml create mode 100644 .github/workflows/gitlint.yml create mode 100644 .github/workflows/license_check.yml create mode 100644 BUILD create mode 100644 MODULE.bazel create mode 100644 examples/BUILD create mode 100644 examples/Cargo.lock create mode 100644 project_config.bzl create mode 100644 src/BUILD diff --git a/.github/workflows/copyright.yml b/.github/workflows/copyright.yml new file mode 100644 index 0000000000..08ef376710 --- /dev/null +++ b/.github/workflows/copyright.yml @@ -0,0 +1,24 @@ +# ******************************************************************************* +# Copyright (c) 2024 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* + +name: Copyright checks +on: + pull_request: + types: [opened, reopened, synchronize] + merge_group: + types: [checks_requested] +jobs: + copyright-check: + uses: eclipse-score/cicd-workflows/.github/workflows/copyright.yml@main + with: + bazel-target: "run //:copyright.check" diff --git a/.github/workflows/docs-cleanup.yml b/.github/workflows/docs-cleanup.yml new file mode 100644 index 0000000000..cfa4ae2444 --- /dev/null +++ b/.github/workflows/docs-cleanup.yml @@ -0,0 +1,29 @@ +# ******************************************************************************* +# Copyright (c) 2025 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* + +name: Documentation Cleanup + +permissions: + contents: write + pages: write + id-token: write + +on: + schedule: + - cron: '0 0 * * *' # Runs every day at midnight UTC + +jobs: + docs-cleanup: + uses: eclipse-score/cicd-workflows/.github/workflows/docs-cleanup.yml@main + secrets: + token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 0000000000..24bd39951f --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,43 @@ +# ******************************************************************************* +# Copyright (c) 2025 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* + +name: Documentation + +permissions: + contents: write + pages: write + pull-requests: write + id-token: write + +on: + pull_request_target: + types: [opened, reopened, synchronize] # Allows forks to trigger the docs build + push: + branches: + - main + merge_group: + types: [checks_requested] + +jobs: + build-docs: + uses: eclipse-score/cicd-workflows/.github/workflows/docs.yml@main + permissions: + contents: write + pages: write + pull-requests: write + id-token: write + + with: + # the bazel-target depends on your repo specific docs_targets configuration (e.g. "suffix") + bazel-target: "//:docs -- --github_user=${{ github.repository_owner }} --github_repo=${{ github.event.repository.name }}" + retention-days: 3 diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml new file mode 100644 index 0000000000..620d697278 --- /dev/null +++ b/.github/workflows/format.yml @@ -0,0 +1,26 @@ +# ******************************************************************************* +# Copyright (c) 2024 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* + +name: Formatting checks + +on: + pull_request: + types: [opened, reopened, synchronize] + merge_group: + types: [checks_requested] + +jobs: + formatting-check: + uses: eclipse-score/cicd-workflows/.github/workflows/format.yml@main + with: + bazel-target: "test //:format.check" # optional, this is the default diff --git a/.github/workflows/gitlint.yml b/.github/workflows/gitlint.yml new file mode 100644 index 0000000000..90487edcac --- /dev/null +++ b/.github/workflows/gitlint.yml @@ -0,0 +1,31 @@ +# ******************************************************************************* +# Copyright (c) 2024 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* + +name: Gitlint check +on: + pull_request: + types: [opened, synchronize, reopened] +jobs: + lint-commits: + name: check-commit-messages + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v3 + with: + fetch-depth: 0 + - name: Run Gitlint Action + if: ${{ github.event_name == 'pull_request' }} + uses: ./.github/actions/gitlint + with: + pr-number: ${{ github.event.number }} diff --git a/.github/workflows/license_check.yml b/.github/workflows/license_check.yml new file mode 100644 index 0000000000..aba7f99d8e --- /dev/null +++ b/.github/workflows/license_check.yml @@ -0,0 +1,32 @@ +# ******************************************************************************* +# Copyright (c) 2025 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* + +name: License check preparation +on: + pull_request_target: + types: [opened, reopened, synchronize] + merge_group: + types: [checks_requested] + +permissions: + pull-requests: write + issues: write + + +jobs: + license-check: + uses: eclipse-score/cicd-workflows/.github/workflows/license-check.yml@main + with: + repo-url: "${{ github.server_url }}/${{ github.repository }}" + secrets: + dash-api-token: ${{ secrets.ECLIPSE_GITLAB_API_TOKEN }} diff --git a/BUILD b/BUILD new file mode 100644 index 0000000000..473b5d5c8a --- /dev/null +++ b/BUILD @@ -0,0 +1,48 @@ +# ******************************************************************************* +# Copyright (c) 2025 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* + +load("@score_docs_as_code//:docs.bzl", "docs") +load("@score_tooling//:defs.bzl", "copyright_checker", "dash_license_checker", "setup_starpls", "use_format_targets") +load("//:project_config.bzl", "PROJECT_CONFIG") + +setup_starpls( + name = "starpls_server", + visibility = ["//visibility:public"], +) + +copyright_checker( + name = "copyright", + srcs = [ + "src", + "tests", + "//:BUILD", + "//:MODULE.bazel", + ], + config = "@score_tooling//cr_checker/resources:config", + template = "@score_tooling//cr_checker/resources:templates", + visibility = ["//visibility:public"], +) + +dash_license_checker( + src = "//examples:cargo_lock", + file_type = "", # let it auto-detect based on project_config + project_config = PROJECT_CONFIG, + visibility = ["//visibility:public"], +) + +# Add target for formatting checks +use_format_targets() + +docs( + source_dir = "docs", +) diff --git a/MODULE.bazel b/MODULE.bazel new file mode 100644 index 0000000000..1ec606ddd8 --- /dev/null +++ b/MODULE.bazel @@ -0,0 +1,57 @@ +# ******************************************************************************* +# Copyright (c) 2025 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* +module( + name = "cpp_rust_template_repository", + version = "1.0", +) + +bazel_dep(name = "rules_python", version = "1.4.1") + +PYTHON_VERSION = "3.12" + +python = use_extension("@rules_python//python/extensions:python.bzl", "python") +python.toolchain( + is_default = True, + python_version = PYTHON_VERSION, +) +use_repo(python) + +# Add GoogleTest dependency +bazel_dep(name = "googletest", version = "1.17.0") + +# Rust rules for Bazel +bazel_dep(name = "rules_rust", version = "0.63.0") + +# C/C++ rules for Bazel +bazel_dep(name = "rules_cc", version = "0.2.1") + +# LLVM Toolchains Rules - host configuration +bazel_dep(name = "toolchains_llvm", version = "1.4.0") + +llvm = use_extension("@toolchains_llvm//toolchain/extensions:llvm.bzl", "llvm") +llvm.toolchain( + cxx_standard = {"": "c++17"}, + llvm_version = "19.1.0", +) +use_repo(llvm, "llvm_toolchain") +use_repo(llvm, "llvm_toolchain_llvm") + +register_toolchains("@llvm_toolchain//:all") + +# tooling +bazel_dep(name = "score_tooling", version = "1.0.1") +bazel_dep(name = "aspect_rules_lint", version = "1.5.3") +bazel_dep(name = "buildifier_prebuilt", version = "8.2.0.2") + +#docs-as-code +bazel_dep(name = "score_docs_as_code", version = "1.1.0") diff --git a/examples/BUILD b/examples/BUILD new file mode 100644 index 0000000000..012dd54150 --- /dev/null +++ b/examples/BUILD @@ -0,0 +1,8 @@ +# Needed for Dash tool to check python dependency licenses. +filegroup( + name = "cargo_lock", + srcs = [ + "Cargo.lock", + ], + visibility = ["//visibility:public"], +) diff --git a/examples/Cargo.lock b/examples/Cargo.lock new file mode 100644 index 0000000000..cd1fbfa187 --- /dev/null +++ b/examples/Cargo.lock @@ -0,0 +1,18 @@ +# 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 = "aliasable" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd" diff --git a/project_config.bzl b/project_config.bzl new file mode 100644 index 0000000000..f764a1d02f --- /dev/null +++ b/project_config.bzl @@ -0,0 +1,5 @@ +# project_config.bzl +PROJECT_CONFIG = { + "asil_level": "QM", + "source_code": ["rust"], +} diff --git a/src/BUILD b/src/BUILD new file mode 100644 index 0000000000..e69de29bb2 From e48f6a547eefa08c7dafe703e037d5cc4211818c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arkadiusz=20J=C4=99drzejewski?= Date: Sun, 16 Nov 2025 14:08:21 +0000 Subject: [PATCH 02/59] bazel: Base changes to repository `inc_orchestrator_internal` was used as a basis. - Update all dependencies. - Add additional config files (e.g., `.cargo/`, `rust-toolchain.toml`, `rustfmt.toml`). - Update `.github` to be more Rust-specific. - Update Bazel configuration (e.g., `BUILD`, `MODULE.bazel`). - Add `Cargo.toml` workspace definition. - Update licenses. - Update `docs/` and `README.md` (still WIP). --- .github/workflows/build.yml | 71 +++++++++++++ .github/workflows/cargo_required.yml | 101 ++++++++++++++++++ .github/workflows/copyright.yml | 5 +- .github/workflows/docs-cleanup.yml | 2 +- .github/workflows/format.yml | 5 +- .github/workflows/gitlint.yml | 7 +- .github/workflows/license_check.yml | 5 +- .github/workflows/lint_fmt_clippy.yml | 72 +++++++++++++ .github/workflows/tests.yml | 48 +++++++++ BUILD | 37 ++++++- Cargo.toml | 26 +++++ MODULE.bazel | 146 ++++++++++++++++++++------ rust-toolchain.toml | 2 + rustfmt.toml | 6 ++ src/mw/BUILD | 0 src/mw/log/BUILD | 0 16 files changed, 493 insertions(+), 40 deletions(-) create mode 100644 .github/workflows/build.yml create mode 100644 .github/workflows/cargo_required.yml create mode 100644 .github/workflows/lint_fmt_clippy.yml create mode 100644 .github/workflows/tests.yml create mode 100644 Cargo.toml create mode 100644 rust-toolchain.toml create mode 100644 rustfmt.toml create mode 100644 src/mw/BUILD create mode 100644 src/mw/log/BUILD diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000000..34bc40c75e --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,71 @@ +# ******************************************************************************* +# Copyright (c) 2025 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* + +name: Bazel Build + +on: + pull_request: + types: [opened, reopened, synchronize] + merge_group: + types: [checks_requested] + +env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SCORE_QNX_USER: ${{ secrets.SCORE_QNX_USER }} + SCORE_QNX_PASSWORD: ${{ secrets.SCORE_QNX_PASSWORD }} + SCORE_QNX_LICENSE: ${{ secrets.SCORE_QNX_LICENSE }} +jobs: + build: + name: Build Bazel Code + runs-on: ${{ vars.REPO_RUNNER_LABELS && fromJSON(vars.REPO_RUNNER_LABELS) || 'ubuntu-latest' }} + steps: + - name: Checkout code + uses: actions/checkout@v4.2.2 + + - name: Install protoc 26.1 + uses: arduino/setup-protoc@v3 + with: + version: 26.1 + repo-token: ${{ secrets.GITHUB_TOKEN }} + + - name: Setup Bazel + uses: bazel-contrib/setup-bazel@0.15.0 + with: + bazelisk-version: 1.26.0 # newest LTS before 1 Jun 2025 + disk-cache: true + repository-cache: true + bazelisk-cache: true + + - name: Bazel info (discover paths) + id: bazel-info + run: | + echo "BAZEL_OUTPUT_BASE=$(bazel info output_base)" >> $GITHUB_ENV + echo "BAZEL_USER_ROOT=$(bazel info output_user_root)" >> $GITHUB_ENV + echo "BAZEL_REPO_CACHE=$(bazel info repository_cache)" >> $GITHUB_ENV + bazel info + + - name: Cache Bazel output base + uses: actions/cache@v4 + with: + path: | + ${{ env.BAZEL_OUTPUT_BASE }}/action_cache + ${{ env.BAZEL_OUTPUT_BASE }}/bazel-out + ${{ env.BAZEL_OUTPUT_BASE }}/external + ${{ env.BAZEL_OUTPUT_BASE }}/execroot + key: bazel-ob-v2-${{ runner.os }}-${{ hashFiles('.bazelversion', 'MODULE.bazel', 'MODULE.bazel.lock', '**/*.bzl', 'Cargo.lock') }} + restore-keys: | + bazel-ob-v2-${{ runner.os }}- + + - name: Build with Bazel + run: | + bazel build //... diff --git a/.github/workflows/cargo_required.yml b/.github/workflows/cargo_required.yml new file mode 100644 index 0000000000..8ce376357e --- /dev/null +++ b/.github/workflows/cargo_required.yml @@ -0,0 +1,101 @@ +# ******************************************************************************* +# Copyright (c) 2025 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* + +name: cargo build, test, coverage and miri report + +on: + push: + branches: [main, development] + pull_request: + branches: [main, development] + types: [opened, ready_for_review, reopened, synchronize] + +env: + CARGO_TERM_COLOR: always + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + +jobs: + cargo-checks: + #permissions for docs deployment + permissions: + contents: write + pages: write + id-token: write + runs-on: ${{ vars.REPO_RUNNER_LABELS && fromJSON(vars.REPO_RUNNER_LABELS) || 'ubuntu-latest' }} + timeout-minutes: 45 # minutes is the maximum allowed for a cold run + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + + - name: Setup Rust Build Environment + uses: ./.github/actions/setup-rust-build + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + + # ---------- BUILD ---------- + - name: Cargo build + run: cargo build --verbose + + # ---------- TARPAULIN(TEST + COVERAGE) ---------- + - name: Run tests under coverage + run: cargo +nightly tarpaulin --version 0.32.7 --skip-clean --out Html --verbose --no-dead-code --engine llvm --all-features + + - name: Upload coverage report + uses: actions/upload-artifact@v4 + with: + name: coverage-report + path: tarpaulin-report.html + + # ---------- MIRI ---------- + - name: Install nightly + miri (minimal profile) + uses: actions-rs/toolchain@v1 + if: github.event.pull_request.draft == false + with: + toolchain: nightly-2025-05-30 + profile: minimal + components: miri + override: true + + - name: Prefetch crates for nightly + if: github.event.pull_request.draft == false + run: cargo +nightly-2025-05-30 fetch --locked + + - name: Purge Miri artifacts + if: github.event.pull_request.draft == false + run: | + rm -rf target/miri + rm -rf ~/.cache/miri + + - name: Prefetch and build dependencies for Miri + if: github.event.pull_request.draft == false + run: cargo +nightly-2025-05-30 miri setup + + - name: Run Miri and save report + if: github.event.pull_request.draft == false + env: + CARGO_INCREMENTAL: "0" # turn off incremental + run: | + set -o pipefail + cargo +nightly-2025-05-30 miri test --workspace \ + -- --skip test_mt_one_pop_one_stealer \ + --skip test_mt_one_push_mpmc_one_stealer \ + --skip test_one_producer_multi_stealer_mt_thread \ + --skip test_one_producer_one_stealer_mt_thread \ + 2>&1 | tee miri_report.txt + + # ---------- LOOM ---------- + - name: Run Atomic tests with LOOM + if: github.event.pull_request.draft == false + run: | + set -o pipefail + cargo xtask build:loom diff --git a/.github/workflows/copyright.yml b/.github/workflows/copyright.yml index 08ef376710..8483278df7 100644 --- a/.github/workflows/copyright.yml +++ b/.github/workflows/copyright.yml @@ -1,5 +1,5 @@ # ******************************************************************************* -# Copyright (c) 2024 Contributors to the Eclipse Foundation +# Copyright (c) 2025 Contributors to the Eclipse Foundation # # See the NOTICE file(s) distributed with this work for additional # information regarding copyright ownership. @@ -17,6 +17,9 @@ on: types: [opened, reopened, synchronize] merge_group: types: [checks_requested] +env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + jobs: copyright-check: uses: eclipse-score/cicd-workflows/.github/workflows/copyright.yml@main diff --git a/.github/workflows/docs-cleanup.yml b/.github/workflows/docs-cleanup.yml index cfa4ae2444..56626f0fbb 100644 --- a/.github/workflows/docs-cleanup.yml +++ b/.github/workflows/docs-cleanup.yml @@ -20,7 +20,7 @@ permissions: on: schedule: - - cron: '0 0 * * *' # Runs every day at midnight UTC + - cron: "0 0 * * *" # Runs every day at midnight UTC jobs: docs-cleanup: diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml index 620d697278..adb88769ae 100644 --- a/.github/workflows/format.yml +++ b/.github/workflows/format.yml @@ -1,5 +1,5 @@ # ******************************************************************************* -# Copyright (c) 2024 Contributors to the Eclipse Foundation +# Copyright (c) 2025 Contributors to the Eclipse Foundation # # See the NOTICE file(s) distributed with this work for additional # information regarding copyright ownership. @@ -18,7 +18,8 @@ on: types: [opened, reopened, synchronize] merge_group: types: [checks_requested] - +env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} jobs: formatting-check: uses: eclipse-score/cicd-workflows/.github/workflows/format.yml@main diff --git a/.github/workflows/gitlint.yml b/.github/workflows/gitlint.yml index 90487edcac..61b8fe0c5f 100644 --- a/.github/workflows/gitlint.yml +++ b/.github/workflows/gitlint.yml @@ -1,5 +1,5 @@ # ******************************************************************************* -# Copyright (c) 2024 Contributors to the Eclipse Foundation +# Copyright (c) 2025 Contributors to the Eclipse Foundation # # See the NOTICE file(s) distributed with this work for additional # information regarding copyright ownership. @@ -15,10 +15,12 @@ name: Gitlint check on: pull_request: types: [opened, synchronize, reopened] +env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} jobs: lint-commits: name: check-commit-messages - runs-on: ubuntu-latest + runs-on: ${{ vars.REPO_RUNNER_LABELS && fromJSON(vars.REPO_RUNNER_LABELS) || 'ubuntu-latest' }} steps: - name: Checkout code uses: actions/checkout@v3 @@ -29,3 +31,4 @@ jobs: uses: ./.github/actions/gitlint with: pr-number: ${{ github.event.number }} + base-branch: ${{ github.event.pull_request.base.ref }} diff --git a/.github/workflows/license_check.yml b/.github/workflows/license_check.yml index aba7f99d8e..49319672a8 100644 --- a/.github/workflows/license_check.yml +++ b/.github/workflows/license_check.yml @@ -17,14 +17,15 @@ on: types: [opened, reopened, synchronize] merge_group: types: [checks_requested] - +env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} permissions: pull-requests: write issues: write - jobs: license-check: + if: ${{ github.repository == 'eclipse-score/baselibs_rust' }} uses: eclipse-score/cicd-workflows/.github/workflows/license-check.yml@main with: repo-url: "${{ github.server_url }}/${{ github.repository }}" diff --git a/.github/workflows/lint_fmt_clippy.yml b/.github/workflows/lint_fmt_clippy.yml new file mode 100644 index 0000000000..372e0761a6 --- /dev/null +++ b/.github/workflows/lint_fmt_clippy.yml @@ -0,0 +1,72 @@ +# ******************************************************************************* +# Copyright (c) 2025 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* + +name: rustfmt and clippy check + +on: + pull_request: + branches: [main, development] + types: [opened, ready_for_review, reopened, synchronize] + +env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} +jobs: + lint-fmt-clippy: + timeout-minutes: 6 # 6 minutes is the maximum allowed for a cold run + runs-on: ${{ vars.REPO_RUNNER_LABELS && fromJSON(vars.REPO_RUNNER_LABELS) || 'ubuntu-latest' }} + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Install protoc 26.1 + uses: arduino/setup-protoc@v3 + with: + version: 26.1 + repo-token: ${{ secrets.GITHUB_TOKEN }} + + - name: Cache Cargo registry, git deps & target + uses: actions/cache@v3 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + target + key: ${{ runner.os }}-cargo-lint-fmt-clippy-${{ hashFiles('**/Cargo.lock') }} + restore-keys: | + ${{ runner.os }}-cargo-lint-fmt-clippy- + + - name: Install Rust toolchain + uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: 1.87.0 + override: true + components: rustfmt, clippy + + - name: check code format (rustfmt) + uses: actions-rs/cargo@v1 + with: + command: fmt + args: -- --check + - name: check code license header (custom) + uses: actions-rs/cargo@v1 + with: + command: xtask + args: check_lic + + - name: check clippy errors + uses: actions-rs/cargo@v1 + with: + command: clippy + args: --all-features --all-targets --workspace -- -D warnings diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 0000000000..6c5a1df7dc --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,48 @@ +# ******************************************************************************* +# Copyright (c) 2025 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* + +name: Bazel Tests + +on: + pull_request: + types: [opened, reopened, synchronize] + merge_group: + types: [checks_requested] +env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + +jobs: + setup-and-run-tests: + runs-on: ${{ vars.REPO_RUNNER_LABELS && fromJSON(vars.REPO_RUNNER_LABELS) || 'ubuntu-latest' }} + steps: + - name: Checkout repository + uses: actions/checkout@v4.2.2 + + - name: Install protoc 26.1 + uses: arduino/setup-protoc@v3 + with: + version: 26.1 + repo-token: ${{ secrets.GITHUB_TOKEN }} + + - name: Setup Bazel with shared caching + uses: bazel-contrib/setup-bazel@0.15.0 + with: + bazelisk-version: 1.26.0 + disk-cache: true + repository-cache: true + bazelisk-cache: true + + - name: Run Tests via Bazel + run: | + echo "Running: bazel test //src/..." + bazel test //src/... diff --git a/BUILD b/BUILD index 473b5d5c8a..73a7de0ab8 100644 --- a/BUILD +++ b/BUILD @@ -10,7 +10,6 @@ # # SPDX-License-Identifier: Apache-2.0 # ******************************************************************************* - load("@score_docs_as_code//:docs.bzl", "docs") load("@score_tooling//:defs.bzl", "copyright_checker", "dash_license_checker", "setup_starpls", "use_format_targets") load("//:project_config.bzl", "PROJECT_CONFIG") @@ -33,8 +32,32 @@ copyright_checker( visibility = ["//visibility:public"], ) +# Needed for Dash tool to check python dependency licenses. +# This is a workaround to filter out local packages from the Cargo.lock file. +# The tool is intended for third-party content. +genrule( + name = "filtered_cargo_lock", + srcs = ["Cargo.lock"], + outs = ["Cargo.lock.filtered"], + cmd = """ + awk ' + BEGIN { skip = 0; data = "" } + /^\\[\\[package\\]\\]/ { + if (data != "" && !skip) print data; + skip = 1; + data = $$0; + next; + } + data != "" { data = data "\\n" $$0 } + # any package that has a "source = " line will not be skipped. + /^source = / { skip = 0 } + END { if (data != "" && !skip) print data } + ' $(location Cargo.lock) > $@ + """, +) + dash_license_checker( - src = "//examples:cargo_lock", + src = ":filtered_cargo_lock", file_type = "", # let it auto-detect based on project_config project_config = PROJECT_CONFIG, visibility = ["//visibility:public"], @@ -43,6 +66,16 @@ dash_license_checker( # Add target for formatting checks use_format_targets() +exports_files([ + "MODULE.bazel", +]) + +# Creates all documentation targets: +# - `:docs` for building documentation at build-time docs( + data = [ + # "@score_platform//:needs_json", + # "@score_process//:needs_json", + ], source_dir = "docs", ) diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000000..0078fc1c50 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,26 @@ +[workspace] +resolver = "2" +# Split to default members without component integration tests. +# Used when executing cargo from project root. +default-members = [] +# Include component integration tests as a member for IDE support and Bazel builds. +members = [] + + +[workspace.package] +version = "0.0.1" +edition = "2021" +license-file = "LICENSE.md" +authors = ["S-CORE Contributors"] + + +[workspace.dependencies] + + +[workspace.lints.clippy] +std_instead_of_core = "warn" +alloc_instead_of_core = "warn" + + +[workspace.lints.rust] +unexpected_cfgs = { level = "warn", check-cfg = ['cfg(loom)'] } diff --git a/MODULE.bazel b/MODULE.bazel index 1ec606ddd8..a1df603ca6 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -11,47 +11,133 @@ # SPDX-License-Identifier: Apache-2.0 # ******************************************************************************* module( - name = "cpp_rust_template_repository", - version = "1.0", + name = "score_baselibs_rust", + version = "0.0.1", + compatibility_level = 0, ) -bazel_dep(name = "rules_python", version = "1.4.1") +# Bazel global rules +bazel_dep(name = "bazel_skylib", version = "1.8.2") +bazel_dep(name = "rules_rust", version = "0.67.0") +bazel_dep(name = "rules_cc", version = "0.2.14") +bazel_dep(name = "aspect_rules_lint", version = "1.10.2") +bazel_dep(name = "buildifier_prebuilt", version = "8.2.1") +bazel_dep(name = "platforms", version = "1.0.0") -PYTHON_VERSION = "3.12" +# S-CORE process rules +bazel_dep(name = "score_bazel_platforms", version = "0.0.2") +bazel_dep(name = "score_docs_as_code", version = "2.0.2") +bazel_dep(name = "score_tooling", version = "1.0.3") -python = use_extension("@rules_python//python/extensions:python.bzl", "python") -python.toolchain( - is_default = True, - python_version = PYTHON_VERSION, -) -use_repo(python) +bazel_dep(name = "score_process", version = "1.3.1", dev_dependency = True) +bazel_dep(name = "score_platform", version = "0.4.2", dev_dependency = True) # This is main score repo +bazel_dep(name = "score_virtualization", version = "1.0", dev_dependency = True) + +# Toolchains and extensions +bazel_dep(name = "score_toolchains_gcc", version = "0.5", dev_dependency = True) +bazel_dep(name = "score_toolchains_qnx", version = "0.0.3", dev_dependency = True) +bazel_dep(name = "rust_qnx8_toolchain", version = "1.2.0", dev_dependency = True) +bazel_dep(name = "score_toolchains_rust", version = "0.1.1", dev_dependency = True) + +# Others +bazel_dep(name = "custom_qemu", version = "1.0.0", dev_dependency = True) -# Add GoogleTest dependency bazel_dep(name = "googletest", version = "1.17.0") -# Rust rules for Bazel -bazel_dep(name = "rules_rust", version = "0.63.0") +# Overrides +# git_override( +# module_name = "score_platform", +# commit = "bcab25561cdce7bd4eeebdb20b0ba4e2a4becc12", +# remote = "https://github.com/eclipse-score/score.git", +# ) + +git_override( + module_name = "score_toolchains_rust", + commit = "6651945b4ba8e7c342d9740e9cb2d37842f56261", + remote = "https://github.com/eclipse-score/toolchains_rust.git", +) + +# git_override( +# module_name = "score_toolchains_qnx", +# commit = "3477ac13a8015a4e2016588fba573c2f9519237d", +# remote = "https://github.com/eclipse-score/toolchains_qnx.git", +# ) -# C/C++ rules for Bazel -bazel_dep(name = "rules_cc", version = "0.2.1") +git_override( + module_name = "score_virtualization", + commit = "1d9e73212cc291c37a1b7c1427e0f34368ef25e0", + remote = "https://github.com/qorix-group/score_virtualization.git", +) -# LLVM Toolchains Rules - host configuration -bazel_dep(name = "toolchains_llvm", version = "1.4.0") +archive_override( + module_name = "rust_qnx8_toolchain", + strip_prefix = "qnx8", + urls = [ + "https://github.com/qorix-group/rust-lang-qnx8/releases/download/1.2.0/qnx8_rust_toolchain.tar.gz", + ], +) -llvm = use_extension("@toolchains_llvm//toolchain/extensions:llvm.bzl", "llvm") -llvm.toolchain( - cxx_standard = {"": "c++17"}, - llvm_version = "19.1.0", +archive_override( + module_name = "custom_qemu", + integrity = "sha256-3V2d+p7nP0tsbrVWOPYUSJogLNal43CIAHEto6Vjdfg=", + strip_prefix = "third_party", # matches top-level dir in the tar + urls = [ + "https://github.com/qorix-group/custom-qemu/releases/download/1.0.0/custom_qemu.tar.gz", + ], ) -use_repo(llvm, "llvm_toolchain") -use_repo(llvm, "llvm_toolchain_llvm") -register_toolchains("@llvm_toolchain//:all") +# Extensions -# tooling -bazel_dep(name = "score_tooling", version = "1.0.1") -bazel_dep(name = "aspect_rules_lint", version = "1.5.3") -bazel_dep(name = "buildifier_prebuilt", version = "8.2.0.2") +gcc = use_extension("@score_toolchains_gcc//extentions:gcc.bzl", "gcc", dev_dependency = True) +gcc.toolchain( + sha256 = "457f5f20f57528033cb840d708b507050d711ae93e009388847e113b11bf3600", + strip_prefix = "x86_64-unknown-linux-gnu", + url = "https://github.com/eclipse-score/toolchains_gcc_packages/releases/download/0.0.1/x86_64-unknown-linux-gnu_gcc12.tar.gz", +) +use_repo(gcc, "gcc_toolchain", "gcc_toolchain_gcc") -#docs-as-code -bazel_dep(name = "score_docs_as_code", version = "1.1.0") +toolchains_qnx = use_extension("@score_toolchains_qnx//:extensions.bzl", "toolchains_qnx", dev_dependency = True) +toolchains_qnx.sdp( + sha256 = "f2e0cb21c6baddbcb65f6a70610ce498e7685de8ea2e0f1648f01b327f6bac63", + strip_prefix = "installation", + url = "https://www.qnx.com/download/download/79858/installation.tgz", +) + +use_repo(toolchains_qnx, "toolchains_qnx_sdp") +use_repo(toolchains_qnx, "toolchains_qnx_qcc") +use_repo(toolchains_qnx, "toolchains_qnx_ifs") + +# Registers the custom Rust toolchain wired to @qnx_rust +register_toolchains( + "@toolchains_qnx_qcc//:qcc_aarch64", + "@score_toolchains_rust//toolchains/aarch64-unknown-qnx8_0:toolchain_aarch64_qnx8_0", + "@score_toolchains_rust//toolchains/x86_64-unknown-linux-gnu:toolchain_x86_64_linux", + dev_dependency = True, +) + +register_toolchains( + "@toolchains_qnx_ifs//:ifs_x86_64", + "@toolchains_qnx_ifs//:ifs_aarch64", + dev_dependency = True, +) + +# Module deps + +# Crate configs +crate = use_extension("@rules_rust//crate_universe:extensions.bzl", "crate") +crate.from_cargo( + name = "score_baselibs_rust_crates", + cargo_lockfile = "//:Cargo.lock", + manifests = [ + # TODO: expand along with `Cargo.toml`. + ], + + # This shall not be here but rules_rust 0.61.0 or even 0.67.0 does not correct finds out that when we use out platform it shall append + # aarch64-unknown-nto-qnx710 or best aarch64-unknown-nto-qnx800 which is not fully supported in any rust_rules version for now (even if rustc 1.86.0 already supports it) + supported_platform_triples = [ + "aarch64-unknown-nto-qnx710", # This enables also QNX8 because OS and CPU for platform matches.... + "x86_64-unknown-linux-gnu", + "x86_64-unknown-none", + ], +) +use_repo(crate, "score_baselibs_rust_crates") diff --git a/rust-toolchain.toml b/rust-toolchain.toml new file mode 100644 index 0000000000..ff100edcbb --- /dev/null +++ b/rust-toolchain.toml @@ -0,0 +1,2 @@ +[toolchain] +channel = "1.90.0" diff --git a/rustfmt.toml b/rustfmt.toml new file mode 100644 index 0000000000..d1f04540c0 --- /dev/null +++ b/rustfmt.toml @@ -0,0 +1,6 @@ +# rust formatter rules. +# check configuration fields here: https://rust-lang.github.io/rustfmt/?version=v1.6.0&search= + + +tab_spaces = 4 +max_width = 150 diff --git a/src/mw/BUILD b/src/mw/BUILD new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/mw/log/BUILD b/src/mw/log/BUILD new file mode 100644 index 0000000000..e69de29bb2 From ba9a633dc742e9f28d03cb7ba1de1936f79a8b68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arkadiusz=20J=C4=99drzejewski?= Date: Sun, 16 Nov 2025 17:04:30 +0000 Subject: [PATCH 03/59] bazel: add placeholder as an example - Make examples and tests work, both with Cargo and Bazel. - Remove obsolete test examples. - Add Python dependency. --- Cargo.toml | 13 ++++++--- MODULE.bazel | 27 +++++++++--------- examples/mw/_placeholder_example/BUILD | 25 ++++++++++++++++ examples/mw/_placeholder_example/Cargo.toml | 12 ++++++++ examples/mw/_placeholder_example/src/main.rs | 4 +++ src/mw/_placeholder/BUILD | 30 ++++++++++++++++++++ src/mw/_placeholder/Cargo.toml | 11 +++++++ src/mw/_placeholder/README.md | 4 +++ src/mw/_placeholder/src/lib.rs | 14 +++++++++ 9 files changed, 123 insertions(+), 17 deletions(-) create mode 100644 examples/mw/_placeholder_example/BUILD create mode 100644 examples/mw/_placeholder_example/Cargo.toml create mode 100644 examples/mw/_placeholder_example/src/main.rs create mode 100644 src/mw/_placeholder/BUILD create mode 100644 src/mw/_placeholder/Cargo.toml create mode 100644 src/mw/_placeholder/README.md create mode 100644 src/mw/_placeholder/src/lib.rs diff --git a/Cargo.toml b/Cargo.toml index 0078fc1c50..edd07ee5ce 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,10 +1,14 @@ [workspace] resolver = "2" -# Split to default members without component integration tests. +# Split to default members without tests and examples. # Used when executing cargo from project root. -default-members = [] -# Include component integration tests as a member for IDE support and Bazel builds. -members = [] +default-members = ["src/mw/_placeholder"] +# Include tests and examples as a member for IDE support and Bazel builds. +members = [ + "src/mw/_placeholder", + "examples/mw/_placeholder_example", + "tests/mw/_placeholder", +] [workspace.package] @@ -15,6 +19,7 @@ authors = ["S-CORE Contributors"] [workspace.dependencies] +_placeholder = { path = "src/mw/_placeholder" } [workspace.lints.clippy] diff --git a/MODULE.bazel b/MODULE.bazel index a1df603ca6..cbd92b075f 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -17,6 +17,7 @@ module( ) # Bazel global rules +bazel_dep(name = "rules_python", version = "1.7.0") bazel_dep(name = "bazel_skylib", version = "1.8.2") bazel_dep(name = "rules_rust", version = "0.67.0") bazel_dep(name = "rules_cc", version = "0.2.14") @@ -45,24 +46,12 @@ bazel_dep(name = "custom_qemu", version = "1.0.0", dev_dependency = True) bazel_dep(name = "googletest", version = "1.17.0") # Overrides -# git_override( -# module_name = "score_platform", -# commit = "bcab25561cdce7bd4eeebdb20b0ba4e2a4becc12", -# remote = "https://github.com/eclipse-score/score.git", -# ) - git_override( module_name = "score_toolchains_rust", commit = "6651945b4ba8e7c342d9740e9cb2d37842f56261", remote = "https://github.com/eclipse-score/toolchains_rust.git", ) -# git_override( -# module_name = "score_toolchains_qnx", -# commit = "3477ac13a8015a4e2016588fba573c2f9519237d", -# remote = "https://github.com/eclipse-score/toolchains_qnx.git", -# ) - git_override( module_name = "score_virtualization", commit = "1d9e73212cc291c37a1b7c1427e0f34368ef25e0", @@ -103,6 +92,15 @@ toolchains_qnx.sdp( url = "https://www.qnx.com/download/download/79858/installation.tgz", ) +PYTHON_VERSION = "3.12" + +python = use_extension("@rules_python//python/extensions:python.bzl", "python", dev_dependency = True) +python.toolchain( + is_default = True, + python_version = PYTHON_VERSION, +) +use_repo(python) + use_repo(toolchains_qnx, "toolchains_qnx_sdp") use_repo(toolchains_qnx, "toolchains_qnx_qcc") use_repo(toolchains_qnx, "toolchains_qnx_ifs") @@ -129,7 +127,10 @@ crate.from_cargo( name = "score_baselibs_rust_crates", cargo_lockfile = "//:Cargo.lock", manifests = [ - # TODO: expand along with `Cargo.toml`. + "//:Cargo.toml", + "//:src/mw/_placeholder/Cargo.toml", + "//:examples/mw/_placeholder_example/Cargo.toml", + "//:tests/mw/_placeholder/Cargo.toml", ], # This shall not be here but rules_rust 0.61.0 or even 0.67.0 does not correct finds out that when we use out platform it shall append diff --git a/examples/mw/_placeholder_example/BUILD b/examples/mw/_placeholder_example/BUILD new file mode 100644 index 0000000000..b19a696c70 --- /dev/null +++ b/examples/mw/_placeholder_example/BUILD @@ -0,0 +1,25 @@ +# ******************************************************************************* +# Copyright (c) 2025 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* + +load("@rules_rust//rust:defs.bzl", "rust_binary") +load("@score_baselibs_rust_crates//:defs.bzl", "all_crate_deps") + +rust_binary( + name = "_placeholder_example", + srcs = glob(["src/**/*.rs"]), + deps = all_crate_deps( + normal = True, + ) + [ + "//src/mw/_placeholder", + ], +) diff --git a/examples/mw/_placeholder_example/Cargo.toml b/examples/mw/_placeholder_example/Cargo.toml new file mode 100644 index 0000000000..5a71e3103a --- /dev/null +++ b/examples/mw/_placeholder_example/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "_placeholder_example" +version.workspace = true +edition.workspace = true +license-file.workspace = true +authors.workspace = true + +[dependencies] +_placeholder.workspace = true + +[lints] +workspace = true diff --git a/examples/mw/_placeholder_example/src/main.rs b/examples/mw/_placeholder_example/src/main.rs new file mode 100644 index 0000000000..f3106eac26 --- /dev/null +++ b/examples/mw/_placeholder_example/src/main.rs @@ -0,0 +1,4 @@ +fn main() { + let result = _placeholder::add(4, 8); + println!("Result: {result}"); +} diff --git a/src/mw/_placeholder/BUILD b/src/mw/_placeholder/BUILD new file mode 100644 index 0000000000..4427e35f10 --- /dev/null +++ b/src/mw/_placeholder/BUILD @@ -0,0 +1,30 @@ +# ******************************************************************************* +# Copyright (c) 2025 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* +load("@rules_rust//rust:defs.bzl", "rust_library", "rust_test") +load("@score_baselibs_rust_crates//:defs.bzl", "all_crate_deps") + +rust_library( + name = "_placeholder", + srcs = glob(["src/**/*.rs"]), + visibility = ["//visibility:public"], +) + +rust_test( + name = "_placeholder_tests", + crate = ":_placeholder", + deps = all_crate_deps( + normal = True, + ) + [ + "//src/mw/_placeholder", + ], +) diff --git a/src/mw/_placeholder/Cargo.toml b/src/mw/_placeholder/Cargo.toml new file mode 100644 index 0000000000..c3e13a1010 --- /dev/null +++ b/src/mw/_placeholder/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "_placeholder" +version.workspace = true +edition.workspace = true +license-file.workspace = true +authors.workspace = true + +[dependencies] + +[lints] +workspace = true diff --git a/src/mw/_placeholder/README.md b/src/mw/_placeholder/README.md new file mode 100644 index 0000000000..bc7facfbd5 --- /dev/null +++ b/src/mw/_placeholder/README.md @@ -0,0 +1,4 @@ +# `_placeholder` + +This project is only used to check Cargo/Bazel integration in `baselibs_rust`. +It is meant to be removed once **any other component** is added to this repo. diff --git a/src/mw/_placeholder/src/lib.rs b/src/mw/_placeholder/src/lib.rs new file mode 100644 index 0000000000..b93cf3ffd9 --- /dev/null +++ b/src/mw/_placeholder/src/lib.rs @@ -0,0 +1,14 @@ +pub fn add(left: u64, right: u64) -> u64 { + left + right +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn it_works() { + let result = add(2, 2); + assert_eq!(result, 4); + } +} From 51f8453c8ebe14ac97eb7b4ef8ac2be408e0dd9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arkadiusz=20J=C4=99drzejewski?= Date: Sun, 16 Nov 2025 17:08:28 +0000 Subject: [PATCH 04/59] bazel: remove xtask runs - Remove license headers check - should be done by Bazel checks. - Remove loom run. --- .github/workflows/cargo_required.yml | 7 ------- .github/workflows/lint_fmt_clippy.yml | 5 ----- 2 files changed, 12 deletions(-) diff --git a/.github/workflows/cargo_required.yml b/.github/workflows/cargo_required.yml index 8ce376357e..a4921c15cc 100644 --- a/.github/workflows/cargo_required.yml +++ b/.github/workflows/cargo_required.yml @@ -92,10 +92,3 @@ jobs: --skip test_one_producer_multi_stealer_mt_thread \ --skip test_one_producer_one_stealer_mt_thread \ 2>&1 | tee miri_report.txt - - # ---------- LOOM ---------- - - name: Run Atomic tests with LOOM - if: github.event.pull_request.draft == false - run: | - set -o pipefail - cargo xtask build:loom diff --git a/.github/workflows/lint_fmt_clippy.yml b/.github/workflows/lint_fmt_clippy.yml index 372e0761a6..459ea8bf69 100644 --- a/.github/workflows/lint_fmt_clippy.yml +++ b/.github/workflows/lint_fmt_clippy.yml @@ -59,11 +59,6 @@ jobs: with: command: fmt args: -- --check - - name: check code license header (custom) - uses: actions-rs/cargo@v1 - with: - command: xtask - args: check_lic - name: check clippy errors uses: actions-rs/cargo@v1 From c13290cf72983cafd686617d92a2283ba3e3582c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arkadiusz=20J=C4=99drzejewski?= Date: Mon, 17 Nov 2025 11:26:13 +0000 Subject: [PATCH 05/59] bazel: post-review fixes - Reorganize repository. - Remove placeholders. - Remove unnecessary deps. - Improve docs. - Remove `.cargo/`. - Remove Cargo repo in `MODULE.bazel`. --- Cargo.toml | 9 +-- MODULE.bazel | 75 +++++++------------- examples/mw/_placeholder_example/BUILD | 25 ------- examples/mw/_placeholder_example/Cargo.toml | 12 ---- examples/mw/_placeholder_example/src/main.rs | 4 -- src/{mw/_placeholder => log}/BUILD | 13 ++-- src/{mw/_placeholder => log}/Cargo.toml | 2 +- src/{mw/_placeholder => log}/src/lib.rs | 3 + src/mw/BUILD | 0 src/mw/_placeholder/README.md | 4 -- src/mw/log/BUILD | 0 11 files changed, 35 insertions(+), 112 deletions(-) delete mode 100644 examples/mw/_placeholder_example/BUILD delete mode 100644 examples/mw/_placeholder_example/Cargo.toml delete mode 100644 examples/mw/_placeholder_example/src/main.rs rename src/{mw/_placeholder => log}/BUILD (75%) rename src/{mw/_placeholder => log}/Cargo.toml (87%) rename src/{mw/_placeholder => log}/src/lib.rs (56%) delete mode 100644 src/mw/BUILD delete mode 100644 src/mw/_placeholder/README.md delete mode 100644 src/mw/log/BUILD diff --git a/Cargo.toml b/Cargo.toml index edd07ee5ce..eaf4500b1e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,13 +2,9 @@ resolver = "2" # Split to default members without tests and examples. # Used when executing cargo from project root. -default-members = ["src/mw/_placeholder"] +default-members = ["src/log"] # Include tests and examples as a member for IDE support and Bazel builds. -members = [ - "src/mw/_placeholder", - "examples/mw/_placeholder_example", - "tests/mw/_placeholder", -] +members = ["src/log"] [workspace.package] @@ -19,7 +15,6 @@ authors = ["S-CORE Contributors"] [workspace.dependencies] -_placeholder = { path = "src/mw/_placeholder" } [workspace.lints.clippy] diff --git a/MODULE.bazel b/MODULE.bazel index cbd92b075f..c115bce0a9 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -17,33 +17,31 @@ module( ) # Bazel global rules -bazel_dep(name = "rules_python", version = "1.7.0") -bazel_dep(name = "bazel_skylib", version = "1.8.2") -bazel_dep(name = "rules_rust", version = "0.67.0") -bazel_dep(name = "rules_cc", version = "0.2.14") -bazel_dep(name = "aspect_rules_lint", version = "1.10.2") -bazel_dep(name = "buildifier_prebuilt", version = "8.2.1") +bazel_dep(name = "rules_python", version = "1.4.1") +bazel_dep(name = "bazel_skylib", version = "1.7.1") +bazel_dep(name = "rules_rust", version = "0.61.0") +bazel_dep(name = "rules_cc", version = "0.1.1") +bazel_dep(name = "aspect_rules_lint", version = "1.0.3") +bazel_dep(name = "buildifier_prebuilt", version = "7.3.1") bazel_dep(name = "platforms", version = "1.0.0") # S-CORE process rules bazel_dep(name = "score_bazel_platforms", version = "0.0.2") -bazel_dep(name = "score_docs_as_code", version = "2.0.2") -bazel_dep(name = "score_tooling", version = "1.0.3") +bazel_dep(name = "score_docs_as_code", version = "1.4.0") +bazel_dep(name = "score_tooling", version = "1.0.2") -bazel_dep(name = "score_process", version = "1.3.1", dev_dependency = True) -bazel_dep(name = "score_platform", version = "0.4.2", dev_dependency = True) # This is main score repo -bazel_dep(name = "score_virtualization", version = "1.0", dev_dependency = True) +bazel_dep(name = "score_process", version = "1.2.1", dev_dependency = True) +bazel_dep(name = "score_platform", version = "0.3.0", dev_dependency = True) # This is main score repo +bazel_dep(name = "score_virtualization", version = "0.0.1", dev_dependency = True) # Toolchains and extensions -bazel_dep(name = "score_toolchains_gcc", version = "0.5", dev_dependency = True) -bazel_dep(name = "score_toolchains_qnx", version = "0.0.3", dev_dependency = True) +bazel_dep(name = "score_toolchains_gcc", version = "0.4", dev_dependency = True) +bazel_dep(name = "score_toolchains_qnx", version = "0.0.2", dev_dependency = True) bazel_dep(name = "rust_qnx8_toolchain", version = "1.2.0", dev_dependency = True) bazel_dep(name = "score_toolchains_rust", version = "0.1.1", dev_dependency = True) -# Others -bazel_dep(name = "custom_qemu", version = "1.0.0", dev_dependency = True) - -bazel_dep(name = "googletest", version = "1.17.0") +# S-CORE crates +bazel_dep(name = "score_crates") # Overrides git_override( @@ -54,10 +52,18 @@ git_override( git_override( module_name = "score_virtualization", - commit = "1d9e73212cc291c37a1b7c1427e0f34368ef25e0", + commit = "99d3f153c43796b67a63e82aad1ede6a881aa6af", remote = "https://github.com/qorix-group/score_virtualization.git", ) +git_override( + module_name = "score_crates", + # TODO: 'commit' and 'remote' must be updated once required changes are merged. + # https://github.com/eclipse-score/score-crates/pull/16 + commit = "f0bf4bdf98d8a8ad548256ab24dc08f9ba8f04aa", + remote = "https://github.com/qorix-group/score-crates.git", +) + archive_override( module_name = "rust_qnx8_toolchain", strip_prefix = "qnx8", @@ -66,15 +72,6 @@ archive_override( ], ) -archive_override( - module_name = "custom_qemu", - integrity = "sha256-3V2d+p7nP0tsbrVWOPYUSJogLNal43CIAHEto6Vjdfg=", - strip_prefix = "third_party", # matches top-level dir in the tar - urls = [ - "https://github.com/qorix-group/custom-qemu/releases/download/1.0.0/custom_qemu.tar.gz", - ], -) - # Extensions gcc = use_extension("@score_toolchains_gcc//extentions:gcc.bzl", "gcc", dev_dependency = True) @@ -118,27 +115,3 @@ register_toolchains( "@toolchains_qnx_ifs//:ifs_aarch64", dev_dependency = True, ) - -# Module deps - -# Crate configs -crate = use_extension("@rules_rust//crate_universe:extensions.bzl", "crate") -crate.from_cargo( - name = "score_baselibs_rust_crates", - cargo_lockfile = "//:Cargo.lock", - manifests = [ - "//:Cargo.toml", - "//:src/mw/_placeholder/Cargo.toml", - "//:examples/mw/_placeholder_example/Cargo.toml", - "//:tests/mw/_placeholder/Cargo.toml", - ], - - # This shall not be here but rules_rust 0.61.0 or even 0.67.0 does not correct finds out that when we use out platform it shall append - # aarch64-unknown-nto-qnx710 or best aarch64-unknown-nto-qnx800 which is not fully supported in any rust_rules version for now (even if rustc 1.86.0 already supports it) - supported_platform_triples = [ - "aarch64-unknown-nto-qnx710", # This enables also QNX8 because OS and CPU for platform matches.... - "x86_64-unknown-linux-gnu", - "x86_64-unknown-none", - ], -) -use_repo(crate, "score_baselibs_rust_crates") diff --git a/examples/mw/_placeholder_example/BUILD b/examples/mw/_placeholder_example/BUILD deleted file mode 100644 index b19a696c70..0000000000 --- a/examples/mw/_placeholder_example/BUILD +++ /dev/null @@ -1,25 +0,0 @@ -# ******************************************************************************* -# Copyright (c) 2025 Contributors to the Eclipse Foundation -# -# See the NOTICE file(s) distributed with this work for additional -# information regarding copyright ownership. -# -# This program and the accompanying materials are made available under the -# terms of the Apache License Version 2.0 which is available at -# https://www.apache.org/licenses/LICENSE-2.0 -# -# SPDX-License-Identifier: Apache-2.0 -# ******************************************************************************* - -load("@rules_rust//rust:defs.bzl", "rust_binary") -load("@score_baselibs_rust_crates//:defs.bzl", "all_crate_deps") - -rust_binary( - name = "_placeholder_example", - srcs = glob(["src/**/*.rs"]), - deps = all_crate_deps( - normal = True, - ) + [ - "//src/mw/_placeholder", - ], -) diff --git a/examples/mw/_placeholder_example/Cargo.toml b/examples/mw/_placeholder_example/Cargo.toml deleted file mode 100644 index 5a71e3103a..0000000000 --- a/examples/mw/_placeholder_example/Cargo.toml +++ /dev/null @@ -1,12 +0,0 @@ -[package] -name = "_placeholder_example" -version.workspace = true -edition.workspace = true -license-file.workspace = true -authors.workspace = true - -[dependencies] -_placeholder.workspace = true - -[lints] -workspace = true diff --git a/examples/mw/_placeholder_example/src/main.rs b/examples/mw/_placeholder_example/src/main.rs deleted file mode 100644 index f3106eac26..0000000000 --- a/examples/mw/_placeholder_example/src/main.rs +++ /dev/null @@ -1,4 +0,0 @@ -fn main() { - let result = _placeholder::add(4, 8); - println!("Result: {result}"); -} diff --git a/src/mw/_placeholder/BUILD b/src/log/BUILD similarity index 75% rename from src/mw/_placeholder/BUILD rename to src/log/BUILD index 4427e35f10..7047d69377 100644 --- a/src/mw/_placeholder/BUILD +++ b/src/log/BUILD @@ -11,20 +11,17 @@ # SPDX-License-Identifier: Apache-2.0 # ******************************************************************************* load("@rules_rust//rust:defs.bzl", "rust_library", "rust_test") -load("@score_baselibs_rust_crates//:defs.bzl", "all_crate_deps") rust_library( - name = "_placeholder", + name = "log", srcs = glob(["src/**/*.rs"]), visibility = ["//visibility:public"], ) rust_test( - name = "_placeholder_tests", - crate = ":_placeholder", - deps = all_crate_deps( - normal = True, - ) + [ - "//src/mw/_placeholder", + name = "log_tests", + crate = ":log", + deps = [ + "//src/log", ], ) diff --git a/src/mw/_placeholder/Cargo.toml b/src/log/Cargo.toml similarity index 87% rename from src/mw/_placeholder/Cargo.toml rename to src/log/Cargo.toml index c3e13a1010..b5403bb7ca 100644 --- a/src/mw/_placeholder/Cargo.toml +++ b/src/log/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "_placeholder" +name = "log" version.workspace = true edition.workspace = true license-file.workspace = true diff --git a/src/mw/_placeholder/src/lib.rs b/src/log/src/lib.rs similarity index 56% rename from src/mw/_placeholder/src/lib.rs rename to src/log/src/lib.rs index b93cf3ffd9..7d7853513f 100644 --- a/src/mw/_placeholder/src/lib.rs +++ b/src/log/src/lib.rs @@ -1,3 +1,6 @@ +// NOTE: this library is a placeholder until actual library is merged. +// Cargo workspace requires any member to be present, otherwise CI/CD won't be able to pass. + pub fn add(left: u64, right: u64) -> u64 { left + right } diff --git a/src/mw/BUILD b/src/mw/BUILD deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/src/mw/_placeholder/README.md b/src/mw/_placeholder/README.md deleted file mode 100644 index bc7facfbd5..0000000000 --- a/src/mw/_placeholder/README.md +++ /dev/null @@ -1,4 +0,0 @@ -# `_placeholder` - -This project is only used to check Cargo/Bazel integration in `baselibs_rust`. -It is meant to be removed once **any other component** is added to this repo. diff --git a/src/mw/log/BUILD b/src/mw/log/BUILD deleted file mode 100644 index e69de29bb2..0000000000 From 3c6267df0e80bd5105c8d977c7ae911e6d5deda7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arkadiusz=20J=C4=99drzejewski?= Date: Tue, 18 Nov 2025 07:32:12 +0000 Subject: [PATCH 06/59] bazel: add copyright checks to examples and cocs - Add git_override of the score_tooling dep. - Add copyright checks to examples and docs. --- BUILD | 2 ++ MODULE.bazel | 6 ++++++ examples/BUILD | 13 +++++++++++++ 3 files changed, 21 insertions(+) diff --git a/BUILD b/BUILD index 73a7de0ab8..e56bbccde2 100644 --- a/BUILD +++ b/BUILD @@ -22,6 +22,8 @@ setup_starpls( copyright_checker( name = "copyright", srcs = [ + "docs", + "examples", "src", "tests", "//:BUILD", diff --git a/MODULE.bazel b/MODULE.bazel index c115bce0a9..9ba2f0c1ba 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -44,6 +44,12 @@ bazel_dep(name = "score_toolchains_rust", version = "0.1.1", dev_dependency = Tr bazel_dep(name = "score_crates") # Overrides +git_override( + module_name = "score_tooling", + commit = "654664dae7df2700fd5840c5ed6c07ac6c61705d", #until 1.0.4 is released + remote = "https://github.com/eclipse-score/tooling.git", +) + git_override( module_name = "score_toolchains_rust", commit = "6651945b4ba8e7c342d9740e9cb2d37842f56261", diff --git a/examples/BUILD b/examples/BUILD index 012dd54150..d1031a1d44 100644 --- a/examples/BUILD +++ b/examples/BUILD @@ -1,3 +1,16 @@ +# ******************************************************************************* +# Copyright (c) 2025 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* + # Needed for Dash tool to check python dependency licenses. filegroup( name = "cargo_lock", From 86e0f919837d4661a9c4d24842c70fd8b77fe3ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arkadiusz=20J=C4=99drzejewski?= Date: Tue, 18 Nov 2025 08:07:30 +0000 Subject: [PATCH 07/59] bazel: small fixes - Align Rust versions. - Remove self-dependency. --- .github/workflows/lint_fmt_clippy.yml | 2 +- src/log/BUILD | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/lint_fmt_clippy.yml b/.github/workflows/lint_fmt_clippy.yml index 459ea8bf69..a7e02f0f01 100644 --- a/.github/workflows/lint_fmt_clippy.yml +++ b/.github/workflows/lint_fmt_clippy.yml @@ -50,7 +50,7 @@ jobs: uses: actions-rs/toolchain@v1 with: profile: minimal - toolchain: 1.87.0 + toolchain: 1.90.0 override: true components: rustfmt, clippy diff --git a/src/log/BUILD b/src/log/BUILD index 7047d69377..aa991bd5e9 100644 --- a/src/log/BUILD +++ b/src/log/BUILD @@ -21,7 +21,4 @@ rust_library( rust_test( name = "log_tests", crate = ":log", - deps = [ - "//src/log", - ], ) From 987cedd6c0cc564a04684dcc37004d2e83534b97 Mon Sep 17 00:00:00 2001 From: Pawel Rutka Date: Tue, 18 Nov 2025 13:08:39 +0100 Subject: [PATCH 08/59] doc: bump versions --- BUILD | 4 ++-- MODULE.bazel | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/BUILD b/BUILD index e56bbccde2..ef0671e802 100644 --- a/BUILD +++ b/BUILD @@ -76,8 +76,8 @@ exports_files([ # - `:docs` for building documentation at build-time docs( data = [ - # "@score_platform//:needs_json", - # "@score_process//:needs_json", + "@score_platform//:needs_json", + "@score_process//:needs_json", ], source_dir = "docs", ) diff --git a/MODULE.bazel b/MODULE.bazel index 9ba2f0c1ba..54915bc8ac 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -27,11 +27,11 @@ bazel_dep(name = "platforms", version = "1.0.0") # S-CORE process rules bazel_dep(name = "score_bazel_platforms", version = "0.0.2") -bazel_dep(name = "score_docs_as_code", version = "1.4.0") +bazel_dep(name = "score_docs_as_code", version = "2.0.2") bazel_dep(name = "score_tooling", version = "1.0.2") -bazel_dep(name = "score_process", version = "1.2.1", dev_dependency = True) -bazel_dep(name = "score_platform", version = "0.3.0", dev_dependency = True) # This is main score repo +bazel_dep(name = "score_process", version = "1.3.1", dev_dependency = True) +bazel_dep(name = "score_platform", version = "0.4.2", dev_dependency = True) # This is main score repo bazel_dep(name = "score_virtualization", version = "0.0.1", dev_dependency = True) # Toolchains and extensions From fbafbdc8825b7e75362ab8cd19202519060db340 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrian=20Willenb=C3=BCcher?= Date: Fri, 28 Nov 2025 09:13:27 +0100 Subject: [PATCH 09/59] Implement AbiVec --- Cargo.toml | 10 +- rustfmt.toml | 4 +- src/containers/BUILD | 30 ++++ src/containers/Cargo.toml | 23 +++ src/containers/fixed_capacity/mod.rs | 16 ++ src/containers/fixed_capacity/vec.rs | 136 +++++++++++++++ src/containers/generic/mod.rs | 14 ++ src/containers/generic/vec.rs | 143 ++++++++++++++++ src/containers/inline/mod.rs | 16 ++ src/containers/inline/vec.rs | 140 +++++++++++++++ src/containers/lib.rs | 21 +++ src/containers/storage/heap.rs | 245 +++++++++++++++++++++++++++ src/containers/storage/inline.rs | 245 +++++++++++++++++++++++++++ src/containers/storage/mod.rs | 57 +++++++ 14 files changed, 1097 insertions(+), 3 deletions(-) create mode 100644 src/containers/BUILD create mode 100644 src/containers/Cargo.toml create mode 100644 src/containers/fixed_capacity/mod.rs create mode 100644 src/containers/fixed_capacity/vec.rs create mode 100644 src/containers/generic/mod.rs create mode 100644 src/containers/generic/vec.rs create mode 100644 src/containers/inline/mod.rs create mode 100644 src/containers/inline/vec.rs create mode 100644 src/containers/lib.rs create mode 100644 src/containers/storage/heap.rs create mode 100644 src/containers/storage/inline.rs create mode 100644 src/containers/storage/mod.rs diff --git a/Cargo.toml b/Cargo.toml index eaf4500b1e..34c94b2b8b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,9 +2,15 @@ resolver = "2" # Split to default members without tests and examples. # Used when executing cargo from project root. -default-members = ["src/log"] +default-members = [ + "src/containers", + "src/log" +] # Include tests and examples as a member for IDE support and Bazel builds. -members = ["src/log"] +members = [ + "src/containers", + "src/log" +] [workspace.package] diff --git a/rustfmt.toml b/rustfmt.toml index d1f04540c0..a8cd55ec06 100644 --- a/rustfmt.toml +++ b/rustfmt.toml @@ -2,5 +2,7 @@ # check configuration fields here: https://rust-lang.github.io/rustfmt/?version=v1.6.0&search= -tab_spaces = 4 +match_block_trailing_comma = true max_width = 150 +tab_spaces = 4 +use_field_init_shorthand = true diff --git a/src/containers/BUILD b/src/containers/BUILD new file mode 100644 index 0000000000..17b83c5579 --- /dev/null +++ b/src/containers/BUILD @@ -0,0 +1,30 @@ +# ******************************************************************************* +# Copyright (c) 2025 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* + +load("@rules_rust//rust:defs.bzl", "rust_library", "rust_test") + +rust_library( + name = "containers", + srcs = glob(["**/*.rs"]), + edition = "2024", + visibility = ["//visibility:public"], +) + +rust_test( + name = "tests", + crate = "containers", + tags = [ + "unit_tests", + "ut", + ], +) diff --git a/src/containers/Cargo.toml b/src/containers/Cargo.toml new file mode 100644 index 0000000000..88bab7ab35 --- /dev/null +++ b/src/containers/Cargo.toml @@ -0,0 +1,23 @@ +# ******************************************************************************* +# Copyright (c) 2025 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* + +[package] +name = "containers" +description = "Fixed-capacity and inline-storage containers" +version = "0.1.0" +authors = ["Contributors to the Eclipse Foundation"] +edition = "2024" +license-file = "../../LICENSE.md" + +[lib] +path = "lib.rs" diff --git a/src/containers/fixed_capacity/mod.rs b/src/containers/fixed_capacity/mod.rs new file mode 100644 index 0000000000..5447aa2a91 --- /dev/null +++ b/src/containers/fixed_capacity/mod.rs @@ -0,0 +1,16 @@ +// ******************************************************************************* +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// https://www.apache.org/licenses/LICENSE-2.0 +// +// SPDX-License-Identifier: Apache-2.0 +// ******************************************************************************* + +mod vec; + +pub use self::vec::FixedCapacityVec; diff --git a/src/containers/fixed_capacity/vec.rs b/src/containers/fixed_capacity/vec.rs new file mode 100644 index 0000000000..1ed7036a62 --- /dev/null +++ b/src/containers/fixed_capacity/vec.rs @@ -0,0 +1,136 @@ +// ******************************************************************************* +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// https://www.apache.org/licenses/LICENSE-2.0 +// +// SPDX-License-Identifier: Apache-2.0 +// ******************************************************************************* + +use core::fmt; +use core::ops; + +use crate::generic::vec::GenericVec; +use crate::storage::Heap; + +/// A fixed-capacity vector. +/// +/// The vector can hold between 0 and `CAPACITY` elements, and behaves similarly to Rust's `Vec`, +/// except that it allocates memory immediately on construction, and can't shrink or grow. +pub struct FixedCapacityVec { + inner: GenericVec>, +} + +impl FixedCapacityVec { + /// Creates an empty vector and allocates memory for up to `capacity` elements, where `capacity <= u32::MAX`. + /// + /// # Panics + /// + /// - Panics if `capacity > u32::MAX`. + /// - Panics if the memory allocation fails. + #[must_use] + pub fn new(capacity: usize) -> Self { + assert!(capacity <= u32::MAX as usize, "FixedCapacityVec can hold at most u32::MAX elements"); + Self { + inner: GenericVec::new(capacity as u32), + } + } +} + +impl Drop for FixedCapacityVec { + fn drop(&mut self) { + self.inner.clear(); + } +} + +impl ops::Deref for FixedCapacityVec { + type Target = GenericVec>; + + fn deref(&self) -> &Self::Target { + &self.inner + } +} + +impl ops::DerefMut for FixedCapacityVec { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.inner + } +} + +impl fmt::Debug for FixedCapacityVec { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + fmt::Debug::fmt(self.as_slice(), f) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn push_and_pop() { + fn run_test(n: usize) { + let mut vector = FixedCapacityVec::::new(n); + let mut control = vec![]; + + let result = vector.pop(); + assert_eq!(result, None); + + for i in 0..n { + let value = i as i64 * 123 + 456; + let result = vector.push(value); + assert_eq!(*result.unwrap(), value); + control.push(value); + assert_eq!(vector.as_slice(), control.as_slice()); + } + + let result = vector.push(123456); + assert!(result.is_err()); + + for _ in 0..n { + let expected = control.pop().unwrap(); + let actual = vector.pop(); + assert_eq!(actual, Some(expected)); + } + + let result = vector.pop(); + assert_eq!(result, None); + } + + for i in 0..6 { + run_test(i); + } + } + + #[test] + fn is_full_and_is_empty() { + fn run_test(n: usize) { + let mut vector = FixedCapacityVec::::new(n); + assert!(vector.is_empty()); + + for i in 0..n { + assert!(!vector.is_full()); + vector.push(i as i64 * 123 + 456).unwrap(); + assert!(!vector.is_empty()); + } + + assert!(vector.is_full()); + + for _ in 0..n { + assert!(!vector.is_empty()); + vector.pop(); + assert!(!vector.is_full()); + } + + assert!(vector.is_empty()); + } + + for i in 0..6 { + run_test(i); + } + } +} diff --git a/src/containers/generic/mod.rs b/src/containers/generic/mod.rs new file mode 100644 index 0000000000..3c2ac35fc5 --- /dev/null +++ b/src/containers/generic/mod.rs @@ -0,0 +1,14 @@ +// ******************************************************************************* +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// https://www.apache.org/licenses/LICENSE-2.0 +// +// SPDX-License-Identifier: Apache-2.0 +// ******************************************************************************* + +pub(crate) mod vec; diff --git a/src/containers/generic/vec.rs b/src/containers/generic/vec.rs new file mode 100644 index 0000000000..eba64c0a7b --- /dev/null +++ b/src/containers/generic/vec.rs @@ -0,0 +1,143 @@ +// ******************************************************************************* +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// https://www.apache.org/licenses/LICENSE-2.0 +// +// SPDX-License-Identifier: Apache-2.0 +// ******************************************************************************* + +use core::fmt; +use core::marker::PhantomData; +use core::mem::needs_drop; +use core::ops; +use core::ptr; + +use crate::storage::Storage; + +#[repr(C)] +pub struct GenericVec> { + len: u32, + storage: S, + _marker: PhantomData, +} + +impl> GenericVec { + /// Creates an empty vector. + pub fn new(capacity: u32) -> Self { + Self { + len: 0, + storage: S::new(capacity), + _marker: PhantomData, + } + } + + /// Extracts a slice containing the entire vector. + /// + /// Equivalent to `&v[..]`. + pub fn as_slice(&self) -> &[T] { + unsafe { &*self.storage.subslice(0, self.len) } + } + + /// Extracts a mutable slice of the entire vector. + /// + /// Equivalent to `&mut v[..]`. + pub fn as_mut_slice(&mut self) -> &mut [T] { + unsafe { &mut *self.storage.subslice_mut(0, self.len) } + } + + /// Returns the maximum number of elements the vector can hold. + pub fn capacity(&self) -> usize { + self.storage.capacity() as usize + } + + /// Returns the current number of elements in the vector. + pub fn len(&self) -> usize { + self.len as usize + } + + /// Returns `true` if and only if the vector doesn't contain any elements. + pub fn is_empty(&self) -> bool { + self.len == 0 + } + + /// Returns `true` if and only if the vector has reached its capacity. + pub fn is_full(&self) -> bool { + self.len() == self.capacity() + } + + /// Tries to push an element to the back of the vector. + /// + /// If the vector has spare capacity, the push succeeds and a reference to that element + /// is returned; otherwise, `Err(VectorFull)` is returned. + pub fn push(&mut self, value: T) -> Result<&mut T, VectorFull> { + if self.len < self.storage.capacity() { + let element = unsafe { self.storage.element_mut(self.len) }.write(value); + self.len += 1; + Ok(element) + } else { + Err(VectorFull) + } + } + + /// Tries to pop an element from the back of the vector. + /// + /// If the vector has at least one element, the pop succeeds; otherwise, `None` is returned. + pub fn pop(&mut self) -> Option { + if self.len > 0 { + let element = unsafe { self.storage.element(self.len - 1).assume_init_read() }; + self.len -= 1; + Some(element) + } else { + None + } + } + + /// Clears the vector, removing all values. + pub fn clear(&mut self) { + let len = self.len; + // Mark vector as empty before dropping elements, to prevent double-drop in case there's a panic in drop_in_place + self.len = 0; + if needs_drop::() { + unsafe { + ptr::drop_in_place(self.storage.subslice_mut(0, len)); + } + } + } +} + +impl> ops::Deref for GenericVec { + type Target = [T]; + + fn deref(&self) -> &Self::Target { + self.as_slice() + } +} + +impl> ops::DerefMut for GenericVec { + fn deref_mut(&mut self) -> &mut Self::Target { + self.as_mut_slice() + } +} + +impl> fmt::Debug for GenericVec { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + fmt::Debug::fmt(self.as_slice(), f) + } +} + +/// Indicates that an operation failed because the vector would exceed its maximum capacity. +#[derive(Clone, Copy, Default, Debug)] +pub struct VectorFull; + +impl fmt::Display for VectorFull { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "vector is full") + } +} + +impl core::error::Error for VectorFull {} diff --git a/src/containers/inline/mod.rs b/src/containers/inline/mod.rs new file mode 100644 index 0000000000..996fab672a --- /dev/null +++ b/src/containers/inline/mod.rs @@ -0,0 +1,16 @@ +// ******************************************************************************* +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// https://www.apache.org/licenses/LICENSE-2.0 +// +// SPDX-License-Identifier: Apache-2.0 +// ******************************************************************************* + +mod vec; + +pub use self::vec::InlineVec; diff --git a/src/containers/inline/vec.rs b/src/containers/inline/vec.rs new file mode 100644 index 0000000000..2c8244f0a7 --- /dev/null +++ b/src/containers/inline/vec.rs @@ -0,0 +1,140 @@ +// ******************************************************************************* +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// https://www.apache.org/licenses/LICENSE-2.0 +// +// SPDX-License-Identifier: Apache-2.0 +// ******************************************************************************* + +use core::fmt; +use core::ops; + +use crate::generic::vec::GenericVec; +use crate::storage::Inline; + +/// A fixed-capacity vector with inline storage. +/// +/// The vector can hold between 0 and `CAPACITY` elements, and behaves similarly to Rust's `Vec`, +/// except that it stores the elements inline and doesn't allocate. +/// +/// `CAPACITY` must be `>= 1` and `<= u32::MAX`. +#[repr(transparent)] +pub struct InlineVec { + inner: GenericVec>, +} + +impl InlineVec { + const CHECK_CAPACITY: () = assert!(0 < CAPACITY && CAPACITY <= u32::MAX as usize); + + /// Creates an empty vector. + pub fn new() -> Self { + let () = Self::CHECK_CAPACITY; + + Self { + inner: GenericVec::new(CAPACITY as u32), + } + } +} + +impl Default for InlineVec { + fn default() -> Self { + Self::new() + } +} + +impl ops::Deref for InlineVec { + type Target = GenericVec>; + + fn deref(&self) -> &Self::Target { + &self.inner + } +} + +impl ops::DerefMut for InlineVec { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.inner + } +} + +impl fmt::Debug for InlineVec { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + fmt::Debug::fmt(self.as_slice(), f) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn push_and_pop() { + fn run_test() { + let mut vector = InlineVec::::new(); + let mut control = vec![]; + + let result = vector.pop(); + assert_eq!(result, None); + + for i in 0..N { + let value = i as i64 * 123 + 456; + let result = vector.push(value); + assert_eq!(*result.unwrap(), value); + control.push(value); + assert_eq!(vector.as_slice(), control.as_slice()); + } + + let result = vector.push(123456); + assert!(result.is_err()); + + for _ in 0..N { + let expected = control.pop().unwrap(); + let actual = vector.pop(); + assert_eq!(actual, Some(expected)); + } + + let result = vector.pop(); + assert_eq!(result, None); + } + + run_test::<1>(); + run_test::<2>(); + run_test::<3>(); + run_test::<4>(); + run_test::<5>(); + } + + #[test] + fn is_full_and_is_empty() { + fn run_test() { + let mut vector = InlineVec::::new(); + assert!(vector.is_empty()); + + for i in 0..N { + assert!(!vector.is_full()); + vector.push(i as i64 * 123 + 456).unwrap(); + assert!(!vector.is_empty()); + } + + assert!(vector.is_full()); + + for _ in 0..N { + assert!(!vector.is_empty()); + vector.pop(); + assert!(!vector.is_full()); + } + + assert!(vector.is_empty()); + } + + run_test::<1>(); + run_test::<2>(); + run_test::<3>(); + run_test::<4>(); + run_test::<5>(); + } +} diff --git a/src/containers/lib.rs b/src/containers/lib.rs new file mode 100644 index 0000000000..4e106ab0b3 --- /dev/null +++ b/src/containers/lib.rs @@ -0,0 +1,21 @@ +// ******************************************************************************* +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// https://www.apache.org/licenses/LICENSE-2.0 +// +// SPDX-License-Identifier: Apache-2.0 +// ******************************************************************************* + +#![cfg_attr(not(test), no_std)] + +extern crate alloc; + +pub mod fixed_capacity; +pub(crate) mod generic; +pub mod inline; +pub(crate) mod storage; diff --git a/src/containers/storage/heap.rs b/src/containers/storage/heap.rs new file mode 100644 index 0000000000..bc355910fd --- /dev/null +++ b/src/containers/storage/heap.rs @@ -0,0 +1,245 @@ +// ******************************************************************************* +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// https://www.apache.org/licenses/LICENSE-2.0 +// +// SPDX-License-Identifier: Apache-2.0 +// ******************************************************************************* + +use alloc::alloc::Layout; +use alloc::alloc::alloc; +use alloc::alloc::dealloc; +use core::marker::PhantomData; +use core::mem::MaybeUninit; +use core::ptr; +use core::ptr::NonNull; + +use super::Storage; + +/// Fixed-capacity, heap-allocated storage. +pub struct Heap { + /// Allocated capacity, in number of elements. + capacity: u32, + /// Pointer to the allocated memory. + /// + /// If `self.capacity > 0`, this points to an allocated memory area of size `self.capacity * size_of` and alignment `align_of`. + elements: NonNull, + _marker: PhantomData, +} + +impl Heap { + fn layout(capacity: u32) -> Option { + (capacity as usize) + .checked_mul(size_of::()) + .and_then(|size| Layout::from_size_align(size, align_of::()).ok()) + } +} + +impl Storage for Heap { + fn new(capacity: u32) -> Self { + let storage = if capacity > 0 { + let layout = Self::layout(capacity).unwrap_or_else(|| { + panic!( + "{capacity} elements of {typ} would overflow isize::MAX", + typ = core::any::type_name::(), + ) + }); + // SAFETY: `layout` has a non-zero size (because `capacity` is > 0) + NonNull::new(unsafe { alloc(layout) }) + .unwrap_or_else(|| panic!("failed to allocate {capacity} elements of {typ}", typ = core::any::type_name::())) + } else { + NonNull::dangling() + }; + Self { + capacity, + elements: storage.cast::(), + _marker: PhantomData, + } + } + + fn capacity(&self) -> u32 { + self.capacity + } + + unsafe fn element(&self, index: u32) -> &MaybeUninit { + debug_assert!(index < self.capacity); + let index = index as usize; + // SAFETY: + // - `index` is in-bounds of the memory allocation, as per the pre-condition on the trait method + // - `MaybeUninit` has the same memory layout as `T`, so the cast is valid + unsafe { self.elements.add(index).cast::>().as_ref() } + } + + unsafe fn element_mut(&mut self, index: u32) -> &mut MaybeUninit { + debug_assert!(index < self.capacity); + let index = index as usize; + // SAFETY: + // - `index` is in-bounds of the memory allocation, as per the pre-condition on the trait method + // - `MaybeUninit` has the same memory layout as `T`, so the cast is valid + unsafe { self.elements.add(index).cast::>().as_mut() } + } + + unsafe fn subslice(&self, start: u32, end: u32) -> *const [T] { + let start = start as usize; + let end = end as usize; + debug_assert!(start <= end); + debug_assert!(end <= self.capacity as usize); + // SAFETY: `start` is in-bounds of the memory allocation, as per the pre-condition on the trait method. + let ptr = unsafe { self.elements.as_ptr().add(start) }; + ptr::slice_from_raw_parts(ptr, end - start) + } + + unsafe fn subslice_mut(&mut self, start: u32, end: u32) -> *mut [T] { + let start = start as usize; + let end = end as usize; + debug_assert!(start <= end); + debug_assert!(end <= self.capacity as usize); + // SAFETY: `start` is in-bounds of the memory allocation, as per the pre-condition on the trait method. + let ptr = unsafe { self.elements.as_ptr().add(start) }; + ptr::slice_from_raw_parts_mut(ptr, end - start) + } +} + +impl Drop for Heap { + fn drop(&mut self) { + if self.capacity > 0 { + let layout = Self::layout(self.capacity).unwrap(); + // SAFETY: + // - `self.elements` has previously been allocated with `alloc` + // - `layout` is the same as the one used for the allocation + unsafe { + dealloc(self.elements.as_ptr().cast::(), layout); + } + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn subslice() { + type T = u64; + + fn run_test(capacity: u32) { + let instance = Heap::::new(capacity); + + let empty_slice = unsafe { instance.subslice(0, 0) }; + assert_eq!(empty_slice.len(), 0); + assert_eq!(empty_slice as *const T, instance.elements.as_ptr()); + + let full_slice = unsafe { instance.subslice(0, capacity) }; + assert_eq!(full_slice.len(), capacity as usize); + assert_eq!(full_slice as *const T, instance.elements.as_ptr()); + + if capacity > 2 { + let partial_slice = unsafe { instance.subslice(1, 2) }; + assert_eq!(partial_slice.len(), 1); + assert_eq!(partial_slice as *const T, instance.elements.as_ptr().wrapping_add(1)); + + let end_slice = unsafe { instance.subslice(capacity - 1, capacity) }; + assert_eq!(end_slice.len(), 1); + assert_eq!(end_slice as *const T, instance.elements.as_ptr().wrapping_add(capacity as usize - 1)); + } + } + + for cap in [0, 1, 2, 3, 4, 5, i32::MAX as u32 / size_of::() as u32] { + run_test(cap); + } + } + + #[test] + fn subslice_mut() { + type T = u64; + + fn run_test(capacity: u32) { + let mut instance = Heap::::new(capacity); + + let empty_slice = unsafe { instance.subslice_mut(0, 0) }; + assert_eq!(empty_slice.len(), 0); + assert_eq!(empty_slice as *mut T, instance.elements.as_ptr()); + + let full_slice = unsafe { instance.subslice_mut(0, capacity) }; + assert_eq!(full_slice.len(), capacity as usize); + assert_eq!(full_slice as *mut T, instance.elements.as_ptr()); + + if capacity >= 2 { + let partial_slice = unsafe { instance.subslice_mut(1, 2) }; + assert_eq!(partial_slice.len(), 1); + assert_eq!(partial_slice as *mut T, instance.elements.as_ptr().wrapping_add(1)); + + let end_slice = unsafe { instance.subslice_mut(capacity - 1, capacity) }; + assert_eq!(end_slice.len(), 1); + assert_eq!(end_slice as *mut T, instance.elements.as_ptr().wrapping_add(capacity as usize - 1)); + } + } + + for cap in [0, 1, 2, 3, 4, 5, i32::MAX as u32 / size_of::() as u32] { + run_test(cap); + } + } + + #[test] + fn element() { + type T = u64; + + fn run_test(capacity: u32) { + let instance = Heap::::new(capacity); + + if capacity >= 1 { + let first_element = unsafe { instance.element(0) }; + assert_eq!(first_element.as_ptr(), instance.elements.as_ptr()); + + let last_element = unsafe { instance.element(capacity - 1) }; + assert_eq!(last_element.as_ptr(), instance.elements.as_ptr().wrapping_add(capacity as usize - 1)); + } + + if capacity >= 2 { + let second_element = unsafe { instance.element(1) }; + assert_eq!(second_element.as_ptr(), instance.elements.as_ptr().wrapping_add(1)); + + let last_element = unsafe { instance.element(capacity - 2) }; + assert_eq!(last_element.as_ptr(), instance.elements.as_ptr().wrapping_add(capacity as usize - 2)); + } + } + + for cap in [0, 1, 2, 3, 4, 5, i32::MAX as u32 / size_of::() as u32] { + run_test(cap); + } + } + + #[test] + fn element_mut() { + type T = u64; + + fn run_test(capacity: u32) { + let mut instance = Heap::::new(capacity); + + if capacity >= 1 { + let first_element = unsafe { instance.element_mut(0) }; + assert_eq!(first_element.as_ptr(), instance.elements.as_ptr()); + + let last_element = unsafe { instance.element_mut(capacity - 1) }; + assert_eq!(last_element.as_ptr(), instance.elements.as_ptr().wrapping_add(capacity as usize - 1)); + } + + if capacity >= 2 { + let second_element = unsafe { instance.element_mut(1) }; + assert_eq!(second_element.as_ptr(), instance.elements.as_ptr().wrapping_add(1)); + + let last_element = unsafe { instance.element_mut(capacity - 2) }; + assert_eq!(last_element.as_ptr(), instance.elements.as_ptr().wrapping_add(capacity as usize - 2)); + } + } + + for cap in [0, 1, 2, 3, 4, 5, i32::MAX as u32 / size_of::() as u32] { + run_test(cap); + } + } +} diff --git a/src/containers/storage/inline.rs b/src/containers/storage/inline.rs new file mode 100644 index 0000000000..68c67ffbeb --- /dev/null +++ b/src/containers/storage/inline.rs @@ -0,0 +1,245 @@ +// ******************************************************************************* +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// https://www.apache.org/licenses/LICENSE-2.0 +// +// SPDX-License-Identifier: Apache-2.0 +// ******************************************************************************* + +use core::mem::MaybeUninit; +use core::ptr; + +use super::Storage; + +/// Fixed-capacity, inline storage, suitable for ABI compatible containers. +/// +/// `CAPACITY` is in number of elements, not bytes. +/// It must not be zero (for compatibility with C++), and it must be `<= u32::MAX`. +pub struct Inline { + elements: [MaybeUninit; CAPACITY], +} + +impl Inline { + // Compile-time check. This condition _must_ be referenced in every function that depends on it, + // otherwise it will be removed during monomorphization. + const CHECK_CAPACITY: () = assert!(0 < CAPACITY && CAPACITY <= (u32::MAX as usize)); +} + +impl Storage for Inline { + fn new(capacity: u32) -> Self { + let () = Self::CHECK_CAPACITY; + + assert_eq!(capacity as usize, CAPACITY); + Self { + elements: [const { MaybeUninit::uninit() }; CAPACITY], + } + } + + fn capacity(&self) -> u32 { + let () = Self::CHECK_CAPACITY; + + CAPACITY as u32 + } + + unsafe fn element(&self, index: u32) -> &MaybeUninit { + let () = Self::CHECK_CAPACITY; + + let index = index as usize; + debug_assert!(index < CAPACITY); + // SAFETY: `index` is in-bounds of the array, as per the pre-condition on the trait method. + unsafe { self.elements.get_unchecked(index) } + } + + unsafe fn element_mut(&mut self, index: u32) -> &mut MaybeUninit { + let () = Self::CHECK_CAPACITY; + + let index = index as usize; + debug_assert!(index < CAPACITY); + // SAFETY: `index` is in-bounds of the array, as per the pre-condition on the trait method. + unsafe { self.elements.get_unchecked_mut(index) } + } + + unsafe fn subslice(&self, start: u32, end: u32) -> *const [T] { + let () = Self::CHECK_CAPACITY; + + let start = start as usize; + let end = end as usize; + debug_assert!(start <= end); + debug_assert!(end <= CAPACITY); + // SAFETY: `start` is in-bounds of the array, as per the pre-condition on the trait method. + let ptr = unsafe { self.elements.as_ptr().add(start) }; + ptr::slice_from_raw_parts(ptr.cast::(), end - start) + } + + unsafe fn subslice_mut(&mut self, start: u32, end: u32) -> *mut [T] { + let () = Self::CHECK_CAPACITY; + + let start = start as usize; + let end = end as usize; + debug_assert!(start <= end); + debug_assert!(end <= CAPACITY); + // SAFETY: `start` is in-bounds of the array, as per the pre-condition on the trait method. + let ptr = unsafe { self.elements.as_mut_ptr().add(start) }; + ptr::slice_from_raw_parts_mut(ptr.cast::(), end - start) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn subslice() { + type T = u64; + + fn run_test() { + let capacity = N as u32; + let instance = Inline::::new(capacity); + + let empty_slice = unsafe { instance.subslice(0, 0) }; + assert_eq!(empty_slice.len(), 0); + assert_eq!(empty_slice as *const T, instance.elements.as_ptr() as *const T); + + let full_slice = unsafe { instance.subslice(0, capacity) }; + assert_eq!(full_slice.len(), capacity as usize); + assert_eq!(full_slice as *const T, instance.elements.as_ptr() as *const T); + + if capacity > 2 { + let partial_slice = unsafe { instance.subslice(1, 2) }; + assert_eq!(partial_slice.len(), 1); + assert_eq!(partial_slice as *const T, instance.elements.as_ptr().wrapping_add(1) as *const T); + + let end_slice = unsafe { instance.subslice(capacity - 1, capacity) }; + assert_eq!(end_slice.len(), 1); + assert_eq!( + end_slice as *const T, + instance.elements.as_ptr().wrapping_add(capacity as usize - 1) as *const T + ); + } + } + + run_test::<1>(); + run_test::<2>(); + run_test::<3>(); + run_test::<4>(); + run_test::<5>(); + } + + #[test] + fn subslice_mut() { + type T = u64; + + fn run_test() { + let capacity = N as u32; + let mut instance = Inline::::new(capacity); + + let empty_slice = unsafe { instance.subslice_mut(0, 0) }; + assert_eq!(empty_slice.len(), 0); + assert_eq!(empty_slice as *mut T, instance.elements.as_ptr() as *mut T); + + let full_slice = unsafe { instance.subslice_mut(0, capacity) }; + assert_eq!(full_slice.len(), capacity as usize); + assert_eq!(full_slice as *mut T, instance.elements.as_ptr() as *mut T); + + if capacity >= 2 { + let partial_slice = unsafe { instance.subslice_mut(1, 2) }; + assert_eq!(partial_slice.len(), 1); + assert_eq!(partial_slice as *mut T, instance.elements.as_ptr().wrapping_add(1) as *mut T); + + let end_slice = unsafe { instance.subslice_mut(capacity - 1, capacity) }; + assert_eq!(end_slice.len(), 1); + assert_eq!( + end_slice as *mut T, + instance.elements.as_ptr().wrapping_add(capacity as usize - 1) as *mut T + ); + } + } + + run_test::<1>(); + run_test::<2>(); + run_test::<3>(); + run_test::<4>(); + run_test::<5>(); + } + + #[test] + fn element() { + type T = u64; + + fn run_test() { + let capacity = N as u32; + let instance = Inline::::new(capacity); + + if capacity >= 1 { + let first_element = unsafe { instance.element(0) }; + assert_eq!(first_element.as_ptr(), instance.elements.as_ptr() as *const T); + + let last_element = unsafe { instance.element(capacity - 1) }; + assert_eq!( + last_element.as_ptr(), + instance.elements.as_ptr().wrapping_add(capacity as usize - 1) as *const T, + ); + } + + if capacity >= 2 { + let second_element = unsafe { instance.element(1) }; + assert_eq!(second_element.as_ptr(), instance.elements.as_ptr().wrapping_add(1) as *const T); + + let last_element = unsafe { instance.element(capacity - 2) }; + assert_eq!( + last_element.as_ptr(), + instance.elements.as_ptr().wrapping_add(capacity as usize - 2) as *const T, + ); + } + } + + run_test::<1>(); + run_test::<2>(); + run_test::<3>(); + run_test::<4>(); + run_test::<5>(); + } + + #[test] + fn element_mut() { + type T = u64; + + fn run_test() { + let capacity = N as u32; + let mut instance = Inline::::new(capacity); + + if capacity >= 1 { + let first_element = unsafe { instance.element_mut(0) }; + assert_eq!(first_element.as_ptr(), instance.elements.as_ptr() as *mut T); + + let last_element = unsafe { instance.element_mut(capacity - 1) }; + assert_eq!( + last_element.as_ptr(), + instance.elements.as_ptr().wrapping_add(capacity as usize - 1) as *mut T, + ); + } + + if capacity >= 2 { + let second_element = unsafe { instance.element_mut(1) }; + assert_eq!(second_element.as_ptr(), instance.elements.as_ptr().wrapping_add(1) as *mut T); + + let last_element = unsafe { instance.element_mut(capacity - 2) }; + assert_eq!( + last_element.as_ptr(), + instance.elements.as_ptr().wrapping_add(capacity as usize - 2) as *mut T, + ); + } + } + + run_test::<1>(); + run_test::<2>(); + run_test::<3>(); + run_test::<4>(); + run_test::<5>(); + } +} diff --git a/src/containers/storage/mod.rs b/src/containers/storage/mod.rs new file mode 100644 index 0000000000..031a0d6955 --- /dev/null +++ b/src/containers/storage/mod.rs @@ -0,0 +1,57 @@ +// ******************************************************************************* +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// https://www.apache.org/licenses/LICENSE-2.0 +// +// SPDX-License-Identifier: Apache-2.0 +// ******************************************************************************* + +mod heap; +mod inline; + +pub use self::heap::Heap; +pub use self::inline::Inline; + +use core::mem::MaybeUninit; + +/// Interface to abstract over element storage kinds. +pub trait Storage { + /// Creates a new instance with enough capacity for the given number of elements. + fn new(capacity: u32) -> Self; + + /// Returns the allocated capacity. + fn capacity(&self) -> u32; + + /// Returns a `const` pointer to a specific element, which isn't necessarily initialized. + /// + /// # Safety + /// + /// `index < self.capacity()` must hold. + unsafe fn element(&self, index: u32) -> &MaybeUninit; + + /// Returns a `mut` pointer to a specific element, which isn't necessarily initialized. + /// + /// # Safety + /// + /// `index < self.capacity()` must hold. + unsafe fn element_mut(&mut self, index: u32) -> &mut MaybeUninit; + + /// Returns a pointer to a subslice of elements, which aren't necessarily initialized. + /// + /// # Safety + /// + /// `start <= end <= self.capacity()` must hold. + unsafe fn subslice(&self, start: u32, end: u32) -> *const [T]; + + /// Returns a pointer to a mutable subslice of elements, which aren't necessarily initialized. + /// + /// # Safety + /// + /// `start <= end <= self.capacity()` must hold. + unsafe fn subslice_mut(&mut self, start: u32, end: u32) -> *mut [T]; +} From e9f4811adcfa2dcd1e350093aca276427d0450b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrian=20Willenb=C3=BCcher?= Date: Tue, 2 Dec 2025 14:05:33 +0100 Subject: [PATCH 10/59] Implement inline-storage and fixed-capacity queues --- src/containers/fixed_capacity/mod.rs | 2 + src/containers/fixed_capacity/queue.rs | 197 ++++++++++++++ src/containers/generic/mod.rs | 1 + src/containers/generic/queue.rs | 352 +++++++++++++++++++++++++ src/containers/generic/vec.rs | 70 +++++ src/containers/inline/mod.rs | 2 + src/containers/inline/queue.rs | 216 +++++++++++++++ src/containers/inline/vec.rs | 13 +- src/containers/storage/mod.rs | 33 +++ 9 files changed, 885 insertions(+), 1 deletion(-) create mode 100644 src/containers/fixed_capacity/queue.rs create mode 100644 src/containers/generic/queue.rs create mode 100644 src/containers/inline/queue.rs diff --git a/src/containers/fixed_capacity/mod.rs b/src/containers/fixed_capacity/mod.rs index 5447aa2a91..8d9dd3e0bb 100644 --- a/src/containers/fixed_capacity/mod.rs +++ b/src/containers/fixed_capacity/mod.rs @@ -11,6 +11,8 @@ // SPDX-License-Identifier: Apache-2.0 // ******************************************************************************* +mod queue; mod vec; +pub use self::queue::FixedCapacityQueue; pub use self::vec::FixedCapacityVec; diff --git a/src/containers/fixed_capacity/queue.rs b/src/containers/fixed_capacity/queue.rs new file mode 100644 index 0000000000..2024eebd29 --- /dev/null +++ b/src/containers/fixed_capacity/queue.rs @@ -0,0 +1,197 @@ +// ******************************************************************************* +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// https://www.apache.org/licenses/LICENSE-2.0 +// +// SPDX-License-Identifier: Apache-2.0 +// ******************************************************************************* + +use core::ops; + +use crate::generic::queue::GenericQueue; +use crate::storage::Heap; + +/// A fixed-capacity queue. +/// +/// The queue can hold between 0 and `CAPACITY` elements, and behaves similarly to Rust's `VecDeque`, +/// except that it allocates memory immediately on construction, and can't shrink or grow. +pub struct FixedCapacityQueue { + inner: GenericQueue>, +} + +impl FixedCapacityQueue { + /// Creates an empty queue and allocates memory for up to `capacity` elements, where `capacity <= u32::MAX`. + /// + /// # Panics + /// + /// - Panics if `capacity > u32::MAX`. + /// - Panics if the memory allocation fails. + #[must_use] + pub fn new(capacity: usize) -> Self { + assert!(capacity <= u32::MAX as usize, "FixedQueue can hold at most u32::MAX elements"); + Self { + inner: GenericQueue::new(capacity as u32), + } + } +} + +impl Drop for FixedCapacityQueue { + fn drop(&mut self) { + self.inner.clear(); + } +} + +impl ops::Deref for FixedCapacityQueue { + type Target = GenericQueue>; + + fn deref(&self) -> &Self::Target { + &self.inner + } +} + +impl ops::DerefMut for FixedCapacityQueue { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.inner + } +} + +#[cfg(test)] +mod tests { + use std::collections::VecDeque; + + use super::*; + + fn to_vec((first, second): (&[T], &[T])) -> Vec { + let mut elements = first.to_vec(); + elements.extend_from_slice(second); + elements + } + + #[test] + fn push_back_and_pop_front() { + fn run_test(n: usize) { + let mut queue = FixedCapacityQueue::::new(n); + let mut control = VecDeque::new(); + + // Completely fill and empty the queue n times, but move the internal start point + // ahead by one each time + for _ in 0..n { + let result = queue.pop_front(); + assert_eq!(result, None); + + for i in 0..n { + let value = i as i64 * 123 + 456; + let result = queue.push_back(value); + assert_eq!(*result.unwrap(), value); + control.push_back(value); + assert_eq!(to_vec(queue.as_slices()), to_vec(control.as_slices())); + } + + let result = queue.push_back(123456); + assert!(result.is_err()); + + for _ in 0..n { + let expected = control.pop_front().unwrap(); + let actual = queue.pop_front(); + assert_eq!(actual, Some(expected)); + } + + let result = queue.pop_front(); + assert_eq!(result, None); + + // One push and one pop to move the internal start point ahead + queue.push_back(987).unwrap(); + assert_eq!(queue.pop_front(), Some(987)); + } + } + + for i in 0..6 { + run_test(i); + } + } + + #[test] + fn push_front_and_pop_back() { + fn run_test(n: usize) { + let mut queue = FixedCapacityQueue::::new(n); + let mut control = VecDeque::new(); + + // Completely fill and empty the queue n times, but move the internal start point + // ahead by one each time + for _ in 0..n { + let result = queue.pop_back(); + assert_eq!(result, None); + + for i in 0..n { + let value = i as i64 * 123 + 456; + let result = queue.push_front(value); + assert_eq!(*result.unwrap(), value); + control.push_front(value); + assert_eq!(to_vec(queue.as_slices()), to_vec(control.as_slices())); + } + + let result = queue.push_front(123456); + assert!(result.is_err()); + + for _ in 0..n { + let expected = control.pop_back().unwrap(); + let actual = queue.pop_back(); + assert_eq!(actual, Some(expected)); + } + + let result = queue.pop_back(); + assert_eq!(result, None); + + // One push and one pop to move the internal start point ahead + queue.push_front(987).unwrap(); + assert_eq!(queue.pop_back(), Some(987)); + } + } + + for i in 0..6 { + run_test(i); + } + } + + #[test] + fn is_empty_and_is_full() { + fn run_test(n: usize) { + let mut queue = FixedCapacityQueue::::new(n); + + // Completely fill and empty the queue n times, but move the internal start point + // ahead by one each time + for _ in 0..n { + assert!(queue.is_empty()); + + for i in 0..n { + assert!(!queue.is_full()); + queue.push_back(i as i64 * 123 + 456).unwrap(); + assert!(!queue.is_empty()); + } + + assert!(queue.is_full()); + + for _ in 0..n { + assert!(!queue.is_empty()); + queue.pop_front(); + assert!(!queue.is_full()); + } + + assert!(queue.is_empty()); + + // One push and one pop to move the internal start point ahead + queue.push_back(987).unwrap(); + assert_eq!(queue.pop_front(), Some(987)); + } + } + + for i in 0..6 { + run_test(i); + } + } +} diff --git a/src/containers/generic/mod.rs b/src/containers/generic/mod.rs index 3c2ac35fc5..db30d83c70 100644 --- a/src/containers/generic/mod.rs +++ b/src/containers/generic/mod.rs @@ -11,4 +11,5 @@ // SPDX-License-Identifier: Apache-2.0 // ******************************************************************************* +pub(crate) mod queue; pub(crate) mod vec; diff --git a/src/containers/generic/queue.rs b/src/containers/generic/queue.rs new file mode 100644 index 0000000000..3e6e3a76eb --- /dev/null +++ b/src/containers/generic/queue.rs @@ -0,0 +1,352 @@ +// ******************************************************************************* +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// https://www.apache.org/licenses/LICENSE-2.0 +// +// SPDX-License-Identifier: Apache-2.0 +// ******************************************************************************* + +use core::fmt; +use core::marker::PhantomData; +use core::mem::needs_drop; +use core::ops::Range; +use core::ptr; + +use crate::storage::Storage; + +#[repr(C)] +pub struct GenericQueue> { + /// The current number of elements in the queue. + len: u32, + /// The index of the next element to be returned by [`pop_front()`](Self::pop_front). + front_index: u32, + storage: S, + _marker: PhantomData, +} + +impl> GenericQueue { + /// Creates an empty queue. + pub fn new(capacity: u32) -> Self { + Self { + len: 0, + front_index: 0, + storage: S::new(capacity), + _marker: PhantomData, + } + } + + /// Extracts the slices containing the entire queue contents, in order. + /// + /// The caller should not make any assumptions about the distribution of the elements between + /// the two slices, except for ordering. + /// In particular, the first slice might be empty even though the second isn't. + /// + /// # Example + /// + /// ```ignore + /// let (first, second) = queue.as_slices(); + /// let elements: Vec<_> = std::iter::chain(first, second).collect(); + /// println!("Elements in queue: {elements:?}"); + /// ``` + pub fn as_slices(&self) -> (&[T], &[T]) { + let (first, second) = self.slice_ranges(); + let first = unsafe { &*self.storage.subslice(first.start, first.end) }; + let second = unsafe { &*self.storage.subslice(second.start, second.end) }; + (first, second) + } + + /// Extracts the slices containing the entire queue contents, in order. + /// + /// The caller should not make any assumptions about the distribution of the elements between + /// the two slices, except for ordering. + /// In particular, the first slice might be empty even though the second isn't. + /// + /// # Example + /// + /// ```ignore + /// let (first, second) = queue.as_mut_slices(); + /// for elements in std::iter::chain(first, second) { + /// *element *= 2; + /// } + /// ``` + pub fn as_mut_slices(&mut self) -> (&mut [T], &mut [T]) { + let (first, second) = self.slice_ranges(); + let first = unsafe { &mut *self.storage.subslice_mut(first.start, first.end) }; + let second = unsafe { &mut *self.storage.subslice_mut(second.start, second.end) }; + (first, second) + } + + /// Returns the maximum number of elements the queue can hold. + pub fn capacity(&self) -> usize { + self.storage.capacity() as usize + } + + /// Returns the current number of elements in the queue. + pub fn len(&self) -> usize { + self.len as usize + } + + /// Returns `true` if and only if the queue doesn't contain any elements. + pub fn is_empty(&self) -> bool { + self.len == 0 + } + + /// Returns `true` if and only if the queue has reached its capacity. + pub fn is_full(&self) -> bool { + self.len() == self.capacity() + } + + /// Tries to push an element to the back of the queue. + /// + /// If the queue has spare capacity, the push succeeds and a reference to that element + /// is returned; otherwise, `Err(QueueFull)` is returned. + pub fn push_back(&mut self, value: T) -> Result<&mut T, QueueFull> { + let capacity = self.storage.capacity(); + if self.len < capacity { + let write_pos = self.front_index as u64 + self.len as u64; + let write_pos = if write_pos < capacity as u64 { + write_pos as u32 + } else { + (write_pos - capacity as u64) as u32 + }; + self.len += 1; + Ok(unsafe { self.storage.element_mut(write_pos).write(value) }) + } else { + Err(QueueFull) + } + } + + /// Tries to push an element to the front of the queue. + /// + /// If the queue has spare capacity, the push succeeds and a reference to that element + /// is returned; otherwise, `Err(QueueFull)` is returned. + pub fn push_front(&mut self, value: T) -> Result<&mut T, QueueFull> { + let capacity = self.storage.capacity(); + if self.len < capacity { + let write_pos = if self.front_index > 0 { self.front_index - 1 } else { capacity - 1 }; + let element = unsafe { self.storage.element_mut(write_pos).write(value) }; + self.len += 1; + self.front_index = write_pos; + Ok(element) + } else { + Err(QueueFull) + } + } + + /// Tries to pop an element from the front of the queue. + /// + /// If the queue has at least one element, the pop succeeds; otherwise, `None` is returned. + pub fn pop_front(&mut self) -> Option { + if self.len > 0 { + let element = unsafe { self.storage.element(self.front_index).assume_init_read() }; + self.len -= 1; + if self.front_index < self.storage.capacity() - 1 { + self.front_index += 1; + } else { + self.front_index = 0; + } + Some(element) + } else { + None + } + } + + /// Tries to pop an element from the back of the queue. + /// + /// If the queue has at least one element, the pop succeeds; otherwise, `None` is returned. + pub fn pop_back(&mut self) -> Option { + let capacity = self.storage.capacity(); + if self.len > 0 { + let read_pos = self.front_index as u64 + (self.len as u64 - 1); + let read_pos = if read_pos < capacity as u64 { + read_pos as u32 + } else { + (read_pos - capacity as u64) as u32 + }; + self.len -= 1; + Some(unsafe { self.storage.element(read_pos).assume_init_read() }) + } else { + None + } + } + + /// Clears the queue, removing all values. + pub fn clear(&mut self) { + let (first, second) = self.slice_ranges(); + // Mark queue as empty before dropping elements, to prevent double-drop in case there's a panic in drop_in_place + self.len = 0; + self.front_index = 0; + if needs_drop::() { + unsafe { + ptr::drop_in_place(self.storage.subslice_mut(first.start, first.end)); + ptr::drop_in_place(self.storage.subslice_mut(second.start, second.end)); + } + } + } + + fn slice_ranges(&self) -> (Range, Range) { + // Cast to u64 to avoid overflow + let end = self.front_index as u64 + self.len as u64; + let capacity = self.storage.capacity(); + if end > capacity as u64 { + let end = (end - capacity as u64) as u32; + (self.front_index..capacity, 0..end) + } else { + let end = end as u32; + (self.front_index..end, end..end) + } + } +} + +/// Indicates that an operation failed because the queue would exceed its maximum capacity. +#[derive(Clone, Copy, Default, Debug)] +pub struct QueueFull; + +impl fmt::Display for QueueFull { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "queue is full") + } +} + +impl core::error::Error for QueueFull {} + +#[cfg(test)] +mod tests { + use std::{collections::VecDeque, mem::MaybeUninit}; + + use super::*; + + fn to_vec((first, second): (&[T], &[T])) -> Vec { + let mut elements = first.to_vec(); + elements.extend_from_slice(second); + elements + } + + #[test] + fn push_back_and_pop_front() { + fn run_test(n: usize) { + let mut queue = GenericQueue::>>::new(n as u32); + let mut control = VecDeque::new(); + + // Completely fill and empty the queue n times, but move the internal start point + // ahead by one each time + for _ in 0..n { + let result = queue.pop_front(); + assert_eq!(result, None); + + for i in 0..n { + let value = i as i64 * 123 + 456; + let result = queue.push_back(value); + assert_eq!(*result.unwrap(), value); + control.push_back(value); + assert_eq!(to_vec(queue.as_slices()), to_vec(control.as_slices())); + } + + let result = queue.push_back(123456); + assert!(result.is_err()); + + for _ in 0..n { + let expected = control.pop_front().unwrap(); + let actual = queue.pop_front(); + assert_eq!(actual, Some(expected)); + } + + let result = queue.pop_front(); + assert_eq!(result, None); + + // One push and one pop to move the internal start point ahead + queue.push_back(987).unwrap(); + assert_eq!(queue.pop_front(), Some(987)); + } + } + + for i in 0..6 { + run_test(i); + } + } + + #[test] + fn push_front_and_pop_back() { + fn run_test(n: usize) { + let mut queue = GenericQueue::>>::new(n as u32); + let mut control = VecDeque::new(); + + // Completely fill and empty the queue n times, but move the internal start point + // ahead by one each time + for _ in 0..n { + let result = queue.pop_back(); + assert_eq!(result, None); + + for i in 0..n { + let value = i as i64 * 123 + 456; + let result = queue.push_front(value); + assert_eq!(*result.unwrap(), value); + control.push_front(value); + assert_eq!(to_vec(queue.as_slices()), to_vec(control.as_slices())); + } + + let result = queue.push_front(123456); + assert!(result.is_err()); + + for _ in 0..n { + let expected = control.pop_back().unwrap(); + let actual = queue.pop_back(); + assert_eq!(actual, Some(expected)); + } + + let result = queue.pop_back(); + assert_eq!(result, None); + + // One push and one pop to move the internal start point ahead + queue.push_front(987).unwrap(); + assert_eq!(queue.pop_back(), Some(987)); + } + } + + for i in 0..6 { + run_test(i); + } + } + + #[test] + fn is_empty_and_is_full() { + fn run_test(n: usize) { + let mut queue = GenericQueue::>>::new(n as u32); + + // Completely fill and empty the queue n times, but move the internal start point + // ahead by one each time + for _ in 0..n { + assert!(queue.is_empty()); + + for i in 0..n { + assert!(!queue.is_full()); + queue.push_back(i as i64 * 123 + 456).unwrap(); + assert!(!queue.is_empty()); + } + + assert!(queue.is_full()); + + for _ in 0..n { + assert!(!queue.is_empty()); + queue.pop_front(); + assert!(!queue.is_full()); + } + + assert!(queue.is_empty()); + + // One push and one pop to move the internal start point ahead + queue.push_back(987).unwrap(); + assert_eq!(queue.pop_front(), Some(987)); + } + } + + for i in 0..6 { + run_test(i); + } + } +} diff --git a/src/containers/generic/vec.rs b/src/containers/generic/vec.rs index eba64c0a7b..dc4eb5a1ce 100644 --- a/src/containers/generic/vec.rs +++ b/src/containers/generic/vec.rs @@ -141,3 +141,73 @@ impl fmt::Display for VectorFull { } impl core::error::Error for VectorFull {} + +#[cfg(test)] +mod tests { + use std::mem::MaybeUninit; + + use super::*; + + #[test] + fn push_and_pop() { + fn run_test(n: usize) { + let mut vector = GenericVec::>>::new(n as u32); + let mut control = vec![]; + + let result = vector.pop(); + assert_eq!(result, None); + + for i in 0..n { + let value = i as i64 * 123 + 456; + let result = vector.push(value); + assert_eq!(*result.unwrap(), value); + control.push(value); + assert_eq!(vector.as_slice(), control.as_slice()); + } + + let result = vector.push(123456); + assert!(result.is_err()); + + for _ in 0..n { + let expected = control.pop().unwrap(); + let actual = vector.pop(); + assert_eq!(actual, Some(expected)); + } + + let result = vector.pop(); + assert_eq!(result, None); + } + + for i in 0..6 { + run_test(i); + } + } + + #[test] + fn is_full_and_is_empty() { + fn run_test(n: usize) { + let mut vector = GenericVec::>>::new(n as u32); + assert!(vector.is_empty()); + + for i in 0..n { + assert!(!vector.is_full()); + vector.push(i as i64 * 123 + 456).unwrap(); + assert!(!vector.is_empty()); + } + + assert!(vector.is_full()); + + for _ in 0..n { + assert!(!vector.is_empty()); + vector.pop(); + assert!(!vector.is_full()); + } + + assert!(vector.is_empty()); + } + + for i in 0..6 { + run_test(i); + } + } +} diff --git a/src/containers/inline/mod.rs b/src/containers/inline/mod.rs index 996fab672a..c3cabdb596 100644 --- a/src/containers/inline/mod.rs +++ b/src/containers/inline/mod.rs @@ -11,6 +11,8 @@ // SPDX-License-Identifier: Apache-2.0 // ******************************************************************************* +mod queue; mod vec; +pub use self::queue::InlineQueue; pub use self::vec::InlineVec; diff --git a/src/containers/inline/queue.rs b/src/containers/inline/queue.rs new file mode 100644 index 0000000000..d8e03de958 --- /dev/null +++ b/src/containers/inline/queue.rs @@ -0,0 +1,216 @@ +// ******************************************************************************* +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// https://www.apache.org/licenses/LICENSE-2.0 +// +// SPDX-License-Identifier: Apache-2.0 +// ******************************************************************************* + +use core::ops; + +use crate::generic::queue::GenericQueue; +use crate::storage::Inline; + +/// A fixed-capacity, ABI-compatible queue. +/// +/// The queue can hold between 0 and `CAPACITY` elements, and behaves similarly to Rust's `VecDeque`, +/// except that it stores the elements inline and doesn't allocate. +/// `CAPACITY` must be `>= 1` and `<= u32::MAX`. +/// +/// This data structure has a stable, well-defined memory layout and satisfies the requirements for +/// [ABI-compatible types](https://eclipse-score.github.io/score/main/features/communication/abi_compatible_data_types/index.html). +/// Its layout is structurally equivalent to: +/// +/// ```ignore +/// #[repr(C)] +/// struct Vec { +/// len: u32, +/// front_index: u32, +/// elements: [T; N], +/// } +/// ``` +#[repr(transparent)] +pub struct InlineQueue { + inner: GenericQueue>, +} + +impl InlineQueue { + const CHECK_CAPACITY: () = assert!(0 < CAPACITY && CAPACITY <= u32::MAX as usize); + + /// Creates an empty queue. + #[must_use] + pub fn new() -> Self { + let () = Self::CHECK_CAPACITY; + + Self { + inner: GenericQueue::new(CAPACITY as u32), + } + } +} + +impl Default for InlineQueue { + fn default() -> Self { + Self::new() + } +} + +impl ops::Deref for InlineQueue { + type Target = GenericQueue>; + + fn deref(&self) -> &Self::Target { + &self.inner + } +} + +impl ops::DerefMut for InlineQueue { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.inner + } +} + +#[cfg(test)] +mod tests { + use std::collections::VecDeque; + + use super::*; + + fn to_vec((first, second): (&[T], &[T])) -> Vec { + let mut elements = first.to_vec(); + elements.extend_from_slice(second); + elements + } + + #[test] + fn push_back_and_pop_front() { + fn run_test() { + let mut queue = InlineQueue::::new(); + let mut control = VecDeque::new(); + + // Completely fill and empty the queue N times, but move the internal start point + // ahead by one each time + for _ in 0..N { + let result = queue.pop_front(); + assert_eq!(result, None); + + for i in 0..N { + let value = i as i64 * 123 + 456; + let result = queue.push_back(value); + assert_eq!(*result.unwrap(), value); + control.push_back(value); + assert_eq!(to_vec(queue.as_slices()), to_vec(control.as_slices())); + } + + let result = queue.push_back(123456); + assert!(result.is_err()); + + for _ in 0..N { + let expected = control.pop_front().unwrap(); + let actual = queue.pop_front(); + assert_eq!(actual, Some(expected)); + } + + let result = queue.pop_front(); + assert_eq!(result, None); + + // One push and one pop to move the internal start point ahead + queue.push_back(987).unwrap(); + assert_eq!(queue.pop_front(), Some(987)); + } + } + + run_test::<1>(); + run_test::<2>(); + run_test::<3>(); + run_test::<4>(); + run_test::<5>(); + } + + #[test] + fn push_front_and_pop_back() { + fn run_test() { + let mut queue = InlineQueue::::new(); + let mut control = VecDeque::new(); + + // Completely fill and empty the queue N times, but move the internal start point + // ahead by one each time + for _ in 0..N { + let result = queue.pop_back(); + assert_eq!(result, None); + + for i in 0..N { + let value = i as i64 * 123 + 456; + let result = queue.push_front(value); + assert_eq!(*result.unwrap(), value); + control.push_front(value); + assert_eq!(to_vec(queue.as_slices()), to_vec(control.as_slices())); + } + + let result = queue.push_front(123456); + assert!(result.is_err()); + + for _ in 0..N { + let expected = control.pop_back().unwrap(); + let actual = queue.pop_back(); + assert_eq!(actual, Some(expected)); + } + + let result = queue.pop_back(); + assert_eq!(result, None); + + // One push and one pop to move the internal start point ahead + queue.push_front(987).unwrap(); + assert_eq!(queue.pop_back(), Some(987)); + } + } + + run_test::<1>(); + run_test::<2>(); + run_test::<3>(); + run_test::<4>(); + run_test::<5>(); + } + + #[test] + fn is_empty_and_is_full() { + fn run_test() { + let mut queue = InlineQueue::::new(); + + // Completely fill and empty the queue N times, but move the internal start point + // ahead by one each time + for _ in 0..N { + assert!(queue.is_empty()); + + for i in 0..N { + assert!(!queue.is_full()); + queue.push_back(i as i64 * 123 + 456).unwrap(); + assert!(!queue.is_empty()); + } + + assert!(queue.is_full()); + + for _ in 0..N { + assert!(!queue.is_empty()); + queue.pop_front(); + assert!(!queue.is_full()); + } + + assert!(queue.is_empty()); + + // One push and one pop to move the internal start point ahead + queue.push_back(987).unwrap(); + assert_eq!(queue.pop_front(), Some(987)); + } + } + + run_test::<1>(); + run_test::<2>(); + run_test::<3>(); + run_test::<4>(); + run_test::<5>(); + } +} diff --git a/src/containers/inline/vec.rs b/src/containers/inline/vec.rs index 2c8244f0a7..1d8d7d4119 100644 --- a/src/containers/inline/vec.rs +++ b/src/containers/inline/vec.rs @@ -21,8 +21,19 @@ use crate::storage::Inline; /// /// The vector can hold between 0 and `CAPACITY` elements, and behaves similarly to Rust's `Vec`, /// except that it stores the elements inline and doesn't allocate. -/// /// `CAPACITY` must be `>= 1` and `<= u32::MAX`. +/// +/// This data structure has a stable, well-defined memory layout and satisfies the requirements for +/// [ABI-compatible types](https://eclipse-score.github.io/score/main/features/communication/abi_compatible_data_types/index.html). +/// Its layout is structurally equivalent to: +/// +/// ```ignore +/// #[repr(C)] +/// struct Vec { +/// len: u32, +/// elements: [T; N], +/// } +/// ``` #[repr(transparent)] pub struct InlineVec { inner: GenericVec>, diff --git a/src/containers/storage/mod.rs b/src/containers/storage/mod.rs index 031a0d6955..aa4e052575 100644 --- a/src/containers/storage/mod.rs +++ b/src/containers/storage/mod.rs @@ -55,3 +55,36 @@ pub trait Storage { /// `start <= end <= self.capacity()` must hold. unsafe fn subslice_mut(&mut self, start: u32, end: u32) -> *mut [T]; } + +#[cfg(test)] +mod test_utils { + //! A simple impl of [`Storage`] for [`Vec`], to be used for tests of generic containers. + + use super::*; + + impl Storage for Vec> { + fn new(capacity: u32) -> Self { + (0..capacity).map(|_| MaybeUninit::zeroed()).collect() + } + + fn capacity(&self) -> u32 { + self.capacity() as u32 + } + + unsafe fn element(&self, index: u32) -> &MaybeUninit { + &self[index as usize] + } + + unsafe fn element_mut(&mut self, index: u32) -> &mut MaybeUninit { + &mut self[index as usize] + } + + unsafe fn subslice(&self, start: u32, end: u32) -> *const [T] { + &self[start as usize..end as usize] as *const [MaybeUninit] as *const [T] + } + + unsafe fn subslice_mut(&mut self, start: u32, end: u32) -> *mut [T] { + &mut self[start as usize..end as usize] as *mut [MaybeUninit] as *mut [T] + } + } +} From fe358f9031c376868340ddddf908453ecac231be Mon Sep 17 00:00:00 2001 From: Nicolae Dicu Date: Mon, 8 Dec 2025 16:21:57 +0200 Subject: [PATCH 11/59] rustfmt: Use rustfmt from tooling Rules: https://github.com/eclipse-score/score_rust_policies/blob/main/rustfmt/rustfmt.toml Signed-off-by: Nicolae Dicu --- .../{lint_fmt_clippy.yml => lint_clippy.yml} | 16 ++-- MODULE.bazel | 5 +- src/containers/fixed_capacity/queue.rs | 5 +- src/containers/fixed_capacity/vec.rs | 5 +- src/containers/generic/queue.rs | 6 +- src/containers/storage/heap.rs | 78 +++++++++++++++---- src/containers/storage/inline.rs | 65 ++++++++++++---- 7 files changed, 138 insertions(+), 42 deletions(-) rename .github/workflows/{lint_fmt_clippy.yml => lint_clippy.yml} (82%) diff --git a/.github/workflows/lint_fmt_clippy.yml b/.github/workflows/lint_clippy.yml similarity index 82% rename from .github/workflows/lint_fmt_clippy.yml rename to .github/workflows/lint_clippy.yml index a7e02f0f01..912de3340b 100644 --- a/.github/workflows/lint_fmt_clippy.yml +++ b/.github/workflows/lint_clippy.yml @@ -11,7 +11,7 @@ # SPDX-License-Identifier: Apache-2.0 # ******************************************************************************* -name: rustfmt and clippy check +name: clippy check on: pull_request: @@ -21,7 +21,7 @@ on: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} jobs: - lint-fmt-clippy: + lint-clippy: timeout-minutes: 6 # 6 minutes is the maximum allowed for a cold run runs-on: ${{ vars.REPO_RUNNER_LABELS && fromJSON(vars.REPO_RUNNER_LABELS) || 'ubuntu-latest' }} steps: @@ -42,9 +42,9 @@ jobs: ~/.cargo/registry ~/.cargo/git target - key: ${{ runner.os }}-cargo-lint-fmt-clippy-${{ hashFiles('**/Cargo.lock') }} + key: ${{ runner.os }}-cargo-lint-clippy-${{ hashFiles('**/Cargo.lock') }} restore-keys: | - ${{ runner.os }}-cargo-lint-fmt-clippy- + ${{ runner.os }}-cargo-lint-clippy- - name: Install Rust toolchain uses: actions-rs/toolchain@v1 @@ -52,13 +52,7 @@ jobs: profile: minimal toolchain: 1.90.0 override: true - components: rustfmt, clippy - - - name: check code format (rustfmt) - uses: actions-rs/cargo@v1 - with: - command: fmt - args: -- --check + components: clippy - name: check clippy errors uses: actions-rs/cargo@v1 diff --git a/MODULE.bazel b/MODULE.bazel index 54915bc8ac..fe4fadd11c 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -28,7 +28,8 @@ bazel_dep(name = "platforms", version = "1.0.0") # S-CORE process rules bazel_dep(name = "score_bazel_platforms", version = "0.0.2") bazel_dep(name = "score_docs_as_code", version = "2.0.2") -bazel_dep(name = "score_tooling", version = "1.0.2") +bazel_dep(name = "score_tooling", version = "1.0.4") +bazel_dep(name = "score_rust_policies", version = "0.0.2") bazel_dep(name = "score_process", version = "1.3.1", dev_dependency = True) bazel_dep(name = "score_platform", version = "0.4.2", dev_dependency = True) # This is main score repo @@ -46,7 +47,7 @@ bazel_dep(name = "score_crates") # Overrides git_override( module_name = "score_tooling", - commit = "654664dae7df2700fd5840c5ed6c07ac6c61705d", #until 1.0.4 is released + commit = "f484bc23485b0880d8d86e96b8f25d7650889089", #until 1.0.5 is released remote = "https://github.com/eclipse-score/tooling.git", ) diff --git a/src/containers/fixed_capacity/queue.rs b/src/containers/fixed_capacity/queue.rs index 2024eebd29..85c5aec60d 100644 --- a/src/containers/fixed_capacity/queue.rs +++ b/src/containers/fixed_capacity/queue.rs @@ -33,7 +33,10 @@ impl FixedCapacityQueue { /// - Panics if the memory allocation fails. #[must_use] pub fn new(capacity: usize) -> Self { - assert!(capacity <= u32::MAX as usize, "FixedQueue can hold at most u32::MAX elements"); + assert!( + capacity <= u32::MAX as usize, + "FixedQueue can hold at most u32::MAX elements" + ); Self { inner: GenericQueue::new(capacity as u32), } diff --git a/src/containers/fixed_capacity/vec.rs b/src/containers/fixed_capacity/vec.rs index 1ed7036a62..f156705081 100644 --- a/src/containers/fixed_capacity/vec.rs +++ b/src/containers/fixed_capacity/vec.rs @@ -34,7 +34,10 @@ impl FixedCapacityVec { /// - Panics if the memory allocation fails. #[must_use] pub fn new(capacity: usize) -> Self { - assert!(capacity <= u32::MAX as usize, "FixedCapacityVec can hold at most u32::MAX elements"); + assert!( + capacity <= u32::MAX as usize, + "FixedCapacityVec can hold at most u32::MAX elements" + ); Self { inner: GenericVec::new(capacity as u32), } diff --git a/src/containers/generic/queue.rs b/src/containers/generic/queue.rs index 3e6e3a76eb..7502f38515 100644 --- a/src/containers/generic/queue.rs +++ b/src/containers/generic/queue.rs @@ -128,7 +128,11 @@ impl> GenericQueue { pub fn push_front(&mut self, value: T) -> Result<&mut T, QueueFull> { let capacity = self.storage.capacity(); if self.len < capacity { - let write_pos = if self.front_index > 0 { self.front_index - 1 } else { capacity - 1 }; + let write_pos = if self.front_index > 0 { + self.front_index - 1 + } else { + capacity - 1 + }; let element = unsafe { self.storage.element_mut(write_pos).write(value) }; self.len += 1; self.front_index = write_pos; diff --git a/src/containers/storage/heap.rs b/src/containers/storage/heap.rs index bc355910fd..fe50c2d1e2 100644 --- a/src/containers/storage/heap.rs +++ b/src/containers/storage/heap.rs @@ -11,9 +11,9 @@ // SPDX-License-Identifier: Apache-2.0 // ******************************************************************************* -use alloc::alloc::Layout; use alloc::alloc::alloc; use alloc::alloc::dealloc; +use alloc::alloc::Layout; use core::marker::PhantomData; use core::mem::MaybeUninit; use core::ptr; @@ -50,8 +50,12 @@ impl Storage for Heap { ) }); // SAFETY: `layout` has a non-zero size (because `capacity` is > 0) - NonNull::new(unsafe { alloc(layout) }) - .unwrap_or_else(|| panic!("failed to allocate {capacity} elements of {typ}", typ = core::any::type_name::())) + NonNull::new(unsafe { alloc(layout) }).unwrap_or_else(|| { + panic!( + "failed to allocate {capacity} elements of {typ}", + typ = core::any::type_name::() + ) + }) } else { NonNull::dangling() }; @@ -141,11 +145,20 @@ mod tests { if capacity > 2 { let partial_slice = unsafe { instance.subslice(1, 2) }; assert_eq!(partial_slice.len(), 1); - assert_eq!(partial_slice as *const T, instance.elements.as_ptr().wrapping_add(1)); + assert_eq!( + partial_slice as *const T, + instance.elements.as_ptr().wrapping_add(1) + ); let end_slice = unsafe { instance.subslice(capacity - 1, capacity) }; assert_eq!(end_slice.len(), 1); - assert_eq!(end_slice as *const T, instance.elements.as_ptr().wrapping_add(capacity as usize - 1)); + assert_eq!( + end_slice as *const T, + instance + .elements + .as_ptr() + .wrapping_add(capacity as usize - 1) + ); } } @@ -172,11 +185,20 @@ mod tests { if capacity >= 2 { let partial_slice = unsafe { instance.subslice_mut(1, 2) }; assert_eq!(partial_slice.len(), 1); - assert_eq!(partial_slice as *mut T, instance.elements.as_ptr().wrapping_add(1)); + assert_eq!( + partial_slice as *mut T, + instance.elements.as_ptr().wrapping_add(1) + ); let end_slice = unsafe { instance.subslice_mut(capacity - 1, capacity) }; assert_eq!(end_slice.len(), 1); - assert_eq!(end_slice as *mut T, instance.elements.as_ptr().wrapping_add(capacity as usize - 1)); + assert_eq!( + end_slice as *mut T, + instance + .elements + .as_ptr() + .wrapping_add(capacity as usize - 1) + ); } } @@ -197,15 +219,30 @@ mod tests { assert_eq!(first_element.as_ptr(), instance.elements.as_ptr()); let last_element = unsafe { instance.element(capacity - 1) }; - assert_eq!(last_element.as_ptr(), instance.elements.as_ptr().wrapping_add(capacity as usize - 1)); + assert_eq!( + last_element.as_ptr(), + instance + .elements + .as_ptr() + .wrapping_add(capacity as usize - 1) + ); } if capacity >= 2 { let second_element = unsafe { instance.element(1) }; - assert_eq!(second_element.as_ptr(), instance.elements.as_ptr().wrapping_add(1)); + assert_eq!( + second_element.as_ptr(), + instance.elements.as_ptr().wrapping_add(1) + ); let last_element = unsafe { instance.element(capacity - 2) }; - assert_eq!(last_element.as_ptr(), instance.elements.as_ptr().wrapping_add(capacity as usize - 2)); + assert_eq!( + last_element.as_ptr(), + instance + .elements + .as_ptr() + .wrapping_add(capacity as usize - 2) + ); } } @@ -226,15 +263,30 @@ mod tests { assert_eq!(first_element.as_ptr(), instance.elements.as_ptr()); let last_element = unsafe { instance.element_mut(capacity - 1) }; - assert_eq!(last_element.as_ptr(), instance.elements.as_ptr().wrapping_add(capacity as usize - 1)); + assert_eq!( + last_element.as_ptr(), + instance + .elements + .as_ptr() + .wrapping_add(capacity as usize - 1) + ); } if capacity >= 2 { let second_element = unsafe { instance.element_mut(1) }; - assert_eq!(second_element.as_ptr(), instance.elements.as_ptr().wrapping_add(1)); + assert_eq!( + second_element.as_ptr(), + instance.elements.as_ptr().wrapping_add(1) + ); let last_element = unsafe { instance.element_mut(capacity - 2) }; - assert_eq!(last_element.as_ptr(), instance.elements.as_ptr().wrapping_add(capacity as usize - 2)); + assert_eq!( + last_element.as_ptr(), + instance + .elements + .as_ptr() + .wrapping_add(capacity as usize - 2) + ); } } diff --git a/src/containers/storage/inline.rs b/src/containers/storage/inline.rs index 68c67ffbeb..7c09ded1d2 100644 --- a/src/containers/storage/inline.rs +++ b/src/containers/storage/inline.rs @@ -103,22 +103,34 @@ mod tests { let empty_slice = unsafe { instance.subslice(0, 0) }; assert_eq!(empty_slice.len(), 0); - assert_eq!(empty_slice as *const T, instance.elements.as_ptr() as *const T); + assert_eq!( + empty_slice as *const T, + instance.elements.as_ptr() as *const T + ); let full_slice = unsafe { instance.subslice(0, capacity) }; assert_eq!(full_slice.len(), capacity as usize); - assert_eq!(full_slice as *const T, instance.elements.as_ptr() as *const T); + assert_eq!( + full_slice as *const T, + instance.elements.as_ptr() as *const T + ); if capacity > 2 { let partial_slice = unsafe { instance.subslice(1, 2) }; assert_eq!(partial_slice.len(), 1); - assert_eq!(partial_slice as *const T, instance.elements.as_ptr().wrapping_add(1) as *const T); + assert_eq!( + partial_slice as *const T, + instance.elements.as_ptr().wrapping_add(1) as *const T + ); let end_slice = unsafe { instance.subslice(capacity - 1, capacity) }; assert_eq!(end_slice.len(), 1); assert_eq!( end_slice as *const T, - instance.elements.as_ptr().wrapping_add(capacity as usize - 1) as *const T + instance + .elements + .as_ptr() + .wrapping_add(capacity as usize - 1) as *const T ); } } @@ -149,13 +161,19 @@ mod tests { if capacity >= 2 { let partial_slice = unsafe { instance.subslice_mut(1, 2) }; assert_eq!(partial_slice.len(), 1); - assert_eq!(partial_slice as *mut T, instance.elements.as_ptr().wrapping_add(1) as *mut T); + assert_eq!( + partial_slice as *mut T, + instance.elements.as_ptr().wrapping_add(1) as *mut T + ); let end_slice = unsafe { instance.subslice_mut(capacity - 1, capacity) }; assert_eq!(end_slice.len(), 1); assert_eq!( end_slice as *mut T, - instance.elements.as_ptr().wrapping_add(capacity as usize - 1) as *mut T + instance + .elements + .as_ptr() + .wrapping_add(capacity as usize - 1) as *mut T ); } } @@ -177,23 +195,35 @@ mod tests { if capacity >= 1 { let first_element = unsafe { instance.element(0) }; - assert_eq!(first_element.as_ptr(), instance.elements.as_ptr() as *const T); + assert_eq!( + first_element.as_ptr(), + instance.elements.as_ptr() as *const T + ); let last_element = unsafe { instance.element(capacity - 1) }; assert_eq!( last_element.as_ptr(), - instance.elements.as_ptr().wrapping_add(capacity as usize - 1) as *const T, + instance + .elements + .as_ptr() + .wrapping_add(capacity as usize - 1) as *const T, ); } if capacity >= 2 { let second_element = unsafe { instance.element(1) }; - assert_eq!(second_element.as_ptr(), instance.elements.as_ptr().wrapping_add(1) as *const T); + assert_eq!( + second_element.as_ptr(), + instance.elements.as_ptr().wrapping_add(1) as *const T + ); let last_element = unsafe { instance.element(capacity - 2) }; assert_eq!( last_element.as_ptr(), - instance.elements.as_ptr().wrapping_add(capacity as usize - 2) as *const T, + instance + .elements + .as_ptr() + .wrapping_add(capacity as usize - 2) as *const T, ); } } @@ -220,18 +250,27 @@ mod tests { let last_element = unsafe { instance.element_mut(capacity - 1) }; assert_eq!( last_element.as_ptr(), - instance.elements.as_ptr().wrapping_add(capacity as usize - 1) as *mut T, + instance + .elements + .as_ptr() + .wrapping_add(capacity as usize - 1) as *mut T, ); } if capacity >= 2 { let second_element = unsafe { instance.element_mut(1) }; - assert_eq!(second_element.as_ptr(), instance.elements.as_ptr().wrapping_add(1) as *mut T); + assert_eq!( + second_element.as_ptr(), + instance.elements.as_ptr().wrapping_add(1) as *mut T + ); let last_element = unsafe { instance.element_mut(capacity - 2) }; assert_eq!( last_element.as_ptr(), - instance.elements.as_ptr().wrapping_add(capacity as usize - 2) as *mut T, + instance + .elements + .as_ptr() + .wrapping_add(capacity as usize - 2) as *mut T, ); } } From ae97edb7436e413122e437b157b5cacde419d0ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arkadiusz=20J=C4=99drzejewski?= Date: Tue, 25 Nov 2025 09:31:25 +0000 Subject: [PATCH 12/59] log: `mw_log_fmt` implementation - Replacement for `core::fmt`. - Partial implementation of common types. - `ScoreDebug` implementation helpers. - Unit tests. --- Cargo.toml | 12 +- src/log/BUILD | 24 - src/log/Cargo.toml | 11 - src/log/mw_log_fmt/BUILD | 29 ++ src/log/mw_log_fmt/Cargo.toml | 28 ++ src/log/mw_log_fmt/builders.rs | 760 ++++++++++++++++++++++++++++++ src/log/mw_log_fmt/fmt.rs | 221 +++++++++ src/log/mw_log_fmt/fmt_impl.rs | 225 +++++++++ src/log/mw_log_fmt/fmt_impl_qm.rs | 65 +++ src/log/mw_log_fmt/fmt_spec.rs | 378 +++++++++++++++ src/log/mw_log_fmt/lib.rs | 32 ++ src/log/mw_log_fmt/macros.rs | 38 ++ src/log/mw_log_fmt/test_utils.rs | 95 ++++ src/log/src/lib.rs | 17 - 14 files changed, 1875 insertions(+), 60 deletions(-) delete mode 100644 src/log/Cargo.toml create mode 100644 src/log/mw_log_fmt/BUILD create mode 100644 src/log/mw_log_fmt/Cargo.toml create mode 100644 src/log/mw_log_fmt/builders.rs create mode 100644 src/log/mw_log_fmt/fmt.rs create mode 100644 src/log/mw_log_fmt/fmt_impl.rs create mode 100644 src/log/mw_log_fmt/fmt_impl_qm.rs create mode 100644 src/log/mw_log_fmt/fmt_spec.rs create mode 100644 src/log/mw_log_fmt/lib.rs create mode 100644 src/log/mw_log_fmt/macros.rs create mode 100644 src/log/mw_log_fmt/test_utils.rs delete mode 100644 src/log/src/lib.rs diff --git a/Cargo.toml b/Cargo.toml index 34c94b2b8b..22653f0d8f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,15 +2,9 @@ resolver = "2" # Split to default members without tests and examples. # Used when executing cargo from project root. -default-members = [ - "src/containers", - "src/log" -] +default-members = ["src/containers", "src/log/mw_log_fmt"] # Include tests and examples as a member for IDE support and Bazel builds. -members = [ - "src/containers", - "src/log" -] +members = ["src/containers", "src/log/mw_log_fmt"] [workspace.package] @@ -21,6 +15,7 @@ authors = ["S-CORE Contributors"] [workspace.dependencies] +mw_log_fmt = { path = "src/log/mw_log_fmt" } [workspace.lints.clippy] @@ -30,3 +25,4 @@ alloc_instead_of_core = "warn" [workspace.lints.rust] unexpected_cfgs = { level = "warn", check-cfg = ['cfg(loom)'] } +missing_docs = "warn" diff --git a/src/log/BUILD b/src/log/BUILD index aa991bd5e9..e69de29bb2 100644 --- a/src/log/BUILD +++ b/src/log/BUILD @@ -1,24 +0,0 @@ -# ******************************************************************************* -# Copyright (c) 2025 Contributors to the Eclipse Foundation -# -# See the NOTICE file(s) distributed with this work for additional -# information regarding copyright ownership. -# -# This program and the accompanying materials are made available under the -# terms of the Apache License Version 2.0 which is available at -# https://www.apache.org/licenses/LICENSE-2.0 -# -# SPDX-License-Identifier: Apache-2.0 -# ******************************************************************************* -load("@rules_rust//rust:defs.bzl", "rust_library", "rust_test") - -rust_library( - name = "log", - srcs = glob(["src/**/*.rs"]), - visibility = ["//visibility:public"], -) - -rust_test( - name = "log_tests", - crate = ":log", -) diff --git a/src/log/Cargo.toml b/src/log/Cargo.toml deleted file mode 100644 index b5403bb7ca..0000000000 --- a/src/log/Cargo.toml +++ /dev/null @@ -1,11 +0,0 @@ -[package] -name = "log" -version.workspace = true -edition.workspace = true -license-file.workspace = true -authors.workspace = true - -[dependencies] - -[lints] -workspace = true diff --git a/src/log/mw_log_fmt/BUILD b/src/log/mw_log_fmt/BUILD new file mode 100644 index 0000000000..764b3efaef --- /dev/null +++ b/src/log/mw_log_fmt/BUILD @@ -0,0 +1,29 @@ +# ******************************************************************************* +# Copyright (c) 2025 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* +load("@rules_rust//rust:defs.bzl", "rust_library", "rust_test") + +rust_library( + name = "mw_log_fmt", + srcs = glob(["**/*.rs"]), + # TODO: expose required interface through `mw_log`. + visibility = ["//visibility:public"], +) + +rust_test( + name = "tests", + crate = "mw_log_fmt", + tags = [ + "unit_tests", + "ut", + ], +) diff --git a/src/log/mw_log_fmt/Cargo.toml b/src/log/mw_log_fmt/Cargo.toml new file mode 100644 index 0000000000..67771301a3 --- /dev/null +++ b/src/log/mw_log_fmt/Cargo.toml @@ -0,0 +1,28 @@ +# ******************************************************************************* +# Copyright (c) 2025 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* + +[package] +name = "mw_log_fmt" +version.workspace = true +authors.workspace = true +readme.workspace = true +edition.workspace = true + +[lib] +path = "lib.rs" + +[features] +qm = [] + +[lints] +workspace = true diff --git a/src/log/mw_log_fmt/builders.rs b/src/log/mw_log_fmt/builders.rs new file mode 100644 index 0000000000..66f1bf8f60 --- /dev/null +++ b/src/log/mw_log_fmt/builders.rs @@ -0,0 +1,760 @@ +// +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// +// +// SPDX-License-Identifier: Apache-2.0 +// + +//! Implementations of [`ScoreDebug`] implementation helper builders. + +use crate::{FormatSpec, Result, ScoreDebug, Writer}; + +/// Output a formatted struct. +/// +/// Useful as a part of [`ScoreDebug::fmt`] implementation. +#[must_use = "must eventually call `finish()` on ScoreDebug builders"] +pub struct DebugStruct<'a> { + writer: Writer<'a>, + spec: &'a FormatSpec, + result: Result, + has_fields: bool, +} + +impl<'a> DebugStruct<'a> { + /// Create `DebugStruct` instance. + pub fn new(writer: Writer<'a>, spec: &'a FormatSpec, name: &str) -> Self { + let result = writer.write_str(name, &FormatSpec::new()); + DebugStruct { + writer, + spec, + result, + has_fields: false, + } + } + + /// Adds a new field to the generated struct output. + pub fn field(&mut self, name: &str, value: &dyn ScoreDebug) -> &mut Self { + self.field_with(name, |f| value.fmt(f, self.spec)) + } + + /// Adds a new field to the generated struct output. + /// + /// This method is equivalent to [`DebugStruct::field`], but formats the value using a provided closure rather than by calling [`ScoreDebug::fmt`]. + pub fn field_with(&mut self, name: &str, value_fmt: F) -> &mut Self + where + F: FnOnce(Writer) -> Result, + { + self.result = self.result.and_then(|_| { + let prefix = if self.has_fields { ", " } else { " { " }; + let empty_spec = FormatSpec::new(); + self.writer.write_str(prefix, &empty_spec)?; + self.writer.write_str(name, &empty_spec)?; + self.writer.write_str(": ", &empty_spec)?; + value_fmt(self.writer) + }); + + self.has_fields = true; + self + } + + /// Marks the struct as non-exhaustive, indicating to the reader that there are some other fields that are not shown in the debug representation. + pub fn finish_non_exhaustive(&mut self) -> Result { + self.result = self.result.and_then(|_| { + let empty_spec = FormatSpec::new(); + if self.has_fields { + self.writer.write_str(", .. }", &empty_spec) + } else { + self.writer.write_str(" { .. }", &empty_spec) + } + }); + self.result + } + + /// Finishes output and returns any error encountered. + pub fn finish(&mut self) -> Result { + if self.has_fields { + let empty_spec = FormatSpec::new(); + self.result = self.result.and_then(|_| self.writer.write_str(" }", &empty_spec)); + } + self.result + } +} + +/// Output a formatted tuple. +/// +/// Useful as a part of [`ScoreDebug::fmt`] implementation. +#[must_use = "must eventually call `finish()` on ScoreDebug builders"] +pub struct DebugTuple<'a> { + writer: Writer<'a>, + spec: &'a FormatSpec, + result: Result, + fields: usize, + empty_name: bool, +} + +impl<'a> DebugTuple<'a> { + /// Create `DebugTuple` instance. + pub fn new(writer: Writer<'a>, spec: &'a FormatSpec, name: &str) -> Self { + let result = writer.write_str(name, &FormatSpec::new()); + DebugTuple { + writer, + spec, + result, + fields: 0, + empty_name: name.is_empty(), + } + } + + /// Adds a new field to the generated tuple struct output. + pub fn field(&mut self, value: &dyn ScoreDebug) -> &mut Self { + self.field_with(|f| value.fmt(f, self.spec)) + } + + /// Adds a new field to the generated tuple struct output. + /// + /// This method is equivalent to [`DebugTuple::field`], but formats the value using a provided closure rather than by calling [`ScoreDebug::fmt`]. + pub fn field_with(&mut self, value_fmt: F) -> &mut Self + where + F: FnOnce(Writer) -> Result, + { + self.result = self.result.and_then(|_| { + let prefix = if self.fields == 0 { "(" } else { ", " }; + let empty_spec = FormatSpec::new(); + self.writer.write_str(prefix, &empty_spec)?; + value_fmt(self.writer) + }); + + self.fields += 1; + self + } + + /// Marks the tuple struct as non-exhaustive, indicating to the reader that there are some other fields that are not shown in the debug representation. + pub fn finish_non_exhaustive(&mut self) -> Result { + self.result = self.result.and_then(|_| { + let empty_spec = FormatSpec::new(); + if self.fields > 0 { + self.writer.write_str(", ..)", &empty_spec) + } else { + self.writer.write_str("(..)", &empty_spec) + } + }); + self.result + } + + /// Finishes output and returns any error encountered. + pub fn finish(&mut self) -> Result { + if self.fields > 0 { + self.result = self.result.and_then(|_| { + let empty_spec = FormatSpec::new(); + if self.fields == 1 && self.empty_name { + self.writer.write_str(",", &empty_spec)?; + } + self.writer.write_str(")", &empty_spec) + }); + } + self.result + } +} + +/// A helper used to print list-like items with no special formatting. +struct DebugInner<'a> { + writer: Writer<'a>, + spec: &'a FormatSpec, + result: Result, + has_fields: bool, +} + +impl<'a> DebugInner<'a> { + fn entry_with(&mut self, entry_writer: F) + where + F: FnOnce(Writer) -> Result, + { + self.result = self.result.and_then(|_| { + let empty_spec = FormatSpec::new(); + if self.has_fields { + self.writer.write_str(", ", &empty_spec)? + } + entry_writer(self.writer) + }); + + self.has_fields = true; + } +} + +/// Output a formatted set of items. +/// +/// Useful as a part of [`ScoreDebug::fmt`] implementation. +#[must_use = "must eventually call `finish()` on ScoreDebug builders"] +pub struct DebugSet<'a> { + inner: DebugInner<'a>, +} + +impl<'a> DebugSet<'a> { + /// Create `DebugSet` instance. + pub fn new(writer: Writer<'a>, spec: &'a FormatSpec) -> Self { + let result = writer.write_str("{", &FormatSpec::new()); + DebugSet { + inner: DebugInner { + writer, + spec, + result, + has_fields: false, + }, + } + } + + /// Adds a new entry to the set output. + pub fn entry(&mut self, entry: &dyn ScoreDebug) -> &mut Self { + self.inner.entry_with(|f| entry.fmt(f, self.inner.spec)); + self + } + + /// Adds a new entry to the set output. + /// + /// This method is equivalent to [`DebugSet::entry`], but formats the entry using a provided closure rather than by calling [`ScoreDebug::fmt`]. + pub fn entry_with(&mut self, entry_fmt: F) -> &mut Self + where + F: FnOnce(Writer) -> Result, + { + self.inner.entry_with(entry_fmt); + self + } + + /// Adds the contents of an iterator of entries to the set output. + pub fn entries(&mut self, entries: I) -> &mut Self + where + D: ScoreDebug, + I: IntoIterator, + { + for entry in entries { + self.entry(&entry); + } + self + } + + /// Marks the set as non-exhaustive, indicating to the reader that there are some other elements that are not shown in the debug representation. + pub fn finish_non_exhaustive(&mut self) -> Result { + self.inner.result = self.inner.result.and_then(|_| { + let empty_spec = FormatSpec::new(); + if self.inner.has_fields { + self.inner.writer.write_str(", ..}", &empty_spec) + } else { + self.inner.writer.write_str("..}", &empty_spec) + } + }); + self.inner.result + } + + /// Finishes output and returns any error encountered. + pub fn finish(&mut self) -> Result { + self.inner.result = self.inner.result.and_then(|_| self.inner.writer.write_str("}", &FormatSpec::new())); + self.inner.result + } +} + +/// Output a formatted list of items. +/// +/// Useful as a part of [`ScoreDebug::fmt`] implementation. +#[must_use = "must eventually call `finish()` on ScoreDebug builders"] +pub struct DebugList<'a> { + inner: DebugInner<'a>, +} + +impl<'a> DebugList<'a> { + /// Create `DebugList` instance. + pub fn new(writer: Writer<'a>, spec: &'a FormatSpec) -> Self { + let result = writer.write_str("[", &FormatSpec::new()); + DebugList { + inner: DebugInner { + writer, + spec, + result, + has_fields: false, + }, + } + } + + /// Adds a new entry to the list output. + pub fn entry(&mut self, entry: &dyn ScoreDebug) -> &mut Self { + self.inner.entry_with(|f| entry.fmt(f, self.inner.spec)); + self + } + + /// Adds a new entry to the list output. + /// + /// This method is equivalent to [`DebugList::entry`], but formats the entry using a provided closure rather than by calling [`ScoreDebug::fmt`]. + pub fn entry_with(&mut self, entry_fmt: F) -> &mut Self + where + F: FnOnce(Writer) -> Result, + { + self.inner.entry_with(entry_fmt); + self + } + + /// Adds the contents of an iterator of entries to the list output. + pub fn entries(&mut self, entries: I) -> &mut Self + where + D: ScoreDebug, + I: IntoIterator, + { + for entry in entries { + self.entry(&entry); + } + self + } + + /// Marks the list as non-exhaustive, indicating to the reader that there are some other elements that are not shown in the debug representation. + pub fn finish_non_exhaustive(&mut self) -> Result { + self.inner.result.and_then(|_| { + let empty_spec = FormatSpec::new(); + if self.inner.has_fields { + self.inner.writer.write_str(", ..]", &empty_spec) + } else { + self.inner.writer.write_str("..]", &empty_spec) + } + }) + } + + /// Finishes output and returns any error encountered. + pub fn finish(&mut self) -> Result { + self.inner.result = self.inner.result.and_then(|_| self.inner.writer.write_str("]", &FormatSpec::new())); + self.inner.result + } +} + +/// Output a formatted map of items. +/// +/// Useful as a part of [`ScoreDebug::fmt`] implementation. +#[must_use = "must eventually call `finish()` on ScoreDebug builders"] +pub struct DebugMap<'a> { + writer: Writer<'a>, + spec: &'a FormatSpec, + result: Result, + has_fields: bool, + has_key: bool, +} + +impl<'a> DebugMap<'a> { + /// Create `DebugMap` instance. + pub fn new(writer: Writer<'a>, spec: &'a FormatSpec) -> Self { + let result = writer.write_str("{", &FormatSpec::new()); + DebugMap { + writer, + spec, + result, + has_fields: false, + has_key: false, + } + } + + /// Adds a new entry to the map output. + pub fn entry(&mut self, key: &dyn ScoreDebug, value: &dyn ScoreDebug) -> &mut Self { + self.key(key).value(value) + } + + /// Adds the key part of a new entry to the map output. + /// + /// This method, together with `value`, is an alternative to `entry` that can be used when the complete entry isn't known upfront. + /// Prefer the `entry` method when it's possible to use. + /// + /// # Panics + /// + /// `key` must be called before `value` and each call to `key` must be followed by a corresponding call to `value`. + /// Otherwise this method will panic. + pub fn key(&mut self, key: &dyn ScoreDebug) -> &mut Self { + self.key_with(|f| key.fmt(f, self.spec)) + } + + /// Adds the key part of a new entry to the map output. + /// + /// This method is equivalent to [`DebugMap::key`], but formats the key using a provided closure rather than by calling [`ScoreDebug::fmt`]. + pub fn key_with(&mut self, key_fmt: F) -> &mut Self + where + F: FnOnce(Writer) -> Result, + { + self.result = self.result.and_then(|_| { + assert!( + !self.has_key, + "attempted to begin a new map entry \ + without completing the previous one" + ); + + let empty_spec = FormatSpec::new(); + if self.has_fields { + self.writer.write_str(", ", &empty_spec)? + } + key_fmt(self.writer)?; + self.writer.write_str(": ", &empty_spec)?; + + self.has_key = true; + Ok(()) + }); + + self + } + + /// Adds the value part of a new entry to the map output. + /// + /// This method, together with `key`, is an alternative to `entry` that can be used when the complete entry isn't known upfront. + /// Prefer the `entry` method when it's possible to use. + /// + /// # Panics + /// + /// `key` must be called before `value` and each call to `key` must be followed by a corresponding call to `value`. + /// Otherwise this method will panic. + pub fn value(&mut self, value: &dyn ScoreDebug) -> &mut Self { + self.value_with(|f| value.fmt(f, self.spec)) + } + + /// Adds the value part of a new entry to the map output. + /// + /// This method is equivalent to [`DebugMap::value`], but formats the value using a provided closure rather than by calling [`ScoreDebug::fmt`]. + pub fn value_with(&mut self, value_fmt: F) -> &mut Self + where + F: FnOnce(Writer) -> Result, + { + self.result = self.result.and_then(|_| { + assert!(self.has_key, "attempted to format a map value before its key"); + value_fmt(self.writer)?; + self.has_key = false; + Ok(()) + }); + + self.has_fields = true; + self + } + + /// Adds the contents of an iterator of entries to the map output. + pub fn entries(&mut self, entries: I) -> &mut Self + where + K: ScoreDebug, + V: ScoreDebug, + I: IntoIterator, + { + for (k, v) in entries { + self.entry(&k, &v); + } + self + } + + /// Marks the map as non-exhaustive, indicating to the reader that there are some other entries that are not shown in the debug representation. + pub fn finish_non_exhaustive(&mut self) -> Result { + self.result = self.result.and_then(|_| { + assert!(!self.has_key, "attempted to finish a map with a partial entry"); + + let empty_spec = FormatSpec::new(); + if self.has_fields { + self.writer.write_str(", ..}", &empty_spec) + } else { + self.writer.write_str("..}", &empty_spec) + } + }); + self.result + } + + /// Finishes output and returns any error encountered. + /// + /// # Panics + /// + /// `key` must be called before `value` and each call to `key` must be followed by a corresponding call to `value`. + /// Otherwise this method will panic. + pub fn finish(&mut self) -> Result { + self.result = self.result.and_then(|_| { + assert!(!self.has_key, "attempted to finish a map with a partial entry"); + let empty_spec = FormatSpec::new(); + self.writer.write_str("}", &empty_spec) + }); + self.result + } +} + +#[cfg(test)] +mod tests { + use crate::builders::{DebugList, DebugMap, DebugSet, DebugStruct, DebugTuple}; + use crate::test_utils::StringWriter; + use crate::FormatSpec; + + #[test] + fn test_struct_finish_non_exhaustive() { + #[derive(Debug)] + struct Point { + x: i32, + y: i32, + } + + let v = Point { x: 123, y: 321 }; + + let mut writer = StringWriter::new(); + let spec = FormatSpec::new(); + let _ = DebugStruct::new(&mut writer, &spec, "Point") + .field("x", &v.x) + .field("y", &v.y) + .finish_non_exhaustive() + .map_err(|_| panic!("failed to finish")); + + assert_eq!(writer.get(), "Point { x: 123, y: 321, .. }"); + } + + #[test] + fn test_struct_finish() { + #[derive(Debug)] + struct Point { + x: i32, + y: i32, + } + + let v = Point { x: 123, y: 321 }; + + let mut writer = StringWriter::new(); + let spec = FormatSpec::new(); + let _ = DebugStruct::new(&mut writer, &spec, "Point") + .field("x", &v.x) + .field("y", &v.y) + .finish() + .map_err(|_| panic!("failed to finish")); + + assert_eq!(writer.get(), format!("{:?}", v)); + } + + #[test] + fn test_struct_empty_finish_non_exhaustive() { + let mut writer = StringWriter::new(); + let spec = FormatSpec::new(); + let _ = DebugStruct::new(&mut writer, &spec, "X") + .finish_non_exhaustive() + .map_err(|_| panic!("failed to finish")); + + assert_eq!(writer.get(), "X { .. }"); + } + + #[test] + fn test_struct_empty_finish() { + #[derive(Debug)] + struct X; + + let v = X; + + let mut writer = StringWriter::new(); + let spec = FormatSpec::new(); + let _ = DebugStruct::new(&mut writer, &spec, "X").finish().map_err(|_| panic!("failed to finish")); + + assert_eq!(writer.get(), format!("{:?}", v)); + } + + #[test] + fn test_tuple_finish_non_exhaustive() { + let v = (123, 456, 789); + + let mut writer = StringWriter::new(); + let spec = FormatSpec::new(); + let _ = DebugTuple::new(&mut writer, &spec, "") + .field(&v.0) + .field(&v.1) + .field(&v.2) + .finish_non_exhaustive() + .map_err(|_| panic!("failed to finish")); + + assert_eq!(writer.get(), "(123, 456, 789, ..)"); + } + + #[test] + fn test_tuple_empty_non_exhaustive() { + let mut writer = StringWriter::new(); + let spec = FormatSpec::new(); + let _ = DebugTuple::new(&mut writer, &spec, "") + .finish_non_exhaustive() + .map_err(|_| panic!("failed to finish")); + + assert_eq!(writer.get(), "(..)"); + } + + #[test] + fn test_tuple_finish() { + let v = (123, 456, 789); + + let mut writer = StringWriter::new(); + let spec = FormatSpec::new(); + let _ = DebugTuple::new(&mut writer, &spec, "") + .field(&v.0) + .field(&v.1) + .field(&v.2) + .finish() + .map_err(|_| panic!("failed to finish")); + + assert_eq!(writer.get(), format!("{:?}", v)); + } + + #[test] + fn test_tuple_empty_finish() { + let mut writer = StringWriter::new(); + let spec = FormatSpec::new(); + let _ = DebugTuple::new(&mut writer, &spec, "").finish().map_err(|_| panic!("failed to finish")); + + assert_eq!(writer.get(), ""); + } + + #[test] + fn test_tuple_single_finish() { + let v = (531,); + + let mut writer = StringWriter::new(); + let spec = FormatSpec::new(); + let _ = DebugTuple::new(&mut writer, &spec, "") + .field(&v.0) + .finish() + .map_err(|_| panic!("failed to finish")); + + assert_eq!(writer.get(), format!("{:?}", v)); + } + + #[test] + fn test_set_finish_non_exhaustive() { + let v = std::collections::BTreeSet::from([123, 456, 789]); + + let mut writer = StringWriter::new(); + let spec = FormatSpec::new(); + let _ = DebugSet::new(&mut writer, &spec) + .entries(v.clone()) + .finish_non_exhaustive() + .map_err(|_| panic!("failed to finish")); + + assert_eq!(writer.get(), "{123, 456, 789, ..}"); + } + + #[test] + fn test_set_empty_finish_non_exhaustive() { + let mut writer = StringWriter::new(); + let spec = FormatSpec::new(); + let _ = DebugSet::new(&mut writer, &spec) + .finish_non_exhaustive() + .map_err(|_| panic!("failed to finish")); + + assert_eq!(writer.get(), "{..}"); + } + + #[test] + fn test_set_finish() { + let v = std::collections::HashSet::from([123, 456, 789]); + + let mut writer = StringWriter::new(); + let spec = FormatSpec::new(); + let _ = DebugSet::new(&mut writer, &spec) + .entries(v.clone()) + .finish() + .map_err(|_| panic!("failed to finish")); + + assert_eq!(writer.get(), format!("{:?}", v)); + } + + #[test] + fn test_set_empty_finish() { + let v = std::collections::HashSet::::new(); + + let mut writer = StringWriter::new(); + let spec = FormatSpec::new(); + let _ = DebugSet::new(&mut writer, &spec) + .entries(v.clone()) + .finish() + .map_err(|_| panic!("failed to finish")); + + assert_eq!(writer.get(), format!("{:?}", v)); + } + + #[test] + fn test_list_finish_non_exhaustive() { + let v = [123, 456, 789]; + + let mut writer = StringWriter::new(); + let spec = FormatSpec::new(); + let _ = DebugList::new(&mut writer, &spec) + .entries(v) + .finish_non_exhaustive() + .map_err(|_| panic!("failed to finish")); + + assert_eq!(writer.get(), "[123, 456, 789, ..]"); + } + + #[test] + fn test_list_empty_finish_non_exhaustive() { + let mut writer = StringWriter::new(); + let spec = FormatSpec::new(); + let _ = DebugList::new(&mut writer, &spec) + .finish_non_exhaustive() + .map_err(|_| panic!("failed to finish")); + + assert_eq!(writer.get(), "[..]"); + } + + #[test] + fn test_list_finish() { + let v = [123, 456, 789]; + + let mut writer = StringWriter::new(); + let spec = FormatSpec::new(); + let _ = DebugList::new(&mut writer, &spec) + .entries(v) + .finish() + .map_err(|_| panic!("failed to finish")); + + assert_eq!(writer.get(), format!("{:?}", v)); + } + + #[test] + fn test_list_empty_finish() { + let v: [i32; 0] = []; + + let mut writer = StringWriter::new(); + let spec = FormatSpec::new(); + let _ = DebugList::new(&mut writer, &spec) + .entries(v) + .finish() + .map_err(|_| panic!("failed to finish")); + + assert_eq!(writer.get(), format!("{:?}", v)); + } + + #[test] + fn test_map_finish_non_exhaustive() { + let v = std::collections::BTreeMap::from([("first", 123), ("second", 456), ("third", 789)]); + + let mut writer = StringWriter::new(); + let spec = FormatSpec::new(); + let _ = DebugMap::new(&mut writer, &spec) + .entries(v.clone()) + .finish_non_exhaustive() + .map_err(|_| panic!("failed to finish")); + + assert_eq!(writer.get(), "{\"first\": 123, \"second\": 456, \"third\": 789, ..}"); + } + + #[test] + fn test_map_empty_finish_non_exhaustive() { + let mut writer = StringWriter::new(); + let spec = FormatSpec::new(); + let _ = DebugMap::new(&mut writer, &spec) + .finish_non_exhaustive() + .map_err(|_| panic!("failed to finish")); + + assert_eq!(writer.get(), "{..}"); + } + + #[test] + fn test_map_empty_finish() { + let v = std::collections::BTreeMap::<&str, i32>::new(); + + let mut writer = StringWriter::new(); + let spec = FormatSpec::new(); + let _ = DebugMap::new(&mut writer, &spec) + .entries(v.clone()) + .finish() + .map_err(|_| panic!("failed to finish")); + + assert_eq!(writer.get(), format!("{:?}", v)); + } +} diff --git a/src/log/mw_log_fmt/fmt.rs b/src/log/mw_log_fmt/fmt.rs new file mode 100644 index 0000000000..60f3a3953d --- /dev/null +++ b/src/log/mw_log_fmt/fmt.rs @@ -0,0 +1,221 @@ +// +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// +// +// SPDX-License-Identifier: Apache-2.0 +// + +use crate::FormatSpec; +use core::marker::PhantomData; +use core::ptr::NonNull; + +/// The type returned by writer methods. +pub type Result = core::result::Result<(), Error>; + +/// The type of the writer. +pub type Writer<'a> = &'a mut dyn ScoreWrite; + +/// The error type which is returned from writing a message. +/// +/// This type does not support transmission of an error other than an error occurred. +/// This is because, despite the existence of this error, writing is considered an infallible operation. +/// `fmt()` implementors should not return this `Error` unless the received it from their [`ScoreWrite`] implementation. +#[derive(Copy, Clone, Default, Eq, Hash, Ord, PartialEq, PartialOrd)] +pub struct Error; + +/// A trait for writing into message frames. +/// +/// This trait accepts multiple data types. +/// Implementation is responsible for output formatting based on provided spec. +pub trait ScoreWrite { + /// Write a `bool` into this writer. + fn write_bool(&mut self, v: &bool, spec: &FormatSpec) -> Result; + /// Write a `f32` into this writer. + fn write_f32(&mut self, v: &f32, spec: &FormatSpec) -> Result; + /// Write a `f64` into this writer. + fn write_f64(&mut self, v: &f64, spec: &FormatSpec) -> Result; + /// Write a `i8` into this writer. + fn write_i8(&mut self, v: &i8, spec: &FormatSpec) -> Result; + /// Write a `i16` into this writer. + fn write_i16(&mut self, v: &i16, spec: &FormatSpec) -> Result; + /// Write a `i32` into this writer. + fn write_i32(&mut self, v: &i32, spec: &FormatSpec) -> Result; + /// Write a `i64` into this writer. + fn write_i64(&mut self, v: &i64, spec: &FormatSpec) -> Result; + /// Write a `u8` into this writer. + fn write_u8(&mut self, v: &u8, spec: &FormatSpec) -> Result; + /// Write a `u16` into this writer. + fn write_u16(&mut self, v: &u16, spec: &FormatSpec) -> Result; + /// Write a `u32` into this writer. + fn write_u32(&mut self, v: &u32, spec: &FormatSpec) -> Result; + /// Write a `u64` into this writer. + fn write_u64(&mut self, v: &u64, spec: &FormatSpec) -> Result; + /// Write a `&str` into this writer. + fn write_str(&mut self, v: &str, spec: &FormatSpec) -> Result; +} + +/// Data placeholder in message. +pub struct Placeholder<'a> { + value: NonNull<()>, + formatter: fn(NonNull<()>, Writer, &FormatSpec) -> Result, + spec: FormatSpec, + _lifetime: PhantomData<&'a ()>, +} + +impl<'a> Placeholder<'a> { + /// Create the placeholder to be represented using `ScoreDebug`. + pub const fn new(value: &'a T, spec: FormatSpec) -> Self { + let value = NonNull::from_ref(value).cast(); + let formatter = |v: NonNull<()>, f: Writer, spec: &FormatSpec| { + // SAFETY: borrow checker will ensure that value won't be mutated for as long as the returned `Self` instance is alive. + let typed = unsafe { v.cast::().as_ref() }; + typed.fmt(f, spec) + }; + Self { + value, + formatter, + spec, + _lifetime: PhantomData, + } + } + + /// Get format spec of this placeholder. + pub fn format_spec(&self) -> &FormatSpec { + &self.spec + } + + /// Write requested representation of data to the provided writer. + pub fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + (self.formatter)(self.value, f, spec) + } +} + +/// Message fragment. +/// A string literal or data placeholder. +pub enum Fragment<'a> { + /// Fragment is a string literal, with no additional formatting. + Literal(&'a str), + /// Fragment is a placeholder for provided data. + Placeholder(Placeholder<'a>), +} + +/// Array of message parts. +/// Consists of [`Fragment`] entities. +#[derive(Copy, Clone)] +pub struct Arguments<'a>(pub &'a [Fragment<'a>]); + +impl ScoreDebug for Arguments<'_> { + fn fmt(&self, f: Writer, _spec: &FormatSpec) -> Result { + write(f, *self) + } +} + +/// `ScoreDebug` provides the output in a programmer-facing, debugging context. +/// Replacement for [`core::fmt::Debug`]. +pub trait ScoreDebug { + /// Write debug representation of `self` to the provided writer. + fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result; +} + +/// Write [`Arguments`] into provided `output` writer. +/// +/// The arguments will be formatted according to provided format spec. +pub fn write(output: Writer, args: Arguments<'_>) -> Result { + for fragment in args.0 { + match fragment { + Fragment::Literal(s) => output.write_str(s, &FormatSpec::new()), + Fragment::Placeholder(ph) => ph.fmt(output, &ph.spec), + }?; + } + + Ok(()) +} + +#[cfg(test)] +mod tests { + use crate::test_utils::StringWriter; + use crate::{write, Arguments, FormatSpec, Fragment, Placeholder, ScoreDebug}; + + #[test] + fn test_arguments_debug() { + let mut w = StringWriter::new(); + let fragments = [ + Fragment::Literal("test_"), + Fragment::Placeholder(Placeholder::new(&true, FormatSpec::new())), + Fragment::Placeholder(Placeholder::new(&123.4f32, FormatSpec::new())), + Fragment::Placeholder(Placeholder::new(&432.2f64, FormatSpec::new())), + Fragment::Placeholder(Placeholder::new(&-100i8, FormatSpec::new())), + Fragment::Placeholder(Placeholder::new(&-1234i16, FormatSpec::new())), + Fragment::Placeholder(Placeholder::new(&-123456i32, FormatSpec::new())), + Fragment::Placeholder(Placeholder::new(&-1200000000000000000i64, FormatSpec::new())), + Fragment::Placeholder(Placeholder::new(&123u8, FormatSpec::new())), + Fragment::Placeholder(Placeholder::new(&1234u16, FormatSpec::new())), + Fragment::Placeholder(Placeholder::new(&123456u32, FormatSpec::new())), + Fragment::Placeholder(Placeholder::new(&1200000000000000000u64, FormatSpec::new())), + Fragment::Literal("_string"), + ]; + let args = Arguments(&fragments); + + let result = ScoreDebug::fmt(&args, &mut w, &FormatSpec::new()); + assert!(result == Ok(())); + assert!(w.get() == "test_true123.4432.2-100-1234-123456-120000000000000000012312341234561200000000000000000_string") + } + + #[test] + fn test_write_empty() { + let mut w = StringWriter::new(); + let args = Arguments(&[]); + assert!(write(&mut w, args) == Ok(())); + } + + #[test] + fn test_write_literals_only() { + let mut w = StringWriter::new(); + let args = Arguments(&[Fragment::Literal("test_"), Fragment::Literal("string")]); + assert!(write(&mut w, args) == Ok(())); + assert!(w.get() == "test_string"); + } + + #[test] + fn test_write_placeholders_only() { + let mut w = StringWriter::new(); + let fragments = [ + Fragment::Placeholder(Placeholder::new(&true, FormatSpec::new())), + Fragment::Placeholder(Placeholder::new(&123.4f32, FormatSpec::new())), + Fragment::Placeholder(Placeholder::new(&432.2f64, FormatSpec::new())), + Fragment::Placeholder(Placeholder::new(&-100i8, FormatSpec::new())), + Fragment::Placeholder(Placeholder::new(&-1234i16, FormatSpec::new())), + Fragment::Placeholder(Placeholder::new(&-123456i32, FormatSpec::new())), + Fragment::Placeholder(Placeholder::new(&-1200000000000000000i64, FormatSpec::new())), + Fragment::Placeholder(Placeholder::new(&123u8, FormatSpec::new())), + Fragment::Placeholder(Placeholder::new(&1234u16, FormatSpec::new())), + Fragment::Placeholder(Placeholder::new(&123456u32, FormatSpec::new())), + Fragment::Placeholder(Placeholder::new(&1200000000000000000u64, FormatSpec::new())), + Fragment::Placeholder(Placeholder::new(&"test", FormatSpec::new())), + ]; + let args = Arguments(&fragments); + assert!(write(&mut w, args) == Ok(())); + + let exp_pattern = "true123.4432.2-100-1234-123456-120000000000000000012312341234561200000000000000000\"test\""; + assert!(w.get() == exp_pattern); + } + + #[test] + fn test_write_mixed() { + let mut w = StringWriter::new(); + let fragments = [ + Fragment::Literal("test_"), + Fragment::Placeholder(Placeholder::new(&123i8, FormatSpec::new())), + Fragment::Literal("_string"), + ]; + let args = Arguments(&fragments); + assert!(write(&mut w, args) == Ok(())); + assert!(w.get() == "test_123_string"); + } +} diff --git a/src/log/mw_log_fmt/fmt_impl.rs b/src/log/mw_log_fmt/fmt_impl.rs new file mode 100644 index 0000000000..169ab89fb3 --- /dev/null +++ b/src/log/mw_log_fmt/fmt_impl.rs @@ -0,0 +1,225 @@ +// +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// +// +// SPDX-License-Identifier: Apache-2.0 +// + +//! `ScoreDebug` implementations for common types. + +use crate::builders::DebugList; +use crate::fmt::{Error, Result, ScoreDebug, Writer}; +use crate::fmt_spec::FormatSpec; + +macro_rules! impl_debug_for_t { + ($t:ty, $fn:ident) => { + impl ScoreDebug for $t { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + f.$fn(self, spec) + } + } + }; +} + +impl_debug_for_t!(bool, write_bool); +impl_debug_for_t!(f32, write_f32); +impl_debug_for_t!(f64, write_f64); +impl_debug_for_t!(i8, write_i8); +impl_debug_for_t!(i16, write_i16); +impl_debug_for_t!(i32, write_i32); +impl_debug_for_t!(i64, write_i64); +impl_debug_for_t!(u8, write_u8); +impl_debug_for_t!(u16, write_u16); +impl_debug_for_t!(u32, write_u32); +impl_debug_for_t!(u64, write_u64); + +impl ScoreDebug for str { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + let empty_spec = FormatSpec::new(); + f.write_str("\"", &empty_spec)?; + f.write_str(self, spec)?; + f.write_str("\"", &empty_spec) + } +} + +impl ScoreDebug for String { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + ScoreDebug::fmt(&self.as_str(), f, spec) + } +} + +macro_rules! impl_debug_for_t_casted { + ($ti:ty, $to:ty, $fn:ident) => { + impl ScoreDebug for $ti { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + let casted = <$to>::try_from(*self).map_err(|_| Error)?; + f.$fn(&casted, spec) + } + } + }; +} + +#[cfg(target_pointer_width = "32")] +impl_debug_for_t_casted!(isize, i32, write_i32); +#[cfg(target_pointer_width = "64")] +impl_debug_for_t_casted!(isize, i64, write_i64); +#[cfg(target_pointer_width = "32")] +impl_debug_for_t_casted!(usize, u32, write_u32); +#[cfg(target_pointer_width = "64")] +impl_debug_for_t_casted!(usize, u64, write_u64); + +impl ScoreDebug for &T { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + ScoreDebug::fmt(&**self, f, spec) + } +} + +impl ScoreDebug for &mut T { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + ScoreDebug::fmt(&**self, f, spec) + } +} + +impl ScoreDebug for [T] { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + let mut debug_list = DebugList::new(f, spec); + debug_list.entries(self.iter()).finish() + } +} + +impl ScoreDebug for [T; N] { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + ScoreDebug::fmt(&&self[..], f, spec) + } +} + +impl ScoreDebug for Vec { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + ScoreDebug::fmt(&**self, f, spec) + } +} + +impl ScoreDebug for std::rc::Rc { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + ScoreDebug::fmt(&**self, f, spec) + } +} + +impl ScoreDebug for std::sync::Arc { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + ScoreDebug::fmt(&**self, f, spec) + } +} + +#[cfg(test)] +mod tests { + use crate::test_utils::common_test_debug; + + #[test] + fn test_bool_debug() { + common_test_debug(true); + } + + #[test] + fn test_f32_debug() { + common_test_debug(123.4f32); + } + + #[test] + fn test_f64_debug() { + common_test_debug(123.4f64); + } + + #[test] + fn test_i8_debug() { + common_test_debug(-123i8); + } + + #[test] + fn test_i16_debug() { + common_test_debug(-1234i16); + } + + #[test] + fn test_i32_debug() { + common_test_debug(-123456i32); + } + + #[test] + fn test_i64_debug() { + common_test_debug(-1200000000000000000i64); + } + + #[test] + fn test_u8_debug() { + common_test_debug(123u8); + } + + #[test] + fn test_u16_debug() { + common_test_debug(1234u16); + } + + #[test] + fn test_u32_debug() { + common_test_debug(123456u32); + } + + #[test] + fn test_u64_debug() { + common_test_debug(1200000000000000000u64); + } + + #[test] + fn test_str_debug() { + common_test_debug("test"); + } + + #[test] + fn test_string_debug() { + common_test_debug(String::from("test")); + } + + #[test] + fn test_isize_debug() { + common_test_debug(-1200000000000000000isize); + } + + #[test] + fn test_usize_debug() { + common_test_debug(1200000000000000000usize); + } + + #[test] + fn test_slice_debug() { + common_test_debug([123, 456, 789].as_slice()); + } + + #[test] + fn test_array_debug() { + common_test_debug([123, 456, 789]); + } + + #[test] + fn test_vec_debug() { + common_test_debug(vec![987, 654, 321, 159]); + } + + #[test] + fn test_rc_debug() { + let rc = std::rc::Rc::new(444); + common_test_debug(rc); + } + + #[test] + fn test_arc_debug() { + let arc = std::sync::Arc::new(654); + common_test_debug(arc); + } +} diff --git a/src/log/mw_log_fmt/fmt_impl_qm.rs b/src/log/mw_log_fmt/fmt_impl_qm.rs new file mode 100644 index 0000000000..3ef12bf3d4 --- /dev/null +++ b/src/log/mw_log_fmt/fmt_impl_qm.rs @@ -0,0 +1,65 @@ +// +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// +// +// SPDX-License-Identifier: Apache-2.0 +// + +//! `ScoreDebug` implementations for types that are not ASIL-B certified. + +use crate::fmt::{Result, ScoreDebug, Writer}; +use crate::fmt_spec::FormatSpec; +use std::path::{Path, PathBuf}; + +// TODO: replace with `core::char::MAX_LEN_UTF8` once stable. +const MAX_LEN_UTF8: usize = 4; + +impl ScoreDebug for Path { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + let enc_bytes = self.as_os_str().as_encoded_bytes(); + let utf8_chunks = enc_bytes.utf8_chunks(); + + for chunk in utf8_chunks { + let valid = chunk.valid(); + // If we successfully decoded the whole chunk as a valid string then + // we can return a direct formatting of the string which will also + // respect various formatting flags if possible. + if chunk.invalid().is_empty() { + return ScoreDebug::fmt(valid, f, spec); + } + + f.write_str(valid, spec)?; + f.write_str(core::char::REPLACEMENT_CHARACTER.encode_utf8(&mut [0; MAX_LEN_UTF8]), spec)?; + } + + Ok(()) + } +} + +impl ScoreDebug for PathBuf { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + ScoreDebug::fmt(self.as_path(), f, spec) + } +} + +#[cfg(test)] +mod tests { + use crate::test_utils::common_test_debug; + use std::path::{Path, PathBuf}; + + #[test] + fn test_path_ref_debug() { + common_test_debug(Path::new("/tmp/test_path")); + } + + #[test] + fn test_pathbuf_debug() { + common_test_debug(PathBuf::from("/tmp/test_path")); + } +} diff --git a/src/log/mw_log_fmt/fmt_spec.rs b/src/log/mw_log_fmt/fmt_spec.rs new file mode 100644 index 0000000000..54beb132c2 --- /dev/null +++ b/src/log/mw_log_fmt/fmt_spec.rs @@ -0,0 +1,378 @@ +// +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// +// +// SPDX-License-Identifier: Apache-2.0 +// + +/// Alignment of written data. +#[derive(Clone, Copy, PartialEq, Eq)] +pub enum Alignment { + /// Align to left (`<`). + Left, + /// Align to right (`>`). + Right, + /// Align to center (`^`). + Center, +} + +/// Add sign character for numeric values. +#[derive(Clone, Copy, PartialEq, Eq)] +pub enum Sign { + /// Always show sign (`+`). + Plus, + /// Unused (`-`). + Minus, +} + +/// Format integer values as hexadecimal for `ScoreDebug` implementations. +#[derive(Clone, Copy, PartialEq, Eq)] +pub enum DebugAsHex { + /// Format integer values to lower hex. + Lower, + /// Format integer values to upper hex. + Upper, +} + +/// Display data in a provided format. +#[derive(Clone, Copy, PartialEq, Eq)] +pub enum DisplayHint { + /// `{}` or `{:}`. + NoHint, + /// `{:?}`. + Debug, + /// `{:o}`. + Octal, + /// `{:x}`. + LowerHex, + /// `{:X}`. + UpperHex, + /// `{:p}`. + Pointer, + /// `{:b}`. + Binary, + /// `{:e}`. + LowerExp, + /// `{:E}`. + UpperExp, +} + +/// Format spec. +/// +/// format_spec := [[fill]align][sign]['#']['0'][width]['.' precision][type] +/// fill := character +/// align := '<' | '^' | '>' +/// sign := '+' | '-' +/// width := count +/// precision := count | '*' +/// type := '?' | 'x?' | 'X?' | 'o' | 'x' | 'X' | 'p' | 'b' | 'e' | 'E' +/// parameter := argument '$' +#[derive(Clone)] +pub struct FormatSpec { + display_hint: DisplayHint, + fill: char, + align: Option, + sign: Option, + alternate: bool, + zero_pad: bool, + debug_as_hex: Option, + width: Option, + precision: Option, +} + +impl FormatSpec { + /// Create format spec with default parameters. + /// + /// - `display_hint`: `DisplayHint::NoHint` + /// - `fill`: `' '` + /// - `align`: `None` + /// - `sign`: `None` + /// - `alternate`: `false` + /// - `zero_pad`: `false` + /// - `debug_as_hex`: `None` + /// - `width`: `None` + /// - `precision`: `None` + pub fn new() -> Self { + Self { + display_hint: DisplayHint::NoHint, + fill: ' ', + align: None, + sign: None, + alternate: false, + zero_pad: false, + debug_as_hex: None, + width: None, + precision: None, + } + } + + /// Create format spec with provided parameters. + #[allow(clippy::too_many_arguments)] + pub fn from_params( + display_hint: DisplayHint, + fill: char, + align: Option, + sign: Option, + alternate: bool, + zero_pad: bool, + debug_as_hex: Option, + width: Option, + precision: Option, + ) -> Self { + Self { + display_hint, + fill, + align, + sign, + alternate, + zero_pad, + debug_as_hex, + width, + precision, + } + } + + /// Set display hint. + pub fn display_hint(&mut self, display_hint: DisplayHint) -> &mut Self { + self.display_hint = display_hint; + self + } + + /// Set fill character. + pub fn fill(&mut self, fill: char) -> &mut Self { + self.fill = fill; + self + } + + /// Set alignment. + pub fn align(&mut self, align: Option) -> &mut Self { + self.align = align; + self + } + + /// Set sign. + pub fn sign(&mut self, sign: Option) -> &mut Self { + self.sign = sign; + self + } + + /// Set alternate formatting mode. + pub fn alternate(&mut self, alternate: bool) -> &mut Self { + self.alternate = alternate; + self + } + + /// Set zero padding mode. + pub fn zero_pad(&mut self, zero_pad: bool) -> &mut Self { + self.zero_pad = zero_pad; + self + } + + /// Set debug as hex mode. + pub fn debug_as_hex(&mut self, debug_as_hex: Option) -> &mut Self { + self.debug_as_hex = debug_as_hex; + self + } + + /// Set width. + pub fn width(&mut self, width: Option) -> &mut Self { + self.width = width; + self + } + + /// Set precision. + pub fn precision(&mut self, precision: Option) -> &mut Self { + self.precision = precision; + self + } + + /// Get display hint. + pub fn get_display_hint(&self) -> DisplayHint { + self.display_hint + } + + /// Get fill character. + pub fn get_fill(&self) -> char { + self.fill + } + + /// Get alignment. + pub fn get_align(&self) -> Option { + self.align + } + + /// Get sign. + pub fn get_sign(&self) -> Option { + self.sign + } + + /// Get alternate mode. + pub fn get_alternate(&self) -> bool { + self.alternate + } + + /// Get zero padding mode. + pub fn get_zero_pad(&self) -> bool { + self.zero_pad + } + + /// Get debug as hex mode. + pub fn get_debug_as_hex(&self) -> Option { + self.debug_as_hex + } + + /// Get width. + pub fn get_width(&self) -> Option { + self.width + } + + /// Get precision. + pub fn get_precision(&self) -> Option { + self.precision + } +} + +impl Default for FormatSpec { + fn default() -> Self { + Self::new() + } +} + +#[cfg(test)] +mod tests { + use super::{Alignment, DebugAsHex, DisplayHint, FormatSpec, Sign}; + + #[test] + fn test_new() { + let format_spec = FormatSpec::new(); + + assert!(format_spec.get_display_hint() == DisplayHint::NoHint); + assert_eq!(format_spec.get_fill(), ' '); + assert!(format_spec.get_align().is_none()); + assert!(format_spec.get_sign().is_none()); + assert!(!format_spec.get_alternate()); + assert!(!format_spec.get_zero_pad()); + assert!(format_spec.get_debug_as_hex().is_none()); + assert!(format_spec.get_width().is_none()); + assert!(format_spec.get_precision().is_none()); + } + + #[test] + fn test_default() { + let spec_default = FormatSpec::default(); + let spec_new = FormatSpec::new(); + + assert!(spec_default.get_display_hint() == spec_new.get_display_hint()); + assert!(spec_default.get_fill() == spec_new.get_fill()); + assert!(spec_default.get_align() == spec_new.get_align()); + assert!(spec_default.get_sign() == spec_new.get_sign()); + assert!(spec_default.get_alternate() == spec_new.get_alternate()); + assert!(spec_default.get_zero_pad() == spec_new.get_zero_pad()); + assert!(spec_default.get_debug_as_hex() == spec_new.get_debug_as_hex()); + assert!(spec_default.get_width() == spec_new.get_width()); + assert!(spec_default.get_precision() == spec_new.get_precision()); + } + + #[test] + fn test_from_params() { + let display_hint = DisplayHint::Binary; + let fill = 'Z'; + let align = Some(Alignment::Right); + let sign = Some(Sign::Plus); + let alternate = true; + let zero_pad = true; + let debug_as_hex = Some(DebugAsHex::Upper); + let width = Some(1234); + let precision = Some(5); + + let format_spec = FormatSpec::from_params(display_hint, fill, align, sign, alternate, zero_pad, debug_as_hex, width, precision); + + assert!(format_spec.get_display_hint() == display_hint); + assert!(format_spec.get_fill() == fill); + assert!(format_spec.get_align() == align); + assert!(format_spec.get_sign() == sign); + assert!(format_spec.get_alternate() == alternate); + assert!(format_spec.get_zero_pad() == zero_pad); + assert!(format_spec.get_debug_as_hex() == debug_as_hex); + assert!(format_spec.get_width() == width); + assert!(format_spec.get_precision() == precision); + } + + #[test] + fn test_display_hint() { + let mut format_spec = FormatSpec::new(); + assert!(format_spec.get_display_hint() == DisplayHint::NoHint); + format_spec.display_hint(DisplayHint::LowerExp); + assert!(format_spec.get_display_hint() == DisplayHint::LowerExp); + } + + #[test] + fn test_fill() { + let mut format_spec = FormatSpec::new(); + assert!(format_spec.get_fill() == ' '); + format_spec.fill('c'); + assert!(format_spec.get_fill() == 'c'); + } + + #[test] + fn test_align() { + let mut format_spec = FormatSpec::new(); + assert!(format_spec.get_align().is_none()); + format_spec.align(Some(Alignment::Center)); + assert!(format_spec.get_align() == Some(Alignment::Center)); + } + + #[test] + fn test_sign() { + let mut format_spec = FormatSpec::new(); + assert!(format_spec.get_sign().is_none()); + format_spec.sign(Some(Sign::Minus)); + assert!(format_spec.get_sign() == Some(Sign::Minus)); + } + + #[test] + fn test_alternate() { + let mut format_spec = FormatSpec::new(); + assert!(!format_spec.get_alternate()); + format_spec.alternate(true); + assert!(format_spec.get_alternate()); + } + + #[test] + fn test_zero_pad() { + let mut format_spec = FormatSpec::new(); + assert!(!format_spec.get_zero_pad()); + format_spec.zero_pad(true); + assert!(format_spec.get_zero_pad()); + } + + #[test] + fn test_debug_as_hex() { + let mut format_spec = FormatSpec::new(); + assert!(format_spec.get_debug_as_hex().is_none()); + format_spec.debug_as_hex(Some(DebugAsHex::Lower)); + assert!(format_spec.get_debug_as_hex() == Some(DebugAsHex::Lower)); + } + + #[test] + fn test_width() { + let mut format_spec = FormatSpec::new(); + assert!(format_spec.get_width().is_none()); + format_spec.width(Some(12345)); + assert!(format_spec.get_width() == Some(12345)); + } + + #[test] + fn test_precision() { + let mut format_spec = FormatSpec::new(); + assert!(format_spec.get_precision().is_none()); + format_spec.precision(Some(54321)); + assert!(format_spec.get_precision() == Some(54321)); + } +} diff --git a/src/log/mw_log_fmt/lib.rs b/src/log/mw_log_fmt/lib.rs new file mode 100644 index 0000000000..be6db5b6eb --- /dev/null +++ b/src/log/mw_log_fmt/lib.rs @@ -0,0 +1,32 @@ +// +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// +// +// SPDX-License-Identifier: Apache-2.0 +// + +//! Implementation of formatting library. +//! Allows creation of message frames that are not exclusively text based. +//! +//! Replacement for [`core::fmt`]. + +mod builders; +mod fmt; +mod fmt_impl; +#[cfg(feature = "qm")] +mod fmt_impl_qm; +mod fmt_spec; +mod macros; + +pub use builders::{DebugList, DebugMap, DebugSet, DebugStruct, DebugTuple}; +pub use fmt::*; +pub use fmt_spec::*; + +#[cfg(test)] +mod test_utils; diff --git a/src/log/mw_log_fmt/macros.rs b/src/log/mw_log_fmt/macros.rs new file mode 100644 index 0000000000..0f324e6286 --- /dev/null +++ b/src/log/mw_log_fmt/macros.rs @@ -0,0 +1,38 @@ +// +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// +// +// SPDX-License-Identifier: Apache-2.0 +// + +/// Writes data using provided writer. +/// +/// This macro accepts a writer, a format string, and a list of arguments. +/// Arguments will be formatted according to the specified format string and the result will be passed to the writer. +#[macro_export] +macro_rules! score_write { + ($dst:expr, $($arg:tt)*) => { + // TODO: `mw_log::__private_api` will become available in future PRs. + $crate::write($dst, mw_log::__private_api::format_args!($($arg)*)) + }; +} + +/// Writes data using provided writer, with a newline appended. +/// +/// For more information, see [`score_write!`]. +#[macro_export] +macro_rules! score_writeln { + ($dst:expr $(,)?) => { + $crate::score_write!($dst, "\n") + }; + ($dst:expr, $($arg:tt)*) => { + // TODO: `mw_log::__private_api` will become available in future PRs. + $crate::write($dst, mw_log::__private_api::format_args_nl!($($arg)*)) + }; +} diff --git a/src/log/mw_log_fmt/test_utils.rs b/src/log/mw_log_fmt/test_utils.rs new file mode 100644 index 0000000000..729777a086 --- /dev/null +++ b/src/log/mw_log_fmt/test_utils.rs @@ -0,0 +1,95 @@ +// +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// +// +// SPDX-License-Identifier: Apache-2.0 +// + +//! Common testing utilities. + +use crate::{Error, FormatSpec, Result, ScoreDebug, ScoreWrite}; +use core::fmt::{Error as CoreFmtError, Write}; + +impl From for Error { + fn from(_value: CoreFmtError) -> Self { + Error + } +} + +pub(crate) struct StringWriter { + buf: String, +} + +impl StringWriter { + pub fn new() -> Self { + Self { buf: String::new() } + } + + pub fn get(&self) -> &str { + self.buf.as_str() + } +} + +impl ScoreWrite for StringWriter { + fn write_bool(&mut self, v: &bool, _spec: &FormatSpec) -> Result { + Ok(write!(self.buf, "{}", v)?) + } + + fn write_f32(&mut self, v: &f32, _spec: &FormatSpec) -> Result { + Ok(write!(self.buf, "{}", v)?) + } + + fn write_f64(&mut self, v: &f64, _spec: &FormatSpec) -> Result { + Ok(write!(self.buf, "{}", v)?) + } + + fn write_i8(&mut self, v: &i8, _spec: &FormatSpec) -> Result { + Ok(write!(self.buf, "{}", v)?) + } + + fn write_i16(&mut self, v: &i16, _spec: &FormatSpec) -> Result { + Ok(write!(self.buf, "{}", v)?) + } + + fn write_i32(&mut self, v: &i32, _spec: &FormatSpec) -> Result { + Ok(write!(self.buf, "{}", v)?) + } + + fn write_i64(&mut self, v: &i64, _spec: &FormatSpec) -> Result { + Ok(write!(self.buf, "{}", v)?) + } + + fn write_u8(&mut self, v: &u8, _spec: &FormatSpec) -> Result { + Ok(write!(self.buf, "{}", v)?) + } + + fn write_u16(&mut self, v: &u16, _spec: &FormatSpec) -> Result { + Ok(write!(self.buf, "{}", v)?) + } + + fn write_u32(&mut self, v: &u32, _spec: &FormatSpec) -> Result { + Ok(write!(self.buf, "{}", v)?) + } + + fn write_u64(&mut self, v: &u64, _spec: &FormatSpec) -> Result { + Ok(write!(self.buf, "{}", v)?) + } + + fn write_str(&mut self, v: &str, _spec: &FormatSpec) -> Result { + Ok(write!(self.buf, "{}", v)?) + } +} + +/// Common test comparing [`ScoreDebug`] with [`core::fmt::Debug`]. +/// This is useful for e.g., checking string primitives. +pub(crate) fn common_test_debug(v: T) { + let mut w = StringWriter::new(); + let _ = ScoreDebug::fmt(&v, &mut w, &FormatSpec::new()); + assert_eq!(w.get(), format!("{v:?}")); +} diff --git a/src/log/src/lib.rs b/src/log/src/lib.rs deleted file mode 100644 index 7d7853513f..0000000000 --- a/src/log/src/lib.rs +++ /dev/null @@ -1,17 +0,0 @@ -// NOTE: this library is a placeholder until actual library is merged. -// Cargo workspace requires any member to be present, otherwise CI/CD won't be able to pass. - -pub fn add(left: u64, right: u64) -> u64 { - left + right -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn it_works() { - let result = add(2, 2); - assert_eq!(result, 4); - } -} From 5120032f2c40aed6ffdd8574806827daf6bb3c77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrian=20Willenb=C3=BCcher?= Date: Fri, 5 Dec 2025 11:30:44 +0100 Subject: [PATCH 13/59] Add fallible construction methods --- src/containers/fixed_capacity/vec.rs | 14 ++++ src/containers/generic/vec.rs | 17 ++++- src/containers/storage/heap.rs | 100 ++++++++------------------- src/containers/storage/inline.rs | 20 ++++++ src/containers/storage/mod.rs | 28 +++++++- 5 files changed, 104 insertions(+), 75 deletions(-) diff --git a/src/containers/fixed_capacity/vec.rs b/src/containers/fixed_capacity/vec.rs index f156705081..d77a9d00ba 100644 --- a/src/containers/fixed_capacity/vec.rs +++ b/src/containers/fixed_capacity/vec.rs @@ -42,6 +42,20 @@ impl FixedCapacityVec { inner: GenericVec::new(capacity as u32), } } + + /// Tries to create an empty vector for up to `capacity` elements, where `capacity <= u32::MAX`. + /// + /// Returns `None` if `capacity > u32::MAX`, or if the memory allocation fails. + #[must_use] + pub fn try_new(capacity: usize) -> Option { + if capacity <= u32::MAX as usize { + Some(Self { + inner: GenericVec::try_new(capacity as u32)?, + }) + } else { + None + } + } } impl Drop for FixedCapacityVec { diff --git a/src/containers/generic/vec.rs b/src/containers/generic/vec.rs index dc4eb5a1ce..a67fe18a8f 100644 --- a/src/containers/generic/vec.rs +++ b/src/containers/generic/vec.rs @@ -27,7 +27,11 @@ pub struct GenericVec> { } impl> GenericVec { - /// Creates an empty vector. + /// Creates an empty vector with the given capacity. + /// + /// # Panics + /// + /// Panics if not enough memory could be allocated. pub fn new(capacity: u32) -> Self { Self { len: 0, @@ -36,6 +40,17 @@ impl> GenericVec { } } + /// Tries to create an empty vector with the given capacity. + /// + /// Returns `None` if not enough memory could be allocated. + pub fn try_new(capacity: u32) -> Option { + Some(Self { + len: 0, + storage: S::try_new(capacity)?, + _marker: PhantomData, + }) + } + /// Extracts a slice containing the entire vector. /// /// Equivalent to `&v[..]`. diff --git a/src/containers/storage/heap.rs b/src/containers/storage/heap.rs index fe50c2d1e2..332c112937 100644 --- a/src/containers/storage/heap.rs +++ b/src/containers/storage/heap.rs @@ -11,9 +11,9 @@ // SPDX-License-Identifier: Apache-2.0 // ******************************************************************************* +use alloc::alloc::Layout; use alloc::alloc::alloc; use alloc::alloc::dealloc; -use alloc::alloc::Layout; use core::marker::PhantomData; use core::mem::MaybeUninit; use core::ptr; @@ -41,29 +41,31 @@ impl Heap { } impl Storage for Heap { + /// Creates a new instance with capacity for exactly the given number of elements. + /// + /// # Panics + /// + /// Panics if the memory allocation failed. fn new(capacity: u32) -> Self { + Self::try_new(capacity).unwrap_or_else(|| panic!("failed to allocate {capacity} elements of {typ}", typ = core::any::type_name::())) + } + + /// Tries to create a new instance with capacity for exactly the given number of elements. + /// + /// Returns `None` if the memory allocation failed. + fn try_new(capacity: u32) -> Option { let storage = if capacity > 0 { - let layout = Self::layout(capacity).unwrap_or_else(|| { - panic!( - "{capacity} elements of {typ} would overflow isize::MAX", - typ = core::any::type_name::(), - ) - }); + let layout = Self::layout(capacity)?; // SAFETY: `layout` has a non-zero size (because `capacity` is > 0) - NonNull::new(unsafe { alloc(layout) }).unwrap_or_else(|| { - panic!( - "failed to allocate {capacity} elements of {typ}", - typ = core::any::type_name::() - ) - }) + NonNull::new(unsafe { alloc(layout) })? } else { NonNull::dangling() }; - Self { + Some(Self { capacity, elements: storage.cast::(), _marker: PhantomData, - } + }) } fn capacity(&self) -> u32 { @@ -145,20 +147,11 @@ mod tests { if capacity > 2 { let partial_slice = unsafe { instance.subslice(1, 2) }; assert_eq!(partial_slice.len(), 1); - assert_eq!( - partial_slice as *const T, - instance.elements.as_ptr().wrapping_add(1) - ); + assert_eq!(partial_slice as *const T, instance.elements.as_ptr().wrapping_add(1)); let end_slice = unsafe { instance.subslice(capacity - 1, capacity) }; assert_eq!(end_slice.len(), 1); - assert_eq!( - end_slice as *const T, - instance - .elements - .as_ptr() - .wrapping_add(capacity as usize - 1) - ); + assert_eq!(end_slice as *const T, instance.elements.as_ptr().wrapping_add(capacity as usize - 1)); } } @@ -185,20 +178,11 @@ mod tests { if capacity >= 2 { let partial_slice = unsafe { instance.subslice_mut(1, 2) }; assert_eq!(partial_slice.len(), 1); - assert_eq!( - partial_slice as *mut T, - instance.elements.as_ptr().wrapping_add(1) - ); + assert_eq!(partial_slice as *mut T, instance.elements.as_ptr().wrapping_add(1)); let end_slice = unsafe { instance.subslice_mut(capacity - 1, capacity) }; assert_eq!(end_slice.len(), 1); - assert_eq!( - end_slice as *mut T, - instance - .elements - .as_ptr() - .wrapping_add(capacity as usize - 1) - ); + assert_eq!(end_slice as *mut T, instance.elements.as_ptr().wrapping_add(capacity as usize - 1)); } } @@ -219,30 +203,15 @@ mod tests { assert_eq!(first_element.as_ptr(), instance.elements.as_ptr()); let last_element = unsafe { instance.element(capacity - 1) }; - assert_eq!( - last_element.as_ptr(), - instance - .elements - .as_ptr() - .wrapping_add(capacity as usize - 1) - ); + assert_eq!(last_element.as_ptr(), instance.elements.as_ptr().wrapping_add(capacity as usize - 1)); } if capacity >= 2 { let second_element = unsafe { instance.element(1) }; - assert_eq!( - second_element.as_ptr(), - instance.elements.as_ptr().wrapping_add(1) - ); + assert_eq!(second_element.as_ptr(), instance.elements.as_ptr().wrapping_add(1)); let last_element = unsafe { instance.element(capacity - 2) }; - assert_eq!( - last_element.as_ptr(), - instance - .elements - .as_ptr() - .wrapping_add(capacity as usize - 2) - ); + assert_eq!(last_element.as_ptr(), instance.elements.as_ptr().wrapping_add(capacity as usize - 2)); } } @@ -263,30 +232,15 @@ mod tests { assert_eq!(first_element.as_ptr(), instance.elements.as_ptr()); let last_element = unsafe { instance.element_mut(capacity - 1) }; - assert_eq!( - last_element.as_ptr(), - instance - .elements - .as_ptr() - .wrapping_add(capacity as usize - 1) - ); + assert_eq!(last_element.as_ptr(), instance.elements.as_ptr().wrapping_add(capacity as usize - 1)); } if capacity >= 2 { let second_element = unsafe { instance.element_mut(1) }; - assert_eq!( - second_element.as_ptr(), - instance.elements.as_ptr().wrapping_add(1) - ); + assert_eq!(second_element.as_ptr(), instance.elements.as_ptr().wrapping_add(1)); let last_element = unsafe { instance.element_mut(capacity - 2) }; - assert_eq!( - last_element.as_ptr(), - instance - .elements - .as_ptr() - .wrapping_add(capacity as usize - 2) - ); + assert_eq!(last_element.as_ptr(), instance.elements.as_ptr().wrapping_add(capacity as usize - 2)); } } diff --git a/src/containers/storage/inline.rs b/src/containers/storage/inline.rs index 7c09ded1d2..b655542616 100644 --- a/src/containers/storage/inline.rs +++ b/src/containers/storage/inline.rs @@ -31,6 +31,11 @@ impl Inline { } impl Storage for Inline { + /// Creates a new instance. + /// + /// # Panics + /// + /// Panics if and only if `capacity != CAPACITY`. fn new(capacity: u32) -> Self { let () = Self::CHECK_CAPACITY; @@ -40,6 +45,21 @@ impl Storage for Inline { } } + /// Tries to create a new instance. + /// + /// Returns `None` if and only if `capacity != CAPACITY`. + fn try_new(capacity: u32) -> Option { + let () = Self::CHECK_CAPACITY; + + if capacity as usize == CAPACITY { + Some(Self { + elements: [const { MaybeUninit::uninit() }; CAPACITY], + }) + } else { + None + } + } + fn capacity(&self) -> u32 { let () = Self::CHECK_CAPACITY; diff --git a/src/containers/storage/mod.rs b/src/containers/storage/mod.rs index aa4e052575..7980861190 100644 --- a/src/containers/storage/mod.rs +++ b/src/containers/storage/mod.rs @@ -20,10 +20,26 @@ pub use self::inline::Inline; use core::mem::MaybeUninit; /// Interface to abstract over element storage kinds. +/// +/// # Panics +/// +/// With the exception of [`new`](Storage::new), the methods in this trait are *not* allowed to panic when `cfg(debug_assertions)` is not enabled. +/// Implementors should use `debug_assert!` to check that preconditions are fulfilled. pub trait Storage { /// Creates a new instance with enough capacity for the given number of elements. + /// + /// # Panics + /// + /// This method is allowed to panic when `capacity` is invalid, or when not enough memory could be allocated. fn new(capacity: u32) -> Self; + /// Tries to create a new instance with enough capacity for the given number of elements. + /// + /// Returns `None` if the allocation failed for any reason. + fn try_new(capacity: u32) -> Option + where + Self: Sized; + /// Returns the allocated capacity. fn capacity(&self) -> u32; @@ -64,7 +80,17 @@ mod test_utils { impl Storage for Vec> { fn new(capacity: u32) -> Self { - (0..capacity).map(|_| MaybeUninit::zeroed()).collect() + Self::try_new(capacity).unwrap_or_else(|| panic!("failed to allocate for {capacity} elements")) + } + + fn try_new(capacity: u32) -> Option + where + Self: Sized, + { + let mut instance = vec![]; + instance.try_reserve_exact(capacity as usize).ok()?; + instance.extend((0..capacity).map(|_| MaybeUninit::zeroed())); + Some(instance) } fn capacity(&self) -> u32 { From 0d7199f4a723a75174ac50fd7c2a1df47fa8ce7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrian=20Willenb=C3=BCcher?= Date: Mon, 8 Dec 2025 11:41:46 +0100 Subject: [PATCH 14/59] Implement inline-storage and fixed-capacity strings --- src/containers/fixed_capacity/mod.rs | 2 + src/containers/fixed_capacity/string.rs | 191 +++++++++++++++++ src/containers/generic/mod.rs | 1 + src/containers/generic/string.rs | 263 ++++++++++++++++++++++++ src/containers/generic/vec.rs | 41 ++++ src/containers/inline/mod.rs | 2 + src/containers/inline/string.rs | 183 +++++++++++++++++ 7 files changed, 683 insertions(+) create mode 100644 src/containers/fixed_capacity/string.rs create mode 100644 src/containers/generic/string.rs create mode 100644 src/containers/inline/string.rs diff --git a/src/containers/fixed_capacity/mod.rs b/src/containers/fixed_capacity/mod.rs index 8d9dd3e0bb..957ca7a2e8 100644 --- a/src/containers/fixed_capacity/mod.rs +++ b/src/containers/fixed_capacity/mod.rs @@ -12,7 +12,9 @@ // ******************************************************************************* mod queue; +mod string; mod vec; pub use self::queue::FixedCapacityQueue; +pub use self::string::FixedCapacityString; pub use self::vec::FixedCapacityVec; diff --git a/src/containers/fixed_capacity/string.rs b/src/containers/fixed_capacity/string.rs new file mode 100644 index 0000000000..ccce602e1e --- /dev/null +++ b/src/containers/fixed_capacity/string.rs @@ -0,0 +1,191 @@ +// ******************************************************************************* +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// https://www.apache.org/licenses/LICENSE-2.0 +// +// SPDX-License-Identifier: Apache-2.0 +// ******************************************************************************* + +use core::fmt; +use core::ops; + +use crate::generic::string::GenericString; +use crate::storage::Heap; + +/// A fixed-capacity Unicode string. +/// +/// Note that the string is encoded as UTF-8, so each character (Unicode codepoint) requires between 1 and 4 bytes of storage. +/// +/// The string can hold between 0 and `CAPACITY` **bytes**, and behaves similarly to Rust's `String`, +/// except that it allocates memory immediately on construction, and can't shrink or grow. +pub struct FixedCapacityString { + inner: GenericString>, +} + +impl FixedCapacityString { + /// Creates an empty string and allocates memory for up to `capacity` bytes, where `capacity <= u32::MAX`. + /// + /// Note that the string is encoded as UTF-8, so each character (Unicode codepoint) requires between 1 and 4 bytes of storage. + /// + /// # Panics + /// + /// - Panics if `capacity > u32::MAX`. + /// - Panics if the memory allocation fails. + #[must_use] + pub fn new(capacity: usize) -> Self { + assert!(capacity <= u32::MAX as usize, "FixedCapacityString can hold at most u32::MAX bytes"); + Self { + inner: GenericString::new(capacity as u32), + } + } + + /// Tries to create an empty string for up to `capacity` bytes, where `capacity <= u32::MAX`. + /// + /// Note that the string is encoded as UTF-8, so each character (Unicode codepoint) requires between 1 and 4 bytes of storage. + /// + /// Returns `None` if `capacity > u32::MAX`, or if the memory allocation fails. + #[must_use] + pub fn try_new(capacity: usize) -> Option { + if capacity <= u32::MAX as usize { + Some(Self { + inner: GenericString::try_new(capacity as u32)?, + }) + } else { + None + } + } +} + +impl Drop for FixedCapacityString { + fn drop(&mut self) { + self.inner.clear(); + } +} + +impl ops::Deref for FixedCapacityString { + type Target = GenericString>; + + fn deref(&self) -> &Self::Target { + &self.inner + } +} + +impl ops::DerefMut for FixedCapacityString { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.inner + } +} + +impl fmt::Display for FixedCapacityString { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + fmt::Display::fmt(self.as_str(), f) + } +} + +impl fmt::Debug for FixedCapacityString { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + fmt::Debug::fmt(self.as_str(), f) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn push_and_pop() { + fn run_test(n: usize) { + let mut string = FixedCapacityString::new(n); + let mut control = String::new(); + + let result = string.pop(); + assert_eq!(result, None); + + let sample = "abcdefghi"; + for ch in sample.chars().take(n) { + let result = string.push(ch); + assert!(result.is_ok()); + control.push(ch); + assert_eq!(string.as_str(), control.as_str()); + } + + let result = string.push('x'); + assert!(result.is_err()); + + for _ in 0..n { + let expected = control.pop().unwrap(); + let actual = string.pop(); + assert_eq!(actual, Some(expected)); + } + + let result = string.pop(); + assert_eq!(result, None); + } + + for i in 0..6 { + run_test(i); + } + } + + #[test] + fn push_str() { + fn run_test(n: usize) { + let mut string = FixedCapacityString::new(n); + let mut control = String::new(); + + let samples = ["abc", "\0", "😉", "👍🏼🚀", "αβγ"]; + for sample in samples { + let should_fit = string.capacity() - string.len() >= sample.len(); + let result = string.push_str(sample); + if should_fit { + assert!(result.is_ok()); + control.push_str(sample); + } else { + assert!(result.is_err()); + } + assert_eq!(string.as_str(), control.as_str()); + assert_eq!(string.len(), control.len()); + assert_eq!(string.is_empty(), string.is_empty()); + assert_eq!(string.is_full(), string.capacity() - string.len() == 0); + } + } + + for i in [0, 1, 5, 20, 30] { + run_test(i); + } + } + + #[test] + fn is_full_and_is_empty() { + fn run_test(n: usize) { + let mut string = FixedCapacityString::new(n); + assert!(string.is_empty()); + + let sample = "abcdefghi"; + for ch in sample.chars().take(n) { + assert!(!string.is_full()); + string.push(ch).unwrap(); + assert!(!string.is_empty()); + } + + assert!(string.is_full()); + + for _ in 0..n { + assert!(!string.is_empty()); + string.pop(); + assert!(!string.is_full()); + } + + assert!(string.is_empty()); + } + + for i in 0..6 { + run_test(i); + } + } +} diff --git a/src/containers/generic/mod.rs b/src/containers/generic/mod.rs index db30d83c70..04392bd369 100644 --- a/src/containers/generic/mod.rs +++ b/src/containers/generic/mod.rs @@ -12,4 +12,5 @@ // ******************************************************************************* pub(crate) mod queue; +pub(crate) mod string; pub(crate) mod vec; diff --git a/src/containers/generic/string.rs b/src/containers/generic/string.rs new file mode 100644 index 0000000000..5304ba0ce4 --- /dev/null +++ b/src/containers/generic/string.rs @@ -0,0 +1,263 @@ +// ******************************************************************************* +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// https://www.apache.org/licenses/LICENSE-2.0 +// +// SPDX-License-Identifier: Apache-2.0 +// ******************************************************************************* + +use core::fmt; +use core::ops; +use core::str; + +use super::vec::GenericVec; +use crate::storage::Storage; + +/// A UTF-8 encoded string which is generic over its storage method. +#[repr(transparent)] +pub struct GenericString> { + /// The UTF-8 encoded characters of the string. + vec: GenericVec, +} + +impl> GenericString { + /// Creates an empty string with the given capacity in bytes. + /// + /// Note that the string is encoded as UTF-8, so each character (Unicode codepoint) requires between 1 and 4 bytes of storage. + /// + /// # Panics + /// + /// Panics if not enough memory could be allocated. + pub fn new(capacity: u32) -> Self { + Self { + vec: GenericVec::new(capacity), + } + } + + /// Tries to create an empty string with the given capacity in bytes. + /// + /// Note that the string is encoded as UTF-8, so each character (Unicode codepoint) requires between 1 and 4 bytes of storage. + /// + /// Returns `None` if not enough memory could be allocated. + pub fn try_new(capacity: u32) -> Option { + Some(Self { + vec: GenericVec::try_new(capacity)?, + }) + } + + pub fn as_bytes(&self) -> &[u8] { + self.vec.as_slice() + } + + /// Extracts a string slice containing the entire string. + /// + /// Equivalent to `&v[..]`. + pub fn as_str(&self) -> &str { + unsafe { str::from_utf8_unchecked(self.vec.as_slice()) } + } + + /// Extracts a mutable string slice of the entire string. + /// + /// Equivalent to `&mut v[..]`. + pub fn as_mut_str(&mut self) -> &mut str { + unsafe { str::from_utf8_unchecked_mut(self.vec.as_mut_slice()) } + } + + /// Returns the maximum length of the string in bytes. + /// + /// Note that the string is encoded as UTF-8, so each character (Unicode codepoint) requires between 1 and 4 bytes of storage. + pub fn capacity(&self) -> usize { + self.vec.capacity() + } + + /// Returns the length of the string in bytes. + /// + /// Note that the string is encoded as UTF-8, so each character (Unicode codepoint) requires between 1 and 4 bytes of storage. + pub fn len(&self) -> usize { + self.vec.len() + } + + /// Returns `true` if and only if the string doesn't contain any characters. + pub fn is_empty(&self) -> bool { + self.vec.is_empty() + } + + /// Returns `true` if and only if the string has reached its capacity. + pub fn is_full(&self) -> bool { + self.vec.is_full() + } + + /// Tries to append the given character to the end of the string. + /// + /// If the string has sufficient spare capacity, the operation succeeds; otherwise, `Err(StringFull)` is returned. + pub fn push(&mut self, ch: char) -> Result<(), StringFull> { + let mut buffer = [0_u8; 4]; + self.push_str(ch.encode_utf8(&mut buffer)) + } + + /// Tries to append the given string slice to the end of the string. + /// + /// If the string has sufficient spare capacity, the operation succeeds; otherwise, `Err(StringFull)` is returned. + pub fn push_str(&mut self, other: &str) -> Result<(), StringFull> { + match self.vec.extend_from_slice(other.as_bytes()) { + Ok(_) => Ok(()), + Err(_) => Err(StringFull), + } + } + + /// Removes the last character from the string and returns it. + /// + /// Returns `None` if the string is empty. + pub fn pop(&mut self) -> Option { + let ch = self.chars().next_back()?; + let new_len = self.len() - ch.len_utf8(); + // SAFETY: + // - This decreases the length of the internal vector, so it doesn't expose any uninitialized bytes. + // - The string was valid UTF-8 before; we've removed exactly one codepoint, so the rest is still valid UTF-8. + unsafe { + self.vec.set_len(new_len); + } + Some(ch) + } + + /// Clears the string, removing all characters. + pub fn clear(&mut self) { + self.vec.clear(); + } +} + +impl> ops::Deref for GenericString { + type Target = str; + + fn deref(&self) -> &Self::Target { + self.as_str() + } +} + +impl> ops::DerefMut for GenericString { + fn deref_mut(&mut self) -> &mut Self::Target { + self.as_mut_str() + } +} + +impl> fmt::Debug for GenericString { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + fmt::Debug::fmt(self.as_str(), f) + } +} + +/// Indicates that an operation failed because the string would exceed its maximum capacity. +#[derive(Clone, Copy, Default, Debug)] +pub struct StringFull; + +impl fmt::Display for StringFull { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "string is full") + } +} + +impl core::error::Error for StringFull {} + +#[cfg(test)] +mod tests { + use std::mem::MaybeUninit; + + use super::*; + + #[test] + fn push_and_pop() { + fn run_test(n: usize) { + let mut string = GenericString::>>::new(n as u32); + let mut control = String::new(); + + let result = string.pop(); + assert_eq!(result, None); + + let sample = "abcdefghi"; + for ch in sample.chars().take(n) { + let result = string.push(ch); + assert!(result.is_ok()); + control.push(ch); + assert_eq!(string.as_str(), control.as_str()); + } + + let result = string.push('x'); + assert!(result.is_err()); + + for _ in 0..n { + let expected = control.pop().unwrap(); + let actual = string.pop(); + assert_eq!(actual, Some(expected)); + } + + let result = string.pop(); + assert_eq!(result, None); + } + + for i in 0..6 { + run_test(i); + } + } + + #[test] + fn push_str() { + fn run_test(n: usize) { + let mut string = GenericString::>>::new(n as u32); + let mut control = String::new(); + + let samples = ["abc", "\0", "😉", "👍🏼🚀", "αβγ"]; + for sample in samples { + let should_fit = string.capacity() - string.len() >= sample.len(); + let result = string.push_str(sample); + if should_fit { + assert!(result.is_ok()); + control.push_str(sample); + } else { + assert!(result.is_err()); + } + assert_eq!(string.as_str(), control.as_str()); + assert_eq!(string.len(), control.len()); + assert_eq!(string.is_empty(), string.is_empty()); + assert_eq!(string.is_full(), string.capacity() - string.len() == 0); + } + } + + for i in [0, 1, 5, 20, 30] { + run_test(i); + } + } + + #[test] + fn is_full_and_is_empty() { + fn run_test(n: usize) { + let mut string = GenericString::>>::new(n as u32); + assert!(string.is_empty()); + + let sample = "abcdefghi"; + for ch in sample.chars().take(n) { + assert!(!string.is_full()); + string.push(ch).unwrap(); + assert!(!string.is_empty()); + } + + assert!(string.is_full()); + + for _ in 0..n { + assert!(!string.is_empty()); + string.pop(); + assert!(!string.is_full()); + } + + assert!(string.is_empty()); + } + + for i in 0..6 { + run_test(i); + } + } +} diff --git a/src/containers/generic/vec.rs b/src/containers/generic/vec.rs index a67fe18a8f..3c21000444 100644 --- a/src/containers/generic/vec.rs +++ b/src/containers/generic/vec.rs @@ -123,6 +123,47 @@ impl> GenericVec { } } } + + /// Manually sets the length of the vector. + /// + /// # Safety + /// + /// - `new_len <= self.capacity()` must hold + /// - if `new_len` is greater than the current length, the elements in the new range must have been initialized + pub(super) unsafe fn set_len(&mut self, new_len: usize) { + debug_assert!(new_len <= self.capacity()); + self.len = new_len as u32; + } +} + +impl> GenericVec { + /// Tries to append a copy of the given slice to the end of the vector. + /// + /// If the vector has sufficient spare capacity, the operation succeeds and a reference to those elements is returned; + /// otherwise, `Err(VectorFull)` is returned. + pub fn extend_from_slice(&mut self, other: &[T]) -> Result<&mut [T], VectorFull> { + let new_len = (self.len as usize).checked_add(other.len()).ok_or(VectorFull)?; + if new_len <= self.capacity() { + let new_len = new_len as u32; // No overflow, because new_len <= capacity <= u32::MAX + // SAFETY: + // - `self.len <= new_len``, because the addition didn't overflow + // - `new_len <= self.capacity()` as per check above + let target = unsafe { self.storage.subslice_mut(self.len, new_len) }; + // SAFETY: + // - `other.as_ptr()` is valid for reads of `other.len()` elements, because it's a valid slice reference + // - `target` is valid for writes of `other.len()` elements, because we got it from `subslice_mut()`, + // and `new_len - self.len == other.len()` + // - the memory regions don't overlap, because `&mut self` precludes `other: &[T]` from overlapping + unsafe { + (target as *mut T).copy_from_nonoverlapping(other.as_ptr(), other.len()); + } + self.len = new_len; + // SAFETY: the memory in the `target` slice has now been initialized + Ok(unsafe { &mut *target }) + } else { + Err(VectorFull) + } + } } impl> ops::Deref for GenericVec { diff --git a/src/containers/inline/mod.rs b/src/containers/inline/mod.rs index c3cabdb596..a70e8b6fad 100644 --- a/src/containers/inline/mod.rs +++ b/src/containers/inline/mod.rs @@ -12,7 +12,9 @@ // ******************************************************************************* mod queue; +mod string; mod vec; pub use self::queue::InlineQueue; +pub use self::string::InlineString; pub use self::vec::InlineVec; diff --git a/src/containers/inline/string.rs b/src/containers/inline/string.rs new file mode 100644 index 0000000000..9d066f0b23 --- /dev/null +++ b/src/containers/inline/string.rs @@ -0,0 +1,183 @@ +// ******************************************************************************* +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// https://www.apache.org/licenses/LICENSE-2.0 +// +// SPDX-License-Identifier: Apache-2.0 +// ******************************************************************************* + +use core::fmt; +use core::ops; + +use crate::generic::string::GenericString; +use crate::storage::Inline; + +/// A fixed-capacity Unicode string with inline storage. +/// +/// Note that the string is encoded as UTF-8, so each character (Unicode codepoint) requires between 1 and 4 bytes of storage. +/// +/// The string can hold between 0 and `CAPACITY` **bytes**, and behaves similarly to Rust's `String`, +/// except that it stores the characters inline and doesn't allocate. +/// `CAPACITY` must be `>= 1` and `<= u32::MAX`. +/// +/// This data structure has a stable, well-defined memory layout and satisfies the requirements for +/// [ABI-compatible types](https://eclipse-score.github.io/score/main/features/communication/abi_compatible_data_types/index.html). +/// Its layout is structurally equivalent to: +/// +/// ```ignore +/// #[repr(C)] +/// struct String { +/// len: u32, +/// bytes: [u8; N], +/// } +/// ``` +#[repr(transparent)] +pub struct InlineString { + inner: GenericString>, +} + +impl InlineString { + const CHECK_CAPACITY: () = assert!(0 < CAPACITY && CAPACITY <= u32::MAX as usize); + + /// Creates an empty string. + pub fn new() -> Self { + let () = Self::CHECK_CAPACITY; + + Self { + inner: GenericString::new(CAPACITY as u32), + } + } +} + +impl Default for InlineString { + fn default() -> Self { + Self::new() + } +} + +impl ops::Deref for InlineString { + type Target = GenericString>; + + fn deref(&self) -> &Self::Target { + &self.inner + } +} + +impl ops::DerefMut for InlineString { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.inner + } +} + +impl fmt::Debug for InlineString { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + fmt::Debug::fmt(self.as_str(), f) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn push_and_pop() { + fn run_test() { + let mut string = InlineString::::new(); + let mut control = String::new(); + + let result = string.pop(); + assert_eq!(result, None); + + let sample = "abcdefghi"; + for ch in sample.chars().take(N) { + let result = string.push(ch); + assert!(result.is_ok()); + control.push(ch); + assert_eq!(string.as_str(), control.as_str()); + } + + let result = string.push('x'); + assert!(result.is_err()); + + for _ in 0..N { + let expected = control.pop().unwrap(); + let actual = string.pop(); + assert_eq!(actual, Some(expected)); + } + + let result = string.pop(); + assert_eq!(result, None); + } + + run_test::<1>(); + run_test::<2>(); + run_test::<3>(); + run_test::<4>(); + run_test::<5>(); + } + + #[test] + fn push_str() { + fn run_test() { + let mut string = InlineString::::new(); + let mut control = String::new(); + + let samples = ["abc", "\0", "😉", "👍🏼🚀", "αβγ"]; + for sample in samples { + let should_fit = string.capacity() - string.len() >= sample.len(); + let result = string.push_str(sample); + if should_fit { + assert!(result.is_ok()); + control.push_str(sample); + } else { + assert!(result.is_err()); + } + assert_eq!(string.as_str(), control.as_str()); + assert_eq!(string.len(), control.len()); + assert_eq!(string.is_empty(), string.is_empty()); + assert_eq!(string.is_full(), string.capacity() - string.len() == 0); + } + } + + run_test::<1>(); + run_test::<5>(); + run_test::<20>(); + run_test::<30>(); + } + + #[test] + fn is_full_and_is_empty() { + fn run_test() { + let mut string = InlineString::::new(); + assert!(string.is_empty()); + + let sample = "abcdefghi"; + for ch in sample.chars().take(N) { + assert!(!string.is_full()); + string.push(ch).unwrap(); + assert!(!string.is_empty()); + } + + assert!(string.is_full()); + + for _ in 0..N { + assert!(!string.is_empty()); + string.pop(); + assert!(!string.is_full()); + } + + assert!(string.is_empty()); + } + + run_test::<1>(); + run_test::<2>(); + run_test::<3>(); + run_test::<4>(); + run_test::<5>(); + } +} From d1da50276b520feb0d1ed330afe314a823a6fc05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrian=20Willenb=C3=BCcher?= Date: Mon, 8 Dec 2025 11:51:31 +0100 Subject: [PATCH 15/59] Use generic InsufficientCapacity error type "InsufficientCapacity" is a more precise description than "VectorFull" or similar error names. --- src/containers/generic/queue.rs | 26 +++++++------------------- src/containers/generic/string.rs | 23 ++++++----------------- src/containers/generic/vec.rs | 27 ++++++++------------------- src/containers/lib.rs | 16 ++++++++++++++++ 4 files changed, 37 insertions(+), 55 deletions(-) diff --git a/src/containers/generic/queue.rs b/src/containers/generic/queue.rs index 7502f38515..cdde8f5e4f 100644 --- a/src/containers/generic/queue.rs +++ b/src/containers/generic/queue.rs @@ -11,12 +11,12 @@ // SPDX-License-Identifier: Apache-2.0 // ******************************************************************************* -use core::fmt; use core::marker::PhantomData; use core::mem::needs_drop; use core::ops::Range; use core::ptr; +use crate::InsufficientCapacity; use crate::storage::Storage; #[repr(C)] @@ -104,8 +104,8 @@ impl> GenericQueue { /// Tries to push an element to the back of the queue. /// /// If the queue has spare capacity, the push succeeds and a reference to that element - /// is returned; otherwise, `Err(QueueFull)` is returned. - pub fn push_back(&mut self, value: T) -> Result<&mut T, QueueFull> { + /// is returned; otherwise, `Err(InsufficientCapacity)` is returned. + pub fn push_back(&mut self, value: T) -> Result<&mut T, InsufficientCapacity> { let capacity = self.storage.capacity(); if self.len < capacity { let write_pos = self.front_index as u64 + self.len as u64; @@ -117,15 +117,15 @@ impl> GenericQueue { self.len += 1; Ok(unsafe { self.storage.element_mut(write_pos).write(value) }) } else { - Err(QueueFull) + Err(InsufficientCapacity) } } /// Tries to push an element to the front of the queue. /// /// If the queue has spare capacity, the push succeeds and a reference to that element - /// is returned; otherwise, `Err(QueueFull)` is returned. - pub fn push_front(&mut self, value: T) -> Result<&mut T, QueueFull> { + /// is returned; otherwise, `Err(InsufficientCapacity)` is returned. + pub fn push_front(&mut self, value: T) -> Result<&mut T, InsufficientCapacity> { let capacity = self.storage.capacity(); if self.len < capacity { let write_pos = if self.front_index > 0 { @@ -138,7 +138,7 @@ impl> GenericQueue { self.front_index = write_pos; Ok(element) } else { - Err(QueueFull) + Err(InsufficientCapacity) } } @@ -207,18 +207,6 @@ impl> GenericQueue { } } -/// Indicates that an operation failed because the queue would exceed its maximum capacity. -#[derive(Clone, Copy, Default, Debug)] -pub struct QueueFull; - -impl fmt::Display for QueueFull { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!(f, "queue is full") - } -} - -impl core::error::Error for QueueFull {} - #[cfg(test)] mod tests { use std::{collections::VecDeque, mem::MaybeUninit}; diff --git a/src/containers/generic/string.rs b/src/containers/generic/string.rs index 5304ba0ce4..f32656e7ac 100644 --- a/src/containers/generic/string.rs +++ b/src/containers/generic/string.rs @@ -16,6 +16,7 @@ use core::ops; use core::str; use super::vec::GenericVec; +use crate::InsufficientCapacity; use crate::storage::Storage; /// A UTF-8 encoded string which is generic over its storage method. @@ -94,19 +95,19 @@ impl> GenericString { /// Tries to append the given character to the end of the string. /// - /// If the string has sufficient spare capacity, the operation succeeds; otherwise, `Err(StringFull)` is returned. - pub fn push(&mut self, ch: char) -> Result<(), StringFull> { + /// If the string has sufficient spare capacity, the operation succeeds; otherwise, `Err(InsufficientCapacity)` is returned. + pub fn push(&mut self, ch: char) -> Result<(), InsufficientCapacity> { let mut buffer = [0_u8; 4]; self.push_str(ch.encode_utf8(&mut buffer)) } /// Tries to append the given string slice to the end of the string. /// - /// If the string has sufficient spare capacity, the operation succeeds; otherwise, `Err(StringFull)` is returned. - pub fn push_str(&mut self, other: &str) -> Result<(), StringFull> { + /// If the string has sufficient spare capacity, the operation succeeds; otherwise, `Err(InsufficientCapacity)` is returned. + pub fn push_str(&mut self, other: &str) -> Result<(), InsufficientCapacity> { match self.vec.extend_from_slice(other.as_bytes()) { Ok(_) => Ok(()), - Err(_) => Err(StringFull), + Err(_) => Err(InsufficientCapacity), } } @@ -151,18 +152,6 @@ impl> fmt::Debug for GenericString { } } -/// Indicates that an operation failed because the string would exceed its maximum capacity. -#[derive(Clone, Copy, Default, Debug)] -pub struct StringFull; - -impl fmt::Display for StringFull { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!(f, "string is full") - } -} - -impl core::error::Error for StringFull {} - #[cfg(test)] mod tests { use std::mem::MaybeUninit; diff --git a/src/containers/generic/vec.rs b/src/containers/generic/vec.rs index 3c21000444..ec9f130041 100644 --- a/src/containers/generic/vec.rs +++ b/src/containers/generic/vec.rs @@ -17,6 +17,7 @@ use core::mem::needs_drop; use core::ops; use core::ptr; +use crate::InsufficientCapacity; use crate::storage::Storage; #[repr(C)] @@ -88,14 +89,14 @@ impl> GenericVec { /// Tries to push an element to the back of the vector. /// /// If the vector has spare capacity, the push succeeds and a reference to that element - /// is returned; otherwise, `Err(VectorFull)` is returned. - pub fn push(&mut self, value: T) -> Result<&mut T, VectorFull> { + /// is returned; otherwise, `Err(InsufficientCapacity)` is returned. + pub fn push(&mut self, value: T) -> Result<&mut T, InsufficientCapacity> { if self.len < self.storage.capacity() { let element = unsafe { self.storage.element_mut(self.len) }.write(value); self.len += 1; Ok(element) } else { - Err(VectorFull) + Err(InsufficientCapacity) } } @@ -140,9 +141,9 @@ impl> GenericVec { /// Tries to append a copy of the given slice to the end of the vector. /// /// If the vector has sufficient spare capacity, the operation succeeds and a reference to those elements is returned; - /// otherwise, `Err(VectorFull)` is returned. - pub fn extend_from_slice(&mut self, other: &[T]) -> Result<&mut [T], VectorFull> { - let new_len = (self.len as usize).checked_add(other.len()).ok_or(VectorFull)?; + /// otherwise, `Err(InsufficientCapacity)` is returned. + pub fn extend_from_slice(&mut self, other: &[T]) -> Result<&mut [T], InsufficientCapacity> { + let new_len = (self.len as usize).checked_add(other.len()).ok_or(InsufficientCapacity)?; if new_len <= self.capacity() { let new_len = new_len as u32; // No overflow, because new_len <= capacity <= u32::MAX // SAFETY: @@ -161,7 +162,7 @@ impl> GenericVec { // SAFETY: the memory in the `target` slice has now been initialized Ok(unsafe { &mut *target }) } else { - Err(VectorFull) + Err(InsufficientCapacity) } } } @@ -186,18 +187,6 @@ impl> fmt::Debug for GenericVec { } } -/// Indicates that an operation failed because the vector would exceed its maximum capacity. -#[derive(Clone, Copy, Default, Debug)] -pub struct VectorFull; - -impl fmt::Display for VectorFull { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!(f, "vector is full") - } -} - -impl core::error::Error for VectorFull {} - #[cfg(test)] mod tests { use std::mem::MaybeUninit; diff --git a/src/containers/lib.rs b/src/containers/lib.rs index 4e106ab0b3..4626585954 100644 --- a/src/containers/lib.rs +++ b/src/containers/lib.rs @@ -19,3 +19,19 @@ pub mod fixed_capacity; pub(crate) mod generic; pub mod inline; pub(crate) mod storage; + +use core::fmt; + +/// Indicates that an operation failed because the container doesn't have enough remaining capacity. +/// +/// Note that this doesn't necessarily mean that the container is full. +#[derive(Clone, Copy, Default, Debug)] +pub struct InsufficientCapacity; + +impl fmt::Display for InsufficientCapacity { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "insufficient capacity for this operation") + } +} + +impl core::error::Error for InsufficientCapacity {} From bca0655342e9387381d999524c52bd8222c7ceee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arkadiusz=20J=C4=99drzejewski?= Date: Fri, 12 Dec 2025 09:28:57 +0000 Subject: [PATCH 16/59] format: align formatting - Align to recent changes to formatting. - Enforce Bazel target for formatting. - Make `rustfmt.toml` unusable with an error messag.e - Make VS Code use Bazel target. --- MODULE.bazel | 4 +-- rustfmt.toml | 12 +++---- src/containers/fixed_capacity/string.rs | 5 ++- src/containers/generic/queue.rs | 2 +- src/containers/generic/string.rs | 2 +- src/containers/generic/vec.rs | 12 ++++--- src/containers/storage/heap.rs | 39 ++++++++++++++++----- src/containers/storage/inline.rs | 45 +++++-------------------- src/log/mw_log_fmt/builders.rs | 18 +++++++--- src/log/mw_log_fmt/fmt.rs | 4 ++- src/log/mw_log_fmt/fmt_impl_qm.rs | 5 ++- src/log/mw_log_fmt/fmt_spec.rs | 12 ++++++- 12 files changed, 91 insertions(+), 69 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index fe4fadd11c..2bf58f7492 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -29,7 +29,7 @@ bazel_dep(name = "platforms", version = "1.0.0") bazel_dep(name = "score_bazel_platforms", version = "0.0.2") bazel_dep(name = "score_docs_as_code", version = "2.0.2") bazel_dep(name = "score_tooling", version = "1.0.4") -bazel_dep(name = "score_rust_policies", version = "0.0.2") +bazel_dep(name = "score_rust_policies", version = "0.0.3") bazel_dep(name = "score_process", version = "1.3.1", dev_dependency = True) bazel_dep(name = "score_platform", version = "0.4.2", dev_dependency = True) # This is main score repo @@ -47,7 +47,7 @@ bazel_dep(name = "score_crates") # Overrides git_override( module_name = "score_tooling", - commit = "f484bc23485b0880d8d86e96b8f25d7650889089", #until 1.0.5 is released + commit = "612d6f180a9bb6338de5f0e6667fcf83068d9c37", #until 1.0.5 is released remote = "https://github.com/eclipse-score/tooling.git", ) diff --git a/rustfmt.toml b/rustfmt.toml index a8cd55ec06..85b6056b21 100644 --- a/rustfmt.toml +++ b/rustfmt.toml @@ -1,8 +1,4 @@ -# rust formatter rules. -# check configuration fields here: https://rust-lang.github.io/rustfmt/?version=v1.6.0&search= - - -match_block_trailing_comma = true -max_width = 150 -tab_spaces = 4 -use_field_init_shorthand = true +# `rustfmt` should not be used with local configuration. +# Use Bazel target for formatting. +# E.g., `bazel run //:format.fix_Rust_with_rustfmt` +DO_NOT_USE_LOCAL_RUSTFMT_TOML = false diff --git a/src/containers/fixed_capacity/string.rs b/src/containers/fixed_capacity/string.rs index ccce602e1e..a52119bbeb 100644 --- a/src/containers/fixed_capacity/string.rs +++ b/src/containers/fixed_capacity/string.rs @@ -38,7 +38,10 @@ impl FixedCapacityString { /// - Panics if the memory allocation fails. #[must_use] pub fn new(capacity: usize) -> Self { - assert!(capacity <= u32::MAX as usize, "FixedCapacityString can hold at most u32::MAX bytes"); + assert!( + capacity <= u32::MAX as usize, + "FixedCapacityString can hold at most u32::MAX bytes" + ); Self { inner: GenericString::new(capacity as u32), } diff --git a/src/containers/generic/queue.rs b/src/containers/generic/queue.rs index cdde8f5e4f..c037d86ba7 100644 --- a/src/containers/generic/queue.rs +++ b/src/containers/generic/queue.rs @@ -16,8 +16,8 @@ use core::mem::needs_drop; use core::ops::Range; use core::ptr; -use crate::InsufficientCapacity; use crate::storage::Storage; +use crate::InsufficientCapacity; #[repr(C)] pub struct GenericQueue> { diff --git a/src/containers/generic/string.rs b/src/containers/generic/string.rs index f32656e7ac..387ccb90d0 100644 --- a/src/containers/generic/string.rs +++ b/src/containers/generic/string.rs @@ -16,8 +16,8 @@ use core::ops; use core::str; use super::vec::GenericVec; -use crate::InsufficientCapacity; use crate::storage::Storage; +use crate::InsufficientCapacity; /// A UTF-8 encoded string which is generic over its storage method. #[repr(transparent)] diff --git a/src/containers/generic/vec.rs b/src/containers/generic/vec.rs index ec9f130041..6da6f50b8b 100644 --- a/src/containers/generic/vec.rs +++ b/src/containers/generic/vec.rs @@ -17,8 +17,8 @@ use core::mem::needs_drop; use core::ops; use core::ptr; -use crate::InsufficientCapacity; use crate::storage::Storage; +use crate::InsufficientCapacity; #[repr(C)] pub struct GenericVec> { @@ -143,12 +143,14 @@ impl> GenericVec { /// If the vector has sufficient spare capacity, the operation succeeds and a reference to those elements is returned; /// otherwise, `Err(InsufficientCapacity)` is returned. pub fn extend_from_slice(&mut self, other: &[T]) -> Result<&mut [T], InsufficientCapacity> { - let new_len = (self.len as usize).checked_add(other.len()).ok_or(InsufficientCapacity)?; + let new_len = (self.len as usize) + .checked_add(other.len()) + .ok_or(InsufficientCapacity)?; if new_len <= self.capacity() { let new_len = new_len as u32; // No overflow, because new_len <= capacity <= u32::MAX - // SAFETY: - // - `self.len <= new_len``, because the addition didn't overflow - // - `new_len <= self.capacity()` as per check above + // SAFETY: + // - `self.len <= new_len``, because the addition didn't overflow + // - `new_len <= self.capacity()` as per check above let target = unsafe { self.storage.subslice_mut(self.len, new_len) }; // SAFETY: // - `other.as_ptr()` is valid for reads of `other.len()` elements, because it's a valid slice reference diff --git a/src/containers/storage/heap.rs b/src/containers/storage/heap.rs index 332c112937..e6acd6795d 100644 --- a/src/containers/storage/heap.rs +++ b/src/containers/storage/heap.rs @@ -11,9 +11,9 @@ // SPDX-License-Identifier: Apache-2.0 // ******************************************************************************* -use alloc::alloc::Layout; use alloc::alloc::alloc; use alloc::alloc::dealloc; +use alloc::alloc::Layout; use core::marker::PhantomData; use core::mem::MaybeUninit; use core::ptr; @@ -47,7 +47,12 @@ impl Storage for Heap { /// /// Panics if the memory allocation failed. fn new(capacity: u32) -> Self { - Self::try_new(capacity).unwrap_or_else(|| panic!("failed to allocate {capacity} elements of {typ}", typ = core::any::type_name::())) + Self::try_new(capacity).unwrap_or_else(|| { + panic!( + "failed to allocate {capacity} elements of {typ}", + typ = core::any::type_name::() + ) + }) } /// Tries to create a new instance with capacity for exactly the given number of elements. @@ -151,7 +156,10 @@ mod tests { let end_slice = unsafe { instance.subslice(capacity - 1, capacity) }; assert_eq!(end_slice.len(), 1); - assert_eq!(end_slice as *const T, instance.elements.as_ptr().wrapping_add(capacity as usize - 1)); + assert_eq!( + end_slice as *const T, + instance.elements.as_ptr().wrapping_add(capacity as usize - 1) + ); } } @@ -182,7 +190,10 @@ mod tests { let end_slice = unsafe { instance.subslice_mut(capacity - 1, capacity) }; assert_eq!(end_slice.len(), 1); - assert_eq!(end_slice as *mut T, instance.elements.as_ptr().wrapping_add(capacity as usize - 1)); + assert_eq!( + end_slice as *mut T, + instance.elements.as_ptr().wrapping_add(capacity as usize - 1) + ); } } @@ -203,7 +214,10 @@ mod tests { assert_eq!(first_element.as_ptr(), instance.elements.as_ptr()); let last_element = unsafe { instance.element(capacity - 1) }; - assert_eq!(last_element.as_ptr(), instance.elements.as_ptr().wrapping_add(capacity as usize - 1)); + assert_eq!( + last_element.as_ptr(), + instance.elements.as_ptr().wrapping_add(capacity as usize - 1) + ); } if capacity >= 2 { @@ -211,7 +225,10 @@ mod tests { assert_eq!(second_element.as_ptr(), instance.elements.as_ptr().wrapping_add(1)); let last_element = unsafe { instance.element(capacity - 2) }; - assert_eq!(last_element.as_ptr(), instance.elements.as_ptr().wrapping_add(capacity as usize - 2)); + assert_eq!( + last_element.as_ptr(), + instance.elements.as_ptr().wrapping_add(capacity as usize - 2) + ); } } @@ -232,7 +249,10 @@ mod tests { assert_eq!(first_element.as_ptr(), instance.elements.as_ptr()); let last_element = unsafe { instance.element_mut(capacity - 1) }; - assert_eq!(last_element.as_ptr(), instance.elements.as_ptr().wrapping_add(capacity as usize - 1)); + assert_eq!( + last_element.as_ptr(), + instance.elements.as_ptr().wrapping_add(capacity as usize - 1) + ); } if capacity >= 2 { @@ -240,7 +260,10 @@ mod tests { assert_eq!(second_element.as_ptr(), instance.elements.as_ptr().wrapping_add(1)); let last_element = unsafe { instance.element_mut(capacity - 2) }; - assert_eq!(last_element.as_ptr(), instance.elements.as_ptr().wrapping_add(capacity as usize - 2)); + assert_eq!( + last_element.as_ptr(), + instance.elements.as_ptr().wrapping_add(capacity as usize - 2) + ); } } diff --git a/src/containers/storage/inline.rs b/src/containers/storage/inline.rs index b655542616..fc65da4664 100644 --- a/src/containers/storage/inline.rs +++ b/src/containers/storage/inline.rs @@ -123,17 +123,11 @@ mod tests { let empty_slice = unsafe { instance.subslice(0, 0) }; assert_eq!(empty_slice.len(), 0); - assert_eq!( - empty_slice as *const T, - instance.elements.as_ptr() as *const T - ); + assert_eq!(empty_slice as *const T, instance.elements.as_ptr() as *const T); let full_slice = unsafe { instance.subslice(0, capacity) }; assert_eq!(full_slice.len(), capacity as usize); - assert_eq!( - full_slice as *const T, - instance.elements.as_ptr() as *const T - ); + assert_eq!(full_slice as *const T, instance.elements.as_ptr() as *const T); if capacity > 2 { let partial_slice = unsafe { instance.subslice(1, 2) }; @@ -147,10 +141,7 @@ mod tests { assert_eq!(end_slice.len(), 1); assert_eq!( end_slice as *const T, - instance - .elements - .as_ptr() - .wrapping_add(capacity as usize - 1) as *const T + instance.elements.as_ptr().wrapping_add(capacity as usize - 1) as *const T ); } } @@ -190,10 +181,7 @@ mod tests { assert_eq!(end_slice.len(), 1); assert_eq!( end_slice as *mut T, - instance - .elements - .as_ptr() - .wrapping_add(capacity as usize - 1) as *mut T + instance.elements.as_ptr().wrapping_add(capacity as usize - 1) as *mut T ); } } @@ -215,18 +203,12 @@ mod tests { if capacity >= 1 { let first_element = unsafe { instance.element(0) }; - assert_eq!( - first_element.as_ptr(), - instance.elements.as_ptr() as *const T - ); + assert_eq!(first_element.as_ptr(), instance.elements.as_ptr() as *const T); let last_element = unsafe { instance.element(capacity - 1) }; assert_eq!( last_element.as_ptr(), - instance - .elements - .as_ptr() - .wrapping_add(capacity as usize - 1) as *const T, + instance.elements.as_ptr().wrapping_add(capacity as usize - 1) as *const T, ); } @@ -240,10 +222,7 @@ mod tests { let last_element = unsafe { instance.element(capacity - 2) }; assert_eq!( last_element.as_ptr(), - instance - .elements - .as_ptr() - .wrapping_add(capacity as usize - 2) as *const T, + instance.elements.as_ptr().wrapping_add(capacity as usize - 2) as *const T, ); } } @@ -270,10 +249,7 @@ mod tests { let last_element = unsafe { instance.element_mut(capacity - 1) }; assert_eq!( last_element.as_ptr(), - instance - .elements - .as_ptr() - .wrapping_add(capacity as usize - 1) as *mut T, + instance.elements.as_ptr().wrapping_add(capacity as usize - 1) as *mut T, ); } @@ -287,10 +263,7 @@ mod tests { let last_element = unsafe { instance.element_mut(capacity - 2) }; assert_eq!( last_element.as_ptr(), - instance - .elements - .as_ptr() - .wrapping_add(capacity as usize - 2) as *mut T, + instance.elements.as_ptr().wrapping_add(capacity as usize - 2) as *mut T, ); } } diff --git a/src/log/mw_log_fmt/builders.rs b/src/log/mw_log_fmt/builders.rs index 66f1bf8f60..04585d76f4 100644 --- a/src/log/mw_log_fmt/builders.rs +++ b/src/log/mw_log_fmt/builders.rs @@ -253,7 +253,10 @@ impl<'a> DebugSet<'a> { /// Finishes output and returns any error encountered. pub fn finish(&mut self) -> Result { - self.inner.result = self.inner.result.and_then(|_| self.inner.writer.write_str("}", &FormatSpec::new())); + self.inner.result = self + .inner + .result + .and_then(|_| self.inner.writer.write_str("}", &FormatSpec::new())); self.inner.result } } @@ -323,7 +326,10 @@ impl<'a> DebugList<'a> { /// Finishes output and returns any error encountered. pub fn finish(&mut self) -> Result { - self.inner.result = self.inner.result.and_then(|_| self.inner.writer.write_str("]", &FormatSpec::new())); + self.inner.result = self + .inner + .result + .and_then(|_| self.inner.writer.write_str("]", &FormatSpec::new())); self.inner.result } } @@ -542,7 +548,9 @@ mod tests { let mut writer = StringWriter::new(); let spec = FormatSpec::new(); - let _ = DebugStruct::new(&mut writer, &spec, "X").finish().map_err(|_| panic!("failed to finish")); + let _ = DebugStruct::new(&mut writer, &spec, "X") + .finish() + .map_err(|_| panic!("failed to finish")); assert_eq!(writer.get(), format!("{:?}", v)); } @@ -594,7 +602,9 @@ mod tests { fn test_tuple_empty_finish() { let mut writer = StringWriter::new(); let spec = FormatSpec::new(); - let _ = DebugTuple::new(&mut writer, &spec, "").finish().map_err(|_| panic!("failed to finish")); + let _ = DebugTuple::new(&mut writer, &spec, "") + .finish() + .map_err(|_| panic!("failed to finish")); assert_eq!(writer.get(), ""); } diff --git a/src/log/mw_log_fmt/fmt.rs b/src/log/mw_log_fmt/fmt.rs index 60f3a3953d..05ff8d0c56 100644 --- a/src/log/mw_log_fmt/fmt.rs +++ b/src/log/mw_log_fmt/fmt.rs @@ -164,7 +164,9 @@ mod tests { let result = ScoreDebug::fmt(&args, &mut w, &FormatSpec::new()); assert!(result == Ok(())); - assert!(w.get() == "test_true123.4432.2-100-1234-123456-120000000000000000012312341234561200000000000000000_string") + assert!( + w.get() == "test_true123.4432.2-100-1234-123456-120000000000000000012312341234561200000000000000000_string" + ) } #[test] diff --git a/src/log/mw_log_fmt/fmt_impl_qm.rs b/src/log/mw_log_fmt/fmt_impl_qm.rs index 3ef12bf3d4..98e459de4c 100644 --- a/src/log/mw_log_fmt/fmt_impl_qm.rs +++ b/src/log/mw_log_fmt/fmt_impl_qm.rs @@ -35,7 +35,10 @@ impl ScoreDebug for Path { } f.write_str(valid, spec)?; - f.write_str(core::char::REPLACEMENT_CHARACTER.encode_utf8(&mut [0; MAX_LEN_UTF8]), spec)?; + f.write_str( + core::char::REPLACEMENT_CHARACTER.encode_utf8(&mut [0; MAX_LEN_UTF8]), + spec, + )?; } Ok(()) diff --git a/src/log/mw_log_fmt/fmt_spec.rs b/src/log/mw_log_fmt/fmt_spec.rs index 54beb132c2..881178ed3c 100644 --- a/src/log/mw_log_fmt/fmt_spec.rs +++ b/src/log/mw_log_fmt/fmt_spec.rs @@ -291,7 +291,17 @@ mod tests { let width = Some(1234); let precision = Some(5); - let format_spec = FormatSpec::from_params(display_hint, fill, align, sign, alternate, zero_pad, debug_as_hex, width, precision); + let format_spec = FormatSpec::from_params( + display_hint, + fill, + align, + sign, + alternate, + zero_pad, + debug_as_hex, + width, + precision, + ); assert!(format_spec.get_display_hint() == display_hint); assert!(format_spec.get_fill() == fill); From 2899e7ced359caad2cde4840e66ee42f712a278f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrian=20Willenb=C3=BCcher?= Date: Tue, 9 Dec 2025 14:23:45 +0100 Subject: [PATCH 17/59] Front and back accessors for queue --- src/containers/fixed_capacity/queue.rs | 43 ++++++++++ src/containers/generic/queue.rs | 112 +++++++++++++++++++++++-- src/containers/inline/queue.rs | 45 ++++++++++ 3 files changed, 191 insertions(+), 9 deletions(-) diff --git a/src/containers/fixed_capacity/queue.rs b/src/containers/fixed_capacity/queue.rs index 85c5aec60d..7310684ac0 100644 --- a/src/containers/fixed_capacity/queue.rs +++ b/src/containers/fixed_capacity/queue.rs @@ -75,6 +75,49 @@ mod tests { elements } + #[test] + fn front_and_back() { + fn check_front_and_back(queue: &mut FixedCapacityQueue, control: &mut VecDeque) { + assert_eq!(queue.front(), control.front()); + assert_eq!(queue.front_mut(), control.front_mut()); + assert_eq!(queue.back(), control.back()); + assert_eq!(queue.back_mut(), control.back_mut()); + } + + fn run_test(n: usize) { + let mut queue = FixedCapacityQueue::::new(n); + let mut control = VecDeque::new(); + + // Completely fill and empty the queue n times, but move the internal start point + // ahead by one each time + for _ in 0..n { + check_front_and_back(&mut queue, &mut control); + + for i in 0..n { + let value = i as i64 * 123 + 456; + queue.push_back(value).unwrap(); + control.push_back(value); + check_front_and_back(&mut queue, &mut control); + } + + for _ in 0..n { + control.pop_front().unwrap(); + queue.pop_front().unwrap(); + check_front_and_back(&mut queue, &mut control); + } + + // One push and one pop to move the internal start point ahead + queue.push_back(987).unwrap(); + queue.pop_front().unwrap(); + check_front_and_back(&mut queue, &mut control); + } + } + + for i in 0..6 { + run_test(i); + } + } + #[test] fn push_back_and_pop_front() { fn run_test(n: usize) { diff --git a/src/containers/generic/queue.rs b/src/containers/generic/queue.rs index c037d86ba7..5aee6fbfd6 100644 --- a/src/containers/generic/queue.rs +++ b/src/containers/generic/queue.rs @@ -23,7 +23,8 @@ use crate::InsufficientCapacity; pub struct GenericQueue> { /// The current number of elements in the queue. len: u32, - /// The index of the next element to be returned by [`pop_front()`](Self::pop_front). + /// The index of the next element to be returned by [`pop_front()`](Self::pop_front); + /// this points to a valid element if and only if `self.len > 0`. front_index: u32, storage: S, _marker: PhantomData, @@ -81,6 +82,46 @@ impl> GenericQueue { (first, second) } + /// Returns a reference to the front of the queue (the element which would be returned by [`pop_front()`](Self::pop_front)), + /// or None if the queue is empty. + pub fn front(&self) -> Option<&T> { + if self.len > 0 { + // SAFETY: self.len > 0, therefore self.front_index points to a valid (initialized) slot in the storage + Some(unsafe { self.storage.element(self.front_index).assume_init_ref() }) + } else { + None + } + } + + /// Returns a mutable reference to the front of the queue (the element which would be returned by [`pop_front()`](Self::pop_front)), + /// or None if the queue is empty. + pub fn front_mut(&mut self) -> Option<&mut T> { + if self.len > 0 { + // SAFETY: self.len > 0, therefore self.front_index points to a valid (initialized) slot in the storage + Some(unsafe { self.storage.element_mut(self.front_index).assume_init_mut() }) + } else { + None + } + } + + /// Returns a reference to the back of the queue (the element which would be returned by [`pop_back()`](Self::pop_back)), + /// or None if the queue is empty. + pub fn back(&self) -> Option<&T> { + self.back_index().map(|back_index| { + // SAFETY: self.back_index() returned Some(), therefore back_index points to a valid (initialized) slot in the storage + unsafe { self.storage.element(back_index).assume_init_ref() } + }) + } + + /// Returns a mutable reference to the back of the queue (the element which would be returned by [`pop_back()`](Self::pop_back)), + /// or None if the queue is empty. + pub fn back_mut(&mut self) -> Option<&mut T> { + self.back_index().map(|back_index| { + // SAFETY: self.back_index() returned Some(), therefore back_index points to a valid (initialized) slot in the storage + unsafe { self.storage.element_mut(back_index).assume_init_mut() } + }) + } + /// Returns the maximum number of elements the queue can hold. pub fn capacity(&self) -> usize { self.storage.capacity() as usize @@ -164,14 +205,7 @@ impl> GenericQueue { /// /// If the queue has at least one element, the pop succeeds; otherwise, `None` is returned. pub fn pop_back(&mut self) -> Option { - let capacity = self.storage.capacity(); - if self.len > 0 { - let read_pos = self.front_index as u64 + (self.len as u64 - 1); - let read_pos = if read_pos < capacity as u64 { - read_pos as u32 - } else { - (read_pos - capacity as u64) as u32 - }; + if let Some(read_pos) = self.back_index() { self.len -= 1; Some(unsafe { self.storage.element(read_pos).assume_init_read() }) } else { @@ -193,6 +227,7 @@ impl> GenericQueue { } } + /// Computes the bounds of the two slices containing the queue's contents, in order. fn slice_ranges(&self) -> (Range, Range) { // Cast to u64 to avoid overflow let end = self.front_index as u64 + self.len as u64; @@ -205,6 +240,22 @@ impl> GenericQueue { (self.front_index..end, end..end) } } + + /// Returns the index of the last element (the one which would be returned by [`pop_back()`](Self::pop_back)), + /// or `None` if the queue is empty. + fn back_index(&self) -> Option { + if self.len > 0 { + let capacity = self.storage.capacity() as u64; + let read_pos = self.front_index as u64 + (self.len as u64 - 1); + if read_pos < capacity { + Some(read_pos as u32) + } else { + Some((read_pos - capacity) as u32) + } + } else { + None + } + } } #[cfg(test)] @@ -219,6 +270,49 @@ mod tests { elements } + #[test] + fn front_and_back() { + fn check_front_and_back(queue: &mut GenericQueue>>, control: &mut VecDeque) { + assert_eq!(queue.front(), control.front()); + assert_eq!(queue.front_mut(), control.front_mut()); + assert_eq!(queue.back(), control.back()); + assert_eq!(queue.back_mut(), control.back_mut()); + } + + fn run_test(n: usize) { + let mut queue = GenericQueue::>>::new(n as u32); + let mut control = VecDeque::new(); + + // Completely fill and empty the queue n times, but move the internal start point + // ahead by one each time + for _ in 0..n { + check_front_and_back(&mut queue, &mut control); + + for i in 0..n { + let value = i as i64 * 123 + 456; + queue.push_back(value).unwrap(); + control.push_back(value); + check_front_and_back(&mut queue, &mut control); + } + + for _ in 0..n { + control.pop_front().unwrap(); + queue.pop_front().unwrap(); + check_front_and_back(&mut queue, &mut control); + } + + // One push and one pop to move the internal start point ahead + queue.push_back(987).unwrap(); + queue.pop_front().unwrap(); + check_front_and_back(&mut queue, &mut control); + } + } + + for i in 0..6 { + run_test(i); + } + } + #[test] fn push_back_and_pop_front() { fn run_test(n: usize) { diff --git a/src/containers/inline/queue.rs b/src/containers/inline/queue.rs index d8e03de958..43f2bcaebf 100644 --- a/src/containers/inline/queue.rs +++ b/src/containers/inline/queue.rs @@ -85,6 +85,51 @@ mod tests { elements } + #[test] + fn front_and_back() { + fn check_front_and_back(queue: &mut InlineQueue, control: &mut VecDeque) { + assert_eq!(queue.front(), control.front()); + assert_eq!(queue.front_mut(), control.front_mut()); + assert_eq!(queue.back(), control.back()); + assert_eq!(queue.back_mut(), control.back_mut()); + } + + fn run_test() { + let mut queue = InlineQueue::::new(); + let mut control = VecDeque::new(); + + // Completely fill and empty the queue n times, but move the internal start point + // ahead by one each time + for _ in 0..N { + check_front_and_back(&mut queue, &mut control); + + for i in 0..N { + let value = i as i64 * 123 + 456; + queue.push_back(value).unwrap(); + control.push_back(value); + check_front_and_back(&mut queue, &mut control); + } + + for _ in 0..N { + control.pop_front().unwrap(); + queue.pop_front().unwrap(); + check_front_and_back(&mut queue, &mut control); + } + + // One push and one pop to move the internal start point ahead + queue.push_back(987).unwrap(); + queue.pop_front().unwrap(); + check_front_and_back(&mut queue, &mut control); + } + } + + run_test::<1>(); + run_test::<2>(); + run_test::<3>(); + run_test::<4>(); + run_test::<5>(); + } + #[test] fn push_back_and_pop_front() { fn run_test() { From 0417674a0cd4e8dd35042eebdbb5c1da2d9a8ebd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrian=20Willenb=C3=BCcher?= Date: Tue, 9 Dec 2025 16:55:31 +0100 Subject: [PATCH 18/59] Iterators for queue --- src/containers/BUILD | 2 +- src/containers/Cargo.toml | 2 +- src/containers/generic/queue.rs | 176 ++++++++++++++++++++++++++++++++ src/containers/generic/vec.rs | 9 +- src/containers/storage/mod.rs | 15 ++- 5 files changed, 196 insertions(+), 8 deletions(-) diff --git a/src/containers/BUILD b/src/containers/BUILD index 17b83c5579..40d30abe54 100644 --- a/src/containers/BUILD +++ b/src/containers/BUILD @@ -16,7 +16,7 @@ load("@rules_rust//rust:defs.bzl", "rust_library", "rust_test") rust_library( name = "containers", srcs = glob(["**/*.rs"]), - edition = "2024", + edition = "2021", visibility = ["//visibility:public"], ) diff --git a/src/containers/Cargo.toml b/src/containers/Cargo.toml index 88bab7ab35..d57d11928a 100644 --- a/src/containers/Cargo.toml +++ b/src/containers/Cargo.toml @@ -16,7 +16,7 @@ name = "containers" description = "Fixed-capacity and inline-storage containers" version = "0.1.0" authors = ["Contributors to the Eclipse Foundation"] -edition = "2024" +edition = "2021" license-file = "../../LICENSE.md" [lib] diff --git a/src/containers/generic/queue.rs b/src/containers/generic/queue.rs index 5aee6fbfd6..c3501e6a32 100644 --- a/src/containers/generic/queue.rs +++ b/src/containers/generic/queue.rs @@ -11,10 +11,12 @@ // SPDX-License-Identifier: Apache-2.0 // ******************************************************************************* +use core::iter::FusedIterator; use core::marker::PhantomData; use core::mem::needs_drop; use core::ops::Range; use core::ptr; +use core::slice; use crate::storage::Storage; use crate::InsufficientCapacity; @@ -122,6 +124,24 @@ impl> GenericQueue { }) } + /// Returns a front-to-back iterator over the elements. + pub fn iter(&self) -> Iter<'_, T> { + let (first, second) = self.as_slices(); + Iter { + first: first.iter(), + second: second.iter(), + } + } + + /// Returns a front-to-back iterator over the mutable elements. + pub fn iter_mut(&mut self) -> IterMut<'_, T> { + let (first, second) = self.as_mut_slices(); + IterMut { + first: first.iter_mut(), + second: second.iter_mut(), + } + } + /// Returns the maximum number of elements the queue can hold. pub fn capacity(&self) -> usize { self.storage.capacity() as usize @@ -258,6 +278,108 @@ impl> GenericQueue { } } +pub struct Iter<'a, T> { + first: slice::Iter<'a, T>, + second: slice::Iter<'a, T>, +} + +// Manually implement Clone, because auto-derive would limit it to T: Clone +impl Clone for Iter<'_, T> { + fn clone(&self) -> Self { + Self { + first: self.first.clone(), + second: self.second.clone(), + } + } +} + +impl<'a, T> Iterator for Iter<'a, T> { + type Item = &'a T; + + fn next(&mut self) -> Option { + self.first.next().or_else(|| { + // When one slice iterator is done, swap them and continue with the other iterator. + // This works repeatedly, because slice::Iter is fused. + core::mem::swap(&mut self.first, &mut self.second); + self.first.next() + }) + } + + fn last(mut self) -> Option { + self.next_back() + } + + fn size_hint(&self) -> (usize, Option) { + let len = self.len(); + (len, Some(len)) + } +} + +impl<'a, T> DoubleEndedIterator for Iter<'a, T> { + fn next_back(&mut self) -> Option { + self.second.next_back().or_else(|| { + // When one slice iterator is done, swap them and continue with the other iterator. + // This works repeatedly, because slice::Iter is fused. + core::mem::swap(&mut self.first, &mut self.second); + self.second.next_back() + }) + } +} + +impl<'a, T> ExactSizeIterator for Iter<'a, T> { + fn len(&self) -> usize { + self.first.len() + self.second.len() + } +} + +impl FusedIterator for Iter<'_, T> {} + +pub struct IterMut<'a, T> { + first: slice::IterMut<'a, T>, + second: slice::IterMut<'a, T>, +} + +impl<'a, T> Iterator for IterMut<'a, T> { + type Item = &'a mut T; + + fn next(&mut self) -> Option { + self.first.next().or_else(|| { + // When one slice iterator is done, swap them and continue with the other iterator. + // This works repeatedly, because slice::IterMut is fused. + core::mem::swap(&mut self.first, &mut self.second); + self.first.next() + }) + } + + fn last(mut self) -> Option { + self.next_back() + } + + fn size_hint(&self) -> (usize, Option) { + let len = self.len(); + (len, Some(len)) + } +} + +impl<'a, T> DoubleEndedIterator for IterMut<'a, T> { + fn next_back(&mut self) -> Option { + self.second.next_back().or_else(|| { + // When one slice iterator is done, swap them and continue with the other iterator. + // This works repeatedly, because slice::IterMut is fused. + core::mem::swap(&mut self.first, &mut self.second); + self.second.next_back() + }) + } +} + +impl<'a, T> ExactSizeIterator for IterMut<'a, T> { + fn len(&self) -> usize { + self.first.len() + self.second.len() + } +} + +impl FusedIterator for IterMut<'_, T> {} + #[cfg(test)] mod tests { use std::{collections::VecDeque, mem::MaybeUninit}; @@ -313,6 +435,60 @@ mod tests { } } + #[test] + fn iter() { + fn check_iter(queue: &mut GenericQueue>>, control: &mut VecDeque) { + // Test the Iterator::next() implementation: + assert_eq!(queue.iter().collect::>(), control.iter().collect::>()); + assert_eq!( + queue.iter_mut().collect::>(), + control.iter_mut().collect::>(), + ); + // Test the DoubleEndedIterator::next_back() implementation: + assert_eq!( + queue.iter().rev().collect::>(), + control.iter().rev().collect::>(), + ); + assert_eq!( + queue.iter_mut().rev().collect::>(), + control.iter_mut().rev().collect::>(), + ); + } + + fn run_test(n: usize) { + let mut queue = GenericQueue::>>::new(n as u32); + let mut control = VecDeque::new(); + + // Completely fill and empty the queue n times, but move the internal start point + // ahead by one each time + for _ in 0..n { + check_iter(&mut queue, &mut control); + + for i in 0..n { + let value = i as i64 * 123 + 456; + queue.push_back(value).unwrap(); + control.push_back(value); + check_iter(&mut queue, &mut control); + } + + for _ in 0..n { + control.pop_front().unwrap(); + queue.pop_front().unwrap(); + check_iter(&mut queue, &mut control); + } + + // One push and one pop to move the internal start point ahead + queue.push_back(987).unwrap(); + queue.pop_front().unwrap(); + check_iter(&mut queue, &mut control); + } + } + + for i in 0..6 { + run_test(i); + } + } + #[test] fn push_back_and_pop_front() { fn run_test(n: usize) { diff --git a/src/containers/generic/vec.rs b/src/containers/generic/vec.rs index 6da6f50b8b..ecc06cc9e6 100644 --- a/src/containers/generic/vec.rs +++ b/src/containers/generic/vec.rs @@ -147,10 +147,11 @@ impl> GenericVec { .checked_add(other.len()) .ok_or(InsufficientCapacity)?; if new_len <= self.capacity() { - let new_len = new_len as u32; // No overflow, because new_len <= capacity <= u32::MAX - // SAFETY: - // - `self.len <= new_len``, because the addition didn't overflow - // - `new_len <= self.capacity()` as per check above + // No overflow, because new_len <= capacity <= u32::MAX + let new_len = new_len as u32; + // SAFETY: + // - `self.len <= new_len``, because the addition didn't overflow + // - `new_len <= self.capacity()` as per check above let target = unsafe { self.storage.subslice_mut(self.len, new_len) }; // SAFETY: // - `other.as_ptr()` is valid for reads of `other.len()` elements, because it's a valid slice reference diff --git a/src/containers/storage/mod.rs b/src/containers/storage/mod.rs index 7980861190..4d284de25f 100644 --- a/src/containers/storage/mod.rs +++ b/src/containers/storage/mod.rs @@ -77,6 +77,7 @@ mod test_utils { //! A simple impl of [`Storage`] for [`Vec`], to be used for tests of generic containers. use super::*; + use core::ptr; impl Storage for Vec> { fn new(capacity: u32) -> Self { @@ -106,11 +107,21 @@ mod test_utils { } unsafe fn subslice(&self, start: u32, end: u32) -> *const [T] { - &self[start as usize..end as usize] as *const [MaybeUninit] as *const [T] + debug_assert!(start <= end); + debug_assert!(end <= Storage::capacity(self)); + // SAFETY: `start` is in-bounds of the array, as per the pre-condition on the trait method. + let ptr = unsafe { self.as_ptr().add(start as usize).cast() }; + let len = end - start; + ptr::slice_from_raw_parts(ptr, len as usize) } unsafe fn subslice_mut(&mut self, start: u32, end: u32) -> *mut [T] { - &mut self[start as usize..end as usize] as *mut [MaybeUninit] as *mut [T] + debug_assert!(start <= end); + debug_assert!(end <= Storage::capacity(self)); + // SAFETY: `start` is in-bounds of the array, as per the pre-condition on the trait method. + let ptr = unsafe { self.as_mut_ptr().add(start as usize).cast() }; + let len = end - start; + ptr::slice_from_raw_parts_mut(ptr, len as usize) } } } From f0a53defaf658496652d55c20565b0b295c9ece2 Mon Sep 17 00:00:00 2001 From: Pawel Rutka Date: Thu, 18 Dec 2025 09:37:15 +0100 Subject: [PATCH 19/59] infra: align toolchains usage, deps and enable QNX8 CI --- .github/workflows/build_qnx8.yml | 34 ++++++++++++++++++++++++++++++ MODULE.bazel | 36 +++++++------------------------- 2 files changed, 41 insertions(+), 29 deletions(-) create mode 100644 .github/workflows/build_qnx8.yml diff --git a/.github/workflows/build_qnx8.yml b/.github/workflows/build_qnx8.yml new file mode 100644 index 0000000000..fbadd948a1 --- /dev/null +++ b/.github/workflows/build_qnx8.yml @@ -0,0 +1,34 @@ +# ******************************************************************************* +# Copyright (c) 2025 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* + +name: QNX8 Build +on: + pull_request_target: + types: [opened, reopened, synchronize] + merge_group: + types: [checks_requested] +jobs: + qnx-build: + uses: eclipse-score/cicd-workflows/.github/workflows/qnx-build.yml@main + permissions: + contents: read + pull-requests: read + with: + bazel-target: '//src/...' + bazel-config: 'build_qnx8' + credential-helper: 'scripts/internal/qnx_creds.py' + environment-name: 'workflow-approval' + secrets: + score-qnx-license: ${{ secrets.SCORE_QNX_LICENSE }} + score-qnx-user: ${{ secrets.SCORE_QNX_USER }} + score-qnx-password: ${{ secrets.SCORE_QNX_PASSWORD }} diff --git a/MODULE.bazel b/MODULE.bazel index 2bf58f7492..2b7eadaf0e 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -26,23 +26,23 @@ bazel_dep(name = "buildifier_prebuilt", version = "7.3.1") bazel_dep(name = "platforms", version = "1.0.0") # S-CORE process rules -bazel_dep(name = "score_bazel_platforms", version = "0.0.2") +bazel_dep(name = "score_bazel_platforms", version = "0.0.3") bazel_dep(name = "score_docs_as_code", version = "2.0.2") bazel_dep(name = "score_tooling", version = "1.0.4") bazel_dep(name = "score_rust_policies", version = "0.0.3") -bazel_dep(name = "score_process", version = "1.3.1", dev_dependency = True) -bazel_dep(name = "score_platform", version = "0.4.2", dev_dependency = True) # This is main score repo +bazel_dep(name = "score_process", version = "1.4.0", dev_dependency = True) +bazel_dep(name = "score_platform", version = "0.5.1", dev_dependency = True) # This is main score repo bazel_dep(name = "score_virtualization", version = "0.0.1", dev_dependency = True) # Toolchains and extensions -bazel_dep(name = "score_toolchains_gcc", version = "0.4", dev_dependency = True) -bazel_dep(name = "score_toolchains_qnx", version = "0.0.2", dev_dependency = True) +bazel_dep(name = "score_toolchains_gcc", version = "0.5", dev_dependency = True) +bazel_dep(name = "score_toolchains_qnx", version = "0.0.6", dev_dependency = True) bazel_dep(name = "rust_qnx8_toolchain", version = "1.2.0", dev_dependency = True) bazel_dep(name = "score_toolchains_rust", version = "0.1.1", dev_dependency = True) # S-CORE crates -bazel_dep(name = "score_crates") +bazel_dep(name = "score_crates", version = "0.0.6") # Overrides git_override( @@ -53,7 +53,7 @@ git_override( git_override( module_name = "score_toolchains_rust", - commit = "6651945b4ba8e7c342d9740e9cb2d37842f56261", + commit = "bcf8e5364f72cf136ec81960350a82e2b5c45449", remote = "https://github.com/eclipse-score/toolchains_rust.git", ) @@ -63,14 +63,6 @@ git_override( remote = "https://github.com/qorix-group/score_virtualization.git", ) -git_override( - module_name = "score_crates", - # TODO: 'commit' and 'remote' must be updated once required changes are merged. - # https://github.com/eclipse-score/score-crates/pull/16 - commit = "f0bf4bdf98d8a8ad548256ab24dc08f9ba8f04aa", - remote = "https://github.com/qorix-group/score-crates.git", -) - archive_override( module_name = "rust_qnx8_toolchain", strip_prefix = "qnx8", @@ -108,17 +100,3 @@ use_repo(python) use_repo(toolchains_qnx, "toolchains_qnx_sdp") use_repo(toolchains_qnx, "toolchains_qnx_qcc") use_repo(toolchains_qnx, "toolchains_qnx_ifs") - -# Registers the custom Rust toolchain wired to @qnx_rust -register_toolchains( - "@toolchains_qnx_qcc//:qcc_aarch64", - "@score_toolchains_rust//toolchains/aarch64-unknown-qnx8_0:toolchain_aarch64_qnx8_0", - "@score_toolchains_rust//toolchains/x86_64-unknown-linux-gnu:toolchain_x86_64_linux", - dev_dependency = True, -) - -register_toolchains( - "@toolchains_qnx_ifs//:ifs_x86_64", - "@toolchains_qnx_ifs//:ifs_aarch64", - dev_dependency = True, -) From 517f9343e26dee0c6b82764376644c2837e87510 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrian=20Willenb=C3=BCcher?= Date: Wed, 17 Dec 2025 12:39:14 +0100 Subject: [PATCH 20/59] ABI-compatible Option and Result --- src/containers/inline/mod.rs | 4 + src/containers/inline/option.rs | 280 ++++++++++++++++++++++++++++++ src/containers/inline/result.rs | 297 ++++++++++++++++++++++++++++++++ 3 files changed, 581 insertions(+) create mode 100644 src/containers/inline/option.rs create mode 100644 src/containers/inline/result.rs diff --git a/src/containers/inline/mod.rs b/src/containers/inline/mod.rs index a70e8b6fad..46bea584f7 100644 --- a/src/containers/inline/mod.rs +++ b/src/containers/inline/mod.rs @@ -11,10 +11,14 @@ // SPDX-License-Identifier: Apache-2.0 // ******************************************************************************* +mod option; mod queue; +mod result; mod string; mod vec; +pub use self::option::InlineOption; pub use self::queue::InlineQueue; +pub use self::result::InlineResult; pub use self::string::InlineString; pub use self::vec::InlineVec; diff --git a/src/containers/inline/option.rs b/src/containers/inline/option.rs new file mode 100644 index 0000000000..4b6ac3f335 --- /dev/null +++ b/src/containers/inline/option.rs @@ -0,0 +1,280 @@ +// ******************************************************************************* +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// https://www.apache.org/licenses/LICENSE-2.0 +// +// SPDX-License-Identifier: Apache-2.0 +// ******************************************************************************* + +use core::cmp; +use core::fmt; +use core::mem::MaybeUninit; + +/// An optional value, similar to [`Option`] in the Rust standard library. +/// +/// This data structure has a stable, well-defined memory layout and satisfies the requirements for +/// [ABI-compatible types](https://eclipse-score.github.io/score/main/features/communication/abi_compatible_data_types/index.html). +/// Unlike the built-in [`Option`] or other enum-based types, this data structure will **not** be affected by +/// [*null-pointer optimization*](https://doc.rust-lang.org/core/option/index.html#representation), +/// where invalid byte representations of `T` are used to encode the `None` case. +/// +/// **Note:** When encoding an instance of this type in other programming languages, +/// the `is_some` field must only be assigned the binary values `0x00` and `0x01`; +/// everything else results in *Undefined Behavior*. +#[derive(Clone, Copy)] +#[repr(C)] +pub struct InlineOption { + /// This is valid/initialized if and only if `is_some` is true. + value: MaybeUninit, + is_some: bool, +} + +impl InlineOption { + /// Creates a new instance populated by `value`. + pub const fn some(value: T) -> Self { + Self { + value: MaybeUninit::new(value), + is_some: true, + } + } + + /// Creates an empty instance. + pub const fn none() -> Self { + Self { + value: MaybeUninit::uninit(), + is_some: false, + } + } + + /// Creates a new instance from a standard [`Option`]. + pub fn from_option(option: Option) -> Self { + if let Some(value) = option { + Self::some(value) + } else { + Self::none() + } + } + + /// Converts this instance into a standard [`Option`]. + pub const fn into_option(self) -> Option { + if self.is_some { + // SAFETY: `is_some` is true, so `value` must be valid as per its invariant. + Some(unsafe { self.value.assume_init() }) + } else { + None + } + } + + /// Returns an optional reference to the contained value. + pub const fn as_ref(&self) -> Option<&T> { + if self.is_some { + // SAFETY: `is_some` is true, so `value` must be valid as per its invariant. + Some(unsafe { self.value.assume_init_ref() }) + } else { + None + } + } + + /// Returns an optional mutable reference to the contained value. + pub const fn as_mut(&mut self) -> Option<&mut T> { + if self.is_some { + // SAFETY: `is_some` is true, so `value` must be valid as per its invariant. + Some(unsafe { self.value.assume_init_mut() }) + } else { + None + } + } +} + +impl Default for InlineOption { + fn default() -> Self { + Self { + value: MaybeUninit::uninit(), + is_some: false, + } + } +} + +impl From for InlineOption { + fn from(value: T) -> Self { + Self { + value: MaybeUninit::new(value), + is_some: true, + } + } +} + +impl From> for InlineOption { + fn from(option: Option) -> Self { + Self::from_option(option) + } +} + +impl From> for Option { + fn from(option: InlineOption) -> Self { + option.into_option() + } +} + +impl PartialEq for InlineOption { + fn eq(&self, other: &Self) -> bool { + match (self.as_ref(), other.as_ref()) { + (Some(a), Some(b)) => a.eq(b), + (Some(_), None) => false, + (None, Some(_)) => false, + (None, None) => true, + } + } +} + +impl Eq for InlineOption {} + +impl PartialOrd for InlineOption { + fn partial_cmp(&self, other: &Self) -> Option { + match (self.as_ref(), other.as_ref()) { + (Some(a), Some(b)) => a.partial_cmp(b), + (Some(_), None) => Some(cmp::Ordering::Greater), + (None, Some(_)) => Some(cmp::Ordering::Less), + (None, None) => Some(cmp::Ordering::Equal), + } + } +} + +impl Ord for InlineOption { + fn cmp(&self, other: &Self) -> cmp::Ordering { + match (self.as_ref(), other.as_ref()) { + (Some(a), Some(b)) => a.cmp(b), + (Some(_), None) => cmp::Ordering::Greater, + (None, Some(_)) => cmp::Ordering::Less, + (None, None) => cmp::Ordering::Equal, + } + } +} + +impl fmt::Display for InlineOption +where + for<'a> Option<&'a T>: fmt::Display, +{ + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + fmt::Display::fmt(&self.as_ref(), f) + } +} + +impl fmt::Debug for InlineOption +where + for<'a> Option<&'a T>: fmt::Debug, +{ + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + fmt::Debug::fmt(&self.as_ref(), f) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn from_and_into() { + let original_some = Some(0x1234567890abcdef_u64); + let inline_some = InlineOption::from_option(original_some); + assert_eq!(inline_some.into_option(), original_some); + + let original_none: Option = None; + let inline_none = InlineOption::from_option(original_none); + assert_eq!(inline_none.into_option(), original_none); + } + + #[test] + fn as_ref() { + let original_some = Some(0x1234567890abcdef_u64); + let inline_some = InlineOption::from_option(original_some); + assert_eq!(inline_some.as_ref(), original_some.as_ref()); + + let original_none: Option = None; + let inline_none = InlineOption::from_option(original_none); + assert_eq!(inline_none.as_ref(), original_none.as_ref()); + } + + #[test] + fn as_mut() { + let mut original_some = Some(0x1234567890abcdef_u64); + let mut inline_some = InlineOption::from_option(original_some); + assert_eq!(inline_some.as_mut(), original_some.as_mut()); + *original_some.as_mut().unwrap() = 5; + *inline_some.as_mut().unwrap() = 5; + assert_eq!(inline_some.as_mut(), original_some.as_mut()); + + let mut original_none: Option = None; + let mut inline_none = InlineOption::from_option(original_none); + assert_eq!(inline_none.as_mut(), original_none.as_mut()); + } + + #[test] + fn eq() { + #[track_caller] + fn check(lhs: &InlineOption, rhs: &InlineOption) { + // Check that InlineOption behaves exactly like Option, since Option's implementation is assumed to be correct. + assert_eq!(lhs.eq(rhs), lhs.as_ref().eq(&rhs.as_ref())); + assert_eq!(lhs.ne(rhs), lhs.as_ref().ne(&rhs.as_ref())); + } + + let some_5 = InlineOption::some(5); + let some_6 = InlineOption::some(6); + let none = InlineOption::none(); + // Check all combinations + for lhs in &[some_5, some_6, none] { + for rhs in &[some_5, some_6, none] { + check(lhs, rhs); + } + } + } + + #[test] + fn partial_cmp() { + #[track_caller] + fn check(lhs: &InlineOption, rhs: &InlineOption) { + // Check that InlineOption behaves exactly like Option, since Option's implementation is assumed to be correct. + assert_eq!(lhs.partial_cmp(rhs), lhs.as_ref().partial_cmp(&rhs.as_ref())); + assert_eq!(lhs < rhs, lhs.as_ref() < rhs.as_ref()); + assert_eq!(lhs <= rhs, lhs.as_ref() <= rhs.as_ref()); + assert_eq!(lhs > rhs, lhs.as_ref() > rhs.as_ref()); + assert_eq!(lhs >= rhs, lhs.as_ref() >= rhs.as_ref()); + } + + let some_5 = InlineOption::some(5); + let some_6 = InlineOption::some(6); + let none = InlineOption::none(); + // Check all combinations + for lhs in &[some_5, some_6, none] { + for rhs in &[some_5, some_6, none] { + check(lhs, rhs); + } + } + } + + #[test] + fn cmp() { + #[track_caller] + fn check(lhs: &InlineOption, rhs: &InlineOption) { + // Check that InlineOption behaves exactly like Option, since Option's implementation is assumed to be correct. + assert_eq!(lhs.cmp(rhs), lhs.as_ref().cmp(&rhs.as_ref())); + assert_eq!(lhs.max(rhs).as_ref(), lhs.as_ref().max(rhs.as_ref())); + assert_eq!(lhs.min(rhs).as_ref(), lhs.as_ref().min(rhs.as_ref())); + } + + let some_5 = InlineOption::some(5); + let some_6 = InlineOption::some(6); + let none = InlineOption::none(); + // Check all combinations + for lhs in &[some_5, some_6, none] { + for rhs in &[some_5, some_6, none] { + check(lhs, rhs); + } + } + } +} diff --git a/src/containers/inline/result.rs b/src/containers/inline/result.rs new file mode 100644 index 0000000000..51f8da9c2c --- /dev/null +++ b/src/containers/inline/result.rs @@ -0,0 +1,297 @@ +// ******************************************************************************* +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// https://www.apache.org/licenses/LICENSE-2.0 +// +// SPDX-License-Identifier: Apache-2.0 +// ******************************************************************************* + +use core::cmp; +use core::fmt; +use core::mem::ManuallyDrop; + +/// An result value for error handling, similar to [`Result`] in the Rust standard library. +/// +/// This data structure has a stable, well-defined memory layout and satisfies the requirements for +/// [ABI-compatible types](https://eclipse-score.github.io/score/main/features/communication/abi_compatible_data_types/index.html). +/// +/// **Note:** When encoding an instance of this type in other programming languages, +/// the `is_ok` field must only be assigned the binary values `0x00` and `0x01`; +/// everything else results in *Undefined Behavior*. +#[derive(Clone, Copy)] +#[repr(C)] +pub struct InlineResult { + /// When `is_ok` is true, then `value.ok` is valid, otherwise `value.err`. + value: ResultUnion, + is_ok: bool, +} + +#[derive(Clone, Copy)] +#[repr(C)] +union ResultUnion { + ok: ManuallyDrop, + err: ManuallyDrop, +} + +impl InlineResult { + /// Creates a new instance representing success with `value` as payload. + pub const fn ok(value: T) -> Self { + Self { + value: ResultUnion { + ok: ManuallyDrop::new(value), + }, + is_ok: true, + } + } + + /// Creates a new instance representing failure with `error` as payload. + pub const fn err(error: E) -> Self { + Self { + value: ResultUnion { + err: ManuallyDrop::new(error), + }, + is_ok: false, + } + } + + /// Creates a new instance from a standard [`Result`]. + pub fn from_result(result: Result) -> Self { + match result { + Ok(value) => Self::ok(value), + Err(error) => Self::err(error), + } + } + + /// Converts this instance into a standard [`Result`]. + pub const fn into_result(self) -> Result { + if self.is_ok { + // SAFETY: `is_ok` is true, so `value.ok` must be valid as per its invariant. + Ok(ManuallyDrop::into_inner(unsafe { self.value.ok })) + } else { + // SAFETY: `is_ok` is false, so `value.err` must be valid as per its invariant. + Err(ManuallyDrop::into_inner(unsafe { self.value.err })) + } + } + + /// Returns a result-reference to the contained value. + pub fn as_ref(&self) -> Result<&T, &E> { + if self.is_ok { + // SAFETY: `is_ok` is true, so `value.ok` must be valid as per its invariant. + Ok(unsafe { &self.value.ok }) + } else { + // SAFETY: `is_ok` is false, so `value.err` must be valid as per its invariant. + Err(unsafe { &self.value.err }) + } + } + + /// Returns a mutable result-reference to the contained value. + pub fn as_mut(&mut self) -> Result<&mut T, &mut E> { + if self.is_ok { + // SAFETY: `is_ok` is true, so `value.ok` must be valid as per its invariant. + Ok(unsafe { &mut self.value.ok }) + } else { + // SAFETY: `is_ok` is false, so `value.err` must be valid as per its invariant. + Err(unsafe { &mut self.value.err }) + } + } +} + +impl Default for InlineResult { + fn default() -> Self { + Self { + value: ResultUnion { + ok: ManuallyDrop::new(T::default()), + }, + is_ok: true, + } + } +} + +impl From for InlineResult { + fn from(value: T) -> Self { + Self { + value: ResultUnion { + ok: ManuallyDrop::new(value), + }, + is_ok: true, + } + } +} + +impl From> for InlineResult { + fn from(result: Result) -> Self { + Self::from_result(result) + } +} + +impl From> for Result { + fn from(result: InlineResult) -> Self { + result.into_result() + } +} + +impl PartialEq for InlineResult { + fn eq(&self, other: &Self) -> bool { + match (self.as_ref(), other.as_ref()) { + (Ok(a), Ok(b)) => a.eq(b), + (Ok(_), Err(_)) => false, + (Err(_), Ok(_)) => false, + (Err(a), Err(b)) => a.eq(b), + } + } +} + +impl Eq for InlineResult {} + +impl PartialOrd for InlineResult { + fn partial_cmp(&self, other: &Self) -> Option { + match (self.as_ref(), other.as_ref()) { + (Ok(a), Ok(b)) => a.partial_cmp(b), + (Ok(_), Err(_)) => Some(cmp::Ordering::Less), + (Err(_), Ok(_)) => Some(cmp::Ordering::Greater), + (Err(a), Err(b)) => a.partial_cmp(b), + } + } +} + +impl Ord for InlineResult { + fn cmp(&self, other: &Self) -> cmp::Ordering { + match (self.as_ref(), other.as_ref()) { + (Ok(a), Ok(b)) => a.cmp(b), + (Ok(_), Err(_)) => cmp::Ordering::Less, + (Err(_), Ok(_)) => cmp::Ordering::Greater, + (Err(a), Err(b)) => a.cmp(b), + } + } +} + +impl fmt::Display for InlineResult +where + for<'a> Result<&'a T, &'a E>: fmt::Display, +{ + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + fmt::Display::fmt(&self.as_ref(), f) + } +} + +impl fmt::Debug for InlineResult +where + for<'a> Result<&'a T, &'a E>: fmt::Debug, +{ + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + fmt::Debug::fmt(&self.as_ref(), f) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn from_and_into() { + let original_ok: Result = Ok(0x1234567890abcdef_u64); + let inline_ok = InlineResult::from_result(original_ok); + assert_eq!(inline_ok.into_result(), original_ok); + + let original_err: Result = Err(1.2345_f64); + let inline_err = InlineResult::from_result(original_err); + assert_eq!(inline_err.into_result(), original_err); + } + + #[test] + fn as_ref() { + let original_ok: Result = Ok(0x1234567890abcdef_u64); + let inline_ok = InlineResult::from_result(original_ok); + assert_eq!(inline_ok.as_ref(), original_ok.as_ref()); + + let original_err: Result = Err(1.2345_f64); + let inline_err = InlineResult::from_result(original_err); + assert_eq!(inline_err.as_ref(), original_err.as_ref()); + } + + #[test] + fn as_mut() { + let mut original_ok: Result = Ok(0x1234567890abcdef_u64); + let mut inline_ok = InlineResult::from_result(original_ok); + assert_eq!(inline_ok.as_mut(), original_ok.as_mut()); + *original_ok.as_mut().unwrap() = 5; + *inline_ok.as_mut().unwrap() = 5; + assert_eq!(inline_ok.as_mut(), original_ok.as_mut()); + + let mut original_err: Result = Err(1.2345_f64); + let mut inline_err = InlineResult::from_result(original_err); + assert_eq!(inline_err.as_mut(), original_err.as_mut()); + } + + #[test] + fn eq() { + #[track_caller] + fn check(lhs: &InlineResult, rhs: &InlineResult) { + // Check that InlineResult behaves exactly like Result, since Result's implementation is assumed to be correct. + assert_eq!(lhs.eq(rhs), lhs.as_ref().eq(&rhs.as_ref())); + assert_eq!(lhs.ne(rhs), lhs.as_ref().ne(&rhs.as_ref())); + } + + let ok_5 = InlineResult::ok(5); + let ok_6 = InlineResult::ok(6); + let err_5 = InlineResult::err(5); + let err_6 = InlineResult::err(6); + // Check all combinations + for lhs in &[ok_5, ok_6, err_5, err_6] { + for rhs in &[ok_5, ok_6, err_5, err_6] { + check(lhs, rhs); + } + } + } + + #[test] + fn partial_cmp() { + #[track_caller] + fn check(lhs: &InlineResult, rhs: &InlineResult) { + // Check that InlineResult behaves exactly like Result, since Result's implementation is assumed to be correct. + assert_eq!(lhs.partial_cmp(rhs), lhs.as_ref().partial_cmp(&rhs.as_ref())); + assert_eq!(lhs < rhs, lhs.as_ref() < rhs.as_ref()); + assert_eq!(lhs <= rhs, lhs.as_ref() <= rhs.as_ref()); + assert_eq!(lhs > rhs, lhs.as_ref() > rhs.as_ref()); + assert_eq!(lhs >= rhs, lhs.as_ref() >= rhs.as_ref()); + } + + let ok_5 = InlineResult::ok(5); + let ok_6 = InlineResult::ok(6); + let err_5 = InlineResult::err(5); + let err_6 = InlineResult::err(6); + // Check all combinations + for lhs in &[ok_5, ok_6, err_5, err_6] { + for rhs in &[ok_5, ok_6, err_5, err_6] { + check(lhs, rhs); + } + } + } + + #[test] + fn cmp() { + #[track_caller] + fn check(lhs: &InlineResult, rhs: &InlineResult) { + // Check that InlineResult behaves exactly like Result, since Result's implementation is assumed to be correct. + assert_eq!(lhs.cmp(rhs), lhs.as_ref().cmp(&rhs.as_ref())); + assert_eq!(lhs.max(rhs).as_ref(), lhs.as_ref().max(rhs.as_ref())); + assert_eq!(lhs.min(rhs).as_ref(), lhs.as_ref().min(rhs.as_ref())); + } + + let ok_5 = InlineResult::ok(5); + let ok_6 = InlineResult::ok(6); + let err_5 = InlineResult::err(5); + let err_6 = InlineResult::err(6); + // Check all combinations + for lhs in &[ok_5, ok_6, err_5, err_6] { + for rhs in &[ok_5, ok_6, err_5, err_6] { + check(lhs, rhs); + } + } + } +} From 82520ef5b91876bc36d8a4201c4073a3d6299276 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arkadiusz=20J=C4=99drzejewski?= Date: Tue, 25 Nov 2025 12:05:29 +0000 Subject: [PATCH 21/59] log: `mw_log_fmt_macro` implementation - Replacement for `format_args!` macro. - Replacement for `Debug` derive macro. - Unit tests. --- Cargo.toml | 9 +- src/log/mw_log_fmt/macros.rs | 14 - src/log/mw_log_fmt_macro/BUILD | 42 ++ src/log/mw_log_fmt_macro/Cargo.toml | 32 + src/log/mw_log_fmt_macro/format_args.rs | 597 ++++++++++++++++++ src/log/mw_log_fmt_macro/lib.rs | 39 ++ src/log/mw_log_fmt_macro/score_debug.rs | 207 ++++++ .../tests/test_format_args.rs | 308 +++++++++ .../tests/test_score_debug.rs | 176 ++++++ src/log/mw_log_fmt_macro/tests/tests.rs | 14 + src/log/mw_log_fmt_macro/tests/utils/mod.rs | 81 +++ 11 files changed, 1503 insertions(+), 16 deletions(-) create mode 100644 src/log/mw_log_fmt_macro/BUILD create mode 100644 src/log/mw_log_fmt_macro/Cargo.toml create mode 100644 src/log/mw_log_fmt_macro/format_args.rs create mode 100644 src/log/mw_log_fmt_macro/lib.rs create mode 100644 src/log/mw_log_fmt_macro/score_debug.rs create mode 100644 src/log/mw_log_fmt_macro/tests/test_format_args.rs create mode 100644 src/log/mw_log_fmt_macro/tests/test_score_debug.rs create mode 100644 src/log/mw_log_fmt_macro/tests/tests.rs create mode 100644 src/log/mw_log_fmt_macro/tests/utils/mod.rs diff --git a/Cargo.toml b/Cargo.toml index 22653f0d8f..fcbc35e8f5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,9 +2,13 @@ resolver = "2" # Split to default members without tests and examples. # Used when executing cargo from project root. -default-members = ["src/containers", "src/log/mw_log_fmt"] +default-members = [ + "src/containers", + "src/log/mw_log_fmt", + "src/log/mw_log_fmt_macro", +] # Include tests and examples as a member for IDE support and Bazel builds. -members = ["src/containers", "src/log/mw_log_fmt"] +members = ["src/containers", "src/log/mw_log_fmt", "src/log/mw_log_fmt_macro"] [workspace.package] @@ -16,6 +20,7 @@ authors = ["S-CORE Contributors"] [workspace.dependencies] mw_log_fmt = { path = "src/log/mw_log_fmt" } +mw_log_fmt_macro = { path = "src/log/mw_log_fmt_macro" } [workspace.lints.clippy] diff --git a/src/log/mw_log_fmt/macros.rs b/src/log/mw_log_fmt/macros.rs index 0f324e6286..70deec45eb 100644 --- a/src/log/mw_log_fmt/macros.rs +++ b/src/log/mw_log_fmt/macros.rs @@ -22,17 +22,3 @@ macro_rules! score_write { $crate::write($dst, mw_log::__private_api::format_args!($($arg)*)) }; } - -/// Writes data using provided writer, with a newline appended. -/// -/// For more information, see [`score_write!`]. -#[macro_export] -macro_rules! score_writeln { - ($dst:expr $(,)?) => { - $crate::score_write!($dst, "\n") - }; - ($dst:expr, $($arg:tt)*) => { - // TODO: `mw_log::__private_api` will become available in future PRs. - $crate::write($dst, mw_log::__private_api::format_args_nl!($($arg)*)) - }; -} diff --git a/src/log/mw_log_fmt_macro/BUILD b/src/log/mw_log_fmt_macro/BUILD new file mode 100644 index 0000000000..f55f03ebba --- /dev/null +++ b/src/log/mw_log_fmt_macro/BUILD @@ -0,0 +1,42 @@ +# ******************************************************************************* +# Copyright (c) 2025 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* +load("@rules_rust//rust:defs.bzl", "rust_proc_macro", "rust_test") + +rust_proc_macro( + name = "mw_log_fmt_macro", + srcs = glob(["*.rs"]), + # TODO: expose required interface through `mw_log` and make it private again. + # visibility = ["//visibility:private"], + visibility = ["//visibility:public"], + deps = [ + "//src/log/mw_log_fmt", + "@score_crates//:proc_macro2", + "@score_crates//:quote", + "@score_crates//:syn", + ], +) + +rust_test( + name = "tests", + srcs = glob(["tests/**/*.rs"]), + proc_macro_deps = [ + "//src/log/mw_log_fmt_macro", + ], + tags = [ + "unit_tests", + "ut", + ], + deps = [ + "//src/log/mw_log_fmt", + ], +) diff --git a/src/log/mw_log_fmt_macro/Cargo.toml b/src/log/mw_log_fmt_macro/Cargo.toml new file mode 100644 index 0000000000..c52e435945 --- /dev/null +++ b/src/log/mw_log_fmt_macro/Cargo.toml @@ -0,0 +1,32 @@ +# ******************************************************************************* +# Copyright (c) 2025 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* + +[package] +name = "mw_log_fmt_macro" +version.workspace = true +authors.workspace = true +readme.workspace = true +edition.workspace = true + +[lib] +proc-macro = true +path = "lib.rs" + +[dependencies] +syn = { version = "2", features = ["full"] } +quote = "1" +proc-macro2 = "1" +mw_log_fmt.workspace = true + +[lints] +workspace = true diff --git a/src/log/mw_log_fmt_macro/format_args.rs b/src/log/mw_log_fmt_macro/format_args.rs new file mode 100644 index 0000000000..4a53d7c844 --- /dev/null +++ b/src/log/mw_log_fmt_macro/format_args.rs @@ -0,0 +1,597 @@ +// +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// +// +// SPDX-License-Identifier: Apache-2.0 +// + +use mw_log_fmt::{Alignment, DebugAsHex, DisplayHint, FormatSpec, Sign}; +use quote::{quote, ToTokens}; +use syn::punctuated::{IntoIter, Punctuated}; +use syn::token::Comma; +use syn::{parse_macro_input, Error, Expr, ExprLit, Lit}; + +/// Parse error containing reason. +/// - Functions with access to tokens should return `syn::Error` +/// - Other functions should return `ParseError` containing explanation. +struct ParseError(pub String); + +enum Argument { + Position, + Index(usize), + Name(String), +} + +/// Parse left side of the placeholder (`{*arg*:spec}`). +fn parse_argument(s: &str) -> Result { + let arg = if s.is_empty() { + Argument::Position + } else if let Ok(v) = s.parse::() { + Argument::Index(v) + } else { + Argument::Name(s.to_string()) + }; + Ok(arg) +} + +/// Get alignment based on provided character. +fn get_alignment(c: &char) -> Result { + match c { + '<' => Ok(Alignment::Left), + '>' => Ok(Alignment::Right), + '^' => Ok(Alignment::Center), + _ => Err(ParseError(format!("unknown alignment character provided: {c}"))), + } +} + +/// Get sign based on provided character. +fn get_sign(c: &char) -> Result { + match c { + '+' => Ok(Sign::Plus), + '-' => Ok(Sign::Minus), + _ => Err(ParseError(format!("unknown sign character provided: {c}"))), + } +} + +/// Parse right side of the placeholder `{arg:*spec*}`. +fn parse_spec(s: &str) -> Result { + let mut chars = s.chars().peekable(); + + // Parse fill and alignment ([[fill]align]). + let mut fill = ' '; + let mut align = None; + { + if let (Some(a), Some(b)) = (chars.next(), chars.peek()) { + const ALIGN_CHARS: [char; 3] = ['<', '^', '>']; + // `[[fill]align]` + if ALIGN_CHARS.contains(b) { + fill = a; + align = Some(get_alignment(b)?); + chars.next(); + } + // `[align]` + else if ALIGN_CHARS.contains(&a) { + align = Some(get_alignment(&a)?); + } + } + + // `align` not set (`[]`) - reset `chars` position. + if align.is_none() { + chars = s.chars().peekable(); + } + } + + // Parse sign ([sign]). + let mut sign = None; + { + if let Some(c) = chars.peek() { + const SIGN_CHARS: [char; 2] = ['+', '-']; + if SIGN_CHARS.contains(c) { + sign = Some(get_sign(c)?); + } + } + + if sign.is_some() { + chars.next(); + } + } + + // Parse alternate (['#']). + let mut alternate = false; + { + // "if let" and "if" can't be chained before Rust 2024 edition. + if let Some(c) = chars.peek() { + if *c == '#' { + alternate = true; + chars.next(); + } + } + } + + // Parse zero pad (['0']). + let mut zero_pad = false; + { + if let Some(c) = chars.peek() { + if *c == '0' { + zero_pad = true; + chars.next(); + } + } + } + + // Parse width ([width]). + let mut width: Option = None; + { + let mut width_str = String::new(); + while let Some(c) = chars.peek() { + if c.is_ascii_digit() { + width_str.push(*c); + chars.next(); + } else { + break; + } + } + if !width_str.is_empty() { + width = match width_str.parse() { + Ok(v) => Some(v), + Err(_) => return Err(ParseError("unable to parse width".to_string())), + }; + } + } + + // Parse precision (['.' precision]). + let mut precision: Option = None; + { + if let Some(c) = chars.peek() { + if *c == '.' { + chars.next(); + + let mut precision_str = String::new(); + while let Some(c) = chars.peek() { + if c.is_ascii_digit() { + precision_str.push(*c); + chars.next(); + } else { + break; + } + } + if !precision_str.is_empty() { + precision = match precision_str.parse() { + Ok(v) => Some(v), + Err(_) => return Err(ParseError("unable to parse precision".to_string())), + }; + } + } + } + } + + // Parse display hint ([type]). + // Macro and format lib display hints are slightly different and must be mapped. + let display_hint; + let mut debug_as_hex = None; + { + let remainder = chars.collect::(); + display_hint = match remainder.as_str() { + "" => DisplayHint::NoHint, + "?" => DisplayHint::Debug, + "x?" => { + debug_as_hex = Some(DebugAsHex::Lower); + DisplayHint::Debug + }, + "X?" => { + debug_as_hex = Some(DebugAsHex::Upper); + DisplayHint::Debug + }, + "o" => DisplayHint::Octal, + "x" => DisplayHint::LowerHex, + "X" => DisplayHint::UpperHex, + "p" => DisplayHint::Pointer, + "b" => DisplayHint::Binary, + "e" => DisplayHint::LowerExp, + "E" => DisplayHint::UpperExp, + _ => return Err(ParseError(format!("unknown display hint: {remainder}"))), + }; + } + + // Construct format spec. + let mut spec = FormatSpec::new(); + spec.display_hint(display_hint) + .fill(fill) + .align(align) + .sign(sign) + .alternate(alternate) + .zero_pad(zero_pad) + .debug_as_hex(debug_as_hex) + .width(width) + .precision(precision); + + Ok(spec) +} + +/// Tokenize format spec constructor. +fn tokenize_spec(spec: &FormatSpec) -> proc_macro2::TokenStream { + // Additional helpers are required to properly tokenize enums and options. + fn tokenize_display_hint(display_hint: DisplayHint) -> proc_macro2::TokenStream { + match display_hint { + DisplayHint::NoHint => quote! { mw_log_fmt::DisplayHint::NoHint }, + DisplayHint::Debug => quote! { mw_log_fmt::DisplayHint::Debug }, + DisplayHint::Octal => quote! { mw_log_fmt::DisplayHint::Octal }, + DisplayHint::LowerHex => quote! { mw_log_fmt::DisplayHint::LowerHex }, + DisplayHint::UpperHex => quote! { mw_log_fmt::DisplayHint::UpperHex }, + DisplayHint::Pointer => quote! { mw_log_fmt::DisplayHint::Pointer }, + DisplayHint::Binary => quote! { mw_log_fmt::DisplayHint::Binary }, + DisplayHint::LowerExp => quote! { mw_log_fmt::DisplayHint::LowerExp }, + DisplayHint::UpperExp => quote! { mw_log_fmt::DisplayHint::UpperExp }, + } + } + + fn tokenize_alignment(align: Option) -> proc_macro2::TokenStream { + match align { + Some(v) => match v { + Alignment::Left => quote! { Some(mw_log_fmt::Alignment::Left) }, + Alignment::Right => quote! { Some(mw_log_fmt::Alignment::Right) }, + Alignment::Center => quote! { Some(mw_log_fmt::Alignment::Center) }, + }, + None => quote! { None }, + } + } + + fn tokenize_sign(sign: Option) -> proc_macro2::TokenStream { + match sign { + Some(v) => match v { + Sign::Plus => quote! { Some(mw_log_fmt::Sign::Plus) }, + Sign::Minus => quote! { Some(mw_log_fmt::Sign::Minus) }, + }, + None => quote! { None }, + } + } + + fn tokenize_debug_as_hex(debug_as_hex: Option) -> proc_macro2::TokenStream { + match debug_as_hex { + Some(v) => match v { + DebugAsHex::Lower => quote! { Some(mw_log_fmt::DebugAsHex::Lower) }, + DebugAsHex::Upper => quote! { Some(mw_log_fmt::DebugAsHex::Upper) }, + }, + None => quote! { None }, + } + } + + fn tokenize_option_u16(o: Option) -> proc_macro2::TokenStream { + match o { + Some(v) => quote! { Some(#v) }, + None => quote! { None }, + } + } + + let display_hint = tokenize_display_hint(spec.get_display_hint()); + let fill = spec.get_fill(); + let align = tokenize_alignment(spec.get_align()); + let sign = tokenize_sign(spec.get_sign()); + let alternate = spec.get_alternate(); + let zero_pad = spec.get_zero_pad(); + let debug_as_hex = tokenize_debug_as_hex(spec.get_debug_as_hex()); + let width = tokenize_option_u16(spec.get_width()); + let precision = tokenize_option_u16(spec.get_precision()); + + quote! {{ + mw_log_fmt::FormatSpec::from_params( + #display_hint, + #fill, + #align, + #sign, + #alternate, + #zero_pad, + #debug_as_hex, + #width, + #precision + ) + }} +} + +struct Placeholder { + argument: Argument, + spec: FormatSpec, +} + +impl Placeholder { + fn from(s: &str) -> Result { + // Strip surrounding "{}", trim whitespace. + let s = s + .strip_prefix('{') + .ok_or(ParseError("failed to strip placeholder prefix".to_string()))? + .strip_suffix('}') + .ok_or(ParseError("failed to strip placeholder suffix".to_string()))? + .trim(); + + // Check placeholder is empty: `{}`. + if s.is_empty() { + return Ok(Placeholder { + argument: Argument::Position, + spec: FormatSpec::default(), + }); + } + + // Split by `:`. + let (arg, spec) = match s.split_once(':') { + Some((arg, spec)) => (arg, Some(spec)), + None => (s, None), + }; + + // Parse argument. + let argument = parse_argument(arg)?; + + // Parse format spec. + let spec = match spec { + Some(s) => parse_spec(s)?, + None => FormatSpec::default(), + }; + + Ok(Placeholder { argument, spec }) + } +} + +enum Spec { + Literal(String), + Placeholder(Placeholder), +} + +/// Replace double escaped braces ("{{", "}}") with single ones ("{", "}"). +fn process_escaped_braces(string_literal: &str) -> String { + string_literal.replace("{{", "{").replace("}}", "}") +} + +fn process_format_string(format_string: &str) -> Result, ParseError> { + // Find braces locations. + #[derive(PartialEq)] + enum Brace { + SingleLeft, + DoubleLeft, + SingleRight, + DoubleRight, + } + + let mut chars = format_string.chars().enumerate().peekable(); + let mut braces = Vec::new(); + while let Some((i, c)) = chars.next() { + let next = chars.peek().map(|&(_, ch)| ch); + + // Check double left. + if c == '{' && next == Some('{') { + chars.next(); + braces.push((i, Brace::DoubleLeft)); + } + // Check single left. + else if c == '{' { + braces.push((i, Brace::SingleLeft)); + } + // Check double right. + else if c == '}' && next == Some('}') { + chars.next(); + braces.push((i, Brace::DoubleRight)); + } + // Check single right. + else if c == '}' { + braces.push((i, Brace::SingleRight)); + } + } + + // Process braces locations. + // - Process placeholder locations (must start with left and end with right brace). + // - Detect dangling braces. + // - Detect escaped braces inside placeholders. + let mut placeholders = Vec::new(); + let mut braces_it = braces.into_iter().peekable(); + while let Some((i, brace)) = braces_it.next() { + match brace { + // Single left brace might start placeholder. + Brace::SingleLeft => { + let (pi, pb) = braces_it + .peek() + .ok_or_else(|| ParseError("dangling left brace".to_string()))?; + match pb { + Brace::SingleLeft => { + return Err(ParseError("dangling left brace".to_string())); + }, + Brace::SingleRight => { + // Inclusive range cannot be used. + // `Range` and `RangeInclusive` are not compatible. + placeholders.push(i..*pi + 1); + braces_it.next(); + }, + Brace::DoubleLeft | Brace::DoubleRight => { + return Err(ParseError("escaped characters inside placeholder".to_string())); + }, + } + }, + // Dangling right brace. + Brace::SingleRight => { + return Err(ParseError("dangling right brace".to_string())); + }, + // Escaped characters are ignored. + Brace::DoubleLeft | Brace::DoubleRight => continue, + } + } + + // Get ranges of string literals - inverted `placeholders`. + let mut literals = Vec::new(); + let mut prev_end = 0; + let format_string_len = format_string.len(); + for range in &placeholders { + if range.start > prev_end { + literals.push(prev_end..range.start); + } + prev_end = range.end; + } + if prev_end < format_string_len { + literals.push(prev_end..format_string_len); + } + + // Merge literals and placeholders with correct order. + let mut types_and_ranges = Vec::new(); + types_and_ranges.extend(literals.iter().map(|r| (false, r.clone()))); + types_and_ranges.extend(placeholders.iter().map(|r| (true, r.clone()))); + types_and_ranges.sort_by_key(|(_, r)| r.start); + + // Create output - list of specs containing strings. + let mut specs = Vec::new(); + for (is_placeholder, range) in types_and_ranges { + let spec = if is_placeholder { + Spec::Placeholder(Placeholder::from(&format_string[range])?) + } else { + Spec::Literal(process_escaped_braces(&format_string[range])) + }; + specs.push(spec); + } + + Ok(specs) +} + +/// Check valid expression types are used. +/// Named expressions must come after all positional expressions. +fn validate_args(args: &[Expr]) -> Result<(), Error> { + let mut named_found = false; + for arg in args.iter() { + match arg { + Expr::Assign(_) => named_found = true, + // NOTE: the list of allowed expression types may not be complete. + Expr::Lit(_) | Expr::Field(_) | Expr::If(_) | Expr::Path(_) | Expr::Unary(_) => { + if named_found { + return Err(Error::new_spanned( + arg, + "positional arguments must be before named arguments", + )); + } + }, + _ => return Err(Error::new_spanned(arg, "invalid expression type")), + } + } + + Ok(()) +} + +/// Select argument with name. +/// +/// Following cases are supported: +/// - Name provided by spec and `args` - get argument expression from `args`. +/// E.g., `mw_log_format_args!("{arg}", arg)`. +/// - Name provided by spec, but aliased by `args` - get assigned argument expression from `args`. +/// E.g., `mw_log_format_args!("{arg}", arg=other_value)`. +/// +/// Not yet supported: +/// - Name provided by spec, but not `args` - create argument expression. +/// E.g., `mw_log_format_args!("{arg}")`. +fn select_arg_with_name(args: &[Expr], name: &str) -> Result { + // Find all arguments that match. Either zero or one are allowed. + let mut found: Vec = Vec::new(); + for arg in args.iter() { + let (arg_expr, alias_expr) = match arg { + Expr::Assign(expr_assign) => ( + expr_assign.left.as_ref().clone(), + Some(expr_assign.right.as_ref().clone()), + ), + Expr::Lit(_) | Expr::Field(_) | Expr::If(_) | Expr::Path(_) | Expr::Unary(_) => (arg.clone(), None), + _ => return Err(Error::new_spanned(arg, "invalid expression type")), + }; + + if arg_expr.to_token_stream().to_string() == name { + if let Some(alias_expr) = alias_expr { + found.push(alias_expr); + } else { + found.push(arg_expr); + } + } + } + + match found.len() { + // No matching args found - create argument expression. + 0 => Err(Error::new( + proc_macro2::Span::call_site(), + "no matching arguments found", + )), + // Matching arg found. + 1 => Ok(found[0].clone()), + // Multiple matching args found - invalid. + _ => Err(Error::new( + proc_macro2::Span::call_site(), + "multiple matching arguments found", + )), + } +} + +fn parse_fragments(punctuated_it: &mut IntoIter) -> Result, Error> { + // Get first argument - format string. + // Must be a string literal. + let format_string_expr = match punctuated_it.next() { + Some(Expr::Lit(ExprLit { lit: Lit::Str(s), .. })) => s, + Some(expr) => { + return Err(Error::new_spanned(expr, "first argument must be a string literal")); + }, + None => { + return Err(Error::new(proc_macro2::Span::call_site(), "expected a string literal")); + }, + }; + + // Process format string and create list of specs. + let format_string = format_string_expr.value(); + let specs = + process_format_string(&format_string).map_err(|e| Error::new_spanned(format_string_expr.clone(), e.0))?; + + // Process specs and match them to provided args. + let args: Vec = punctuated_it.collect(); + validate_args(&args)?; + let mut fragments = Vec::new(); + // Iterator is used for positional arguments. + let mut args_it = args.iter(); + for spec in specs.into_iter() { + match spec { + Spec::Literal(s) => fragments.push(quote! {{ + mw_log_fmt::Fragment::Literal(#s) + }}), + Spec::Placeholder(placeholder) => { + // Select argument based on provided argument. + let arg = match placeholder.argument { + Argument::Position => match args_it.next() { + Some(arg) => arg, + None => { + return Err(Error::new_spanned( + format_string_expr, + "argument with provided position not found", + )); + }, + }, + Argument::Index(i) => &args[i], + Argument::Name(name) => &select_arg_with_name(&args, &name)?, + }; + + let spec_ctor = tokenize_spec(&placeholder.spec); + + fragments.push(quote! {{ + mw_log_fmt::Fragment::Placeholder(mw_log_fmt::Placeholder::new(&#arg, #spec_ctor)) + }}); + }, + } + } + + Ok(fragments) +} + +pub(crate) fn expand(input: proc_macro::TokenStream) -> proc_macro::TokenStream { + // Collect expressions separated by comma. + // NOTE: `parse_macro_input!` can't be build if function return type is not `TokenStream`. + let punctuated = parse_macro_input!(input with Punctuated::parse_terminated); + let mut punctuated_it = punctuated.into_iter(); + + // Parse string format into fragments. + let fragments = match parse_fragments(&mut punctuated_it) { + Ok(f) => f, + Err(e) => return e.to_compile_error().into(), + }; + + quote! { mw_log_fmt::Arguments(&[#(#fragments),*]) }.into() +} diff --git a/src/log/mw_log_fmt_macro/lib.rs b/src/log/mw_log_fmt_macro/lib.rs new file mode 100644 index 0000000000..d7ee7388ab --- /dev/null +++ b/src/log/mw_log_fmt_macro/lib.rs @@ -0,0 +1,39 @@ +// +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// +// +// SPDX-License-Identifier: Apache-2.0 +// + +//! Replacement for macros provided by Rust compiler: +//! - [`mw_log_format_args!`] - replacement for `format_args!` +//! - [`ScoreDebug`] - replacement for `Debug` + +// All errors should result in compilation error. +#![deny(clippy::unwrap_used)] +#![deny(clippy::expect_used)] +#![deny(clippy::panic)] + +mod format_args; +mod score_debug; + +/// Constructs parameters for the other string-formatting macros. +/// +/// This macro takes a formatting string literal containing `{}` for each additional argument. +/// [`mw_log_format_args!`] prepares the additional parameters to ensure the output can be interpreted as a message. +#[proc_macro] +pub fn mw_log_format_args(input: proc_macro::TokenStream) -> proc_macro::TokenStream { + format_args::expand(input) +} + +/// Automatically generate [`ScoreDebug`] implementation. +#[proc_macro_derive(ScoreDebug)] +pub fn score_debug(input: proc_macro::TokenStream) -> proc_macro::TokenStream { + score_debug::expand(input) +} diff --git a/src/log/mw_log_fmt_macro/score_debug.rs b/src/log/mw_log_fmt_macro/score_debug.rs new file mode 100644 index 0000000000..54881585b1 --- /dev/null +++ b/src/log/mw_log_fmt_macro/score_debug.rs @@ -0,0 +1,207 @@ +// +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// +// +// SPDX-License-Identifier: Apache-2.0 +// + +use quote::{format_ident, quote}; +use syn::{ + parse_macro_input, Data, DataEnum, DataStruct, DeriveInput, Error, Fields, Ident, ImplGenerics, Index, TypeGenerics, +}; + +/// Generate `ScoreDebug` implementation for struct. +fn generate_for_struct( + ident: Ident, + data_struct: DataStruct, + impl_generics: ImplGenerics, + ty_generics: TypeGenerics, +) -> Result { + // Generate `.fmt` implementations for struct types. + let struct_name = ident.to_string(); + let fmt_impl = match data_struct.fields { + // Regular struct - contains named fields. + Fields::Named(fields) => { + // Generate `.field` method calls for named fields. + let mut field_methods = Vec::new(); + for field in fields.named.into_iter() { + let ident = match field.ident { + Some(ident) => ident, + None => return Err(Error::new_spanned(field, "identifier not found")), + }; + let name = ident.to_string(); + field_methods.push(quote! { .field(#name, &self.#ident) }); + } + + // Generate `.fmt` implementation using named struct helper. + quote! { + mw_log_fmt::DebugStruct::new(f, spec, #struct_name) + #(#field_methods)* + .finish() + } + }, + + // Tuple struct - contains unnamed fields. + Fields::Unnamed(fields) => { + // Generate `.field` method calls for unnamed fields. + let mut field_methods = Vec::new(); + for index in 0..fields.unnamed.len() { + let syn_index = Index::from(index); + field_methods.push(quote! { .field(&self.#syn_index) }); + } + + // Generate `.fmt` implementation using named tuple helper. + quote! { + mw_log_fmt::DebugTuple::new(f, spec, #struct_name) + #(#field_methods)* + .finish() + } + }, + + // Unit struct - no fields. + Fields::Unit => { + quote! { + mw_log_fmt::DebugStruct::new(f, spec, #struct_name).finish() + } + }, + }; + + // Generate `ScoreDebug` implementation for provided struct. + Ok(quote! { + #[automatically_derived] + impl #impl_generics mw_log_fmt::ScoreDebug for #ident #ty_generics { + fn fmt(&self, f: mw_log_fmt::Writer, spec: &mw_log_fmt::FormatSpec) -> mw_log_fmt::Result { + #fmt_impl + } + } + }) +} + +/// Generate `ScoreDebug` implementation for enum. +fn generate_for_enum( + ident: Ident, + data_enum: DataEnum, + impl_generics: ImplGenerics, + ty_generics: TypeGenerics, +) -> Result { + // Handle technically legal empty enum definition. + if data_enum.variants.is_empty() { + return Ok(quote! { + #[automatically_derived] + impl #impl_generics mw_log_fmt::ScoreDebug for #ident #ty_generics { + fn fmt(&self, f: mw_log_fmt::Writer, spec: &mw_log_fmt::FormatSpec) -> mw_log_fmt::Result { + Ok(()) + } + } + }); + } + + // Generate implementations for each variant. + let mut variants = Vec::new(); + for variant in data_enum.variants { + let variant_ident = variant.ident; + let variant_name = variant_ident.to_string(); + + let variant_impl = match variant.fields { + Fields::Named(fields) => { + // Generate arg names and `.field` method calls for named fields. + let mut arg_names = Vec::new(); + let mut field_methods = Vec::new(); + for field in fields.named { + let ident = match field.ident { + Some(ident) => ident, + None => return Err(Error::new_spanned(field, "identifier not found")), + }; + let name = ident.to_string(); + arg_names.push(quote! { #ident }); + field_methods.push(quote! { .field(#name, #ident) }); + } + + // Generate variant match implementation. + quote! { + Self::#variant_ident { #(#arg_names),* } => { + mw_log_fmt::DebugStruct::new(f, spec, #variant_name) + #(#field_methods)* + .finish() + }, + } + }, + Fields::Unnamed(fields) => { + // Generate arg names and `.field` method calls for unnamed fields. + let mut arg_names = Vec::new(); + let mut field_methods = Vec::new(); + for index in 0..fields.unnamed.len() { + let arg_name = format_ident!("arg{}", index); + arg_names.push(quote! { #arg_name }); + field_methods.push(quote! { .field(#arg_name) }); + } + + // Generate variant match implementation. + quote! { + Self::#variant_ident (#(#arg_names),*) => { + mw_log_fmt::DebugTuple::new(f, spec, #variant_name) + #(#field_methods)* + .finish() + }, + } + }, + Fields::Unit => { + quote! { + Self::#variant_ident => f.write_str(#variant_name, spec), + } + }, + }; + + variants.push(variant_impl) + } + + // Generate `ScoreDebug` implementation for provided enum. + Ok(quote! { + #[automatically_derived] + impl #impl_generics mw_log_fmt::ScoreDebug for #ident #ty_generics { + fn fmt(&self, f: mw_log_fmt::Writer, spec: &mw_log_fmt::FormatSpec) -> mw_log_fmt::Result { + match self { + #(#variants)* + } + } + } + }) +} + +/// Generate `ScoreDebug` implementation. +fn generate_score_debug(derive_input: DeriveInput) -> Result { + let DeriveInput { + attrs: _, + vis: _, + ident, + generics, + data, + } = derive_input; + + // Split generics. + let (impl_generics, ty_generics, _) = generics.split_for_impl(); + + match data { + Data::Struct(data_struct) => generate_for_struct(ident, data_struct, impl_generics, ty_generics), + Data::Enum(data_enum) => generate_for_enum(ident, data_enum, impl_generics, ty_generics), + Data::Union(_) => Err(Error::new( + proc_macro2::Span::call_site(), + "`#[derive(ScoreDebug)] does not support unions`", + )), + } +} + +pub(crate) fn expand(input: proc_macro::TokenStream) -> proc_macro::TokenStream { + let derive_input = parse_macro_input!(input as DeriveInput); + match generate_score_debug(derive_input) { + Ok(token_stream) => token_stream, + Err(e) => e.into_compile_error(), + } + .into() +} diff --git a/src/log/mw_log_fmt_macro/tests/test_format_args.rs b/src/log/mw_log_fmt_macro/tests/test_format_args.rs new file mode 100644 index 0000000000..27c78a3356 --- /dev/null +++ b/src/log/mw_log_fmt_macro/tests/test_format_args.rs @@ -0,0 +1,308 @@ +// +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// +// +// SPDX-License-Identifier: Apache-2.0 +// + +//! Tests for `mw_log_format_args`. +//! +//! Only positive paths can be checked with regular unit tests. +//! This is due to error paths resulting in compilation errors (as expected with proc macros). +//! +//! Results are compared with Rust built-in `format_args` macro. + +// TODO: tests fail for `+nightly-2025-05-30` and older. +// Remove `#[cfg(not(miri))]` once updated in CI. +// https://github.com/eclipse-score/baselibs_rust/issues/31 + +mod utils; + +use crate::utils::StringWriter; +use mw_log_fmt::{write, Alignment, DebugAsHex, DisplayHint, Fragment, Sign}; +use mw_log_fmt_macro::mw_log_format_args; + +#[track_caller] +fn common_format_args_test( + mw_log_args: mw_log_fmt::Arguments, + std_args: core::fmt::Arguments, + expected_num_fragments: usize, + expected_output: &str, +) { + // Write data to string. + let mut w = StringWriter::new(); + let _ = write(&mut w, mw_log_args).map_err(|_| panic!("write failed")); + + // Check `mw_log` args. + assert_eq!(mw_log_args.0.len(), expected_num_fragments); + assert_eq!(w.get(), expected_output); + + // Compare with Rust built-in format args. + let expected = std::fmt::format(std_args); + assert_eq!(w.get(), expected); +} + +#[test] +fn test_single_literal() { + let mw_log_args = mw_log_format_args!("test_string"); + let core_fmt_args = format_args!("test_string"); + common_format_args_test(mw_log_args, core_fmt_args, 1, "test_string"); +} + +#[test] +fn test_escaped_braces() { + let mw_log_args = mw_log_format_args!("{{}}}}{{"); + let core_fmt_args = format_args!("{{}}}}{{"); + common_format_args_test(mw_log_args, core_fmt_args, 1, "{}}{"); +} + +#[test] +#[cfg(not(miri))] +fn test_single_placeholder() { + let mw_log_args = mw_log_format_args!("{}", 123); + let core_fmt_args = format_args!("{}", 123); + common_format_args_test(mw_log_args, core_fmt_args, 1, "123"); +} + +#[test] +#[cfg(not(miri))] +fn test_mixed_literals_and_placeholders() { + let mw_log_args = mw_log_format_args!("test_{}_string", 321); + let core_fmt_args = format_args!("test_{}_string", 321); + common_format_args_test(mw_log_args, core_fmt_args, 3, "test_321_string"); +} + +#[test] +#[cfg(not(miri))] +fn test_arg_index() { + let mw_log_args = mw_log_format_args!("test_{2}_{1}_{0}", 123, 234, 345); + let core_fmt_args = format_args!("test_{2}_{1}_{0}", 123, 234, 345); + common_format_args_test(mw_log_args, core_fmt_args, 6, "test_345_234_123"); +} + +#[test] +#[cfg(not(miri))] +fn test_arg_pos_and_index() { + let mw_log_args = mw_log_format_args!("test_{2}_{}_{1}_{}_{0}", 123, 234, 345); + let core_fmt_args = format_args!("test_{2}_{}_{1}_{}_{0}", 123, 234, 345); + common_format_args_test(mw_log_args, core_fmt_args, 10, "test_345_123_234_234_123"); +} + +#[test] +#[cfg(not(miri))] +fn test_arg_name() { + let x1 = 123; + let x2 = 234; + let x3 = 345; + let mw_log_args = mw_log_format_args!("test_{x3}_{x2}_{x1}", x1, x2, x3); + // NOTE: known misalignment. + // It is not allowed to have redundant arguments in Rust (`("{x1}", x1)`). + // This is currently not possible to do using `mw_log_format_args`. + let core_fmt_args = format_args!("test_{x3}_{x2}_{x1}"); + common_format_args_test(mw_log_args, core_fmt_args, 6, "test_345_234_123"); +} + +#[test] +#[cfg(not(miri))] +fn test_arg_name_alias() { + let x1 = 123; + let x2 = 234; + let x3 = 345; + let mw_log_args = mw_log_format_args!("test_{a3}_{a2}_{a1}", a1 = x1, a2 = x2, a3 = x3); + let core_fmt_args = format_args!("test_{a3}_{a2}_{a1}", a1 = x1, a2 = x2, a3 = x3); + common_format_args_test(mw_log_args, core_fmt_args, 6, "test_345_234_123"); +} + +#[test] +#[cfg(not(miri))] +fn test_arg_pos_and_name() { + let x1 = 123; + let x2 = 234; + let x3 = 345; + let mw_log_args = mw_log_format_args!("test_{x3}_{}_{x2}_{}_{x1}", x1, x2, x3); + // NOTE: known misalignment. + // It is not allowed to have redundant arguments in Rust (`("{x1}", x1)`). + // This is currently not possible to do using `mw_log_format_args`. + let core_fmt_args = format_args!("test_{x3}_{}_{x2}_{}_{x1}", x1, x2); + common_format_args_test(mw_log_args, core_fmt_args, 10, "test_345_123_234_234_123"); +} + +#[test] +#[cfg(not(miri))] +fn test_arg_mixed() { + let x1 = 111; + let x2 = 222; + let mw_log_args = mw_log_format_args!("test_{x1}_{1}_{}", x1, x2); + let core_fmt_args = format_args!("test_{x1}_{1}_{}", x1, x2); + common_format_args_test(mw_log_args, core_fmt_args, 6, "test_111_222_111"); +} + +#[test] +#[cfg(not(miri))] +fn test_format_spec_empty() { + let args = mw_log_format_args!("{:}", 123); + + let placeholder = match args.0.first().unwrap() { + Fragment::Literal(_) => panic!("invalid variant"), + Fragment::Placeholder(placeholder) => placeholder, + }; + + let format_spec = placeholder.format_spec(); + assert!(format_spec.get_display_hint() == DisplayHint::NoHint); + assert_eq!(format_spec.get_fill(), ' '); + assert!(format_spec.get_align().is_none()); + assert!(format_spec.get_sign().is_none()); + assert!(!format_spec.get_alternate()); + assert!(!format_spec.get_zero_pad()); + assert!(format_spec.get_debug_as_hex().is_none()); + assert_eq!(format_spec.get_width(), None); + assert_eq!(format_spec.get_precision(), None); +} + +#[test] +#[cfg(not(miri))] +fn test_format_spec_all() { + let args = mw_log_format_args!("{:c<-#0333.555x}", 123); + + let placeholder = match args.0.first().unwrap() { + Fragment::Literal(_) => panic!("invalid variant"), + Fragment::Placeholder(placeholder) => placeholder, + }; + + let format_spec = placeholder.format_spec(); + assert!(format_spec.get_display_hint() == DisplayHint::LowerHex); + assert_eq!(format_spec.get_fill(), 'c'); + assert!(format_spec.get_align() == Some(Alignment::Left)); + assert!(format_spec.get_sign() == Some(Sign::Minus)); + assert!(format_spec.get_alternate()); + assert!(format_spec.get_zero_pad()); + assert!(format_spec.get_debug_as_hex().is_none()); + assert_eq!(format_spec.get_width(), Some(333)); + assert_eq!(format_spec.get_precision(), Some(555)); +} + +#[test] +#[cfg(not(miri))] +fn test_format_spec_debug() { + let args = mw_log_format_args!("{:#X?}", 123); + + let placeholder = match args.0.first().unwrap() { + Fragment::Literal(_) => panic!("invalid variant"), + Fragment::Placeholder(placeholder) => placeholder, + }; + + let format_spec = placeholder.format_spec(); + assert!(format_spec.get_display_hint() == DisplayHint::Debug); + assert_eq!(format_spec.get_fill(), ' '); + assert!(format_spec.get_align().is_none()); + assert!(format_spec.get_sign().is_none()); + assert!(format_spec.get_alternate()); + assert!(!format_spec.get_zero_pad()); + assert!(format_spec.get_debug_as_hex() == Some(DebugAsHex::Upper)); + assert_eq!(format_spec.get_width(), None); + assert_eq!(format_spec.get_precision(), None); +} + +#[test] +#[cfg(not(miri))] +fn test_format_spec_display_hint_octal() { + let args = mw_log_format_args!("{:o}", 123); + + let placeholder = match args.0.first().unwrap() { + Fragment::Literal(_) => panic!("invalid variant"), + Fragment::Placeholder(placeholder) => placeholder, + }; + + let format_spec = placeholder.format_spec(); + assert!(format_spec.get_display_hint() == DisplayHint::Octal); +} + +#[test] +#[cfg(not(miri))] +fn test_format_spec_display_hint_lower_hex() { + let args = mw_log_format_args!("{:x}", 123); + + let placeholder = match args.0.first().unwrap() { + Fragment::Literal(_) => panic!("invalid variant"), + Fragment::Placeholder(placeholder) => placeholder, + }; + + let format_spec = placeholder.format_spec(); + assert!(format_spec.get_display_hint() == DisplayHint::LowerHex); +} + +#[test] +#[cfg(not(miri))] +fn test_format_spec_display_hint_upper_hex() { + let args = mw_log_format_args!("{:X}", 123); + + let placeholder = match args.0.first().unwrap() { + Fragment::Literal(_) => panic!("invalid variant"), + Fragment::Placeholder(placeholder) => placeholder, + }; + + let format_spec = placeholder.format_spec(); + assert!(format_spec.get_display_hint() == DisplayHint::UpperHex); +} + +#[test] +#[cfg(not(miri))] +fn test_format_spec_display_hint_pointer() { + let args = mw_log_format_args!("{:p}", 123); + + let placeholder = match args.0.first().unwrap() { + Fragment::Literal(_) => panic!("invalid variant"), + Fragment::Placeholder(placeholder) => placeholder, + }; + + let format_spec = placeholder.format_spec(); + assert!(format_spec.get_display_hint() == DisplayHint::Pointer); +} + +#[test] +#[cfg(not(miri))] +fn test_format_spec_display_hint_binary() { + let args = mw_log_format_args!("{:b}", 123); + + let placeholder = match args.0.first().unwrap() { + Fragment::Literal(_) => panic!("invalid variant"), + Fragment::Placeholder(placeholder) => placeholder, + }; + + let format_spec = placeholder.format_spec(); + assert!(format_spec.get_display_hint() == DisplayHint::Binary); +} + +#[test] +#[cfg(not(miri))] +fn test_format_spec_display_hint_lower_exp() { + let args = mw_log_format_args!("{:e}", 123); + + let placeholder = match args.0.first().unwrap() { + Fragment::Literal(_) => panic!("invalid variant"), + Fragment::Placeholder(placeholder) => placeholder, + }; + + let format_spec = placeholder.format_spec(); + assert!(format_spec.get_display_hint() == DisplayHint::LowerExp); +} + +#[test] +#[cfg(not(miri))] +fn test_format_spec_display_hint_upper_exp() { + let args = mw_log_format_args!("{:E}", 123); + + let placeholder = match args.0.first().unwrap() { + Fragment::Literal(_) => panic!("invalid variant"), + Fragment::Placeholder(placeholder) => placeholder, + }; + + let format_spec = placeholder.format_spec(); + assert!(format_spec.get_display_hint() == DisplayHint::UpperExp); +} diff --git a/src/log/mw_log_fmt_macro/tests/test_score_debug.rs b/src/log/mw_log_fmt_macro/tests/test_score_debug.rs new file mode 100644 index 0000000000..e11590d867 --- /dev/null +++ b/src/log/mw_log_fmt_macro/tests/test_score_debug.rs @@ -0,0 +1,176 @@ +// +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// +// +// SPDX-License-Identifier: Apache-2.0 +// + +//! Tests for `ScoreDebug` derive macro. +//! +//! Only positive paths can be checked with regular unit tests. +//! This is due to error paths resulting in compilation errors (as expected with proc macros). +//! +//! Results are compared with Rust built-in `Debug` derive macro. + +// TODO: tests fail for `+nightly-2025-05-30` and older. +// Remove `#[cfg(not(miri))]` once updated in CI. +// https://github.com/eclipse-score/baselibs_rust/issues/31 + +mod utils; + +use crate::utils::StringWriter; +use mw_log_fmt::{write, ScoreDebug}; +use mw_log_fmt_macro::{mw_log_format_args, ScoreDebug}; + +#[test] +#[cfg(not(miri))] +fn test_struct_named() { + #[derive(Debug, ScoreDebug)] + struct Point { + x: i32, + y: i32, + name: String, + } + + let p = Point { + x: 123, + y: -321, + name: "example".to_string(), + }; + + let args = mw_log_format_args!("{:?}", p); + let mut w = StringWriter::new(); + let _ = write(&mut w, args).map_err(|_| panic!("write failed")); + + // Compare with Rust built-in `Debug` derive macro. + let expected = format!("{:?}", p); + assert_eq!(w.get(), expected); +} + +#[test] +#[cfg(not(miri))] +fn test_struct_unnamed() { + #[derive(Debug, ScoreDebug)] + struct Point(i32, i32, String); + + let p = Point(123, -123, "example".to_string()); + + let args = mw_log_format_args!("{:?}", p); + let mut w = StringWriter::new(); + let _ = write(&mut w, args).map_err(|_| panic!("write failed")); + + // Compare with Rust built-in `Debug` derive macro. + let expected = format!("{:?}", p); + assert_eq!(w.get(), expected); +} + +#[test] +#[cfg(not(miri))] +fn test_struct_unit() { + #[derive(Debug, ScoreDebug)] + struct UnitStruct; + + let unit_struct = UnitStruct; + + let args = mw_log_format_args!("{:?}", unit_struct); + let mut w = StringWriter::new(); + let _ = write(&mut w, args).map_err(|_| panic!("write failed")); + + // Compare with Rust built-in `Debug` derive macro. + let expected = format!("{:?}", unit_struct); + assert_eq!(w.get(), expected); +} + +#[test] +#[cfg(not(miri))] +fn test_struct_generics() { + #[derive(Debug, ScoreDebug)] + // #[derive(Debug)] + struct Example<'a, const N: usize, T: PartialEq + ScoreDebug> { + lifetime: &'a str, + generic: [T; N], + } + + let p = Example { + lifetime: "example", + generic: [123; 10], + }; + + let args = mw_log_format_args!("{:?}", p); + let mut w = StringWriter::new(); + let _ = write(&mut w, args).map_err(|_| panic!("write failed")); + + // Compare with Rust built-in `Debug` derive macro. + let expected = format!("{:?}", p); + assert_eq!(w.get(), expected); +} + +#[test] +#[cfg(not(miri))] +fn test_enum_plain() { + #[allow(dead_code)] + #[derive(Debug, ScoreDebug)] + enum Flag { + Ignored, + Optional, + Required, + } + + let flag = Flag::Optional; + + let args = mw_log_format_args!("{:?}", flag); + let mut w = StringWriter::new(); + let _ = write(&mut w, args).map_err(|_| panic!("write failed")); + + // Compare with Rust built-in `Debug` derive macro. + let expected = format!("{:?}", flag); + assert_eq!(w.get(), expected); +} + +#[test] +#[cfg(not(miri))] +fn test_enum_nested() { + #[allow(dead_code)] + #[derive(Debug, ScoreDebug)] + enum Variant<'a> { + Int(i32, i16), + Bool(bool), + String(String), + Nothing, + Nested(&'a Variant<'a>), + Struct { x: i32, y: i32 }, + } + + let nested = Variant::Bool(true); + let cases = [ + Variant::Int(135, 321), + Variant::Bool(true), + Variant::String("example".to_string()), + Variant::Nothing, + Variant::Nested(&nested), + Variant::Struct { x: 333, y: 444 }, + ]; + + for case in cases { + let args = mw_log_format_args!("{:?}", case); + let mut w = StringWriter::new(); + let _ = write(&mut w, args).map_err(|_| panic!("write failed")); + + // Compare with Rust built-in `Debug` derive macro. + let expected = format!("{:?}", case); + assert_eq!(w.get(), expected); + } +} + +#[test] +fn test_enum_empty() { + #[allow(dead_code)] + #[derive(ScoreDebug)] + enum X {} +} diff --git a/src/log/mw_log_fmt_macro/tests/tests.rs b/src/log/mw_log_fmt_macro/tests/tests.rs new file mode 100644 index 0000000000..4483c5ed38 --- /dev/null +++ b/src/log/mw_log_fmt_macro/tests/tests.rs @@ -0,0 +1,14 @@ +// +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// +// +// SPDX-License-Identifier: Apache-2.0 +// + +//! Workaround for `rust_test` Bazel target not being able to run without `crate_root`. diff --git a/src/log/mw_log_fmt_macro/tests/utils/mod.rs b/src/log/mw_log_fmt_macro/tests/utils/mod.rs new file mode 100644 index 0000000000..b06870d616 --- /dev/null +++ b/src/log/mw_log_fmt_macro/tests/utils/mod.rs @@ -0,0 +1,81 @@ +// +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// +// +// SPDX-License-Identifier: Apache-2.0 +// + +use core::fmt::Write; +use mw_log_fmt::{Error, FormatSpec, Result, ScoreWrite}; + +/// Writer implementation. +/// Writes everything to a string, so it can be compared with `format` macro. +pub(crate) struct StringWriter { + buf: String, +} + +impl StringWriter { + pub fn new() -> Self { + Self { buf: String::new() } + } + + pub fn get(&self) -> &str { + self.buf.as_str() + } +} + +impl ScoreWrite for StringWriter { + fn write_bool(&mut self, v: &bool, _spec: &FormatSpec) -> Result { + write!(self.buf, "{}", v).map_err(|_| Error) + } + + fn write_f32(&mut self, v: &f32, _spec: &FormatSpec) -> Result { + write!(self.buf, "{}", v).map_err(|_| Error) + } + + fn write_f64(&mut self, v: &f64, _spec: &FormatSpec) -> Result { + write!(self.buf, "{}", v).map_err(|_| Error) + } + + fn write_i8(&mut self, v: &i8, _spec: &FormatSpec) -> Result { + write!(self.buf, "{}", v).map_err(|_| Error) + } + + fn write_i16(&mut self, v: &i16, _spec: &FormatSpec) -> Result { + write!(self.buf, "{}", v).map_err(|_| Error) + } + + fn write_i32(&mut self, v: &i32, _spec: &FormatSpec) -> Result { + write!(self.buf, "{}", v).map_err(|_| Error) + } + + fn write_i64(&mut self, v: &i64, _spec: &FormatSpec) -> Result { + write!(self.buf, "{}", v).map_err(|_| Error) + } + + fn write_u8(&mut self, v: &u8, _spec: &FormatSpec) -> Result { + write!(self.buf, "{}", v).map_err(|_| Error) + } + + fn write_u16(&mut self, v: &u16, _spec: &FormatSpec) -> Result { + write!(self.buf, "{}", v).map_err(|_| Error) + } + + fn write_u32(&mut self, v: &u32, _spec: &FormatSpec) -> Result { + write!(self.buf, "{}", v).map_err(|_| Error) + } + + fn write_u64(&mut self, v: &u64, _spec: &FormatSpec) -> Result { + write!(self.buf, "{}", v).map_err(|_| Error) + } + + fn write_str(&mut self, v: &str, _spec: &FormatSpec) -> Result { + write!(self.buf, "{}", v).map_err(|_| Error) + } +} From c9f39fa12edab071fe6302046e92bcca8b47fb7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arkadiusz=20J=C4=99drzejewski?= Date: Thu, 18 Dec 2025 10:17:08 +0000 Subject: [PATCH 22/59] infra: unblock tests for Miri - Bump nightly version in CI. - Remove conditional tests run for Miri. --- .github/workflows/cargo_required.yml | 13 ++++------- .../tests/test_format_args.rs | 22 ------------------- .../tests/test_score_debug.rs | 10 --------- 3 files changed, 4 insertions(+), 41 deletions(-) diff --git a/.github/workflows/cargo_required.yml b/.github/workflows/cargo_required.yml index a4921c15cc..2383d2a532 100644 --- a/.github/workflows/cargo_required.yml +++ b/.github/workflows/cargo_required.yml @@ -61,14 +61,14 @@ jobs: uses: actions-rs/toolchain@v1 if: github.event.pull_request.draft == false with: - toolchain: nightly-2025-05-30 + toolchain: nightly-2025-12-15 profile: minimal components: miri override: true - name: Prefetch crates for nightly if: github.event.pull_request.draft == false - run: cargo +nightly-2025-05-30 fetch --locked + run: cargo +nightly-2025-12-15 fetch --locked - name: Purge Miri artifacts if: github.event.pull_request.draft == false @@ -78,7 +78,7 @@ jobs: - name: Prefetch and build dependencies for Miri if: github.event.pull_request.draft == false - run: cargo +nightly-2025-05-30 miri setup + run: cargo +nightly-2025-12-15 miri setup - name: Run Miri and save report if: github.event.pull_request.draft == false @@ -86,9 +86,4 @@ jobs: CARGO_INCREMENTAL: "0" # turn off incremental run: | set -o pipefail - cargo +nightly-2025-05-30 miri test --workspace \ - -- --skip test_mt_one_pop_one_stealer \ - --skip test_mt_one_push_mpmc_one_stealer \ - --skip test_one_producer_multi_stealer_mt_thread \ - --skip test_one_producer_one_stealer_mt_thread \ - 2>&1 | tee miri_report.txt + cargo +nightly-2025-12-15 miri test --workspace 2>&1 | tee miri_report.txt diff --git a/src/log/mw_log_fmt_macro/tests/test_format_args.rs b/src/log/mw_log_fmt_macro/tests/test_format_args.rs index 27c78a3356..d4c56a4ca2 100644 --- a/src/log/mw_log_fmt_macro/tests/test_format_args.rs +++ b/src/log/mw_log_fmt_macro/tests/test_format_args.rs @@ -18,10 +18,6 @@ //! //! Results are compared with Rust built-in `format_args` macro. -// TODO: tests fail for `+nightly-2025-05-30` and older. -// Remove `#[cfg(not(miri))]` once updated in CI. -// https://github.com/eclipse-score/baselibs_rust/issues/31 - mod utils; use crate::utils::StringWriter; @@ -63,7 +59,6 @@ fn test_escaped_braces() { } #[test] -#[cfg(not(miri))] fn test_single_placeholder() { let mw_log_args = mw_log_format_args!("{}", 123); let core_fmt_args = format_args!("{}", 123); @@ -71,7 +66,6 @@ fn test_single_placeholder() { } #[test] -#[cfg(not(miri))] fn test_mixed_literals_and_placeholders() { let mw_log_args = mw_log_format_args!("test_{}_string", 321); let core_fmt_args = format_args!("test_{}_string", 321); @@ -79,7 +73,6 @@ fn test_mixed_literals_and_placeholders() { } #[test] -#[cfg(not(miri))] fn test_arg_index() { let mw_log_args = mw_log_format_args!("test_{2}_{1}_{0}", 123, 234, 345); let core_fmt_args = format_args!("test_{2}_{1}_{0}", 123, 234, 345); @@ -87,7 +80,6 @@ fn test_arg_index() { } #[test] -#[cfg(not(miri))] fn test_arg_pos_and_index() { let mw_log_args = mw_log_format_args!("test_{2}_{}_{1}_{}_{0}", 123, 234, 345); let core_fmt_args = format_args!("test_{2}_{}_{1}_{}_{0}", 123, 234, 345); @@ -95,7 +87,6 @@ fn test_arg_pos_and_index() { } #[test] -#[cfg(not(miri))] fn test_arg_name() { let x1 = 123; let x2 = 234; @@ -109,7 +100,6 @@ fn test_arg_name() { } #[test] -#[cfg(not(miri))] fn test_arg_name_alias() { let x1 = 123; let x2 = 234; @@ -120,7 +110,6 @@ fn test_arg_name_alias() { } #[test] -#[cfg(not(miri))] fn test_arg_pos_and_name() { let x1 = 123; let x2 = 234; @@ -134,7 +123,6 @@ fn test_arg_pos_and_name() { } #[test] -#[cfg(not(miri))] fn test_arg_mixed() { let x1 = 111; let x2 = 222; @@ -144,7 +132,6 @@ fn test_arg_mixed() { } #[test] -#[cfg(not(miri))] fn test_format_spec_empty() { let args = mw_log_format_args!("{:}", 123); @@ -166,7 +153,6 @@ fn test_format_spec_empty() { } #[test] -#[cfg(not(miri))] fn test_format_spec_all() { let args = mw_log_format_args!("{:c<-#0333.555x}", 123); @@ -188,7 +174,6 @@ fn test_format_spec_all() { } #[test] -#[cfg(not(miri))] fn test_format_spec_debug() { let args = mw_log_format_args!("{:#X?}", 123); @@ -210,7 +195,6 @@ fn test_format_spec_debug() { } #[test] -#[cfg(not(miri))] fn test_format_spec_display_hint_octal() { let args = mw_log_format_args!("{:o}", 123); @@ -224,7 +208,6 @@ fn test_format_spec_display_hint_octal() { } #[test] -#[cfg(not(miri))] fn test_format_spec_display_hint_lower_hex() { let args = mw_log_format_args!("{:x}", 123); @@ -238,7 +221,6 @@ fn test_format_spec_display_hint_lower_hex() { } #[test] -#[cfg(not(miri))] fn test_format_spec_display_hint_upper_hex() { let args = mw_log_format_args!("{:X}", 123); @@ -252,7 +234,6 @@ fn test_format_spec_display_hint_upper_hex() { } #[test] -#[cfg(not(miri))] fn test_format_spec_display_hint_pointer() { let args = mw_log_format_args!("{:p}", 123); @@ -266,7 +247,6 @@ fn test_format_spec_display_hint_pointer() { } #[test] -#[cfg(not(miri))] fn test_format_spec_display_hint_binary() { let args = mw_log_format_args!("{:b}", 123); @@ -280,7 +260,6 @@ fn test_format_spec_display_hint_binary() { } #[test] -#[cfg(not(miri))] fn test_format_spec_display_hint_lower_exp() { let args = mw_log_format_args!("{:e}", 123); @@ -294,7 +273,6 @@ fn test_format_spec_display_hint_lower_exp() { } #[test] -#[cfg(not(miri))] fn test_format_spec_display_hint_upper_exp() { let args = mw_log_format_args!("{:E}", 123); diff --git a/src/log/mw_log_fmt_macro/tests/test_score_debug.rs b/src/log/mw_log_fmt_macro/tests/test_score_debug.rs index e11590d867..d32e207b25 100644 --- a/src/log/mw_log_fmt_macro/tests/test_score_debug.rs +++ b/src/log/mw_log_fmt_macro/tests/test_score_debug.rs @@ -18,10 +18,6 @@ //! //! Results are compared with Rust built-in `Debug` derive macro. -// TODO: tests fail for `+nightly-2025-05-30` and older. -// Remove `#[cfg(not(miri))]` once updated in CI. -// https://github.com/eclipse-score/baselibs_rust/issues/31 - mod utils; use crate::utils::StringWriter; @@ -29,7 +25,6 @@ use mw_log_fmt::{write, ScoreDebug}; use mw_log_fmt_macro::{mw_log_format_args, ScoreDebug}; #[test] -#[cfg(not(miri))] fn test_struct_named() { #[derive(Debug, ScoreDebug)] struct Point { @@ -54,7 +49,6 @@ fn test_struct_named() { } #[test] -#[cfg(not(miri))] fn test_struct_unnamed() { #[derive(Debug, ScoreDebug)] struct Point(i32, i32, String); @@ -71,7 +65,6 @@ fn test_struct_unnamed() { } #[test] -#[cfg(not(miri))] fn test_struct_unit() { #[derive(Debug, ScoreDebug)] struct UnitStruct; @@ -88,7 +81,6 @@ fn test_struct_unit() { } #[test] -#[cfg(not(miri))] fn test_struct_generics() { #[derive(Debug, ScoreDebug)] // #[derive(Debug)] @@ -112,7 +104,6 @@ fn test_struct_generics() { } #[test] -#[cfg(not(miri))] fn test_enum_plain() { #[allow(dead_code)] #[derive(Debug, ScoreDebug)] @@ -134,7 +125,6 @@ fn test_enum_plain() { } #[test] -#[cfg(not(miri))] fn test_enum_nested() { #[allow(dead_code)] #[derive(Debug, ScoreDebug)] From 08492d095fe478f2ceea3411ab94d63a6102d4c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arkadiusz=20J=C4=99drzejewski?= Date: Thu, 11 Dec 2025 11:04:51 +0000 Subject: [PATCH 23/59] log: `mw_log` implementation - Replacement for `log` crate. - Additional common types implementation. - Selectable safety level features (`asil_b`, `qm`). - Unit tests. --- Cargo.toml | 27 +- MODULE.bazel | 12 +- examples/log_example/BUILD | 22 + examples/log_example/Cargo.toml | 24 + examples/log_example/src/logger.rs | 109 +++ examples/log_example/src/main.rs | 36 + src/log/BUILD | 36 + src/log/mw_log/BUILD | 34 + src/log/mw_log/Cargo.toml | 29 + src/log/mw_log/lib.rs | 854 ++++++++++++++++++++++++ src/log/mw_log/macros.rs | 446 +++++++++++++ src/log/mw_log/tests/integration.rs | 82 +++ src/log/mw_log/tests/macros.rs | 173 +++++ src/log/mw_log_fmt/BUILD | 10 +- src/log/mw_log_fmt/builders.rs | 20 +- src/log/mw_log_fmt/fmt.rs | 4 +- src/log/mw_log_fmt/fmt_impl.rs | 126 +++- src/log/mw_log_fmt/macros.rs | 3 +- src/log/mw_log_fmt/test_utils.rs | 6 +- src/log/mw_log_fmt_macro/BUILD | 5 +- src/log/mw_log_fmt_macro/Cargo.toml | 3 + src/log/mw_log_fmt_macro/format_args.rs | 90 ++- src/log/mw_log_fmt_macro/score_debug.rs | 22 +- 23 files changed, 2110 insertions(+), 63 deletions(-) create mode 100644 examples/log_example/BUILD create mode 100644 examples/log_example/Cargo.toml create mode 100644 examples/log_example/src/logger.rs create mode 100644 examples/log_example/src/main.rs create mode 100644 src/log/mw_log/BUILD create mode 100644 src/log/mw_log/Cargo.toml create mode 100644 src/log/mw_log/lib.rs create mode 100644 src/log/mw_log/macros.rs create mode 100644 src/log/mw_log/tests/integration.rs create mode 100644 src/log/mw_log/tests/macros.rs diff --git a/Cargo.toml b/Cargo.toml index fcbc35e8f5..b4772bc5cf 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,15 +1,34 @@ +# ******************************************************************************* +# Copyright (c) 2025 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* + [workspace] resolver = "2" # Split to default members without tests and examples. # Used when executing cargo from project root. default-members = [ "src/containers", + "src/log/mw_log", "src/log/mw_log_fmt", "src/log/mw_log_fmt_macro", ] # Include tests and examples as a member for IDE support and Bazel builds. -members = ["src/containers", "src/log/mw_log_fmt", "src/log/mw_log_fmt_macro"] - +members = [ + "src/containers", + "src/log/mw_log", + "src/log/mw_log_fmt", + "src/log/mw_log_fmt_macro", + "examples/log_example", +] [workspace.package] version = "0.0.1" @@ -17,17 +36,15 @@ edition = "2021" license-file = "LICENSE.md" authors = ["S-CORE Contributors"] - [workspace.dependencies] +mw_log = { path = "src/log/mw_log" } mw_log_fmt = { path = "src/log/mw_log_fmt" } mw_log_fmt_macro = { path = "src/log/mw_log_fmt_macro" } - [workspace.lints.clippy] std_instead_of_core = "warn" alloc_instead_of_core = "warn" - [workspace.lints.rust] unexpected_cfgs = { level = "warn", check-cfg = ['cfg(loom)'] } missing_docs = "warn" diff --git a/MODULE.bazel b/MODULE.bazel index 2b7eadaf0e..a7178abb51 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -33,7 +33,7 @@ bazel_dep(name = "score_rust_policies", version = "0.0.3") bazel_dep(name = "score_process", version = "1.4.0", dev_dependency = True) bazel_dep(name = "score_platform", version = "0.5.1", dev_dependency = True) # This is main score repo -bazel_dep(name = "score_virtualization", version = "0.0.1", dev_dependency = True) +# bazel_dep(name = "score_virtualization", version = "0.0.1", dev_dependency = True) # Toolchains and extensions bazel_dep(name = "score_toolchains_gcc", version = "0.5", dev_dependency = True) @@ -57,11 +57,11 @@ git_override( remote = "https://github.com/eclipse-score/toolchains_rust.git", ) -git_override( - module_name = "score_virtualization", - commit = "99d3f153c43796b67a63e82aad1ede6a881aa6af", - remote = "https://github.com/qorix-group/score_virtualization.git", -) +# git_override( +# module_name = "score_virtualization", +# commit = "99d3f153c43796b67a63e82aad1ede6a881aa6af", +# remote = "https://github.com/qorix-group/score_virtualization.git", +# ) archive_override( module_name = "rust_qnx8_toolchain", diff --git a/examples/log_example/BUILD b/examples/log_example/BUILD new file mode 100644 index 0000000000..6b44c55fc8 --- /dev/null +++ b/examples/log_example/BUILD @@ -0,0 +1,22 @@ +# ******************************************************************************* +# Copyright (c) 2025 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* + +load("@rules_rust//rust:defs.bzl", "rust_binary") + +rust_binary( + name = "log_example", + srcs = glob(["src/**/*.rs"]), + deps = [ + "//src/log/mw_log", + ], +) diff --git a/examples/log_example/Cargo.toml b/examples/log_example/Cargo.toml new file mode 100644 index 0000000000..839d2240ff --- /dev/null +++ b/examples/log_example/Cargo.toml @@ -0,0 +1,24 @@ +# ******************************************************************************* +# Copyright (c) 2025 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* + +[package] +name = "log_example" +version.workspace = true +authors.workspace = true +edition.workspace = true + +[dependencies] +mw_log.workspace = true + +[lints] +workspace = true diff --git a/examples/log_example/src/logger.rs b/examples/log_example/src/logger.rs new file mode 100644 index 0000000000..9a1baf1cf5 --- /dev/null +++ b/examples/log_example/src/logger.rs @@ -0,0 +1,109 @@ +// +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// +// +// SPDX-License-Identifier: Apache-2.0 +// + +use core::fmt::Write; +use mw_log::fmt::{write, Error, FormatSpec, Result as FmtResult, ScoreWrite}; +use mw_log::{max_level, Log, Metadata, Record}; + +struct StringWriter { + buffer: String, +} + +impl StringWriter { + pub fn new() -> Self { + Self { buffer: String::new() } + } + + pub fn get(&self) -> &str { + self.buffer.as_str() + } +} + +impl ScoreWrite for StringWriter { + fn write_bool(&mut self, v: &bool, _spec: &FormatSpec) -> FmtResult { + write!(self.buffer, "{}", v).map_err(|_| Error) + } + + fn write_f32(&mut self, v: &f32, _spec: &FormatSpec) -> FmtResult { + write!(self.buffer, "{}", v).map_err(|_| Error) + } + + fn write_f64(&mut self, v: &f64, _spec: &FormatSpec) -> FmtResult { + write!(self.buffer, "{}", v).map_err(|_| Error) + } + + fn write_i8(&mut self, v: &i8, _spec: &FormatSpec) -> FmtResult { + write!(self.buffer, "{}", v).map_err(|_| Error) + } + + fn write_i16(&mut self, v: &i16, _spec: &FormatSpec) -> FmtResult { + write!(self.buffer, "{}", v).map_err(|_| Error) + } + + fn write_i32(&mut self, v: &i32, _spec: &FormatSpec) -> FmtResult { + write!(self.buffer, "{}", v).map_err(|_| Error) + } + + fn write_i64(&mut self, v: &i64, _spec: &FormatSpec) -> FmtResult { + write!(self.buffer, "{}", v).map_err(|_| Error) + } + + fn write_u8(&mut self, v: &u8, _spec: &FormatSpec) -> FmtResult { + write!(self.buffer, "{}", v).map_err(|_| Error) + } + + fn write_u16(&mut self, v: &u16, _spec: &FormatSpec) -> FmtResult { + write!(self.buffer, "{}", v).map_err(|_| Error) + } + + fn write_u32(&mut self, v: &u32, _spec: &FormatSpec) -> FmtResult { + write!(self.buffer, "{}", v).map_err(|_| Error) + } + + fn write_u64(&mut self, v: &u64, _spec: &FormatSpec) -> FmtResult { + write!(self.buffer, "{}", v).map_err(|_| Error) + } + + fn write_str(&mut self, v: &str, _spec: &FormatSpec) -> FmtResult { + write!(self.buffer, "{}", v).map_err(|_| Error) + } +} + +pub struct ExampleLogger; + +impl Log for ExampleLogger { + fn enabled(&self, metadata: &Metadata) -> bool { + metadata.level() <= max_level() + } + + fn context(&self) -> &str { + "EXAMPLE" + } + + fn log(&self, record: &Record) { + if !self.enabled(record.metadata()) { + return; + } + + // Create writer and write log data. + let mut writer = StringWriter::new(); + let _ = write(&mut writer, *record.args()); + + // Show to stderr. + eprintln!("{}", writer.get()); + } + + fn flush(&self) { + // No-op. + } +} diff --git a/examples/log_example/src/main.rs b/examples/log_example/src/main.rs new file mode 100644 index 0000000000..7dd9671e37 --- /dev/null +++ b/examples/log_example/src/main.rs @@ -0,0 +1,36 @@ +// +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// +// +// SPDX-License-Identifier: Apache-2.0 +// + +//! Example app containing basic logger implementation. + +mod logger; + +use crate::logger::ExampleLogger; +use mw_log::{debug, error, fatal, info, trace, warn, LevelFilter}; + +fn main() { + // Initialize logger. + mw_log::set_max_level(LevelFilter::Info); + let result = mw_log::set_global_logger(Box::new(ExampleLogger)); + if result.is_err() { + panic!("unable to set logger") + } + + // Example logs. + trace!("trace log - hidden!"); + debug!("debug log - hidden!"); + info!("info log"); + warn!("warn log"); + error!("error log"); + fatal!("fatal log"); +} diff --git a/src/log/BUILD b/src/log/BUILD index e69de29bb2..1951192419 100644 --- a/src/log/BUILD +++ b/src/log/BUILD @@ -0,0 +1,36 @@ +# ******************************************************************************* +# Copyright (c) 2025 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* + +load("@bazel_skylib//rules:common_settings.bzl", "string_flag") + +string_flag( + name = "safety_level", + build_setting_default = "asil_b", + values = [ + "asil_b", + "qm", + ], + visibility = [":__subpackages__"], +) + +config_setting( + name = "safety_level_qm", + flag_values = {":safety_level": "qm"}, + visibility = [":__subpackages__"], +) + +config_setting( + name = "safety_level_asil_b", + flag_values = {":safety_level": "asil_b"}, + visibility = [":__subpackages__"], +) diff --git a/src/log/mw_log/BUILD b/src/log/mw_log/BUILD new file mode 100644 index 0000000000..e321eeb589 --- /dev/null +++ b/src/log/mw_log/BUILD @@ -0,0 +1,34 @@ +# ******************************************************************************* +# Copyright (c) 2025 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* +load("@rules_rust//rust:defs.bzl", "rust_library", "rust_test") + +rust_library( + name = "mw_log", + srcs = glob(["**/*.rs"]), + proc_macro_deps = [ + "//src/log/mw_log_fmt_macro", + ], + visibility = ["//visibility:public"], + deps = [ + "//src/log/mw_log_fmt", + ], +) + +rust_test( + name = "tests", + crate = "mw_log", + tags = [ + "unit_tests", + "ut", + ], +) diff --git a/src/log/mw_log/Cargo.toml b/src/log/mw_log/Cargo.toml new file mode 100644 index 0000000000..454774556e --- /dev/null +++ b/src/log/mw_log/Cargo.toml @@ -0,0 +1,29 @@ +# ******************************************************************************* +# Copyright (c) 2025 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* + +[package] +name = "mw_log" +version.workspace = true +authors.workspace = true +readme.workspace = true +edition.workspace = true + +[lib] +path = "lib.rs" + +[dependencies] +mw_log_fmt.workspace = true +mw_log_fmt_macro.workspace = true + +[lints] +workspace = true diff --git a/src/log/mw_log/lib.rs b/src/log/mw_log/lib.rs new file mode 100644 index 0000000000..35460cfd17 --- /dev/null +++ b/src/log/mw_log/lib.rs @@ -0,0 +1,854 @@ +// +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// +// +// SPDX-License-Identifier: Apache-2.0 +// + +//! A lightweight logging facade. + +#![deny(unconditional_recursion)] + +extern crate alloc; + +use core::str::FromStr; +use core::sync::atomic::{AtomicUsize, Ordering}; +use core::{cmp, mem}; +pub use mw_log_fmt as fmt; +use mw_log_fmt::Arguments; +pub use mw_log_fmt_macro::{mw_log_format_args as format_args, ScoreDebug}; +use std::sync::{LazyLock, OnceLock}; + +#[macro_use] +mod macros; + +/// Global logger. +static LOGGER: OnceLock> = OnceLock::new(); + +static MAX_LOG_LEVEL_FILTER: AtomicUsize = AtomicUsize::new(0); + +static LOG_LEVEL_NAMES: [&str; 7] = ["OFF", "FATAL", "ERROR", "WARN", "INFO", "DEBUG", "TRACE"]; + +/// An enum representing the available verbosity levels of the logger. +#[repr(usize)] +#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Debug, Hash)] +pub enum Level { + /// Highest level, for extremely serious errors. + Fatal = 1, + /// Designates very serious errors. + Error, + /// Designates hazardous situations. + Warn, + /// Designates useful information. + Info, + /// Designates lower priority information. + Debug, + /// Designates very low priority, often extremely verbose, information. + Trace, +} + +impl PartialEq for Level { + #[inline] + fn eq(&self, other: &LevelFilter) -> bool { + *self as usize == *other as usize + } +} + +impl PartialOrd for Level { + #[inline] + fn partial_cmp(&self, other: &LevelFilter) -> Option { + Some((*self as usize).cmp(&(*other as usize))) + } +} + +impl FromStr for Level { + type Err = ParseLevelError; + fn from_str(level: &str) -> Result { + LOG_LEVEL_NAMES + .iter() + .position(|&name| name.eq_ignore_ascii_case(level)) + .into_iter() + .filter(|&idx| idx != 0) + .map(|idx| Level::from_usize(idx).unwrap()) + .next() + .ok_or(ParseLevelError(())) + } +} + +impl core::fmt::Display for Level { + fn fmt(&self, fmt: &mut core::fmt::Formatter) -> core::fmt::Result { + fmt.pad(self.as_str()) + } +} + +impl Level { + fn from_usize(u: usize) -> Option { + match u { + 1 => Some(Level::Fatal), + 2 => Some(Level::Error), + 3 => Some(Level::Warn), + 4 => Some(Level::Info), + 5 => Some(Level::Debug), + 6 => Some(Level::Trace), + _ => None, + } + } + + /// Returns the most verbose logging level. + #[inline] + pub fn max() -> Level { + Level::Trace + } + + /// Converts the [`Level`] to the equivalent [`LevelFilter`]. + #[inline] + pub fn to_level_filter(&self) -> LevelFilter { + LevelFilter::from_usize(*self as usize).unwrap() + } + + /// Returns the string representation of the [`Level`]. + /// + /// This returns the same string as the [`fmt::Display`] implementation. + pub fn as_str(&self) -> &'static str { + LOG_LEVEL_NAMES[*self as usize] + } +} + +/// An enum representing the available verbosity level filters of the logger. +/// +/// A [`LevelFilter`] may be compared directly to a [`Level`]. +#[repr(usize)] +#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Debug, Hash)] +pub enum LevelFilter { + /// A level lower than all log levels. + Off = 0, + /// Corresponds to the [`Level::Fatal`] log level. + Fatal, + /// Corresponds to the [`Level::Error`] log level. + Error, + /// Corresponds to the [`Level::Warn`] log level. + Warn, + /// Corresponds to the [`Level::Info`] log level. + Info, + /// Corresponds to the [`Level::Debug`] log level. + Debug, + /// Corresponds to the [`Level::Trace`] log level. + Trace, +} + +impl PartialEq for LevelFilter { + #[inline] + fn eq(&self, other: &Level) -> bool { + other.eq(self) + } +} + +impl PartialOrd for LevelFilter { + #[inline] + fn partial_cmp(&self, other: &Level) -> Option { + Some((*self as usize).cmp(&(*other as usize))) + } +} + +impl FromStr for LevelFilter { + type Err = ParseLevelError; + fn from_str(level: &str) -> Result { + LOG_LEVEL_NAMES + .iter() + .position(|&name| name.eq_ignore_ascii_case(level)) + .map(|p| LevelFilter::from_usize(p).unwrap()) + .ok_or(ParseLevelError(())) + } +} + +impl core::fmt::Display for LevelFilter { + fn fmt(&self, fmt: &mut core::fmt::Formatter) -> core::fmt::Result { + fmt.pad(self.as_str()) + } +} + +impl LevelFilter { + fn from_usize(u: usize) -> Option { + match u { + 0 => Some(LevelFilter::Off), + 1 => Some(LevelFilter::Fatal), + 2 => Some(LevelFilter::Error), + 3 => Some(LevelFilter::Warn), + 4 => Some(LevelFilter::Info), + 5 => Some(LevelFilter::Debug), + 6 => Some(LevelFilter::Trace), + _ => None, + } + } + + /// Returns the most verbose logging level filter. + #[inline] + pub fn max() -> LevelFilter { + LevelFilter::Trace + } + + /// Converts [`LevelFilter`] to the equivalent [`Level`]. + /// + /// Returns [`None`] if [`LevelFilter`] is [`LevelFilter::Off`]. + #[inline] + pub fn to_level(&self) -> Option { + Level::from_usize(*self as usize) + } + + /// Returns the string representation of the [`LevelFilter`]. + /// + /// This returns the same string as the [`fmt::Display`] implementation. + pub fn as_str(&self) -> &'static str { + LOG_LEVEL_NAMES[*self as usize] + } +} + +/// The "payload" of a log message. +#[derive(Clone)] +pub struct Record<'a> { + metadata: Metadata<'a>, + args: Arguments<'a>, + module_path: &'a str, + file: &'a str, + line: u32, +} + +impl<'a> Record<'a> { + /// Create `Record`. + #[inline] + pub fn new(args: Arguments<'a>, metadata: Metadata<'a>, module_path: &'a str, file: &'a str, line: u32) -> Self { + Self { + args, + metadata, + module_path, + file, + line, + } + } + + /// The message body. + #[inline] + pub fn args(&self) -> &Arguments<'a> { + &self.args + } + + /// Metadata about the log directive. + #[inline] + pub fn metadata(&self) -> &Metadata<'a> { + &self.metadata + } + + /// The verbosity level of the message. + #[inline] + pub fn level(&self) -> Level { + self.metadata.level() + } + + /// The name of the context of the directive. + #[inline] + pub fn context(&self) -> &'a str { + self.metadata.context() + } + + /// The module path of the message. + #[inline] + pub fn module_path(&self) -> &'a str { + self.module_path + } + + /// The source file containing the message. + #[inline] + pub fn file(&self) -> &'a str { + self.file + } + + /// The line containing the message. + #[inline] + pub fn line(&self) -> u32 { + self.line + } +} + +/// Metadata about a log message. +#[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Hash)] +pub struct Metadata<'a> { + level: Level, + context: &'a str, +} + +impl<'a> Metadata<'a> { + /// Create `Metadata`. + #[inline] + pub fn new(level: Level, context: &'a str) -> Self { + Self { level, context } + } + + /// The verbosity level of the message. + #[inline] + pub fn level(&self) -> Level { + self.level + } + + /// The name of the context of the directive. + #[inline] + pub fn context(&self) -> &'a str { + self.context + } +} + +/// A trait encapsulating the operations required of a logger. +pub trait Log: Sync + Send { + /// Determines if a log message with the specified metadata would be logged. + fn enabled(&self, metadata: &Metadata) -> bool; + + /// Default logger context name. + fn context(&self) -> &str; + + /// Logs the [`Record`]. + fn log(&self, record: &Record); + + /// Flushes any buffered records. + fn flush(&self); +} + +/// A dummy initial value for LOGGER. +struct NopLogger; + +impl Log for NopLogger { + fn enabled(&self, _: &Metadata) -> bool { + false + } + + fn context(&self) -> &str { + "" + } + + fn log(&self, _: &Record) {} + + fn flush(&self) {} +} + +impl Log for &'_ T { + fn enabled(&self, metadata: &Metadata) -> bool { + (**self).enabled(metadata) + } + + fn context(&self) -> &str { + (**self).context() + } + + fn log(&self, record: &Record) { + (**self).log(record); + } + + fn flush(&self) { + (**self).flush(); + } +} + +impl Log for alloc::boxed::Box { + fn enabled(&self, metadata: &Metadata) -> bool { + self.as_ref().enabled(metadata) + } + + fn context(&self) -> &str { + self.as_ref().context() + } + + fn log(&self, record: &Record) { + self.as_ref().log(record); + } + + fn flush(&self) { + self.as_ref().flush(); + } +} + +/// Sets the global maximum log level. +/// +/// Generally, this should only be called by the active logging implementation. +/// +/// Note that [`LevelFilter::Trace`] is the maximum level, because it provides the maximum amount of detail in the emitted logs. +#[inline] +pub fn set_max_level(level: LevelFilter) { + MAX_LOG_LEVEL_FILTER.store(level as usize, Ordering::Relaxed); +} + +/// Returns the current maximum log level. +/// +/// Logging macros check this value and discard any message logged at a higher level. +/// The maximum log level is set by the [`set_max_level`] function. +#[inline(always)] +pub fn max_level() -> LevelFilter { + // Since `LevelFilter` is `repr(usize)`, + // this transmute is sound if and only if `MAX_LOG_LEVEL_FILTER` + // is set to a usize that is a valid discriminant for `LevelFilter`. + // Since `MAX_LOG_LEVEL_FILTER` is private, the only time it's set + // is by `set_max_level` above, i.e. by casting a `LevelFilter` to `usize`. + // So any usize stored in `MAX_LOG_LEVEL_FILTER` is a valid discriminant. + unsafe { mem::transmute(MAX_LOG_LEVEL_FILTER.load(Ordering::Relaxed)) } +} + +/// Sets the global logger to a `Box`. +/// +/// This function may only be called once in the lifetime of a program. +/// Any log events that occur before the call to [`set_global_logger`] completes will be ignored. +/// +/// This function does not typically need to be called manually. +/// Logger implementations should provide an initialization method that installs the logger internally. +/// +/// # Errors +/// +/// An error is returned if a logger has already been set. +pub fn set_global_logger(logger: Box) -> Result<(), SetLoggerError> { + LOGGER.set(logger).map_err(|_| SetLoggerError(())) +} + +/// The type returned by [`set_global_logger`] if [`set_global_logger`] has already been called. +pub struct SetLoggerError(()); + +impl core::fmt::Display for SetLoggerError { + fn fmt(&self, fmt: &mut core::fmt::Formatter) -> core::fmt::Result { + fmt.write_str("attempted to set a logger after the logging system was already initialized") + } +} + +/// The type returned by [`core::str::FromStr::from_str`] implementations when the string doesn't match any of the log levels. +#[derive(PartialEq, Eq)] +pub struct ParseLevelError(()); + +impl core::fmt::Display for ParseLevelError { + fn fmt(&self, fmt: &mut core::fmt::Formatter) -> core::fmt::Result { + fmt.write_str("attempted to convert a string that doesn't match an existing log level") + } +} + +/// Returns a reference to the logger. +/// +/// If a logger has not been set, a no-op implementation is returned. +pub fn global_logger() -> &'static dyn Log { + static NOP_LOGGER: LazyLock> = LazyLock::new(|| { + eprintln!("warn: logger not initialized"); + Box::new(NopLogger) + }); + LOGGER.get().unwrap_or_else(|| &NOP_LOGGER) +} + +#[cfg(test)] +mod tests { + use super::*; + use std::collections::HashSet; + + fn level_iter() -> impl Iterator { + (1..7).map(|i| Level::from_usize(i).unwrap()) + } + + fn level_filter_iter() -> impl Iterator { + (0..7).map(|i| LevelFilter::from_usize(i).unwrap()) + } + + #[test] + fn test_level_partial_eq_with_level_filter() { + // Pairs that should result in true. + let matching_pairs = HashSet::from([ + (Level::Fatal, LevelFilter::Fatal), + (Level::Error, LevelFilter::Error), + (Level::Warn, LevelFilter::Warn), + (Level::Info, LevelFilter::Info), + (Level::Debug, LevelFilter::Debug), + (Level::Trace, LevelFilter::Trace), + ]); + + // Iterate through levels. + for level in level_iter() { + // Iterate through level filters. + for level_filter in level_filter_iter() { + let is_matching = matching_pairs.contains(&(level, level_filter)); + assert_eq!(level.eq(&level_filter), is_matching); + } + } + } + + #[test] + fn test_level_partial_cmp_with_level_filter() { + // Iterate through levels. + for level in level_iter() { + let matching_filter = level.to_level_filter(); + // Iterate through level filters. + for level_filter in level_filter_iter() { + if matching_filter < level_filter { + assert!(level < level_filter); + } else if matching_filter > level_filter { + assert!(level > level_filter); + } else { + assert!(level == level_filter); + } + } + } + } + + #[test] + fn test_level_from_str() { + let tests = [ + ("OFF", Err(ParseLevelError(()))), + ("fatal", Ok(Level::Fatal)), + ("error", Ok(Level::Error)), + ("warn", Ok(Level::Warn)), + ("info", Ok(Level::Info)), + ("debug", Ok(Level::Debug)), + ("trace", Ok(Level::Trace)), + ("FATAL", Ok(Level::Fatal)), + ("ERROR", Ok(Level::Error)), + ("WARN", Ok(Level::Warn)), + ("INFO", Ok(Level::Info)), + ("DEBUG", Ok(Level::Debug)), + ("TRACE", Ok(Level::Trace)), + ("asdf", Err(ParseLevelError(()))), + ]; + for &(s, ref expected) in &tests { + assert!(expected == &s.parse()); + } + } + + #[test] + fn test_level_display() { + assert_eq!("FATAL", Level::Fatal.to_string()); + assert_eq!("ERROR", Level::Error.to_string()); + assert_eq!("WARN", Level::Warn.to_string()); + assert_eq!("INFO", Level::Info.to_string()); + assert_eq!("DEBUG", Level::Debug.to_string()); + assert_eq!("TRACE", Level::Trace.to_string()); + } + + #[test] + fn test_level_from_usize() { + let tests = [ + None, + Some(Level::Fatal), + Some(Level::Error), + Some(Level::Warn), + Some(Level::Info), + Some(Level::Debug), + Some(Level::Trace), + None, + ]; + for (i, expected) in tests.iter().enumerate() { + assert_eq!(expected, &Level::from_usize(i)); + } + } + + #[test] + fn test_level_max() { + assert_eq!(Level::max(), Level::Trace); + } + + #[test] + fn test_level_to_level_filter() { + let tests = [ + (Level::Fatal, LevelFilter::Fatal), + (Level::Error, LevelFilter::Error), + (Level::Warn, LevelFilter::Warn), + (Level::Info, LevelFilter::Info), + (Level::Debug, LevelFilter::Debug), + (Level::Trace, LevelFilter::Trace), + ]; + for (level, level_filter) in tests { + assert_eq!(level_filter, level.to_level_filter()); + } + } + + #[test] + fn test_level_as_str() { + let tests = &[ + (Level::Fatal, "FATAL"), + (Level::Error, "ERROR"), + (Level::Warn, "WARN"), + (Level::Info, "INFO"), + (Level::Debug, "DEBUG"), + (Level::Trace, "TRACE"), + ]; + for (input, expected) in tests { + assert_eq!(*expected, input.as_str()); + } + } + + #[test] + fn test_level_filter_partial_eq_with_level() { + // Pairs that should result in true. + let matching_pairs = HashSet::from([ + (LevelFilter::Fatal, Level::Fatal), + (LevelFilter::Error, Level::Error), + (LevelFilter::Warn, Level::Warn), + (LevelFilter::Info, Level::Info), + (LevelFilter::Debug, Level::Debug), + (LevelFilter::Trace, Level::Trace), + ]); + + // Iterate through level filters. + for level_filter in level_filter_iter() { + // Iterate through levels. + for level in level_iter() { + let is_matching = matching_pairs.contains(&(level_filter, level)); + assert_eq!(level_filter.eq(&level), is_matching) + } + } + } + + #[test] + fn test_level_filter_partial_cmp_with_level() { + // Iterate through level filters. + // Skip `LevelFilter::Off`. + for level_filter in level_filter_iter().skip(1) { + let matching_level = level_filter.to_level().unwrap(); + // Iterate through levels. + for level in level_iter() { + if matching_level < level { + assert!(level_filter < level); + } else if matching_level > level { + assert!(level_filter > level); + } else { + assert!(level_filter == level); + } + } + } + } + + #[test] + fn test_level_filter_from_str() { + let tests = [ + ("off", Ok(LevelFilter::Off)), + ("fatal", Ok(LevelFilter::Fatal)), + ("error", Ok(LevelFilter::Error)), + ("warn", Ok(LevelFilter::Warn)), + ("info", Ok(LevelFilter::Info)), + ("debug", Ok(LevelFilter::Debug)), + ("trace", Ok(LevelFilter::Trace)), + ("OFF", Ok(LevelFilter::Off)), + ("FATAL", Ok(LevelFilter::Fatal)), + ("ERROR", Ok(LevelFilter::Error)), + ("WARN", Ok(LevelFilter::Warn)), + ("INFO", Ok(LevelFilter::Info)), + ("DEBUG", Ok(LevelFilter::Debug)), + ("TRACE", Ok(LevelFilter::Trace)), + ("asdf", Err(ParseLevelError(()))), + ]; + for &(s, ref expected) in &tests { + assert!(expected == &s.parse()); + } + } + + #[test] + fn test_level_filter_display() { + assert_eq!("OFF", LevelFilter::Off.to_string()); + assert_eq!("FATAL", LevelFilter::Fatal.to_string()); + assert_eq!("ERROR", LevelFilter::Error.to_string()); + assert_eq!("WARN", LevelFilter::Warn.to_string()); + assert_eq!("INFO", LevelFilter::Info.to_string()); + assert_eq!("DEBUG", LevelFilter::Debug.to_string()); + assert_eq!("TRACE", LevelFilter::Trace.to_string()); + } + + #[test] + fn test_level_filter_from_usize() { + let tests = [ + Some(LevelFilter::Off), + Some(LevelFilter::Fatal), + Some(LevelFilter::Error), + Some(LevelFilter::Warn), + Some(LevelFilter::Info), + Some(LevelFilter::Debug), + Some(LevelFilter::Trace), + None, + ]; + for (i, expected) in tests.iter().enumerate() { + assert_eq!(expected, &LevelFilter::from_usize(i)); + } + } + + #[test] + fn test_level_filter_max() { + assert_eq!(LevelFilter::max(), LevelFilter::Trace); + } + + #[test] + fn test_level_filter_to_level() { + let tests = [ + (LevelFilter::Off, None), + (LevelFilter::Fatal, Some(Level::Fatal)), + (LevelFilter::Error, Some(Level::Error)), + (LevelFilter::Warn, Some(Level::Warn)), + (LevelFilter::Info, Some(Level::Info)), + (LevelFilter::Debug, Some(Level::Debug)), + (LevelFilter::Trace, Some(Level::Trace)), + ]; + for (level_filter, level) in tests { + assert_eq!(level, level_filter.to_level()); + } + } + + #[test] + fn test_level_filter_as_str() { + let tests = &[ + (LevelFilter::Off, "OFF"), + (LevelFilter::Fatal, "FATAL"), + (LevelFilter::Error, "ERROR"), + (LevelFilter::Warn, "WARN"), + (LevelFilter::Info, "INFO"), + (LevelFilter::Debug, "DEBUG"), + (LevelFilter::Trace, "TRACE"), + ]; + for (input, expected) in tests { + assert_eq!(*expected, input.as_str()); + } + } + + #[test] + fn test_record_new_and_params() { + // Local import to avoid name clash. + use super::format_args; + // Fix for self-reference in `mw_log_format_args`. + use crate as mw_log; + + let level = Level::Info; + let context = "context"; + let metadata = Metadata::new(level, context); + + let args = format_args!("test_string_{}", 123); + let module_path = "module_path"; + let file = "file"; + let line_num = 123u32; + + let record = Record::new(args, metadata.clone(), module_path, file, line_num); + + assert_eq!(record.args().0.len(), 2); + assert_eq!(record.level(), metadata.level()); + assert_eq!(record.metadata().level(), record.level()); + assert_eq!(record.context(), metadata.context()); + assert_eq!(record.metadata().context(), record.context()); + assert_eq!(record.module_path(), module_path); + assert_eq!(record.file(), file); + assert_eq!(record.line(), line_num); + } + + #[test] + fn test_metadata_new_and_params() { + let level = Level::Info; + let context = "context"; + let metadata = Metadata::new(level, context); + assert_eq!(metadata.level(), level); + assert_eq!(metadata.context(), context); + } + + struct StubLogger<'a> { + context: &'a str, + } + + impl<'a> Log for StubLogger<'a> { + fn enabled(&self, _: &Metadata) -> bool { + unimplemented!() + } + + fn context(&self) -> &str { + self.context + } + + fn log(&self, _: &Record) { + unimplemented!() + } + + fn flush(&self) { + unimplemented!() + } + } + + #[test] + fn test_set_global_logger_and_global_logger() { + // `set_global_logger` and `global_logger` operate on global state. + // All operations are done in a single test to ensure state is as expected. + + // Set logger. + { + let logger = Box::new(StubLogger { context: "ctx1" }); + let result = set_global_logger(logger); + assert!(result.is_ok()); + } + + // Get logger. + { + let logger = global_logger(); + assert_eq!(logger.context(), StubLogger { context: "ctx1" }.context()); + } + + // Set for the second time. + { + // Make sure second set result in an error. + let new_logger = Box::new(StubLogger { context: "ctx2" }); + let result = set_global_logger(new_logger); + assert!(result.is_err()); + + // Make sure state didn't change. + let old_logger = global_logger(); + assert_eq!(old_logger.context(), StubLogger { context: "ctx1" }.context()); + } + } + + // Test that the `impl Log for Foo` blocks work + // This test mostly operates on a type level, so failures will be compile errors + #[test] + fn test_foreign_impl() { + fn assert_is_log() {} + + assert_is_log::<&dyn Log>(); + + assert_is_log::>(); + + // Assert these statements for all T: Log + ?Sized + #[allow(unused)] + fn forall() { + assert_is_log::>(); + + assert_is_log::<&T>(); + } + } + + #[test] + fn test_max_level_and_set_max_level() { + // NOTE: `max_level` and `set_max_level` operate on a global state. + // Changing it affects all tests. + + // Check default value. + assert_eq!(max_level(), LevelFilter::Off); + + // Set new value and check. + set_max_level(LevelFilter::Trace); + assert_eq!(max_level(), LevelFilter::Trace); + + // Reset to original state. + set_max_level(LevelFilter::Off); + } + + #[test] + fn test_set_global_logger_error_message() { + let e = SetLoggerError(()); + assert_eq!( + &e.to_string(), + "attempted to set a logger after the logging system \ + was already initialized" + ); + } + + #[test] + fn test_parse_level_error_message() { + let e = ParseLevelError(()); + assert_eq!( + &e.to_string(), + "attempted to convert a string that doesn't match an existing log level" + ); + } +} diff --git a/src/log/mw_log/macros.rs b/src/log/mw_log/macros.rs new file mode 100644 index 0000000000..ca85aeeda1 --- /dev/null +++ b/src/log/mw_log/macros.rs @@ -0,0 +1,446 @@ +// +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// +// +// SPDX-License-Identifier: Apache-2.0 +// + +/// The standard logging macro. +/// +/// This macro will generically log with the specified `Level` and `format!` based argument list. +/// +/// ``` +/// use mw_log::{log, Level}; +/// +/// let data = (42, "Forty-two"); +/// let private_data = "private"; +/// +/// log!(Level::Error, "Received errors: {}, {}", data.0, data.1); +/// ``` +/// +/// Optionally, you can specify a `context` argument to attach a specific context to the log record. +/// By default, the context is provided by the logger. +/// +/// ``` +/// use mw_log::{log, Level}; +/// +/// let data = (42, "Forty-two"); +/// let private_data = "private"; +/// +/// log!( +/// context: "app_events", +/// Level::Error, +/// "Received errors: {}, {}", +/// data.0, data.1 +/// ); +/// ``` +/// +/// And optionally, you can specify a `logger` argument to use a specific logger instead of the default global logger. +/// +/// ``` +/// # struct MyLogger {} +/// # impl Log for MyLogger { +/// # fn enabled(&self, _metadata: &mw_log::Metadata) -> bool { +/// # false +/// # } +/// # fn context(&self) -> &str { +/// # "MyLogger" +/// # } +/// # fn log(&self, _record: &mw_log::Record) {} +/// # fn flush(&self) {} +/// # } +/// use mw_log::{log, Level, Log}; +/// +/// let data = (42, "Forty-two"); +/// let private_data = "private"; +/// +/// let my_logger = MyLogger {}; +/// log!( +/// logger: my_logger, +/// Level::Error, +/// "Received errors: {}, {}", +/// data.0, data.1 +/// ); +/// ``` +/// +/// The `logger` argument accepts a value that implements the `Log` trait. +/// The value will be borrowed within the macro. +/// +/// Note that the global level set via Cargo features, or through `set_max_level` will still apply, even when a custom logger is supplied with the `logger` argument. +#[macro_export] +#[clippy::format_args] +macro_rules! log { + // log!(logger: my_logger, context: "my_context", Level::Info, "a {} event", "log"); + (logger: $logger:expr, context: $context:expr, $level:expr, $($arg:tt)+) => ({ + $crate::__log!( + logger: $crate::__log_logger!($logger), + context: $context, + $level, + $($arg)+ + ) + }); + + // log!(logger: my_logger, Level::Info, "a log event") + (logger: $logger:expr, $level:expr, $($arg:tt)+) => ({ + let logger = $crate::__log_logger!($logger); + $crate::__log!( + logger: logger, + context: logger.context(), + $level, + $($arg)+ + ) + }); + + // log!(context: "my_context", Level::Info, "a log event") + (context: $context:expr, $level:expr, $($arg:tt)+) => ({ + $crate::__log!( + logger: $crate::__log_logger!(__log_global_logger), + context: $context, + $level, + $($arg)+ + ) + }); + + // log!(Level::Info, "a log event") + ($level:expr, $($arg:tt)+) => ({ + let logger = $crate::__log_logger!(__log_global_logger); + $crate::__log!( + logger: logger, + context: logger.context(), + $level, + $($arg)+ + ) + }); +} + +#[doc(hidden)] +#[macro_export] +macro_rules! __log { + // log!(logger: my_logger, context: "my_context", Level::Info, "a {} event", "log"); + (logger: $logger:expr, context: $context:expr, $level:expr, $($arg:tt)+) => ({ + let loc = core::panic::Location::caller(); + $logger.log( + &$crate::Record::new( + $crate::format_args!($($arg)+), + $crate::Metadata::new($level, $context), + core::module_path!(), + loc.file(), + loc.line() + ) + ); + }); +} + +/// Logs a message at the fatal level. +/// +/// # Examples +/// +/// ``` +/// use mw_log::fatal; +/// +/// # let my_logger = mw_log::global_logger(); +/// let (err_info, port) = ("No connection", 22); +/// +/// fatal!("Fatal: {} on port {}", err_info, port); +/// fatal!(context: "app_events", "App Error: {}, Port: {}", err_info, port); +/// fatal!(logger: my_logger, "App Error: {}, Port: {}", err_info, port); +/// ``` +#[macro_export] +#[clippy::format_args] +macro_rules! fatal { + // fatal!(logger: my_logger, context: "my_context", "a {} event", "log") + (logger: $logger:expr, context: $context:expr, $($arg:tt)+) => ({ + $crate::log!(logger: $logger, context: $context, $crate::Level::Fatal, $($arg)+) + }); + + // fatal!(logger: my_logger, "a {} event", "log") + (logger: $logger:expr, $($arg:tt)+) => ({ + $crate::log!(logger: $logger, $crate::Level::Fatal, $($arg)+) + }); + + // fatal!(context: "my_context", "a {} event", "log") + (context: $context:expr, $($arg:tt)+) => ({ + $crate::log!(context: $context, $crate::Level::Fatal, $($arg)+) + }); + + // fatal!("a {} event", "log") + ($($arg:tt)+) => ($crate::log!($crate::Level::Fatal, $($arg)+)) +} + +/// Logs a message at the error level. +/// +/// # Examples +/// +/// ``` +/// use mw_log::error; +/// +/// # let my_logger = mw_log::global_logger(); +/// let (err_info, port) = ("No connection", 22); +/// +/// error!("Error: {} on port {}", err_info, port); +/// error!(context: "app_events", "App Error: {}, Port: {}", err_info, port); +/// error!(logger: my_logger, "App Error: {}, Port: {}", err_info, port); +/// ``` +#[macro_export] +#[clippy::format_args] +macro_rules! error { + // error!(logger: my_logger, context: "my_context", "a {} event", "log") + (logger: $logger:expr, context: $context:expr, $($arg:tt)+) => ({ + $crate::log!(logger: $logger, context: $context, $crate::Level::Error, $($arg)+) + }); + + // error!(logger: my_logger, "a {} event", "log") + (logger: $logger:expr, $($arg:tt)+) => ({ + $crate::log!(logger: $logger, $crate::Level::Error, $($arg)+) + }); + + // error!(context: "my_context", "a {} event", "log") + (context: $context:expr, $($arg:tt)+) => ({ + $crate::log!(context: $context, $crate::Level::Error, $($arg)+) + }); + + // error!("a {} event", "log") + ($($arg:tt)+) => ($crate::log!($crate::Level::Error, $($arg)+)) +} + +/// Logs a message at the warn level. +/// +/// # Examples +/// +/// ``` +/// use mw_log::warn; +/// +/// # let my_logger = mw_log::global_logger(); +/// let warn_description = "Invalid Input"; +/// +/// warn!("Warning! {}!", warn_description); +/// warn!(context: "input_events", "App received warning: {}", warn_description); +/// warn!(logger: my_logger, "App received warning: {}", warn_description); +/// ``` +#[macro_export] +#[clippy::format_args] +macro_rules! warn { + // warn!(logger: my_logger, context: "my_context", "a {} event", "log") + (logger: $logger:expr, context: $context:expr, $($arg:tt)+) => ({ + $crate::log!(logger: $logger, context: $context, $crate::Level::Warn, $($arg)+) + }); + + // warn!(logger: my_logger, "a {} event", "log") + (logger: $logger:expr, $($arg:tt)+) => ({ + $crate::log!(logger: $logger, $crate::Level::Warn, $($arg)+) + }); + + // warn!(context: "my_context", "a {} event", "log") + (context: $context:expr, $($arg:tt)+) => ({ + $crate::log!(context: $context, $crate::Level::Warn, $($arg)+) + }); + + // warn!("a {} event", "log") + ($($arg:tt)+) => ($crate::log!($crate::Level::Warn, $($arg)+)) +} + +/// Logs a message at the info level. +/// +/// # Examples +/// +/// ``` +/// use mw_log::info; +/// +/// # let my_logger = mw_log::global_logger(); +/// # struct Connection { port: u32, speed: f32 } +/// let conn_info = Connection { port: 40, speed: 3.20 }; +/// +/// info!("Connected to port {} at {} Mb/s", conn_info.port, conn_info.speed); +/// info!( +/// context: "connection_events", +/// "Successful connection, port: {}, speed: {}", +/// conn_info.port, conn_info.speed +/// ); +/// info!( +/// logger: my_logger, +/// "Successful connection, port: {}, speed: {}", +/// conn_info.port, conn_info.speed +/// ); +/// ``` +#[macro_export] +#[clippy::format_args] +macro_rules! info { + // info!(logger: my_logger, context: "my_context", "a {} event", "log") + (logger: $logger:expr, context: $context:expr, $($arg:tt)+) => ({ + $crate::log!(logger: $logger, context: $context, $crate::Level::Info, $($arg)+) + }); + + // info!(logger: my_logger, "a {} event", "log") + (logger: $logger:expr, $($arg:tt)+) => ({ + $crate::log!(logger: $logger, $crate::Level::Info, $($arg)+) + }); + + // info!(context: "my_context", "a {} event", "log") + (context: $context:expr, $($arg:tt)+) => ({ + $crate::log!(context: $context, $crate::Level::Info, $($arg)+) + }); + + // info!("a {} event", "log") + ($($arg:tt)+) => ($crate::log!($crate::Level::Info, $($arg)+)) +} + +/// Logs a message at the debug level. +/// +/// # Examples +/// +/// ``` +/// use mw_log::debug; +/// +/// # let my_logger = mw_log::global_logger(); +/// # struct Position { x: f32, y: f32 } +/// let pos = Position { x: 3.234, y: -1.223 }; +/// +/// debug!("New position: x: {}, y: {}", pos.x, pos.y); +/// debug!(context: "app_events", "New position: x: {}, y: {}", pos.x, pos.y); +/// debug!(logger: my_logger, "New position: x: {}, y: {}", pos.x, pos.y); +/// ``` +#[macro_export] +#[clippy::format_args] +macro_rules! debug { + // debug!(logger: my_logger, context: "my_context", "a {} event", "log") + (logger: $logger:expr, context: $context:expr, $($arg:tt)+) => ({ + $crate::log!(logger: $logger, context: $context, $crate::Level::Debug, $($arg)+) + }); + + // debug!(logger: my_logger, "a {} event", "log") + (logger: $logger:expr, $($arg:tt)+) => ({ + $crate::log!(logger: $logger, $crate::Level::Debug, $($arg)+) + }); + + // debug!(context: "my_context", "a {} event", "log") + (context: $context:expr, $($arg:tt)+) => ({ + $crate::log!(context: $context, $crate::Level::Debug, $($arg)+) + }); + + // debug!("a {} event", "log") + ($($arg:tt)+) => ($crate::log!($crate::Level::Debug, $($arg)+)) +} + +/// Logs a message at the trace level. +/// +/// # Examples +/// +/// ``` +/// use mw_log::trace; +/// +/// # let my_logger = mw_log::global_logger(); +/// # struct Position { x: f32, y: f32 } +/// let pos = Position { x: 3.234, y: -1.223 }; +/// +/// trace!("Position is: x: {}, y: {}", pos.x, pos.y); +/// trace!(context: "app_events", "x is {} and y is {}", +/// if pos.x >= 0.0 { "positive" } else { "negative" }, +/// if pos.y >= 0.0 { "positive" } else { "negative" }); +/// trace!(logger: my_logger, "x is {} and y is {}", +/// if pos.x >= 0.0 { "positive" } else { "negative" }, +/// if pos.y >= 0.0 { "positive" } else { "negative" }); +/// ``` +#[macro_export] +#[clippy::format_args] +macro_rules! trace { + // trace!(logger: my_logger, context: "my_context", "a {} event", "log") + (logger: $logger:expr, context: $context:expr, $($arg:tt)+) => ({ + $crate::log!(logger: $logger, context: $context, $crate::Level::Trace, $($arg)+) + }); + + // trace!(logger: my_logger, "a {} event", "log") + (logger: $logger:expr, $($arg:tt)+) => ({ + $crate::log!(logger: $logger, $crate::Level::Trace, $($arg)+) + }); + + // trace!(context: "my_context", "a {} event", "log") + (context: $context:expr, $($arg:tt)+) => ({ + $crate::log!(context: $context, $crate::Level::Trace, $($arg)+) + }); + + // trace!("a {} event", "log") + ($($arg:tt)+) => ($crate::log!($crate::Level::Trace, $($arg)+)) +} + +/// Determines if a message logged at the specified level in that module will be logged. +/// +/// This can be used to avoid expensive computation of data provided as a log message argument. +/// +/// # Examples +/// +/// ``` +/// use mw_log::{debug, log_enabled, Level}; +/// +/// # struct Data { x: u32, y: u32 } +/// # fn expensive_call() -> Data { Data { x: 0, y: 0 } } +/// # let my_logger = mw_log::global_logger(); +/// if log_enabled!(Level::Debug) { +/// let data = expensive_call(); +/// debug!("expensive debug data: {} {}", data.x, data.y); +/// } +/// +/// if log_enabled!(context: "Global", Level::Debug) { +/// let data = expensive_call(); +/// debug!(context: "Global", "expensive debug data: {} {}", data.x, data.y); +/// } +/// +/// if log_enabled!(logger: my_logger, Level::Debug) { +/// let data = expensive_call(); +/// debug!(context: "Global", "expensive debug data: {} {}", data.x, data.y); +/// } +/// ``` +/// +/// This macro accepts the same `context` and `logger` arguments as [`macro@log`]. +#[macro_export] +macro_rules! log_enabled { + // log_enabled!(logger: my_logger, context: "my_context", Level::Info) + (logger: $logger:expr, context: $context:expr, $level:expr) => ({ + $crate::__log_enabled!(logger: $crate::__log_logger!($logger), context: $context, $level) + }); + + // log_enabled!(logger: my_logger, Level::Info) + (logger: $logger:expr, $level:expr) => ({ + let logger = $crate::__log_logger!($logger); + $crate::__log_enabled!(logger: logger, context: logger.context(), $level) + }); + + // log_enabled!(context: "my_context", Level::Info) + (context: $context:expr, $level:expr) => ({ + $crate::__log_enabled!(logger: $crate::__log_logger!(__log_global_logger), context: $context, $level) + }); + + // log_enabled!(Level::Info) + ($level:expr) => ({ + let logger = $crate::__log_logger!(__log_global_logger); + $crate::__log_enabled!(logger: logger, context: logger.context(), $level) + }); +} + +#[doc(hidden)] +#[macro_export] +macro_rules! __log_enabled { + // log_enabled!(logger: my_logger, context: "my_context", Level::Info) + (logger: $logger:expr, context: $context:expr, $level:expr) => {{ + let level = $level; + level <= $crate::max_level() && $logger.enabled(&$crate::Metadata::new(level, $context)) + }}; +} + +// Determine the logger to use. +#[doc(hidden)] +#[macro_export] +macro_rules! __log_logger { + (__log_global_logger) => {{ + $crate::global_logger() + }}; + + ($logger:expr) => {{ + &($logger) + }}; +} diff --git a/src/log/mw_log/tests/integration.rs b/src/log/mw_log/tests/integration.rs new file mode 100644 index 0000000000..0a545f9627 --- /dev/null +++ b/src/log/mw_log/tests/integration.rs @@ -0,0 +1,82 @@ +// +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// +// +// SPDX-License-Identifier: Apache-2.0 +// + +#![allow(dead_code, unused_imports, missing_docs)] + +use mw_log::{debug, error, info, trace, warn, Level, LevelFilter, Log, Metadata, Record}; +use mw_log_fmt::Arguments; +use std::sync::{Arc, Mutex}; + +struct State { + last_log_level: Mutex>, + last_log_location: Mutex>, +} + +struct Logger(Arc); + +impl Log for Logger { + fn enabled(&self, _: &Metadata) -> bool { + true + } + + fn context(&self) -> &str { + "TEST" + } + + fn log(&self, record: &Record) { + *self.0.last_log_level.lock().unwrap() = Some(record.level()); + *self.0.last_log_location.lock().unwrap() = Some(record.line()); + } + fn flush(&self) {} +} + +fn test_filter(logger: &dyn Log, a: &State, filter: LevelFilter) { + // tests to ensure logs with a level beneath 'max_level' are filtered out + mw_log::set_max_level(filter); + error!(logger: logger, ""); + last(a, t(Level::Error, filter)); + warn!(logger: logger, ""); + last(a, t(Level::Warn, filter)); + info!(logger: logger, ""); + last(a, t(Level::Info, filter)); + debug!(logger: logger, ""); + last(a, t(Level::Debug, filter)); + trace!(logger: logger, ""); + last(a, t(Level::Trace, filter)); + + fn t(lvl: Level, filter: LevelFilter) -> Option { + if lvl <= filter { + Some(lvl) + } else { + None + } + } + fn last(state: &State, expected: Option) { + let lvl = state.last_log_level.lock().unwrap().take(); + assert_eq!(lvl, expected); + } +} + +fn test_line_numbers(logger: &dyn Log, state: &State) { + mw_log::set_max_level(LevelFilter::Trace); + + info!(logger: logger, ""); // ensure check_line function follows log macro + check_log_location(state); + + #[track_caller] + fn check_log_location(state: &State) { + let location = core::panic::Location::caller().line(); // get function calling location + let line_number = state.last_log_location.lock().unwrap().take().unwrap(); // get location of most recent log + assert_eq!(line_number, location - 1); + } +} diff --git a/src/log/mw_log/tests/macros.rs b/src/log/mw_log/tests/macros.rs new file mode 100644 index 0000000000..95cb524b19 --- /dev/null +++ b/src/log/mw_log/tests/macros.rs @@ -0,0 +1,173 @@ +// +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// +// +// SPDX-License-Identifier: Apache-2.0 +// + +#![allow(missing_docs)] + +use mw_log::{log, log_enabled, Level, Log, Metadata, Record}; + +macro_rules! all_log_macros { + ($($arg:tt)*) => ({ + ::mw_log::trace!($($arg)*); + ::mw_log::debug!($($arg)*); + ::mw_log::info!($($arg)*); + ::mw_log::warn!($($arg)*); + ::mw_log::error!($($arg)*); + }); +} + +// Not `Copy` +struct Logger; + +impl Log for Logger { + fn enabled(&self, _: &Metadata) -> bool { + false + } + fn context(&self) -> &str { + "TEST" + } + fn log(&self, _: &Record) {} + fn flush(&self) {} +} + +fn level_iter() -> impl Iterator { + [ + Level::Fatal, + Level::Error, + Level::Warn, + Level::Info, + Level::Debug, + Level::Trace, + ] + .into_iter() +} + +#[test] +fn no_args() { + let logger = Logger; + + for lvl in level_iter() { + log!(lvl, "hello"); + log!(lvl, "hello",); + + log!(context: "my_context", lvl, "hello"); + log!(context: "my_context", lvl, "hello",); + + log!(logger: logger, lvl, "hello"); + log!(logger: logger, lvl, "hello",); + + log!(logger: logger, context: "my_context", lvl, "hello"); + log!(logger: logger, context: "my_context", lvl, "hello",); + } + + all_log_macros!("hello"); + all_log_macros!("hello",); + + all_log_macros!(context: "my_context", "hello"); + all_log_macros!(context: "my_context", "hello",); + + all_log_macros!(logger: logger, "hello"); + all_log_macros!(logger: logger, "hello",); + + all_log_macros!(logger: logger, context: "my_context", "hello"); + all_log_macros!(logger: logger, context: "my_context", "hello",); +} + +#[test] +fn anonymous_args() { + for lvl in level_iter() { + log!(lvl, "hello {}", "world"); + log!(lvl, "hello {}", "world",); + + log!(context: "my_context", lvl, "hello {}", "world"); + log!(context: "my_context", lvl, "hello {}", "world",); + + log!(lvl, "hello {}", "world"); + log!(lvl, "hello {}", "world",); + } + + all_log_macros!("hello {}", "world"); + all_log_macros!("hello {}", "world",); + + all_log_macros!(context: "my_context", "hello {}", "world"); + all_log_macros!(context: "my_context", "hello {}", "world",); + + let logger = Logger; + + all_log_macros!(logger: logger, "hello {}", "world"); + all_log_macros!(logger: logger, "hello {}", "world",); + + all_log_macros!(logger: logger, context: "my_context", "hello {}", "world"); + all_log_macros!(logger: logger, context: "my_context", "hello {}", "world",); +} + +#[test] +fn named_args() { + for lvl in level_iter() { + log!(lvl, "hello {world}", world = "world"); + log!(lvl, "hello {world}", world = "world",); + + log!(context: "my_context", lvl, "hello {world}", world = "world"); + log!(context: "my_context", lvl, "hello {world}", world = "world",); + + log!(lvl, "hello {world}", world = "world"); + log!(lvl, "hello {world}", world = "world",); + } + + all_log_macros!("hello {world}", world = "world"); + all_log_macros!("hello {world}", world = "world",); + + all_log_macros!(context: "my_context", "hello {world}", world = "world"); + all_log_macros!(context: "my_context", "hello {world}", world = "world",); + + let logger = Logger; + + all_log_macros!(logger: logger, "hello {world}", world = "world"); + all_log_macros!(logger: logger, "hello {world}", world = "world",); + + all_log_macros!(logger: logger, context: "my_context", "hello {world}", world = "world"); + all_log_macros!(logger: logger, context: "my_context", "hello {world}", world = "world",); +} + +#[test] +fn enabled() { + let logger = Logger; + + for lvl in level_iter() { + let _enabled = log_enabled!(lvl); + let _enabled = log_enabled!(context: "my_context", lvl); + let _enabled = log_enabled!(logger: logger, context: "my_context", lvl); + let _enabled = log_enabled!(logger: logger, lvl); + } +} + +#[test] +fn expr() { + let logger = Logger; + + for lvl in level_iter() { + log!(lvl, "hello"); + + log!(logger: logger, lvl, "hello"); + } +} + +#[test] +fn logger_short_lived() { + all_log_macros!(logger: Logger, "hello"); + all_log_macros!(logger: &Logger, "hello"); +} + +#[test] +fn logger_expr() { + all_log_macros!(logger: Logger, "hello"); +} diff --git a/src/log/mw_log_fmt/BUILD b/src/log/mw_log_fmt/BUILD index 764b3efaef..7e4e35f462 100644 --- a/src/log/mw_log_fmt/BUILD +++ b/src/log/mw_log_fmt/BUILD @@ -15,8 +15,14 @@ load("@rules_rust//rust:defs.bzl", "rust_library", "rust_test") rust_library( name = "mw_log_fmt", srcs = glob(["**/*.rs"]), - # TODO: expose required interface through `mw_log`. - visibility = ["//visibility:public"], + crate_features = select({ + "//src/log:safety_level_qm": ["qm"], + "//src/log:safety_level_asil_b": [], + }), + visibility = [ + "//src/log/mw_log:__pkg__", + "//src/log/mw_log_fmt_macro:__pkg__", + ], ) rust_test( diff --git a/src/log/mw_log_fmt/builders.rs b/src/log/mw_log_fmt/builders.rs index 04585d76f4..cbaf2b248c 100644 --- a/src/log/mw_log_fmt/builders.rs +++ b/src/log/mw_log_fmt/builders.rs @@ -484,7 +484,7 @@ impl<'a> DebugMap<'a> { mod tests { use crate::builders::{DebugList, DebugMap, DebugSet, DebugStruct, DebugTuple}; use crate::test_utils::StringWriter; - use crate::FormatSpec; + use crate::{DisplayHint, FormatSpec}; #[test] fn test_struct_finish_non_exhaustive() { @@ -734,7 +734,8 @@ mod tests { let v = std::collections::BTreeMap::from([("first", 123), ("second", 456), ("third", 789)]); let mut writer = StringWriter::new(); - let spec = FormatSpec::new(); + let mut spec = FormatSpec::new(); + spec.display_hint(DisplayHint::Debug); let _ = DebugMap::new(&mut writer, &spec) .entries(v.clone()) .finish_non_exhaustive() @@ -743,6 +744,21 @@ mod tests { assert_eq!(writer.get(), "{\"first\": 123, \"second\": 456, \"third\": 789, ..}"); } + #[test] + fn test_map_finish() { + let v = std::collections::BTreeMap::from([("first", 123), ("second", 456), ("third", 789)]); + + let mut writer = StringWriter::new(); + let mut spec = FormatSpec::new(); + spec.display_hint(DisplayHint::Debug); + let _ = DebugMap::new(&mut writer, &spec) + .entries(v.clone()) + .finish() + .map_err(|_| panic!("failed to finish")); + + assert_eq!(writer.get(), format!("{:?}", v)); + } + #[test] fn test_map_empty_finish_non_exhaustive() { let mut writer = StringWriter::new(); diff --git a/src/log/mw_log_fmt/fmt.rs b/src/log/mw_log_fmt/fmt.rs index 05ff8d0c56..6874d94f7c 100644 --- a/src/log/mw_log_fmt/fmt.rs +++ b/src/log/mw_log_fmt/fmt.rs @@ -204,8 +204,8 @@ mod tests { let args = Arguments(&fragments); assert!(write(&mut w, args) == Ok(())); - let exp_pattern = "true123.4432.2-100-1234-123456-120000000000000000012312341234561200000000000000000\"test\""; - assert!(w.get() == exp_pattern); + let exp_pattern = "true123.4432.2-100-1234-123456-120000000000000000012312341234561200000000000000000test"; + assert_eq!(w.get(), exp_pattern); } #[test] diff --git a/src/log/mw_log_fmt/fmt_impl.rs b/src/log/mw_log_fmt/fmt_impl.rs index 169ab89fb3..ea6ba7e581 100644 --- a/src/log/mw_log_fmt/fmt_impl.rs +++ b/src/log/mw_log_fmt/fmt_impl.rs @@ -13,9 +13,10 @@ //! `ScoreDebug` implementations for common types. -use crate::builders::DebugList; +use crate::builders::{DebugList, DebugStruct, DebugTuple}; use crate::fmt::{Error, Result, ScoreDebug, Writer}; -use crate::fmt_spec::FormatSpec; +use crate::fmt_spec::{DisplayHint, FormatSpec}; +use crate::DebugMap; macro_rules! impl_debug_for_t { ($t:ty, $fn:ident) => { @@ -39,12 +40,23 @@ impl_debug_for_t!(u16, write_u16); impl_debug_for_t!(u32, write_u32); impl_debug_for_t!(u64, write_u64); +impl ScoreDebug for () { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + f.write_str("()", spec) + } +} + impl ScoreDebug for str { fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { - let empty_spec = FormatSpec::new(); - f.write_str("\"", &empty_spec)?; - f.write_str(self, spec)?; - f.write_str("\"", &empty_spec) + match spec.get_display_hint() { + DisplayHint::Debug => { + let empty_spec = FormatSpec::new(); + f.write_str("\"", &empty_spec)?; + f.write_str(self, spec)?; + f.write_str("\"", &empty_spec) + }, + _ => f.write_str(self, spec), + } } } @@ -54,6 +66,26 @@ impl ScoreDebug for String { } } +impl ScoreDebug for core::str::Utf8Error { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + let mut debug_struct = DebugStruct::new(f, spec, "Utf8Error"); + debug_struct + .field("valid_up_to", &self.valid_up_to()) + .field("error_len", &self.error_len()) + .finish() + } +} + +impl ScoreDebug for std::string::FromUtf8Error { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + let mut debug_struct = DebugStruct::new(f, spec, "FromUtf8Error"); + debug_struct + .field("bytes", &self.as_bytes()) + .field("error", &self.utf8_error()) + .finish() + } +} + macro_rules! impl_debug_for_t_casted { ($ti:ty, $to:ty, $fn:ident) => { impl ScoreDebug for $ti { @@ -99,6 +131,13 @@ impl ScoreDebug for [T; N] { } } +impl ScoreDebug for core::array::TryFromSliceError { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + let mut debug_tuple = DebugTuple::new(f, spec, "TryFromSliceError"); + debug_tuple.field(&()).finish() + } +} + impl ScoreDebug for Vec { fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { ScoreDebug::fmt(&**self, f, spec) @@ -117,6 +156,38 @@ impl ScoreDebug for std::sync::Arc { } } +impl ScoreDebug for Option { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + match self { + Some(v) => { + let empty_spec = FormatSpec::new(); + f.write_str("Some(", &empty_spec)?; + ScoreDebug::fmt(v, f, spec)?; + f.write_str(")", &empty_spec) + }, + None => f.write_str("None", spec), + } + } +} + +impl ScoreDebug for std::collections::HashMap +where + K: ScoreDebug, + V: ScoreDebug, +{ + fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + let mut debug_map = DebugMap::new(f, spec); + debug_map.entries(self.iter()).finish() + } +} + +impl ScoreDebug for std::sync::PoisonError { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + let mut debug_struct = DebugStruct::new(f, spec, "PoisonError"); + debug_struct.finish_non_exhaustive() + } +} + #[cfg(test)] mod tests { use crate::test_utils::common_test_debug; @@ -176,6 +247,11 @@ mod tests { common_test_debug(1200000000000000000u64); } + #[test] + fn test_unit_debug() { + common_test_debug(()); + } + #[test] fn test_str_debug() { common_test_debug("test"); @@ -186,6 +262,20 @@ mod tests { common_test_debug(String::from("test")); } + #[test] + fn test_utf8_error_debug() { + let a1 = vec![0xa0, 0xa1]; + let a2 = core::str::from_utf8(&a1); + common_test_debug(a2.unwrap_err()); + } + + #[test] + fn test_from_utf8_error_debug() { + let a1 = vec![0xa0, 0xa1]; + let a2: Result = a1.try_into(); + common_test_debug(a2.unwrap_err()); + } + #[test] fn test_isize_debug() { common_test_debug(-1200000000000000000isize); @@ -206,6 +296,13 @@ mod tests { common_test_debug([123, 456, 789]); } + #[test] + fn test_try_from_slice_error_debug() { + let a1 = vec![123, 456]; + let a2: Result<[i32; 3], core::array::TryFromSliceError> = a1.as_slice().try_into(); + common_test_debug(a2.unwrap_err()); + } + #[test] fn test_vec_debug() { common_test_debug(vec![987, 654, 321, 159]); @@ -222,4 +319,21 @@ mod tests { let arc = std::sync::Arc::new(654); common_test_debug(arc); } + + #[test] + fn test_option_debug() { + common_test_debug(Some(123)); + common_test_debug(Option::::None); + } + + #[test] + fn test_hashmap_debug() { + common_test_debug(std::collections::HashMap::from([("x", 123), ("y", 321), ("z", 444)])); + } + + #[test] + fn test_poison_error_debug() { + let pe = std::sync::PoisonError::new(123.0); + common_test_debug(pe); + } } diff --git a/src/log/mw_log_fmt/macros.rs b/src/log/mw_log_fmt/macros.rs index 70deec45eb..6dd93dc064 100644 --- a/src/log/mw_log_fmt/macros.rs +++ b/src/log/mw_log_fmt/macros.rs @@ -18,7 +18,6 @@ #[macro_export] macro_rules! score_write { ($dst:expr, $($arg:tt)*) => { - // TODO: `mw_log::__private_api` will become available in future PRs. - $crate::write($dst, mw_log::__private_api::format_args!($($arg)*)) + $crate::write($dst, mw_log::format_args!($($arg)*)) }; } diff --git a/src/log/mw_log_fmt/test_utils.rs b/src/log/mw_log_fmt/test_utils.rs index 729777a086..e6ccbe6d2e 100644 --- a/src/log/mw_log_fmt/test_utils.rs +++ b/src/log/mw_log_fmt/test_utils.rs @@ -13,7 +13,7 @@ //! Common testing utilities. -use crate::{Error, FormatSpec, Result, ScoreDebug, ScoreWrite}; +use crate::{DisplayHint, Error, FormatSpec, Result, ScoreDebug, ScoreWrite}; use core::fmt::{Error as CoreFmtError, Write}; impl From for Error { @@ -90,6 +90,8 @@ impl ScoreWrite for StringWriter { /// This is useful for e.g., checking string primitives. pub(crate) fn common_test_debug(v: T) { let mut w = StringWriter::new(); - let _ = ScoreDebug::fmt(&v, &mut w, &FormatSpec::new()); + let mut spec = FormatSpec::new(); + spec.display_hint(DisplayHint::Debug); + let _ = ScoreDebug::fmt(&v, &mut w, &spec); assert_eq!(w.get(), format!("{v:?}")); } diff --git a/src/log/mw_log_fmt_macro/BUILD b/src/log/mw_log_fmt_macro/BUILD index f55f03ebba..ca4e06b86a 100644 --- a/src/log/mw_log_fmt_macro/BUILD +++ b/src/log/mw_log_fmt_macro/BUILD @@ -15,9 +15,7 @@ load("@rules_rust//rust:defs.bzl", "rust_proc_macro", "rust_test") rust_proc_macro( name = "mw_log_fmt_macro", srcs = glob(["*.rs"]), - # TODO: expose required interface through `mw_log` and make it private again. - # visibility = ["//visibility:private"], - visibility = ["//visibility:public"], + visibility = ["//src/log/mw_log:__pkg__"], deps = [ "//src/log/mw_log_fmt", "@score_crates//:proc_macro2", @@ -37,6 +35,7 @@ rust_test( "ut", ], deps = [ + "//src/log/mw_log", "//src/log/mw_log_fmt", ], ) diff --git a/src/log/mw_log_fmt_macro/Cargo.toml b/src/log/mw_log_fmt_macro/Cargo.toml index c52e435945..0ebf43d68d 100644 --- a/src/log/mw_log_fmt_macro/Cargo.toml +++ b/src/log/mw_log_fmt_macro/Cargo.toml @@ -28,5 +28,8 @@ quote = "1" proc-macro2 = "1" mw_log_fmt.workspace = true +[dev-dependencies] +mw_log.workspace = true + [lints] workspace = true diff --git a/src/log/mw_log_fmt_macro/format_args.rs b/src/log/mw_log_fmt_macro/format_args.rs index 4a53d7c844..0a6433bb30 100644 --- a/src/log/mw_log_fmt_macro/format_args.rs +++ b/src/log/mw_log_fmt_macro/format_args.rs @@ -219,24 +219,24 @@ fn tokenize_spec(spec: &FormatSpec) -> proc_macro2::TokenStream { // Additional helpers are required to properly tokenize enums and options. fn tokenize_display_hint(display_hint: DisplayHint) -> proc_macro2::TokenStream { match display_hint { - DisplayHint::NoHint => quote! { mw_log_fmt::DisplayHint::NoHint }, - DisplayHint::Debug => quote! { mw_log_fmt::DisplayHint::Debug }, - DisplayHint::Octal => quote! { mw_log_fmt::DisplayHint::Octal }, - DisplayHint::LowerHex => quote! { mw_log_fmt::DisplayHint::LowerHex }, - DisplayHint::UpperHex => quote! { mw_log_fmt::DisplayHint::UpperHex }, - DisplayHint::Pointer => quote! { mw_log_fmt::DisplayHint::Pointer }, - DisplayHint::Binary => quote! { mw_log_fmt::DisplayHint::Binary }, - DisplayHint::LowerExp => quote! { mw_log_fmt::DisplayHint::LowerExp }, - DisplayHint::UpperExp => quote! { mw_log_fmt::DisplayHint::UpperExp }, + DisplayHint::NoHint => quote! { mw_log::fmt::DisplayHint::NoHint }, + DisplayHint::Debug => quote! { mw_log::fmt::DisplayHint::Debug }, + DisplayHint::Octal => quote! { mw_log::fmt::DisplayHint::Octal }, + DisplayHint::LowerHex => quote! { mw_log::fmt::DisplayHint::LowerHex }, + DisplayHint::UpperHex => quote! { mw_log::fmt::DisplayHint::UpperHex }, + DisplayHint::Pointer => quote! { mw_log::fmt::DisplayHint::Pointer }, + DisplayHint::Binary => quote! { mw_log::fmt::DisplayHint::Binary }, + DisplayHint::LowerExp => quote! { mw_log::fmt::DisplayHint::LowerExp }, + DisplayHint::UpperExp => quote! { mw_log::fmt::DisplayHint::UpperExp }, } } fn tokenize_alignment(align: Option) -> proc_macro2::TokenStream { match align { Some(v) => match v { - Alignment::Left => quote! { Some(mw_log_fmt::Alignment::Left) }, - Alignment::Right => quote! { Some(mw_log_fmt::Alignment::Right) }, - Alignment::Center => quote! { Some(mw_log_fmt::Alignment::Center) }, + Alignment::Left => quote! { Some(mw_log::fmt::Alignment::Left) }, + Alignment::Right => quote! { Some(mw_log::fmt::Alignment::Right) }, + Alignment::Center => quote! { Some(mw_log::fmt::Alignment::Center) }, }, None => quote! { None }, } @@ -245,8 +245,8 @@ fn tokenize_spec(spec: &FormatSpec) -> proc_macro2::TokenStream { fn tokenize_sign(sign: Option) -> proc_macro2::TokenStream { match sign { Some(v) => match v { - Sign::Plus => quote! { Some(mw_log_fmt::Sign::Plus) }, - Sign::Minus => quote! { Some(mw_log_fmt::Sign::Minus) }, + Sign::Plus => quote! { Some(mw_log::fmt::Sign::Plus) }, + Sign::Minus => quote! { Some(mw_log::fmt::Sign::Minus) }, }, None => quote! { None }, } @@ -255,8 +255,8 @@ fn tokenize_spec(spec: &FormatSpec) -> proc_macro2::TokenStream { fn tokenize_debug_as_hex(debug_as_hex: Option) -> proc_macro2::TokenStream { match debug_as_hex { Some(v) => match v { - DebugAsHex::Lower => quote! { Some(mw_log_fmt::DebugAsHex::Lower) }, - DebugAsHex::Upper => quote! { Some(mw_log_fmt::DebugAsHex::Upper) }, + DebugAsHex::Lower => quote! { Some(mw_log::fmt::DebugAsHex::Lower) }, + DebugAsHex::Upper => quote! { Some(mw_log::fmt::DebugAsHex::Upper) }, }, None => quote! { None }, } @@ -280,7 +280,7 @@ fn tokenize_spec(spec: &FormatSpec) -> proc_macro2::TokenStream { let precision = tokenize_option_u16(spec.get_precision()); quote! {{ - mw_log_fmt::FormatSpec::from_params( + mw_log::fmt::FormatSpec::from_params( #display_hint, #fill, #align, @@ -460,7 +460,30 @@ fn validate_args(args: &[Expr]) -> Result<(), Error> { match arg { Expr::Assign(_) => named_found = true, // NOTE: the list of allowed expression types may not be complete. - Expr::Lit(_) | Expr::Field(_) | Expr::If(_) | Expr::Path(_) | Expr::Unary(_) => { + Expr::Array(_) + | Expr::Await(_) + | Expr::Binary(_) + | Expr::Block(_) + | Expr::Call(_) + | Expr::Cast(_) + | Expr::Field(_) + | Expr::If(_) + | Expr::Index(_) + | Expr::Lit(_) + | Expr::Macro(_) + | Expr::Match(_) + | Expr::MethodCall(_) + | Expr::Paren(_) + | Expr::Path(_) + | Expr::Range(_) + | Expr::RawAddr(_) + | Expr::Reference(_) + | Expr::Repeat(_) + | Expr::Struct(_) + | Expr::Try(_) + | Expr::Tuple(_) + | Expr::Unary(_) + | Expr::Unsafe(_) => { if named_found { return Err(Error::new_spanned( arg, @@ -495,7 +518,30 @@ fn select_arg_with_name(args: &[Expr], name: &str) -> Result { expr_assign.left.as_ref().clone(), Some(expr_assign.right.as_ref().clone()), ), - Expr::Lit(_) | Expr::Field(_) | Expr::If(_) | Expr::Path(_) | Expr::Unary(_) => (arg.clone(), None), + Expr::Array(_) + | Expr::Await(_) + | Expr::Binary(_) + | Expr::Block(_) + | Expr::Call(_) + | Expr::Cast(_) + | Expr::Field(_) + | Expr::If(_) + | Expr::Index(_) + | Expr::Lit(_) + | Expr::Macro(_) + | Expr::Match(_) + | Expr::MethodCall(_) + | Expr::Paren(_) + | Expr::Path(_) + | Expr::Range(_) + | Expr::RawAddr(_) + | Expr::Reference(_) + | Expr::Repeat(_) + | Expr::Struct(_) + | Expr::Try(_) + | Expr::Tuple(_) + | Expr::Unary(_) + | Expr::Unsafe(_) => (arg.clone(), None), _ => return Err(Error::new_spanned(arg, "invalid expression type")), }; @@ -551,7 +597,7 @@ fn parse_fragments(punctuated_it: &mut IntoIter) -> Result fragments.push(quote! {{ - mw_log_fmt::Fragment::Literal(#s) + mw_log::fmt::Fragment::Literal(#s) }}), Spec::Placeholder(placeholder) => { // Select argument based on provided argument. @@ -572,7 +618,7 @@ fn parse_fragments(punctuated_it: &mut IntoIter) -> Result proc_macro::TokenStream Err(e) => return e.to_compile_error().into(), }; - quote! { mw_log_fmt::Arguments(&[#(#fragments),*]) }.into() + quote! { mw_log::fmt::Arguments(&[#(#fragments),*]) }.into() } diff --git a/src/log/mw_log_fmt_macro/score_debug.rs b/src/log/mw_log_fmt_macro/score_debug.rs index 54881585b1..f3cd28f563 100644 --- a/src/log/mw_log_fmt_macro/score_debug.rs +++ b/src/log/mw_log_fmt_macro/score_debug.rs @@ -41,7 +41,7 @@ fn generate_for_struct( // Generate `.fmt` implementation using named struct helper. quote! { - mw_log_fmt::DebugStruct::new(f, spec, #struct_name) + mw_log::fmt::DebugStruct::new(f, spec, #struct_name) #(#field_methods)* .finish() } @@ -58,7 +58,7 @@ fn generate_for_struct( // Generate `.fmt` implementation using named tuple helper. quote! { - mw_log_fmt::DebugTuple::new(f, spec, #struct_name) + mw_log::fmt::DebugTuple::new(f, spec, #struct_name) #(#field_methods)* .finish() } @@ -67,7 +67,7 @@ fn generate_for_struct( // Unit struct - no fields. Fields::Unit => { quote! { - mw_log_fmt::DebugStruct::new(f, spec, #struct_name).finish() + mw_log::fmt::DebugStruct::new(f, spec, #struct_name).finish() } }, }; @@ -75,8 +75,8 @@ fn generate_for_struct( // Generate `ScoreDebug` implementation for provided struct. Ok(quote! { #[automatically_derived] - impl #impl_generics mw_log_fmt::ScoreDebug for #ident #ty_generics { - fn fmt(&self, f: mw_log_fmt::Writer, spec: &mw_log_fmt::FormatSpec) -> mw_log_fmt::Result { + impl #impl_generics mw_log::fmt::ScoreDebug for #ident #ty_generics { + fn fmt(&self, f: mw_log::fmt::Writer, spec: &mw_log::fmt::FormatSpec) -> mw_log::fmt::Result { #fmt_impl } } @@ -94,8 +94,8 @@ fn generate_for_enum( if data_enum.variants.is_empty() { return Ok(quote! { #[automatically_derived] - impl #impl_generics mw_log_fmt::ScoreDebug for #ident #ty_generics { - fn fmt(&self, f: mw_log_fmt::Writer, spec: &mw_log_fmt::FormatSpec) -> mw_log_fmt::Result { + impl #impl_generics mw_log::fmt::ScoreDebug for #ident #ty_generics { + fn fmt(&self, f: mw_log::fmt::Writer, spec: &mw_log::fmt::FormatSpec) -> mw_log::fmt::Result { Ok(()) } } @@ -126,7 +126,7 @@ fn generate_for_enum( // Generate variant match implementation. quote! { Self::#variant_ident { #(#arg_names),* } => { - mw_log_fmt::DebugStruct::new(f, spec, #variant_name) + mw_log::fmt::DebugStruct::new(f, spec, #variant_name) #(#field_methods)* .finish() }, @@ -145,7 +145,7 @@ fn generate_for_enum( // Generate variant match implementation. quote! { Self::#variant_ident (#(#arg_names),*) => { - mw_log_fmt::DebugTuple::new(f, spec, #variant_name) + mw_log::fmt::DebugTuple::new(f, spec, #variant_name) #(#field_methods)* .finish() }, @@ -164,8 +164,8 @@ fn generate_for_enum( // Generate `ScoreDebug` implementation for provided enum. Ok(quote! { #[automatically_derived] - impl #impl_generics mw_log_fmt::ScoreDebug for #ident #ty_generics { - fn fmt(&self, f: mw_log_fmt::Writer, spec: &mw_log_fmt::FormatSpec) -> mw_log_fmt::Result { + impl #impl_generics mw_log::fmt::ScoreDebug for #ident #ty_generics { + fn fmt(&self, f: mw_log::fmt::Writer, spec: &mw_log::fmt::FormatSpec) -> mw_log::fmt::Result { match self { #(#variants)* } From e85b9588eb7a4edac6486276a4b4c0e153f8c335 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arkadiusz=20J=C4=99drzejewski?= Date: Mon, 29 Dec 2025 08:03:33 +0000 Subject: [PATCH 24/59] log: Rust-based backend implementation Basic implementation creating a string, printed to stderr. --- Cargo.toml | 6 +- examples/log_builtin/BUILD | 23 ++ examples/log_builtin/Cargo.toml | 12 + examples/log_builtin/src/main.rs | 44 +++ examples/{log_example => log_custom}/BUILD | 2 +- .../{log_example => log_custom}/Cargo.toml | 2 +- .../{log_example => log_custom}/src/logger.rs | 0 .../{log_example => log_custom}/src/main.rs | 5 +- src/log/mw_log/lib.rs | 5 + src/log/mw_log_fmt/fmt_impl.rs | 12 +- src/log/stdout_logger/BUILD | 37 +++ src/log/stdout_logger/Cargo.toml | 15 + src/log/stdout_logger/lib.rs | 296 ++++++++++++++++++ 13 files changed, 447 insertions(+), 12 deletions(-) create mode 100644 examples/log_builtin/BUILD create mode 100644 examples/log_builtin/Cargo.toml create mode 100644 examples/log_builtin/src/main.rs rename examples/{log_example => log_custom}/BUILD (96%) rename examples/{log_example => log_custom}/Cargo.toml (97%) rename examples/{log_example => log_custom}/src/logger.rs (100%) rename examples/{log_example => log_custom}/src/main.rs (86%) create mode 100644 src/log/stdout_logger/BUILD create mode 100644 src/log/stdout_logger/Cargo.toml create mode 100644 src/log/stdout_logger/lib.rs diff --git a/Cargo.toml b/Cargo.toml index b4772bc5cf..971d14cd94 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,6 +20,7 @@ default-members = [ "src/log/mw_log", "src/log/mw_log_fmt", "src/log/mw_log_fmt_macro", + "src/log/stdout_logger", ] # Include tests and examples as a member for IDE support and Bazel builds. members = [ @@ -27,7 +28,9 @@ members = [ "src/log/mw_log", "src/log/mw_log_fmt", "src/log/mw_log_fmt_macro", - "examples/log_example", + "src/log/stdout_logger", + "examples/log_builtin", + "examples/log_custom", ] [workspace.package] @@ -40,6 +43,7 @@ authors = ["S-CORE Contributors"] mw_log = { path = "src/log/mw_log" } mw_log_fmt = { path = "src/log/mw_log_fmt" } mw_log_fmt_macro = { path = "src/log/mw_log_fmt_macro" } +stdout_logger = { path = "src/log/stdout_logger" } [workspace.lints.clippy] std_instead_of_core = "warn" diff --git a/examples/log_builtin/BUILD b/examples/log_builtin/BUILD new file mode 100644 index 0000000000..ebb63db473 --- /dev/null +++ b/examples/log_builtin/BUILD @@ -0,0 +1,23 @@ +# ******************************************************************************* +# Copyright (c) 2025 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* + +load("@rules_rust//rust:defs.bzl", "rust_binary") + +rust_binary( + name = "log_builtin", + srcs = glob(["src/**/*.rs"]), + deps = [ + "//src/log/mw_log", + "//src/log/stdout_logger", + ], +) diff --git a/examples/log_builtin/Cargo.toml b/examples/log_builtin/Cargo.toml new file mode 100644 index 0000000000..c295cfcb0e --- /dev/null +++ b/examples/log_builtin/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "log_builtin" +version.workspace = true +authors.workspace = true +edition.workspace = true + +[dependencies] +mw_log.workspace = true +stdout_logger.workspace = true + +[lints] +workspace = true diff --git a/examples/log_builtin/src/main.rs b/examples/log_builtin/src/main.rs new file mode 100644 index 0000000000..95223e0ec6 --- /dev/null +++ b/examples/log_builtin/src/main.rs @@ -0,0 +1,44 @@ +// +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// +// +// SPDX-License-Identifier: Apache-2.0 +// + +//! Example app utilizing built-in backend implementation. + +use mw_log::{debug, error, fatal, info, trace, warn, LevelFilter}; +use stdout_logger::StdoutLoggerBuilder; + +fn main() { + // Initialize logger. + StdoutLoggerBuilder::new() + .context("EXAMPLE") + .show_module(true) + .show_file(true) + .show_line(true) + .log_level(LevelFilter::Info) + .set_as_default_logger(); + + // Example logs. + trace!("trace log - hidden!"); + debug!("debug log - hidden!"); + info!("info log"); + warn!("warn log"); + error!("error log"); + fatal!("fatal log"); + + // Logs with changed context. + trace!(context: "CHANGED", "trace log - hidden!"); + debug!(context: "CHANGED", "debug log - hidden!"); + info!(context: "CHANGED", "info log"); + warn!(context: "CHANGED", "warn log"); + error!(context: "CHANGED", "error log"); + fatal!(context: "CHANGED", "fatal log"); +} diff --git a/examples/log_example/BUILD b/examples/log_custom/BUILD similarity index 96% rename from examples/log_example/BUILD rename to examples/log_custom/BUILD index 6b44c55fc8..54c26198a3 100644 --- a/examples/log_example/BUILD +++ b/examples/log_custom/BUILD @@ -14,7 +14,7 @@ load("@rules_rust//rust:defs.bzl", "rust_binary") rust_binary( - name = "log_example", + name = "log_custom", srcs = glob(["src/**/*.rs"]), deps = [ "//src/log/mw_log", diff --git a/examples/log_example/Cargo.toml b/examples/log_custom/Cargo.toml similarity index 97% rename from examples/log_example/Cargo.toml rename to examples/log_custom/Cargo.toml index 839d2240ff..913d610d07 100644 --- a/examples/log_example/Cargo.toml +++ b/examples/log_custom/Cargo.toml @@ -12,7 +12,7 @@ # ******************************************************************************* [package] -name = "log_example" +name = "log_custom" version.workspace = true authors.workspace = true edition.workspace = true diff --git a/examples/log_example/src/logger.rs b/examples/log_custom/src/logger.rs similarity index 100% rename from examples/log_example/src/logger.rs rename to examples/log_custom/src/logger.rs diff --git a/examples/log_example/src/main.rs b/examples/log_custom/src/main.rs similarity index 86% rename from examples/log_example/src/main.rs rename to examples/log_custom/src/main.rs index 7dd9671e37..6308b125ec 100644 --- a/examples/log_example/src/main.rs +++ b/examples/log_custom/src/main.rs @@ -21,9 +21,8 @@ use mw_log::{debug, error, fatal, info, trace, warn, LevelFilter}; fn main() { // Initialize logger. mw_log::set_max_level(LevelFilter::Info); - let result = mw_log::set_global_logger(Box::new(ExampleLogger)); - if result.is_err() { - panic!("unable to set logger") + if let Err(e) = mw_log::set_global_logger(Box::new(ExampleLogger)) { + panic!("unable to set logger: {e}"); } // Example logs. diff --git a/src/log/mw_log/lib.rs b/src/log/mw_log/lib.rs index 35460cfd17..3e22f697f0 100644 --- a/src/log/mw_log/lib.rs +++ b/src/log/mw_log/lib.rs @@ -311,6 +311,11 @@ pub trait Log: Sync + Send { fn context(&self) -> &str; /// Logs the [`Record`]. + /// + /// # For implementors + /// + /// Note that [`Log::enabled`] is *not* necessarily called before this method. + /// Implementations should perform all necessary filtering internally. fn log(&self, record: &Record); /// Flushes any buffered records. diff --git a/src/log/mw_log_fmt/fmt_impl.rs b/src/log/mw_log_fmt/fmt_impl.rs index ea6ba7e581..adcb33f4b0 100644 --- a/src/log/mw_log_fmt/fmt_impl.rs +++ b/src/log/mw_log_fmt/fmt_impl.rs @@ -50,10 +50,10 @@ impl ScoreDebug for str { fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { match spec.get_display_hint() { DisplayHint::Debug => { - let empty_spec = FormatSpec::new(); - f.write_str("\"", &empty_spec)?; + let queue_spec = FormatSpec::new(); + f.write_str("\"", &queue_spec)?; f.write_str(self, spec)?; - f.write_str("\"", &empty_spec) + f.write_str("\"", &queue_spec) }, _ => f.write_str(self, spec), } @@ -160,10 +160,10 @@ impl ScoreDebug for Option { fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { match self { Some(v) => { - let empty_spec = FormatSpec::new(); - f.write_str("Some(", &empty_spec)?; + let outer_spec = FormatSpec::new(); + f.write_str("Some(", &outer_spec)?; ScoreDebug::fmt(v, f, spec)?; - f.write_str(")", &empty_spec) + f.write_str(")", &outer_spec) }, None => f.write_str("None", spec), } diff --git a/src/log/stdout_logger/BUILD b/src/log/stdout_logger/BUILD new file mode 100644 index 0000000000..c4f46b3877 --- /dev/null +++ b/src/log/stdout_logger/BUILD @@ -0,0 +1,37 @@ +# ******************************************************************************* +# Copyright (c) 2025 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* + +""" +`stdout_logger` is a testing/development backend for logging. +For production use `score_logging`. +""" + +load("@rules_rust//rust:defs.bzl", "rust_library", "rust_test") + +rust_library( + name = "stdout_logger", + srcs = glob(["**/*.rs"]), + visibility = ["//visibility:public"], + deps = [ + "//src/log/mw_log", + ], +) + +rust_test( + name = "tests", + crate = "stdout_logger", + tags = [ + "unit_tests", + "ut", + ], +) diff --git a/src/log/stdout_logger/Cargo.toml b/src/log/stdout_logger/Cargo.toml new file mode 100644 index 0000000000..0dea0654fa --- /dev/null +++ b/src/log/stdout_logger/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "stdout_logger" +version.workspace = true +authors.workspace = true +readme.workspace = true +edition.workspace = true + +[lib] +path = "lib.rs" + +[dependencies] +mw_log.workspace = true + +[lints] +workspace = true diff --git a/src/log/stdout_logger/lib.rs b/src/log/stdout_logger/lib.rs new file mode 100644 index 0000000000..de5507eb6d --- /dev/null +++ b/src/log/stdout_logger/lib.rs @@ -0,0 +1,296 @@ +// +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// +// +// SPDX-License-Identifier: Apache-2.0 +// + +//! String-based Rust backend for `mw_log`. +//! Data is written to a fixed-size buffer. + +use core::cell::RefCell; +use core::fmt::Write; +use mw_log::fmt::{score_write, Error, FormatSpec, Result, ScoreWrite}; +use mw_log::{LevelFilter, Log, Metadata, Record}; + +/// Fixed size buffer for strings. +struct FixedBuf { + buf: [u8; N], + len: usize, +} + +impl FixedBuf { + pub const fn new() -> Self { + Self { buf: [0; N], len: 0 } + } + + /// Get buffer as a string. + pub fn as_str(&self) -> &str { + // SAFETY: All bytes in `self.buf[..self.len]` are guaranteed to form valid UTF-8. + unsafe { core::str::from_utf8_unchecked(&self.buf[..self.len]) } + } + + /// Reset buffer state. + pub fn clear(&mut self) { + self.len = 0; + } + + /// Get number of remaining bytes in the buffer. + pub fn remaining(&self) -> usize { + N - self.len + } +} + +impl Default for FixedBuf { + fn default() -> Self { + Self::new() + } +} + +impl Write for FixedBuf { + fn write_str(&mut self, s: &str) -> core::fmt::Result { + // Get number of remaining bytes in the buffer. + // Return if buffer is full. + let remaining = self.remaining(); + if remaining == 0 { + return Ok(()); + } + + // Get provided string as bytes. + let bytes = s.as_bytes(); + + // Get number of bytes requested or remaining in the buffer. + let mut end = bytes.len().min(remaining); + + // Move back until char boundary. + // Return if buffer is full. + while end > 0 && !s.is_char_boundary(end) { + end -= 1; + } + if end == 0 { + return Ok(()); + } + + // Write to underlying buffer. + self.buf[self.len..self.len + end].copy_from_slice(&bytes[..end]); + self.len += end; + + Ok(()) + } +} + +/// Writer implementation based on fixed size buffer. +#[derive(Default)] +struct FixedBufWriter { + buf: FixedBuf, +} + +impl FixedBufWriter { + /// Create `FixedBufWriter` instance. + pub fn new() -> Self { + Self { buf: FixedBuf::new() } + } + + /// Get data from buffer. + pub fn get(&self) -> &str { + self.buf.as_str() + } + + /// Reset buffer state. + pub fn clear(&mut self) { + self.buf.clear(); + } +} + +impl ScoreWrite for FixedBufWriter { + fn write_bool(&mut self, v: &bool, _spec: &FormatSpec) -> Result { + write!(self.buf, "{}", v).map_err(|_| Error) + } + + fn write_f32(&mut self, v: &f32, _spec: &FormatSpec) -> Result { + write!(self.buf, "{}", v).map_err(|_| Error) + } + + fn write_f64(&mut self, v: &f64, _spec: &FormatSpec) -> Result { + write!(self.buf, "{}", v).map_err(|_| Error) + } + + fn write_i8(&mut self, v: &i8, _spec: &FormatSpec) -> Result { + write!(self.buf, "{}", v).map_err(|_| Error) + } + + fn write_i16(&mut self, v: &i16, _spec: &FormatSpec) -> Result { + write!(self.buf, "{}", v).map_err(|_| Error) + } + + fn write_i32(&mut self, v: &i32, _spec: &FormatSpec) -> Result { + write!(self.buf, "{}", v).map_err(|_| Error) + } + + fn write_i64(&mut self, v: &i64, _spec: &FormatSpec) -> Result { + write!(self.buf, "{}", v).map_err(|_| Error) + } + + fn write_u8(&mut self, v: &u8, _spec: &FormatSpec) -> Result { + write!(self.buf, "{}", v).map_err(|_| Error) + } + + fn write_u16(&mut self, v: &u16, _spec: &FormatSpec) -> Result { + write!(self.buf, "{}", v).map_err(|_| Error) + } + + fn write_u32(&mut self, v: &u32, _spec: &FormatSpec) -> Result { + write!(self.buf, "{}", v).map_err(|_| Error) + } + + fn write_u64(&mut self, v: &u64, _spec: &FormatSpec) -> Result { + write!(self.buf, "{}", v).map_err(|_| Error) + } + + fn write_str(&mut self, v: &str, _spec: &FormatSpec) -> Result { + write!(self.buf, "{}", v).map_err(|_| Error) + } +} + +/// Builder for the `StdoutLogger`. +pub struct StdoutLoggerBuilder(StdoutLogger); + +impl StdoutLoggerBuilder { + /// Create builder with default parameters. + pub fn new() -> Self { + Self::default() + } + + /// Set context for the `StdoutLogger`. + pub fn context(mut self, context: &str) -> Self { + self.0.context = context.to_string(); + self + } + + /// Show module name in logs. + pub fn show_module(mut self, show_module: bool) -> Self { + self.0.show_module = show_module; + self + } + + /// Show file name in logs. + pub fn show_file(mut self, show_file: bool) -> Self { + self.0.show_file = show_file; + self + } + + /// Show line number in logs. + pub fn show_line(mut self, show_line: bool) -> Self { + self.0.show_line = show_line; + self + } + + /// Filter logs by level. + pub fn log_level(mut self, log_level: LevelFilter) -> Self { + self.0.log_level = log_level; + self + } + + /// Build the `StdoutLogger` with provided context and configuration. + pub fn build(self) -> StdoutLogger { + self.0 + } + + /// Build the `StdoutLogger` and set it as the default logger. + pub fn set_as_default_logger(self) { + let logger = self.build(); + mw_log::set_max_level(logger.log_level()); + if let Err(e) = mw_log::set_global_logger(Box::new(logger)) { + panic!("unable to set logger: {e}"); + } + } +} + +impl Default for StdoutLoggerBuilder { + fn default() -> Self { + Self(StdoutLogger { + context: "DFLT".to_string(), + show_module: false, + show_file: false, + show_line: false, + log_level: LevelFilter::Info, + }) + } +} + +thread_local! { + static WRITER: RefCell> = RefCell::new(FixedBufWriter::new()); +} + +/// String-based logger implementation. +pub struct StdoutLogger { + context: String, + show_module: bool, + show_file: bool, + show_line: bool, + log_level: LevelFilter, +} + +impl StdoutLogger { + /// Current log level. + pub fn log_level(&self) -> LevelFilter { + self.log_level + } +} + +impl Log for StdoutLogger { + fn enabled(&self, metadata: &Metadata) -> bool { + metadata.level() <= self.log_level() + } + + fn context(&self) -> &str { + &self.context + } + + fn log(&self, record: &Record) { + // Finish early if not enabled for requested level. + let metadata = record.metadata(); + if !self.enabled(metadata) { + return; + } + + // Operate in a scope of borrowed writer. + WRITER.with_borrow_mut(|writer| { + // Write module, file and line. + if self.show_module || self.show_file || self.show_line { + let _ = score_write!(writer, "["); + if self.show_module { + let _ = score_write!(writer, "{}:", record.module_path()); + } + if self.show_file { + let _ = score_write!(writer, "{}:", record.file()); + } + if self.show_line { + let _ = score_write!(writer, "{}", record.line()); + } + let _ = score_write!(writer, "]"); + } + + // Write context, log level, log data. + let context = record.context(); + let level = metadata.level().as_str(); + let _ = score_write!(writer, "[{}][{}] {}", context, level, record.args()); + + // Print to stdout. + println!("{}", writer.get()); + + // Reset buffer. + writer.clear(); + }); + } + + fn flush(&self) { + // No-op. + } +} From 4589f34559a47d3f87e9639476ceb9f13b2c8b79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arkadiusz=20J=C4=99drzejewski?= Date: Wed, 7 Jan 2026 13:11:24 +0000 Subject: [PATCH 25/59] log: add `Box` format impl Add `Box` format to common implementations. --- src/log/mw_log_fmt/fmt_impl.rs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/log/mw_log_fmt/fmt_impl.rs b/src/log/mw_log_fmt/fmt_impl.rs index adcb33f4b0..7f42c30f04 100644 --- a/src/log/mw_log_fmt/fmt_impl.rs +++ b/src/log/mw_log_fmt/fmt_impl.rs @@ -170,6 +170,12 @@ impl ScoreDebug for Option { } } +impl ScoreDebug for Box { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + ScoreDebug::fmt(&**self, f, spec) + } +} + impl ScoreDebug for std::collections::HashMap where K: ScoreDebug, @@ -326,6 +332,11 @@ mod tests { common_test_debug(Option::::None); } + #[test] + fn test_box_debug() { + common_test_debug(Box::new(432.1)); + } + #[test] fn test_hashmap_debug() { common_test_debug(std::collections::HashMap::from([("x", 123), ("y", 321), ("z", 444)])); From bfcc9ccc3fe9536e81decceb7034253a580a3002 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arkadiusz=20J=C4=99drzejewski?= Date: Wed, 7 Jan 2026 14:30:06 +0000 Subject: [PATCH 26/59] log: re-export `qm` feature in `mw_log` `qm` belongs to `mw_log_fmt`, which is a hidden dep. Export `qm` so that it can be used externally. --- src/log/mw_log/Cargo.toml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/log/mw_log/Cargo.toml b/src/log/mw_log/Cargo.toml index 454774556e..e61c5ab4ba 100644 --- a/src/log/mw_log/Cargo.toml +++ b/src/log/mw_log/Cargo.toml @@ -25,5 +25,8 @@ path = "lib.rs" mw_log_fmt.workspace = true mw_log_fmt_macro.workspace = true +[features] +qm = ["mw_log_fmt/qm"] + [lints] workspace = true From 4668d5a323d5ef86f06c78bc26907f264c26b25f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arkadiusz=20J=C4=99drzejewski?= Date: Mon, 19 Jan 2026 09:22:03 +0000 Subject: [PATCH 27/59] log: rename `mw_log` to `score_log` Change logging frontend name. --- Cargo.toml | 18 ++--- examples/log_builtin/BUILD | 2 +- examples/log_builtin/Cargo.toml | 2 +- examples/log_builtin/src/main.rs | 2 +- examples/log_custom/BUILD | 2 +- examples/log_custom/Cargo.toml | 2 +- examples/log_custom/src/logger.rs | 4 +- examples/log_custom/src/main.rs | 6 +- src/log/{mw_log => score_log}/BUILD | 8 +- src/log/{mw_log => score_log}/Cargo.toml | 8 +- src/log/{mw_log => score_log}/lib.rs | 10 +-- src/log/{mw_log => score_log}/macros.rs | 38 ++++----- .../tests/integration.rs | 8 +- src/log/{mw_log => score_log}/tests/macros.rs | 12 +-- src/log/{mw_log_fmt => score_log_fmt}/BUILD | 8 +- .../{mw_log_fmt => score_log_fmt}/Cargo.toml | 2 +- .../{mw_log_fmt => score_log_fmt}/builders.rs | 0 src/log/{mw_log_fmt => score_log_fmt}/fmt.rs | 0 .../{mw_log_fmt => score_log_fmt}/fmt_impl.rs | 0 .../fmt_impl_qm.rs | 0 .../{mw_log_fmt => score_log_fmt}/fmt_spec.rs | 0 src/log/{mw_log_fmt => score_log_fmt}/lib.rs | 0 .../{mw_log_fmt => score_log_fmt}/macros.rs | 2 +- .../test_utils.rs | 0 .../BUILD | 12 +-- .../Cargo.toml | 6 +- .../format_args.rs | 48 ++++++------ .../lib.rs | 6 +- .../score_debug.rs | 22 +++--- .../tests/test_format_args.rs | 78 +++++++++---------- .../tests/test_score_debug.rs | 16 ++-- .../tests/tests.rs | 0 .../tests/utils/mod.rs | 2 +- src/log/stdout_logger/BUILD | 2 +- src/log/stdout_logger/Cargo.toml | 2 +- src/log/stdout_logger/lib.rs | 10 +-- 36 files changed, 169 insertions(+), 169 deletions(-) rename src/log/{mw_log => score_log}/BUILD (87%) rename src/log/{mw_log => score_log}/Cargo.toml (86%) rename src/log/{mw_log => score_log}/lib.rs (99%) rename src/log/{mw_log => score_log}/macros.rs (94%) rename src/log/{mw_log => score_log}/tests/integration.rs (91%) rename src/log/{mw_log => score_log}/tests/macros.rs (94%) rename src/log/{mw_log_fmt => score_log_fmt}/BUILD (86%) rename src/log/{mw_log_fmt => score_log_fmt}/Cargo.toml (97%) rename src/log/{mw_log_fmt => score_log_fmt}/builders.rs (100%) rename src/log/{mw_log_fmt => score_log_fmt}/fmt.rs (100%) rename src/log/{mw_log_fmt => score_log_fmt}/fmt_impl.rs (100%) rename src/log/{mw_log_fmt => score_log_fmt}/fmt_impl_qm.rs (100%) rename src/log/{mw_log_fmt => score_log_fmt}/fmt_spec.rs (100%) rename src/log/{mw_log_fmt => score_log_fmt}/lib.rs (100%) rename src/log/{mw_log_fmt => score_log_fmt}/macros.rs (92%) rename src/log/{mw_log_fmt => score_log_fmt}/test_utils.rs (100%) rename src/log/{mw_log_fmt_macro => score_log_fmt_macro}/BUILD (81%) rename src/log/{mw_log_fmt_macro => score_log_fmt_macro}/Cargo.toml (90%) rename src/log/{mw_log_fmt_macro => score_log_fmt_macro}/format_args.rs (91%) rename src/log/{mw_log_fmt_macro => score_log_fmt_macro}/lib.rs (80%) rename src/log/{mw_log_fmt_macro => score_log_fmt_macro}/score_debug.rs (87%) rename src/log/{mw_log_fmt_macro => score_log_fmt_macro}/tests/test_format_args.rs (73%) rename src/log/{mw_log_fmt_macro => score_log_fmt_macro}/tests/test_score_debug.rs (90%) rename src/log/{mw_log_fmt_macro => score_log_fmt_macro}/tests/tests.rs (100%) rename src/log/{mw_log_fmt_macro => score_log_fmt_macro}/tests/utils/mod.rs (97%) diff --git a/Cargo.toml b/Cargo.toml index 971d14cd94..9607cd8d5a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,17 +17,17 @@ resolver = "2" # Used when executing cargo from project root. default-members = [ "src/containers", - "src/log/mw_log", - "src/log/mw_log_fmt", - "src/log/mw_log_fmt_macro", + "src/log/score_log", + "src/log/score_log_fmt", + "src/log/score_log_fmt_macro", "src/log/stdout_logger", ] # Include tests and examples as a member for IDE support and Bazel builds. members = [ "src/containers", - "src/log/mw_log", - "src/log/mw_log_fmt", - "src/log/mw_log_fmt_macro", + "src/log/score_log", + "src/log/score_log_fmt", + "src/log/score_log_fmt_macro", "src/log/stdout_logger", "examples/log_builtin", "examples/log_custom", @@ -40,9 +40,9 @@ license-file = "LICENSE.md" authors = ["S-CORE Contributors"] [workspace.dependencies] -mw_log = { path = "src/log/mw_log" } -mw_log_fmt = { path = "src/log/mw_log_fmt" } -mw_log_fmt_macro = { path = "src/log/mw_log_fmt_macro" } +score_log = { path = "src/log/score_log" } +score_log_fmt = { path = "src/log/score_log_fmt" } +score_log_fmt_macro = { path = "src/log/score_log_fmt_macro" } stdout_logger = { path = "src/log/stdout_logger" } [workspace.lints.clippy] diff --git a/examples/log_builtin/BUILD b/examples/log_builtin/BUILD index ebb63db473..2e5051858b 100644 --- a/examples/log_builtin/BUILD +++ b/examples/log_builtin/BUILD @@ -17,7 +17,7 @@ rust_binary( name = "log_builtin", srcs = glob(["src/**/*.rs"]), deps = [ - "//src/log/mw_log", + "//src/log/score_log", "//src/log/stdout_logger", ], ) diff --git a/examples/log_builtin/Cargo.toml b/examples/log_builtin/Cargo.toml index c295cfcb0e..d13e57ad92 100644 --- a/examples/log_builtin/Cargo.toml +++ b/examples/log_builtin/Cargo.toml @@ -5,7 +5,7 @@ authors.workspace = true edition.workspace = true [dependencies] -mw_log.workspace = true +score_log.workspace = true stdout_logger.workspace = true [lints] diff --git a/examples/log_builtin/src/main.rs b/examples/log_builtin/src/main.rs index 95223e0ec6..7708e542dd 100644 --- a/examples/log_builtin/src/main.rs +++ b/examples/log_builtin/src/main.rs @@ -13,7 +13,7 @@ //! Example app utilizing built-in backend implementation. -use mw_log::{debug, error, fatal, info, trace, warn, LevelFilter}; +use score_log::{debug, error, fatal, info, trace, warn, LevelFilter}; use stdout_logger::StdoutLoggerBuilder; fn main() { diff --git a/examples/log_custom/BUILD b/examples/log_custom/BUILD index 54c26198a3..52e26ec3a2 100644 --- a/examples/log_custom/BUILD +++ b/examples/log_custom/BUILD @@ -17,6 +17,6 @@ rust_binary( name = "log_custom", srcs = glob(["src/**/*.rs"]), deps = [ - "//src/log/mw_log", + "//src/log/score_log", ], ) diff --git a/examples/log_custom/Cargo.toml b/examples/log_custom/Cargo.toml index 913d610d07..e07fdfd7d9 100644 --- a/examples/log_custom/Cargo.toml +++ b/examples/log_custom/Cargo.toml @@ -18,7 +18,7 @@ authors.workspace = true edition.workspace = true [dependencies] -mw_log.workspace = true +score_log.workspace = true [lints] workspace = true diff --git a/examples/log_custom/src/logger.rs b/examples/log_custom/src/logger.rs index 9a1baf1cf5..5f88c81e8c 100644 --- a/examples/log_custom/src/logger.rs +++ b/examples/log_custom/src/logger.rs @@ -12,8 +12,8 @@ // use core::fmt::Write; -use mw_log::fmt::{write, Error, FormatSpec, Result as FmtResult, ScoreWrite}; -use mw_log::{max_level, Log, Metadata, Record}; +use score_log::fmt::{write, Error, FormatSpec, Result as FmtResult, ScoreWrite}; +use score_log::{max_level, Log, Metadata, Record}; struct StringWriter { buffer: String, diff --git a/examples/log_custom/src/main.rs b/examples/log_custom/src/main.rs index 6308b125ec..d2754da343 100644 --- a/examples/log_custom/src/main.rs +++ b/examples/log_custom/src/main.rs @@ -16,12 +16,12 @@ mod logger; use crate::logger::ExampleLogger; -use mw_log::{debug, error, fatal, info, trace, warn, LevelFilter}; +use score_log::{debug, error, fatal, info, trace, warn, LevelFilter}; fn main() { // Initialize logger. - mw_log::set_max_level(LevelFilter::Info); - if let Err(e) = mw_log::set_global_logger(Box::new(ExampleLogger)) { + score_log::set_max_level(LevelFilter::Info); + if let Err(e) = score_log::set_global_logger(Box::new(ExampleLogger)) { panic!("unable to set logger: {e}"); } diff --git a/src/log/mw_log/BUILD b/src/log/score_log/BUILD similarity index 87% rename from src/log/mw_log/BUILD rename to src/log/score_log/BUILD index e321eeb589..29ca6f0719 100644 --- a/src/log/mw_log/BUILD +++ b/src/log/score_log/BUILD @@ -13,20 +13,20 @@ load("@rules_rust//rust:defs.bzl", "rust_library", "rust_test") rust_library( - name = "mw_log", + name = "score_log", srcs = glob(["**/*.rs"]), proc_macro_deps = [ - "//src/log/mw_log_fmt_macro", + "//src/log/score_log_fmt_macro", ], visibility = ["//visibility:public"], deps = [ - "//src/log/mw_log_fmt", + "//src/log/score_log_fmt", ], ) rust_test( name = "tests", - crate = "mw_log", + crate = "score_log", tags = [ "unit_tests", "ut", diff --git a/src/log/mw_log/Cargo.toml b/src/log/score_log/Cargo.toml similarity index 86% rename from src/log/mw_log/Cargo.toml rename to src/log/score_log/Cargo.toml index e61c5ab4ba..b981290a10 100644 --- a/src/log/mw_log/Cargo.toml +++ b/src/log/score_log/Cargo.toml @@ -12,7 +12,7 @@ # ******************************************************************************* [package] -name = "mw_log" +name = "score_log" version.workspace = true authors.workspace = true readme.workspace = true @@ -22,11 +22,11 @@ edition.workspace = true path = "lib.rs" [dependencies] -mw_log_fmt.workspace = true -mw_log_fmt_macro.workspace = true +score_log_fmt.workspace = true +score_log_fmt_macro.workspace = true [features] -qm = ["mw_log_fmt/qm"] +qm = ["score_log_fmt/qm"] [lints] workspace = true diff --git a/src/log/mw_log/lib.rs b/src/log/score_log/lib.rs similarity index 99% rename from src/log/mw_log/lib.rs rename to src/log/score_log/lib.rs index 3e22f697f0..8b3017c5d9 100644 --- a/src/log/mw_log/lib.rs +++ b/src/log/score_log/lib.rs @@ -20,9 +20,9 @@ extern crate alloc; use core::str::FromStr; use core::sync::atomic::{AtomicUsize, Ordering}; use core::{cmp, mem}; -pub use mw_log_fmt as fmt; -use mw_log_fmt::Arguments; -pub use mw_log_fmt_macro::{mw_log_format_args as format_args, ScoreDebug}; +pub use score_log_fmt as fmt; +use score_log_fmt::Arguments; +pub use score_log_fmt_macro::{score_log_format_args as format_args, ScoreDebug}; use std::sync::{LazyLock, OnceLock}; #[macro_use] @@ -717,8 +717,8 @@ mod tests { fn test_record_new_and_params() { // Local import to avoid name clash. use super::format_args; - // Fix for self-reference in `mw_log_format_args`. - use crate as mw_log; + // Fix for self-reference in `score_log_format_args`. + use crate as score_log; let level = Level::Info; let context = "context"; diff --git a/src/log/mw_log/macros.rs b/src/log/score_log/macros.rs similarity index 94% rename from src/log/mw_log/macros.rs rename to src/log/score_log/macros.rs index ca85aeeda1..931bc2d6cd 100644 --- a/src/log/mw_log/macros.rs +++ b/src/log/score_log/macros.rs @@ -16,7 +16,7 @@ /// This macro will generically log with the specified `Level` and `format!` based argument list. /// /// ``` -/// use mw_log::{log, Level}; +/// use score_log::{log, Level}; /// /// let data = (42, "Forty-two"); /// let private_data = "private"; @@ -28,7 +28,7 @@ /// By default, the context is provided by the logger. /// /// ``` -/// use mw_log::{log, Level}; +/// use score_log::{log, Level}; /// /// let data = (42, "Forty-two"); /// let private_data = "private"; @@ -46,16 +46,16 @@ /// ``` /// # struct MyLogger {} /// # impl Log for MyLogger { -/// # fn enabled(&self, _metadata: &mw_log::Metadata) -> bool { +/// # fn enabled(&self, _metadata: &score_log::Metadata) -> bool { /// # false /// # } /// # fn context(&self) -> &str { /// # "MyLogger" /// # } -/// # fn log(&self, _record: &mw_log::Record) {} +/// # fn log(&self, _record: &score_log::Record) {} /// # fn flush(&self) {} /// # } -/// use mw_log::{log, Level, Log}; +/// use score_log::{log, Level, Log}; /// /// let data = (42, "Forty-two"); /// let private_data = "private"; @@ -142,9 +142,9 @@ macro_rules! __log { /// # Examples /// /// ``` -/// use mw_log::fatal; +/// use score_log::fatal; /// -/// # let my_logger = mw_log::global_logger(); +/// # let my_logger = score_log::global_logger(); /// let (err_info, port) = ("No connection", 22); /// /// fatal!("Fatal: {} on port {}", err_info, port); @@ -178,9 +178,9 @@ macro_rules! fatal { /// # Examples /// /// ``` -/// use mw_log::error; +/// use score_log::error; /// -/// # let my_logger = mw_log::global_logger(); +/// # let my_logger = score_log::global_logger(); /// let (err_info, port) = ("No connection", 22); /// /// error!("Error: {} on port {}", err_info, port); @@ -214,9 +214,9 @@ macro_rules! error { /// # Examples /// /// ``` -/// use mw_log::warn; +/// use score_log::warn; /// -/// # let my_logger = mw_log::global_logger(); +/// # let my_logger = score_log::global_logger(); /// let warn_description = "Invalid Input"; /// /// warn!("Warning! {}!", warn_description); @@ -250,9 +250,9 @@ macro_rules! warn { /// # Examples /// /// ``` -/// use mw_log::info; +/// use score_log::info; /// -/// # let my_logger = mw_log::global_logger(); +/// # let my_logger = score_log::global_logger(); /// # struct Connection { port: u32, speed: f32 } /// let conn_info = Connection { port: 40, speed: 3.20 }; /// @@ -295,9 +295,9 @@ macro_rules! info { /// # Examples /// /// ``` -/// use mw_log::debug; +/// use score_log::debug; /// -/// # let my_logger = mw_log::global_logger(); +/// # let my_logger = score_log::global_logger(); /// # struct Position { x: f32, y: f32 } /// let pos = Position { x: 3.234, y: -1.223 }; /// @@ -332,9 +332,9 @@ macro_rules! debug { /// # Examples /// /// ``` -/// use mw_log::trace; +/// use score_log::trace; /// -/// # let my_logger = mw_log::global_logger(); +/// # let my_logger = score_log::global_logger(); /// # struct Position { x: f32, y: f32 } /// let pos = Position { x: 3.234, y: -1.223 }; /// @@ -375,11 +375,11 @@ macro_rules! trace { /// # Examples /// /// ``` -/// use mw_log::{debug, log_enabled, Level}; +/// use score_log::{debug, log_enabled, Level}; /// /// # struct Data { x: u32, y: u32 } /// # fn expensive_call() -> Data { Data { x: 0, y: 0 } } -/// # let my_logger = mw_log::global_logger(); +/// # let my_logger = score_log::global_logger(); /// if log_enabled!(Level::Debug) { /// let data = expensive_call(); /// debug!("expensive debug data: {} {}", data.x, data.y); diff --git a/src/log/mw_log/tests/integration.rs b/src/log/score_log/tests/integration.rs similarity index 91% rename from src/log/mw_log/tests/integration.rs rename to src/log/score_log/tests/integration.rs index 0a545f9627..2d9e58553e 100644 --- a/src/log/mw_log/tests/integration.rs +++ b/src/log/score_log/tests/integration.rs @@ -13,8 +13,8 @@ #![allow(dead_code, unused_imports, missing_docs)] -use mw_log::{debug, error, info, trace, warn, Level, LevelFilter, Log, Metadata, Record}; -use mw_log_fmt::Arguments; +use score_log::{debug, error, info, trace, warn, Level, LevelFilter, Log, Metadata, Record}; +use score_log_fmt::Arguments; use std::sync::{Arc, Mutex}; struct State { @@ -42,7 +42,7 @@ impl Log for Logger { fn test_filter(logger: &dyn Log, a: &State, filter: LevelFilter) { // tests to ensure logs with a level beneath 'max_level' are filtered out - mw_log::set_max_level(filter); + score_log::set_max_level(filter); error!(logger: logger, ""); last(a, t(Level::Error, filter)); warn!(logger: logger, ""); @@ -68,7 +68,7 @@ fn test_filter(logger: &dyn Log, a: &State, filter: LevelFilter) { } fn test_line_numbers(logger: &dyn Log, state: &State) { - mw_log::set_max_level(LevelFilter::Trace); + score_log::set_max_level(LevelFilter::Trace); info!(logger: logger, ""); // ensure check_line function follows log macro check_log_location(state); diff --git a/src/log/mw_log/tests/macros.rs b/src/log/score_log/tests/macros.rs similarity index 94% rename from src/log/mw_log/tests/macros.rs rename to src/log/score_log/tests/macros.rs index 95cb524b19..82476288da 100644 --- a/src/log/mw_log/tests/macros.rs +++ b/src/log/score_log/tests/macros.rs @@ -13,15 +13,15 @@ #![allow(missing_docs)] -use mw_log::{log, log_enabled, Level, Log, Metadata, Record}; +use score_log::{log, log_enabled, Level, Log, Metadata, Record}; macro_rules! all_log_macros { ($($arg:tt)*) => ({ - ::mw_log::trace!($($arg)*); - ::mw_log::debug!($($arg)*); - ::mw_log::info!($($arg)*); - ::mw_log::warn!($($arg)*); - ::mw_log::error!($($arg)*); + ::score_log::trace!($($arg)*); + ::score_log::debug!($($arg)*); + ::score_log::info!($($arg)*); + ::score_log::warn!($($arg)*); + ::score_log::error!($($arg)*); }); } diff --git a/src/log/mw_log_fmt/BUILD b/src/log/score_log_fmt/BUILD similarity index 86% rename from src/log/mw_log_fmt/BUILD rename to src/log/score_log_fmt/BUILD index 7e4e35f462..0ea5309729 100644 --- a/src/log/mw_log_fmt/BUILD +++ b/src/log/score_log_fmt/BUILD @@ -13,21 +13,21 @@ load("@rules_rust//rust:defs.bzl", "rust_library", "rust_test") rust_library( - name = "mw_log_fmt", + name = "score_log_fmt", srcs = glob(["**/*.rs"]), crate_features = select({ "//src/log:safety_level_qm": ["qm"], "//src/log:safety_level_asil_b": [], }), visibility = [ - "//src/log/mw_log:__pkg__", - "//src/log/mw_log_fmt_macro:__pkg__", + "//src/log/score_log:__pkg__", + "//src/log/score_log_fmt_macro:__pkg__", ], ) rust_test( name = "tests", - crate = "mw_log_fmt", + crate = "score_log_fmt", tags = [ "unit_tests", "ut", diff --git a/src/log/mw_log_fmt/Cargo.toml b/src/log/score_log_fmt/Cargo.toml similarity index 97% rename from src/log/mw_log_fmt/Cargo.toml rename to src/log/score_log_fmt/Cargo.toml index 67771301a3..9f6301263f 100644 --- a/src/log/mw_log_fmt/Cargo.toml +++ b/src/log/score_log_fmt/Cargo.toml @@ -12,7 +12,7 @@ # ******************************************************************************* [package] -name = "mw_log_fmt" +name = "score_log_fmt" version.workspace = true authors.workspace = true readme.workspace = true diff --git a/src/log/mw_log_fmt/builders.rs b/src/log/score_log_fmt/builders.rs similarity index 100% rename from src/log/mw_log_fmt/builders.rs rename to src/log/score_log_fmt/builders.rs diff --git a/src/log/mw_log_fmt/fmt.rs b/src/log/score_log_fmt/fmt.rs similarity index 100% rename from src/log/mw_log_fmt/fmt.rs rename to src/log/score_log_fmt/fmt.rs diff --git a/src/log/mw_log_fmt/fmt_impl.rs b/src/log/score_log_fmt/fmt_impl.rs similarity index 100% rename from src/log/mw_log_fmt/fmt_impl.rs rename to src/log/score_log_fmt/fmt_impl.rs diff --git a/src/log/mw_log_fmt/fmt_impl_qm.rs b/src/log/score_log_fmt/fmt_impl_qm.rs similarity index 100% rename from src/log/mw_log_fmt/fmt_impl_qm.rs rename to src/log/score_log_fmt/fmt_impl_qm.rs diff --git a/src/log/mw_log_fmt/fmt_spec.rs b/src/log/score_log_fmt/fmt_spec.rs similarity index 100% rename from src/log/mw_log_fmt/fmt_spec.rs rename to src/log/score_log_fmt/fmt_spec.rs diff --git a/src/log/mw_log_fmt/lib.rs b/src/log/score_log_fmt/lib.rs similarity index 100% rename from src/log/mw_log_fmt/lib.rs rename to src/log/score_log_fmt/lib.rs diff --git a/src/log/mw_log_fmt/macros.rs b/src/log/score_log_fmt/macros.rs similarity index 92% rename from src/log/mw_log_fmt/macros.rs rename to src/log/score_log_fmt/macros.rs index 6dd93dc064..2ac559ccad 100644 --- a/src/log/mw_log_fmt/macros.rs +++ b/src/log/score_log_fmt/macros.rs @@ -18,6 +18,6 @@ #[macro_export] macro_rules! score_write { ($dst:expr, $($arg:tt)*) => { - $crate::write($dst, mw_log::format_args!($($arg)*)) + $crate::write($dst, score_log::format_args!($($arg)*)) }; } diff --git a/src/log/mw_log_fmt/test_utils.rs b/src/log/score_log_fmt/test_utils.rs similarity index 100% rename from src/log/mw_log_fmt/test_utils.rs rename to src/log/score_log_fmt/test_utils.rs diff --git a/src/log/mw_log_fmt_macro/BUILD b/src/log/score_log_fmt_macro/BUILD similarity index 81% rename from src/log/mw_log_fmt_macro/BUILD rename to src/log/score_log_fmt_macro/BUILD index ca4e06b86a..f105695cd3 100644 --- a/src/log/mw_log_fmt_macro/BUILD +++ b/src/log/score_log_fmt_macro/BUILD @@ -13,11 +13,11 @@ load("@rules_rust//rust:defs.bzl", "rust_proc_macro", "rust_test") rust_proc_macro( - name = "mw_log_fmt_macro", + name = "score_log_fmt_macro", srcs = glob(["*.rs"]), - visibility = ["//src/log/mw_log:__pkg__"], + visibility = ["//src/log/score_log:__pkg__"], deps = [ - "//src/log/mw_log_fmt", + "//src/log/score_log_fmt", "@score_crates//:proc_macro2", "@score_crates//:quote", "@score_crates//:syn", @@ -28,14 +28,14 @@ rust_test( name = "tests", srcs = glob(["tests/**/*.rs"]), proc_macro_deps = [ - "//src/log/mw_log_fmt_macro", + "//src/log/score_log_fmt_macro", ], tags = [ "unit_tests", "ut", ], deps = [ - "//src/log/mw_log", - "//src/log/mw_log_fmt", + "//src/log/score_log", + "//src/log/score_log_fmt", ], ) diff --git a/src/log/mw_log_fmt_macro/Cargo.toml b/src/log/score_log_fmt_macro/Cargo.toml similarity index 90% rename from src/log/mw_log_fmt_macro/Cargo.toml rename to src/log/score_log_fmt_macro/Cargo.toml index 0ebf43d68d..c4285cdf2b 100644 --- a/src/log/mw_log_fmt_macro/Cargo.toml +++ b/src/log/score_log_fmt_macro/Cargo.toml @@ -12,7 +12,7 @@ # ******************************************************************************* [package] -name = "mw_log_fmt_macro" +name = "score_log_fmt_macro" version.workspace = true authors.workspace = true readme.workspace = true @@ -26,10 +26,10 @@ path = "lib.rs" syn = { version = "2", features = ["full"] } quote = "1" proc-macro2 = "1" -mw_log_fmt.workspace = true +score_log_fmt.workspace = true [dev-dependencies] -mw_log.workspace = true +score_log.workspace = true [lints] workspace = true diff --git a/src/log/mw_log_fmt_macro/format_args.rs b/src/log/score_log_fmt_macro/format_args.rs similarity index 91% rename from src/log/mw_log_fmt_macro/format_args.rs rename to src/log/score_log_fmt_macro/format_args.rs index 0a6433bb30..5d4ba7f79c 100644 --- a/src/log/mw_log_fmt_macro/format_args.rs +++ b/src/log/score_log_fmt_macro/format_args.rs @@ -11,8 +11,8 @@ // SPDX-License-Identifier: Apache-2.0 // -use mw_log_fmt::{Alignment, DebugAsHex, DisplayHint, FormatSpec, Sign}; use quote::{quote, ToTokens}; +use score_log_fmt::{Alignment, DebugAsHex, DisplayHint, FormatSpec, Sign}; use syn::punctuated::{IntoIter, Punctuated}; use syn::token::Comma; use syn::{parse_macro_input, Error, Expr, ExprLit, Lit}; @@ -219,24 +219,24 @@ fn tokenize_spec(spec: &FormatSpec) -> proc_macro2::TokenStream { // Additional helpers are required to properly tokenize enums and options. fn tokenize_display_hint(display_hint: DisplayHint) -> proc_macro2::TokenStream { match display_hint { - DisplayHint::NoHint => quote! { mw_log::fmt::DisplayHint::NoHint }, - DisplayHint::Debug => quote! { mw_log::fmt::DisplayHint::Debug }, - DisplayHint::Octal => quote! { mw_log::fmt::DisplayHint::Octal }, - DisplayHint::LowerHex => quote! { mw_log::fmt::DisplayHint::LowerHex }, - DisplayHint::UpperHex => quote! { mw_log::fmt::DisplayHint::UpperHex }, - DisplayHint::Pointer => quote! { mw_log::fmt::DisplayHint::Pointer }, - DisplayHint::Binary => quote! { mw_log::fmt::DisplayHint::Binary }, - DisplayHint::LowerExp => quote! { mw_log::fmt::DisplayHint::LowerExp }, - DisplayHint::UpperExp => quote! { mw_log::fmt::DisplayHint::UpperExp }, + DisplayHint::NoHint => quote! { score_log::fmt::DisplayHint::NoHint }, + DisplayHint::Debug => quote! { score_log::fmt::DisplayHint::Debug }, + DisplayHint::Octal => quote! { score_log::fmt::DisplayHint::Octal }, + DisplayHint::LowerHex => quote! { score_log::fmt::DisplayHint::LowerHex }, + DisplayHint::UpperHex => quote! { score_log::fmt::DisplayHint::UpperHex }, + DisplayHint::Pointer => quote! { score_log::fmt::DisplayHint::Pointer }, + DisplayHint::Binary => quote! { score_log::fmt::DisplayHint::Binary }, + DisplayHint::LowerExp => quote! { score_log::fmt::DisplayHint::LowerExp }, + DisplayHint::UpperExp => quote! { score_log::fmt::DisplayHint::UpperExp }, } } fn tokenize_alignment(align: Option) -> proc_macro2::TokenStream { match align { Some(v) => match v { - Alignment::Left => quote! { Some(mw_log::fmt::Alignment::Left) }, - Alignment::Right => quote! { Some(mw_log::fmt::Alignment::Right) }, - Alignment::Center => quote! { Some(mw_log::fmt::Alignment::Center) }, + Alignment::Left => quote! { Some(score_log::fmt::Alignment::Left) }, + Alignment::Right => quote! { Some(score_log::fmt::Alignment::Right) }, + Alignment::Center => quote! { Some(score_log::fmt::Alignment::Center) }, }, None => quote! { None }, } @@ -245,8 +245,8 @@ fn tokenize_spec(spec: &FormatSpec) -> proc_macro2::TokenStream { fn tokenize_sign(sign: Option) -> proc_macro2::TokenStream { match sign { Some(v) => match v { - Sign::Plus => quote! { Some(mw_log::fmt::Sign::Plus) }, - Sign::Minus => quote! { Some(mw_log::fmt::Sign::Minus) }, + Sign::Plus => quote! { Some(score_log::fmt::Sign::Plus) }, + Sign::Minus => quote! { Some(score_log::fmt::Sign::Minus) }, }, None => quote! { None }, } @@ -255,8 +255,8 @@ fn tokenize_spec(spec: &FormatSpec) -> proc_macro2::TokenStream { fn tokenize_debug_as_hex(debug_as_hex: Option) -> proc_macro2::TokenStream { match debug_as_hex { Some(v) => match v { - DebugAsHex::Lower => quote! { Some(mw_log::fmt::DebugAsHex::Lower) }, - DebugAsHex::Upper => quote! { Some(mw_log::fmt::DebugAsHex::Upper) }, + DebugAsHex::Lower => quote! { Some(score_log::fmt::DebugAsHex::Lower) }, + DebugAsHex::Upper => quote! { Some(score_log::fmt::DebugAsHex::Upper) }, }, None => quote! { None }, } @@ -280,7 +280,7 @@ fn tokenize_spec(spec: &FormatSpec) -> proc_macro2::TokenStream { let precision = tokenize_option_u16(spec.get_precision()); quote! {{ - mw_log::fmt::FormatSpec::from_params( + score_log::fmt::FormatSpec::from_params( #display_hint, #fill, #align, @@ -502,13 +502,13 @@ fn validate_args(args: &[Expr]) -> Result<(), Error> { /// /// Following cases are supported: /// - Name provided by spec and `args` - get argument expression from `args`. -/// E.g., `mw_log_format_args!("{arg}", arg)`. +/// E.g., `score_log_format_args!("{arg}", arg)`. /// - Name provided by spec, but aliased by `args` - get assigned argument expression from `args`. -/// E.g., `mw_log_format_args!("{arg}", arg=other_value)`. +/// E.g., `score_log_format_args!("{arg}", arg=other_value)`. /// /// Not yet supported: /// - Name provided by spec, but not `args` - create argument expression. -/// E.g., `mw_log_format_args!("{arg}")`. +/// E.g., `score_log_format_args!("{arg}")`. fn select_arg_with_name(args: &[Expr], name: &str) -> Result { // Find all arguments that match. Either zero or one are allowed. let mut found: Vec = Vec::new(); @@ -597,7 +597,7 @@ fn parse_fragments(punctuated_it: &mut IntoIter) -> Result fragments.push(quote! {{ - mw_log::fmt::Fragment::Literal(#s) + score_log::fmt::Fragment::Literal(#s) }}), Spec::Placeholder(placeholder) => { // Select argument based on provided argument. @@ -618,7 +618,7 @@ fn parse_fragments(punctuated_it: &mut IntoIter) -> Result proc_macro::TokenStream Err(e) => return e.to_compile_error().into(), }; - quote! { mw_log::fmt::Arguments(&[#(#fragments),*]) }.into() + quote! { score_log::fmt::Arguments(&[#(#fragments),*]) }.into() } diff --git a/src/log/mw_log_fmt_macro/lib.rs b/src/log/score_log_fmt_macro/lib.rs similarity index 80% rename from src/log/mw_log_fmt_macro/lib.rs rename to src/log/score_log_fmt_macro/lib.rs index d7ee7388ab..f0333188d4 100644 --- a/src/log/mw_log_fmt_macro/lib.rs +++ b/src/log/score_log_fmt_macro/lib.rs @@ -12,7 +12,7 @@ // //! Replacement for macros provided by Rust compiler: -//! - [`mw_log_format_args!`] - replacement for `format_args!` +//! - [`score_log_format_args!`] - replacement for `format_args!` //! - [`ScoreDebug`] - replacement for `Debug` // All errors should result in compilation error. @@ -26,9 +26,9 @@ mod score_debug; /// Constructs parameters for the other string-formatting macros. /// /// This macro takes a formatting string literal containing `{}` for each additional argument. -/// [`mw_log_format_args!`] prepares the additional parameters to ensure the output can be interpreted as a message. +/// [`score_log_format_args!`] prepares the additional parameters to ensure the output can be interpreted as a message. #[proc_macro] -pub fn mw_log_format_args(input: proc_macro::TokenStream) -> proc_macro::TokenStream { +pub fn score_log_format_args(input: proc_macro::TokenStream) -> proc_macro::TokenStream { format_args::expand(input) } diff --git a/src/log/mw_log_fmt_macro/score_debug.rs b/src/log/score_log_fmt_macro/score_debug.rs similarity index 87% rename from src/log/mw_log_fmt_macro/score_debug.rs rename to src/log/score_log_fmt_macro/score_debug.rs index f3cd28f563..ebd8e4cb67 100644 --- a/src/log/mw_log_fmt_macro/score_debug.rs +++ b/src/log/score_log_fmt_macro/score_debug.rs @@ -41,7 +41,7 @@ fn generate_for_struct( // Generate `.fmt` implementation using named struct helper. quote! { - mw_log::fmt::DebugStruct::new(f, spec, #struct_name) + score_log::fmt::DebugStruct::new(f, spec, #struct_name) #(#field_methods)* .finish() } @@ -58,7 +58,7 @@ fn generate_for_struct( // Generate `.fmt` implementation using named tuple helper. quote! { - mw_log::fmt::DebugTuple::new(f, spec, #struct_name) + score_log::fmt::DebugTuple::new(f, spec, #struct_name) #(#field_methods)* .finish() } @@ -67,7 +67,7 @@ fn generate_for_struct( // Unit struct - no fields. Fields::Unit => { quote! { - mw_log::fmt::DebugStruct::new(f, spec, #struct_name).finish() + score_log::fmt::DebugStruct::new(f, spec, #struct_name).finish() } }, }; @@ -75,8 +75,8 @@ fn generate_for_struct( // Generate `ScoreDebug` implementation for provided struct. Ok(quote! { #[automatically_derived] - impl #impl_generics mw_log::fmt::ScoreDebug for #ident #ty_generics { - fn fmt(&self, f: mw_log::fmt::Writer, spec: &mw_log::fmt::FormatSpec) -> mw_log::fmt::Result { + impl #impl_generics score_log::fmt::ScoreDebug for #ident #ty_generics { + fn fmt(&self, f: score_log::fmt::Writer, spec: &score_log::fmt::FormatSpec) -> score_log::fmt::Result { #fmt_impl } } @@ -94,8 +94,8 @@ fn generate_for_enum( if data_enum.variants.is_empty() { return Ok(quote! { #[automatically_derived] - impl #impl_generics mw_log::fmt::ScoreDebug for #ident #ty_generics { - fn fmt(&self, f: mw_log::fmt::Writer, spec: &mw_log::fmt::FormatSpec) -> mw_log::fmt::Result { + impl #impl_generics score_log::fmt::ScoreDebug for #ident #ty_generics { + fn fmt(&self, f: score_log::fmt::Writer, spec: &score_log::fmt::FormatSpec) -> score_log::fmt::Result { Ok(()) } } @@ -126,7 +126,7 @@ fn generate_for_enum( // Generate variant match implementation. quote! { Self::#variant_ident { #(#arg_names),* } => { - mw_log::fmt::DebugStruct::new(f, spec, #variant_name) + score_log::fmt::DebugStruct::new(f, spec, #variant_name) #(#field_methods)* .finish() }, @@ -145,7 +145,7 @@ fn generate_for_enum( // Generate variant match implementation. quote! { Self::#variant_ident (#(#arg_names),*) => { - mw_log::fmt::DebugTuple::new(f, spec, #variant_name) + score_log::fmt::DebugTuple::new(f, spec, #variant_name) #(#field_methods)* .finish() }, @@ -164,8 +164,8 @@ fn generate_for_enum( // Generate `ScoreDebug` implementation for provided enum. Ok(quote! { #[automatically_derived] - impl #impl_generics mw_log::fmt::ScoreDebug for #ident #ty_generics { - fn fmt(&self, f: mw_log::fmt::Writer, spec: &mw_log::fmt::FormatSpec) -> mw_log::fmt::Result { + impl #impl_generics score_log::fmt::ScoreDebug for #ident #ty_generics { + fn fmt(&self, f: score_log::fmt::Writer, spec: &score_log::fmt::FormatSpec) -> score_log::fmt::Result { match self { #(#variants)* } diff --git a/src/log/mw_log_fmt_macro/tests/test_format_args.rs b/src/log/score_log_fmt_macro/tests/test_format_args.rs similarity index 73% rename from src/log/mw_log_fmt_macro/tests/test_format_args.rs rename to src/log/score_log_fmt_macro/tests/test_format_args.rs index d4c56a4ca2..57f18e07b5 100644 --- a/src/log/mw_log_fmt_macro/tests/test_format_args.rs +++ b/src/log/score_log_fmt_macro/tests/test_format_args.rs @@ -11,7 +11,7 @@ // SPDX-License-Identifier: Apache-2.0 // -//! Tests for `mw_log_format_args`. +//! Tests for `score_log_format_args`. //! //! Only positive paths can be checked with regular unit tests. //! This is due to error paths resulting in compilation errors (as expected with proc macros). @@ -21,22 +21,22 @@ mod utils; use crate::utils::StringWriter; -use mw_log_fmt::{write, Alignment, DebugAsHex, DisplayHint, Fragment, Sign}; -use mw_log_fmt_macro::mw_log_format_args; +use score_log_fmt::{write, Alignment, DebugAsHex, DisplayHint, Fragment, Sign}; +use score_log_fmt_macro::score_log_format_args; #[track_caller] fn common_format_args_test( - mw_log_args: mw_log_fmt::Arguments, + score_log_args: score_log_fmt::Arguments, std_args: core::fmt::Arguments, expected_num_fragments: usize, expected_output: &str, ) { // Write data to string. let mut w = StringWriter::new(); - let _ = write(&mut w, mw_log_args).map_err(|_| panic!("write failed")); + let _ = write(&mut w, score_log_args).map_err(|_| panic!("write failed")); - // Check `mw_log` args. - assert_eq!(mw_log_args.0.len(), expected_num_fragments); + // Check `score_log` args. + assert_eq!(score_log_args.0.len(), expected_num_fragments); assert_eq!(w.get(), expected_output); // Compare with Rust built-in format args. @@ -46,44 +46,44 @@ fn common_format_args_test( #[test] fn test_single_literal() { - let mw_log_args = mw_log_format_args!("test_string"); + let score_log_args = score_log_format_args!("test_string"); let core_fmt_args = format_args!("test_string"); - common_format_args_test(mw_log_args, core_fmt_args, 1, "test_string"); + common_format_args_test(score_log_args, core_fmt_args, 1, "test_string"); } #[test] fn test_escaped_braces() { - let mw_log_args = mw_log_format_args!("{{}}}}{{"); + let score_log_args = score_log_format_args!("{{}}}}{{"); let core_fmt_args = format_args!("{{}}}}{{"); - common_format_args_test(mw_log_args, core_fmt_args, 1, "{}}{"); + common_format_args_test(score_log_args, core_fmt_args, 1, "{}}{"); } #[test] fn test_single_placeholder() { - let mw_log_args = mw_log_format_args!("{}", 123); + let score_log_args = score_log_format_args!("{}", 123); let core_fmt_args = format_args!("{}", 123); - common_format_args_test(mw_log_args, core_fmt_args, 1, "123"); + common_format_args_test(score_log_args, core_fmt_args, 1, "123"); } #[test] fn test_mixed_literals_and_placeholders() { - let mw_log_args = mw_log_format_args!("test_{}_string", 321); + let score_log_args = score_log_format_args!("test_{}_string", 321); let core_fmt_args = format_args!("test_{}_string", 321); - common_format_args_test(mw_log_args, core_fmt_args, 3, "test_321_string"); + common_format_args_test(score_log_args, core_fmt_args, 3, "test_321_string"); } #[test] fn test_arg_index() { - let mw_log_args = mw_log_format_args!("test_{2}_{1}_{0}", 123, 234, 345); + let score_log_args = score_log_format_args!("test_{2}_{1}_{0}", 123, 234, 345); let core_fmt_args = format_args!("test_{2}_{1}_{0}", 123, 234, 345); - common_format_args_test(mw_log_args, core_fmt_args, 6, "test_345_234_123"); + common_format_args_test(score_log_args, core_fmt_args, 6, "test_345_234_123"); } #[test] fn test_arg_pos_and_index() { - let mw_log_args = mw_log_format_args!("test_{2}_{}_{1}_{}_{0}", 123, 234, 345); + let score_log_args = score_log_format_args!("test_{2}_{}_{1}_{}_{0}", 123, 234, 345); let core_fmt_args = format_args!("test_{2}_{}_{1}_{}_{0}", 123, 234, 345); - common_format_args_test(mw_log_args, core_fmt_args, 10, "test_345_123_234_234_123"); + common_format_args_test(score_log_args, core_fmt_args, 10, "test_345_123_234_234_123"); } #[test] @@ -91,12 +91,12 @@ fn test_arg_name() { let x1 = 123; let x2 = 234; let x3 = 345; - let mw_log_args = mw_log_format_args!("test_{x3}_{x2}_{x1}", x1, x2, x3); + let score_log_args = score_log_format_args!("test_{x3}_{x2}_{x1}", x1, x2, x3); // NOTE: known misalignment. // It is not allowed to have redundant arguments in Rust (`("{x1}", x1)`). - // This is currently not possible to do using `mw_log_format_args`. + // This is currently not possible to do using `score_log_format_args`. let core_fmt_args = format_args!("test_{x3}_{x2}_{x1}"); - common_format_args_test(mw_log_args, core_fmt_args, 6, "test_345_234_123"); + common_format_args_test(score_log_args, core_fmt_args, 6, "test_345_234_123"); } #[test] @@ -104,9 +104,9 @@ fn test_arg_name_alias() { let x1 = 123; let x2 = 234; let x3 = 345; - let mw_log_args = mw_log_format_args!("test_{a3}_{a2}_{a1}", a1 = x1, a2 = x2, a3 = x3); + let score_log_args = score_log_format_args!("test_{a3}_{a2}_{a1}", a1 = x1, a2 = x2, a3 = x3); let core_fmt_args = format_args!("test_{a3}_{a2}_{a1}", a1 = x1, a2 = x2, a3 = x3); - common_format_args_test(mw_log_args, core_fmt_args, 6, "test_345_234_123"); + common_format_args_test(score_log_args, core_fmt_args, 6, "test_345_234_123"); } #[test] @@ -114,26 +114,26 @@ fn test_arg_pos_and_name() { let x1 = 123; let x2 = 234; let x3 = 345; - let mw_log_args = mw_log_format_args!("test_{x3}_{}_{x2}_{}_{x1}", x1, x2, x3); + let score_log_args = score_log_format_args!("test_{x3}_{}_{x2}_{}_{x1}", x1, x2, x3); // NOTE: known misalignment. // It is not allowed to have redundant arguments in Rust (`("{x1}", x1)`). - // This is currently not possible to do using `mw_log_format_args`. + // This is currently not possible to do using `score_log_format_args`. let core_fmt_args = format_args!("test_{x3}_{}_{x2}_{}_{x1}", x1, x2); - common_format_args_test(mw_log_args, core_fmt_args, 10, "test_345_123_234_234_123"); + common_format_args_test(score_log_args, core_fmt_args, 10, "test_345_123_234_234_123"); } #[test] fn test_arg_mixed() { let x1 = 111; let x2 = 222; - let mw_log_args = mw_log_format_args!("test_{x1}_{1}_{}", x1, x2); + let score_log_args = score_log_format_args!("test_{x1}_{1}_{}", x1, x2); let core_fmt_args = format_args!("test_{x1}_{1}_{}", x1, x2); - common_format_args_test(mw_log_args, core_fmt_args, 6, "test_111_222_111"); + common_format_args_test(score_log_args, core_fmt_args, 6, "test_111_222_111"); } #[test] fn test_format_spec_empty() { - let args = mw_log_format_args!("{:}", 123); + let args = score_log_format_args!("{:}", 123); let placeholder = match args.0.first().unwrap() { Fragment::Literal(_) => panic!("invalid variant"), @@ -154,7 +154,7 @@ fn test_format_spec_empty() { #[test] fn test_format_spec_all() { - let args = mw_log_format_args!("{:c<-#0333.555x}", 123); + let args = score_log_format_args!("{:c<-#0333.555x}", 123); let placeholder = match args.0.first().unwrap() { Fragment::Literal(_) => panic!("invalid variant"), @@ -175,7 +175,7 @@ fn test_format_spec_all() { #[test] fn test_format_spec_debug() { - let args = mw_log_format_args!("{:#X?}", 123); + let args = score_log_format_args!("{:#X?}", 123); let placeholder = match args.0.first().unwrap() { Fragment::Literal(_) => panic!("invalid variant"), @@ -196,7 +196,7 @@ fn test_format_spec_debug() { #[test] fn test_format_spec_display_hint_octal() { - let args = mw_log_format_args!("{:o}", 123); + let args = score_log_format_args!("{:o}", 123); let placeholder = match args.0.first().unwrap() { Fragment::Literal(_) => panic!("invalid variant"), @@ -209,7 +209,7 @@ fn test_format_spec_display_hint_octal() { #[test] fn test_format_spec_display_hint_lower_hex() { - let args = mw_log_format_args!("{:x}", 123); + let args = score_log_format_args!("{:x}", 123); let placeholder = match args.0.first().unwrap() { Fragment::Literal(_) => panic!("invalid variant"), @@ -222,7 +222,7 @@ fn test_format_spec_display_hint_lower_hex() { #[test] fn test_format_spec_display_hint_upper_hex() { - let args = mw_log_format_args!("{:X}", 123); + let args = score_log_format_args!("{:X}", 123); let placeholder = match args.0.first().unwrap() { Fragment::Literal(_) => panic!("invalid variant"), @@ -235,7 +235,7 @@ fn test_format_spec_display_hint_upper_hex() { #[test] fn test_format_spec_display_hint_pointer() { - let args = mw_log_format_args!("{:p}", 123); + let args = score_log_format_args!("{:p}", 123); let placeholder = match args.0.first().unwrap() { Fragment::Literal(_) => panic!("invalid variant"), @@ -248,7 +248,7 @@ fn test_format_spec_display_hint_pointer() { #[test] fn test_format_spec_display_hint_binary() { - let args = mw_log_format_args!("{:b}", 123); + let args = score_log_format_args!("{:b}", 123); let placeholder = match args.0.first().unwrap() { Fragment::Literal(_) => panic!("invalid variant"), @@ -261,7 +261,7 @@ fn test_format_spec_display_hint_binary() { #[test] fn test_format_spec_display_hint_lower_exp() { - let args = mw_log_format_args!("{:e}", 123); + let args = score_log_format_args!("{:e}", 123); let placeholder = match args.0.first().unwrap() { Fragment::Literal(_) => panic!("invalid variant"), @@ -274,7 +274,7 @@ fn test_format_spec_display_hint_lower_exp() { #[test] fn test_format_spec_display_hint_upper_exp() { - let args = mw_log_format_args!("{:E}", 123); + let args = score_log_format_args!("{:E}", 123); let placeholder = match args.0.first().unwrap() { Fragment::Literal(_) => panic!("invalid variant"), diff --git a/src/log/mw_log_fmt_macro/tests/test_score_debug.rs b/src/log/score_log_fmt_macro/tests/test_score_debug.rs similarity index 90% rename from src/log/mw_log_fmt_macro/tests/test_score_debug.rs rename to src/log/score_log_fmt_macro/tests/test_score_debug.rs index d32e207b25..3b2739a9ce 100644 --- a/src/log/mw_log_fmt_macro/tests/test_score_debug.rs +++ b/src/log/score_log_fmt_macro/tests/test_score_debug.rs @@ -21,8 +21,8 @@ mod utils; use crate::utils::StringWriter; -use mw_log_fmt::{write, ScoreDebug}; -use mw_log_fmt_macro::{mw_log_format_args, ScoreDebug}; +use score_log_fmt::{write, ScoreDebug}; +use score_log_fmt_macro::{score_log_format_args, ScoreDebug}; #[test] fn test_struct_named() { @@ -39,7 +39,7 @@ fn test_struct_named() { name: "example".to_string(), }; - let args = mw_log_format_args!("{:?}", p); + let args = score_log_format_args!("{:?}", p); let mut w = StringWriter::new(); let _ = write(&mut w, args).map_err(|_| panic!("write failed")); @@ -55,7 +55,7 @@ fn test_struct_unnamed() { let p = Point(123, -123, "example".to_string()); - let args = mw_log_format_args!("{:?}", p); + let args = score_log_format_args!("{:?}", p); let mut w = StringWriter::new(); let _ = write(&mut w, args).map_err(|_| panic!("write failed")); @@ -71,7 +71,7 @@ fn test_struct_unit() { let unit_struct = UnitStruct; - let args = mw_log_format_args!("{:?}", unit_struct); + let args = score_log_format_args!("{:?}", unit_struct); let mut w = StringWriter::new(); let _ = write(&mut w, args).map_err(|_| panic!("write failed")); @@ -94,7 +94,7 @@ fn test_struct_generics() { generic: [123; 10], }; - let args = mw_log_format_args!("{:?}", p); + let args = score_log_format_args!("{:?}", p); let mut w = StringWriter::new(); let _ = write(&mut w, args).map_err(|_| panic!("write failed")); @@ -115,7 +115,7 @@ fn test_enum_plain() { let flag = Flag::Optional; - let args = mw_log_format_args!("{:?}", flag); + let args = score_log_format_args!("{:?}", flag); let mut w = StringWriter::new(); let _ = write(&mut w, args).map_err(|_| panic!("write failed")); @@ -148,7 +148,7 @@ fn test_enum_nested() { ]; for case in cases { - let args = mw_log_format_args!("{:?}", case); + let args = score_log_format_args!("{:?}", case); let mut w = StringWriter::new(); let _ = write(&mut w, args).map_err(|_| panic!("write failed")); diff --git a/src/log/mw_log_fmt_macro/tests/tests.rs b/src/log/score_log_fmt_macro/tests/tests.rs similarity index 100% rename from src/log/mw_log_fmt_macro/tests/tests.rs rename to src/log/score_log_fmt_macro/tests/tests.rs diff --git a/src/log/mw_log_fmt_macro/tests/utils/mod.rs b/src/log/score_log_fmt_macro/tests/utils/mod.rs similarity index 97% rename from src/log/mw_log_fmt_macro/tests/utils/mod.rs rename to src/log/score_log_fmt_macro/tests/utils/mod.rs index b06870d616..99e5041bdc 100644 --- a/src/log/mw_log_fmt_macro/tests/utils/mod.rs +++ b/src/log/score_log_fmt_macro/tests/utils/mod.rs @@ -12,7 +12,7 @@ // use core::fmt::Write; -use mw_log_fmt::{Error, FormatSpec, Result, ScoreWrite}; +use score_log_fmt::{Error, FormatSpec, Result, ScoreWrite}; /// Writer implementation. /// Writes everything to a string, so it can be compared with `format` macro. diff --git a/src/log/stdout_logger/BUILD b/src/log/stdout_logger/BUILD index c4f46b3877..2a6159453a 100644 --- a/src/log/stdout_logger/BUILD +++ b/src/log/stdout_logger/BUILD @@ -23,7 +23,7 @@ rust_library( srcs = glob(["**/*.rs"]), visibility = ["//visibility:public"], deps = [ - "//src/log/mw_log", + "//src/log/score_log", ], ) diff --git a/src/log/stdout_logger/Cargo.toml b/src/log/stdout_logger/Cargo.toml index 0dea0654fa..a7f92cc9b6 100644 --- a/src/log/stdout_logger/Cargo.toml +++ b/src/log/stdout_logger/Cargo.toml @@ -9,7 +9,7 @@ edition.workspace = true path = "lib.rs" [dependencies] -mw_log.workspace = true +score_log.workspace = true [lints] workspace = true diff --git a/src/log/stdout_logger/lib.rs b/src/log/stdout_logger/lib.rs index de5507eb6d..b73314d460 100644 --- a/src/log/stdout_logger/lib.rs +++ b/src/log/stdout_logger/lib.rs @@ -11,13 +11,13 @@ // SPDX-License-Identifier: Apache-2.0 // -//! String-based Rust backend for `mw_log`. +//! String-based Rust backend for `score_log`. //! Data is written to a fixed-size buffer. use core::cell::RefCell; use core::fmt::Write; -use mw_log::fmt::{score_write, Error, FormatSpec, Result, ScoreWrite}; -use mw_log::{LevelFilter, Log, Metadata, Record}; +use score_log::fmt::{score_write, Error, FormatSpec, Result, ScoreWrite}; +use score_log::{LevelFilter, Log, Metadata, Record}; /// Fixed size buffer for strings. struct FixedBuf { @@ -205,8 +205,8 @@ impl StdoutLoggerBuilder { /// Build the `StdoutLogger` and set it as the default logger. pub fn set_as_default_logger(self) { let logger = self.build(); - mw_log::set_max_level(logger.log_level()); - if let Err(e) = mw_log::set_global_logger(Box::new(logger)) { + score_log::set_max_level(logger.log_level()); + if let Err(e) = score_log::set_global_logger(Box::new(logger)) { panic!("unable to set logger: {e}"); } } From b1509bb2c9087d901aa960a0950704a1e218cbde Mon Sep 17 00:00:00 2001 From: Pawel Rutka Date: Wed, 14 Jan 2026 13:27:14 +0100 Subject: [PATCH 28/59] ArcIn: Arc with custom allocator --- Cargo.toml | 7 +- src/elementary/BUILD | 30 ++++ src/elementary/Cargo.toml | 22 +++ src/elementary/allocator_traits.rs | 39 +++++ src/elementary/global_allocator.rs | 52 ++++++ src/elementary/lib.rs | 15 ++ src/sync/BUILD | 33 ++++ src/sync/Cargo.toml | 25 +++ src/sync/arc_in.rs | 261 +++++++++++++++++++++++++++++ src/sync/lib.rs | 16 ++ 10 files changed, 498 insertions(+), 2 deletions(-) create mode 100644 src/elementary/BUILD create mode 100644 src/elementary/Cargo.toml create mode 100644 src/elementary/allocator_traits.rs create mode 100644 src/elementary/global_allocator.rs create mode 100644 src/elementary/lib.rs create mode 100644 src/sync/BUILD create mode 100644 src/sync/Cargo.toml create mode 100644 src/sync/arc_in.rs create mode 100644 src/sync/lib.rs diff --git a/Cargo.toml b/Cargo.toml index 9607cd8d5a..07711e1598 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,14 +17,16 @@ resolver = "2" # Used when executing cargo from project root. default-members = [ "src/containers", - "src/log/score_log", - "src/log/score_log_fmt", + "src/sync", + "src/elementary", "src/log/score_log_fmt_macro", "src/log/stdout_logger", ] # Include tests and examples as a member for IDE support and Bazel builds. members = [ "src/containers", + "src/sync", + "src/elementary", "src/log/score_log", "src/log/score_log_fmt", "src/log/score_log_fmt_macro", @@ -44,6 +46,7 @@ score_log = { path = "src/log/score_log" } score_log_fmt = { path = "src/log/score_log_fmt" } score_log_fmt_macro = { path = "src/log/score_log_fmt_macro" } stdout_logger = { path = "src/log/stdout_logger" } +elementary = { path = "src/elementary" } [workspace.lints.clippy] std_instead_of_core = "warn" diff --git a/src/elementary/BUILD b/src/elementary/BUILD new file mode 100644 index 0000000000..024500dc99 --- /dev/null +++ b/src/elementary/BUILD @@ -0,0 +1,30 @@ +# ******************************************************************************* +# Copyright (c) 2025 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* + +load("@rules_rust//rust:defs.bzl", "rust_library", "rust_test") + +rust_library( + name = "elementary", + srcs = glob(["**/*.rs"]), + edition = "2021", + visibility = ["//visibility:public"], +) + +rust_test( + name = "tests", + crate = "elementary", + tags = [ + "unit_tests", + "ut", + ], +) diff --git a/src/elementary/Cargo.toml b/src/elementary/Cargo.toml new file mode 100644 index 0000000000..07496d2199 --- /dev/null +++ b/src/elementary/Cargo.toml @@ -0,0 +1,22 @@ +# ******************************************************************************* +# Copyright (c) 2025 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* + +[package] +name = "elementary" +version.workspace = true +authors.workspace = true +readme.workspace = true +edition.workspace = true + +[lib] +path = "lib.rs" diff --git a/src/elementary/allocator_traits.rs b/src/elementary/allocator_traits.rs new file mode 100644 index 0000000000..e8aa7e443b --- /dev/null +++ b/src/elementary/allocator_traits.rs @@ -0,0 +1,39 @@ +// ******************************************************************************* +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// https://www.apache.org/licenses/LICENSE-2.0 +// +// SPDX-License-Identifier: Apache-2.0 +// ******************************************************************************* + +use core::ptr::NonNull; + +#[derive(Debug, Clone, Copy)] +pub enum AllocationError { + /// Memory allocation failed due to insufficient memory + OutOfMemory, + + /// Memory allocation requested for zero size + ZeroSizeAllocation, + + /// Fatal failure inside the allocator + Internal, +} + +pub trait BasicAllocator { + /// Allocates a block of memory as described by `layout`. + fn allocate(&self, layout: core::alloc::Layout) -> Result, AllocationError>; + + /// Deallocates the memory block pointed to by `ptr` with the given `layout`. + /// + /// # Safety + /// - `ptr` must have been allocated by a previous call to `allocate` with the same `layout`. + /// - `layout` must match the layout used during allocation. + /// + unsafe fn deallocate(&self, ptr: NonNull, layout: core::alloc::Layout); +} diff --git a/src/elementary/global_allocator.rs b/src/elementary/global_allocator.rs new file mode 100644 index 0000000000..dc5dd773c4 --- /dev/null +++ b/src/elementary/global_allocator.rs @@ -0,0 +1,52 @@ +// ******************************************************************************* +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// https://www.apache.org/licenses/LICENSE-2.0 +// +// SPDX-License-Identifier: Apache-2.0 +// ******************************************************************************* + +extern crate alloc; +use alloc::alloc::alloc; +use alloc::alloc::dealloc; + +use core::ptr::NonNull; + +use crate::allocator_traits::{AllocationError, BasicAllocator}; + +#[derive(Debug, Clone, Copy)] +pub struct GlobalAllocator; + +impl BasicAllocator for GlobalAllocator { + fn allocate(&self, layout: core::alloc::Layout) -> Result, AllocationError> { + if layout.size() == 0 { + return Err(AllocationError::ZeroSizeAllocation); + } + + unsafe { + let ptr = alloc(layout); + if ptr.is_null() { + return Err(AllocationError::OutOfMemory); + } + Ok(NonNull::slice_from_raw_parts( + NonNull::new_unchecked(ptr), + layout.size(), + )) + } + } + + unsafe fn deallocate(&self, ptr: NonNull, layout: core::alloc::Layout) { + dealloc(ptr.as_ptr(), layout); + } +} + +impl Default for GlobalAllocator { + fn default() -> Self { + GlobalAllocator + } +} diff --git a/src/elementary/lib.rs b/src/elementary/lib.rs new file mode 100644 index 0000000000..be1fd63d8d --- /dev/null +++ b/src/elementary/lib.rs @@ -0,0 +1,15 @@ +// ******************************************************************************* +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// https://www.apache.org/licenses/LICENSE-2.0 +// +// SPDX-License-Identifier: Apache-2.0 +// ******************************************************************************* + +pub mod allocator_traits; +pub mod global_allocator; diff --git a/src/sync/BUILD b/src/sync/BUILD new file mode 100644 index 0000000000..55976739e2 --- /dev/null +++ b/src/sync/BUILD @@ -0,0 +1,33 @@ +# ******************************************************************************* +# Copyright (c) 2025 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* + +load("@rules_rust//rust:defs.bzl", "rust_library", "rust_test") + +rust_library( + name = "sync", + srcs = glob(["**/*.rs"]), + edition = "2021", + visibility = ["//visibility:public"], + deps = [ + "//src/elementary", + ], +) + +rust_test( + name = "tests", + crate = "sync", + tags = [ + "unit_tests", + "ut", + ], +) diff --git a/src/sync/Cargo.toml b/src/sync/Cargo.toml new file mode 100644 index 0000000000..97ecdadce2 --- /dev/null +++ b/src/sync/Cargo.toml @@ -0,0 +1,25 @@ +# ******************************************************************************* +# Copyright (c) 2025 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* + +[package] +name = "sync" +version.workspace = true +authors.workspace = true +readme.workspace = true +edition.workspace = true + +[lib] +path = "lib.rs" + +[dependencies] +elementary = { workspace = true } diff --git a/src/sync/arc_in.rs b/src/sync/arc_in.rs new file mode 100644 index 0000000000..26494a44a6 --- /dev/null +++ b/src/sync/arc_in.rs @@ -0,0 +1,261 @@ +// ******************************************************************************* +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// https://www.apache.org/licenses/LICENSE-2.0 +// +// SPDX-License-Identifier: Apache-2.0 +// ******************************************************************************* + +use std::ptr::NonNull; +use std::{ + cmp::Ordering, + fmt, + hash::{Hash, Hasher}, + ops::Deref, + sync::atomic::{AtomicUsize, Ordering as AtomicOrdering}, +}; + +use elementary::allocator_traits::BasicAllocator; + +/// A reference-counted smart pointer with custom allocator support like `std::sync::Arc`. +/// The `ArcIn` type provides shared ownership of a value of type `T`, allocated using the specified allocator `A`. +/// Cloning an `ArcIn` instance increases the reference count, and when the last `ArcIn` pointing to the same value is dropped, +/// the value is deallocated using the provided allocator. +/// +/// # Notes +/// - This is a simplified version and does not include weak references. +/// - This provides limited functionality compared to `std::sync::Arc` and shall be used only when custom allocator support is required. +/// +pub struct ArcIn { + ptr: NonNull>, + alloc: A, +} + +struct ArcInner { + strong: AtomicUsize, + data: T, +} + +impl ArcIn { + /// Create a new ArcIn using the given allocator + pub fn new_in(data: T, alloc: A) -> Self { + let layout = std::alloc::Layout::new::>(); + let ptr = match alloc.allocate(layout) { + Ok(ptr) => ptr.cast::>(), + Err(err) => { + panic!("Failed to allocate memory with error: {:?}", err); + }, + }; + + unsafe { + ptr.as_ptr().write(ArcInner { + strong: AtomicUsize::new(1), + data, + }); + } + + ArcIn { ptr, alloc } + } + + /// Get strong reference count + pub fn strong_count(this: &Self) -> usize { + // SAFETY: `this.ptr` is guaranteed to be valid because we keep at least one strong reference by `this` + unsafe { this.ptr.as_ref().strong.load(AtomicOrdering::SeqCst) } + } +} + +impl Clone for ArcIn { + fn clone(&self) -> Self { + // SAFETY: `self.ptr` is guaranteed to be valid because we keep at least one strong reference by `self` + unsafe { + self.ptr.as_ref().strong.fetch_add(1, AtomicOrdering::Relaxed); + } + + ArcIn { + ptr: self.ptr, + alloc: self.alloc.clone(), + } + } +} + +impl Deref for ArcIn { + type Target = T; + fn deref(&self) -> &T { + unsafe { &self.ptr.as_ref().data } + } +} + +impl Default for ArcIn { + fn default() -> Self { + ArcIn::new_in(T::default(), A::default()) + } +} + +impl fmt::Debug for ArcIn { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + self.deref().fmt(f) + } +} + +impl AsRef for ArcIn { + fn as_ref(&self) -> &T { + self.deref() + } +} + +impl PartialEq for ArcIn { + fn eq(&self, other: &Self) -> bool { + **self == **other + } +} + +impl Eq for ArcIn {} + +impl PartialOrd for ArcIn { + fn partial_cmp(&self, other: &Self) -> Option { + (**self).partial_cmp(&**other) + } +} + +impl Ord for ArcIn { + fn cmp(&self, other: &Self) -> Ordering { + (**self).cmp(&**other) + } +} + +impl Hash for ArcIn { + fn hash(&self, state: &mut H) { + (**self).hash(state); + } +} + +unsafe impl Send for ArcIn {} +unsafe impl Sync for ArcIn {} + +impl Drop for ArcIn { + fn drop(&mut self) { + if unsafe { self.ptr.as_ref().strong.fetch_sub(1, AtomicOrdering::Release) } == 1 { + // SYNC: Ensure all previous writes are visible before we drop the data. This is enough because + // we are the last strong reference. + std::sync::atomic::fence(AtomicOrdering::Acquire); + unsafe { + std::ptr::drop_in_place(&mut self.ptr.as_mut().data); + let layout = std::alloc::Layout::new::>(); + self.alloc.deallocate(self.ptr.cast(), layout); + } + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + use elementary::global_allocator::GlobalAllocator; + use std::collections::hash_map::DefaultHasher; + use std::hash::Hash; + + #[test] + fn new_and_deref() { + let alloc = GlobalAllocator; + let arc = ArcIn::new_in(42, alloc); + assert_eq!(*arc, 42); + assert_eq!(ArcIn::strong_count(&arc), 1); + } + + #[test] + fn clone_increases_count() { + let alloc = GlobalAllocator; + let arc1 = ArcIn::new_in(100, alloc); + let arc2 = arc1.clone(); + assert_eq!(ArcIn::strong_count(&arc1), 2); + assert_eq!(*arc2, 100); + } + + #[test] + fn drop_decreases_count() { + let alloc = GlobalAllocator; + let arc1 = ArcIn::new_in(55, alloc); + assert_eq!(ArcIn::strong_count(&arc1), 1); + { + let _arc2 = arc1.clone(); + assert_eq!(ArcIn::strong_count(&arc1), 2); + } + // arc2 dropped + assert_eq!(ArcIn::strong_count(&arc1), 1); + } + + #[test] + fn debug_trait() { + let alloc = GlobalAllocator; + let arc = ArcIn::new_in("hello", alloc); + let s = format!("{:?}", arc); + assert_eq!(s, "\"hello\""); + } + + #[test] + fn default_trait() { + let arc: ArcIn = ArcIn::default(); + assert_eq!(*arc, 0); + assert_eq!(ArcIn::strong_count(&arc), 1); + } + + #[test] + fn as_ref_trait() { + let alloc = GlobalAllocator; + let arc = ArcIn::new_in("world".to_string(), alloc); + let s: &str = arc.as_ref(); + assert_eq!(s, "world"); + } + + #[test] + fn eq_ord_hash() { + let alloc = GlobalAllocator; + let arc1 = ArcIn::new_in(5, alloc); + let arc2 = ArcIn::new_in(5, alloc); + let arc3 = ArcIn::new_in(10, alloc); + + assert_eq!(arc1, arc2); + assert!(arc1 < arc3); + + let mut hasher1 = DefaultHasher::new(); + arc1.hash(&mut hasher1); + + let mut hasher2 = DefaultHasher::new(); + arc2.hash(&mut hasher2); + + assert_eq!(hasher1.finish(), hasher2.finish()); + } + + #[test] + fn strong_count_multiple_clones() { + let alloc = GlobalAllocator; + let arc = ArcIn::new_in(123, alloc); + let clones: Vec<_> = (0..5).map(|_| arc.clone()).collect(); + assert_eq!(ArcIn::strong_count(&arc), 6); + drop(clones); + assert_eq!(ArcIn::strong_count(&arc), 1); + } + + #[test] + fn drop_on_zero() { + struct DropCounter<'a>(&'a mut bool); + impl<'a> Drop for DropCounter<'a> { + fn drop(&mut self) { + *self.0 = true; + } + } + + let alloc = GlobalAllocator; + let mut dropped = false; + { + let arc = ArcIn::new_in(DropCounter(&mut dropped), alloc); + assert!(!*arc.deref().0); + } + assert!(dropped); + } +} diff --git a/src/sync/lib.rs b/src/sync/lib.rs new file mode 100644 index 0000000000..a1f046f698 --- /dev/null +++ b/src/sync/lib.rs @@ -0,0 +1,16 @@ +// ******************************************************************************* +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// https://www.apache.org/licenses/LICENSE-2.0 +// +// SPDX-License-Identifier: Apache-2.0 +// ******************************************************************************* + +mod arc_in; + +pub use arc_in::ArcIn; From ecdd027bf8ae5bdc773224323d314e67dbf2418d Mon Sep 17 00:00:00 2001 From: Pawel Rutka Date: Mon, 19 Jan 2026 12:49:04 +0100 Subject: [PATCH 29/59] Testing macro crate: Auto init logging To ease testing experience in other crates this crate provies extensions. Currently added - test_with_log - enables stdout_logger as backend for score_log for single test - test_mod_with_log - enlabed stdout_logger as backend for score_log for a whole test module . --- Cargo.toml | 3 ++ src/log/stdout_logger/lib.rs | 17 +++++++-- src/testing_macros/BUILD | 24 ++++++++++++ src/testing_macros/Cargo.toml | 28 ++++++++++++++ src/testing_macros/lib.rs | 71 +++++++++++++++++++++++++++++++++++ 5 files changed, 139 insertions(+), 4 deletions(-) create mode 100644 src/testing_macros/BUILD create mode 100644 src/testing_macros/Cargo.toml create mode 100644 src/testing_macros/lib.rs diff --git a/Cargo.toml b/Cargo.toml index 07711e1598..8aa01c8dd6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,6 +21,7 @@ default-members = [ "src/elementary", "src/log/score_log_fmt_macro", "src/log/stdout_logger", + "src/testing_macros", ] # Include tests and examples as a member for IDE support and Bazel builds. members = [ @@ -31,6 +32,7 @@ members = [ "src/log/score_log_fmt", "src/log/score_log_fmt_macro", "src/log/stdout_logger", + "src/testing_macros", "examples/log_builtin", "examples/log_custom", ] @@ -47,6 +49,7 @@ score_log_fmt = { path = "src/log/score_log_fmt" } score_log_fmt_macro = { path = "src/log/score_log_fmt_macro" } stdout_logger = { path = "src/log/stdout_logger" } elementary = { path = "src/elementary" } +testing_macros = { path = "src/testing_macros" } [workspace.lints.clippy] std_instead_of_core = "warn" diff --git a/src/log/stdout_logger/lib.rs b/src/log/stdout_logger/lib.rs index b73314d460..24a223447c 100644 --- a/src/log/stdout_logger/lib.rs +++ b/src/log/stdout_logger/lib.rs @@ -204,12 +204,19 @@ impl StdoutLoggerBuilder { /// Build the `StdoutLogger` and set it as the default logger. pub fn set_as_default_logger(self) { - let logger = self.build(); - score_log::set_max_level(logger.log_level()); - if let Err(e) = score_log::set_global_logger(Box::new(logger)) { + if let Err(e) = self.try_set_as_default_logger() { panic!("unable to set logger: {e}"); } } + + /// Build the `StdoutLogger` and try to set it as the default logger. + pub fn try_set_as_default_logger(self) -> core::result::Result<(), score_log::SetLoggerError> { + let logger = self.build(); + let level = logger.log_level(); + score_log::set_global_logger(Box::new(logger))?; + score_log::set_max_level(level); + Ok(()) + } } impl Default for StdoutLoggerBuilder { @@ -291,6 +298,8 @@ impl Log for StdoutLogger { } fn flush(&self) { - // No-op. + use std::io::Write; + let mut stdout = std::io::stdout(); + stdout.flush().unwrap(); } } diff --git a/src/testing_macros/BUILD b/src/testing_macros/BUILD new file mode 100644 index 0000000000..9cb8587649 --- /dev/null +++ b/src/testing_macros/BUILD @@ -0,0 +1,24 @@ +# ******************************************************************************* +# Copyright (c) 2025 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* +load("@rules_rust//rust:defs.bzl", "rust_proc_macro") + +rust_proc_macro( + name = "score_testing_macros", + srcs = glob(["*.rs"]), + visibility = ["//visibility:public"], + deps = [ + "//src/log/stdout_logger", + "@score_crates//:quote", + "@score_crates//:syn", + ], +) diff --git a/src/testing_macros/Cargo.toml b/src/testing_macros/Cargo.toml new file mode 100644 index 0000000000..5efab2cff5 --- /dev/null +++ b/src/testing_macros/Cargo.toml @@ -0,0 +1,28 @@ +# ******************************************************************************* +# Copyright (c) 2025 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* + +[package] +name = "score_testing_macros" +version.workspace = true +authors.workspace = true +readme.workspace = true +edition.workspace = true + +[lib] +proc-macro = true +path = "lib.rs" + +[dependencies] +syn = { version = "2" } +quote = "1" +stdout_logger.workspace = true diff --git a/src/testing_macros/lib.rs b/src/testing_macros/lib.rs new file mode 100644 index 0000000000..0bb008c79a --- /dev/null +++ b/src/testing_macros/lib.rs @@ -0,0 +1,71 @@ +// ******************************************************************************* +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// https://www.apache.org/licenses/LICENSE-2.0 +// +// SPDX-License-Identifier: Apache-2.0 +// ******************************************************************************* + +use proc_macro::TokenStream; +use quote::quote; +use syn::{parse_macro_input, ItemFn, ItemMod}; + +/// Attribute macro to create a test function with stdout logger initialized. +#[proc_macro_attribute] +pub fn test_with_log(_attr: TokenStream, item: TokenStream) -> TokenStream { + let input = parse_macro_input!(item as ItemFn); + + let vis = &input.vis; + let sig = &input.sig; + let block = &input.block; + let attrs = &input.attrs; + + TokenStream::from(quote! { + #(#attrs)* + #vis #sig { + let _ = stdout_logger::StdoutLoggerBuilder::new() + .context("TEST") + .log_level(score_log::LevelFilter::Trace) + .try_set_as_default_logger(); + #block + score_log::global_logger().flush(); + } + }) +} + +/// Attribute macro that modifies a test module to initialize stdout logger for each test. +#[proc_macro_attribute] +pub fn test_mod_with_log(_attr: TokenStream, item: TokenStream) -> TokenStream { + let mut input = parse_macro_input!(item as ItemMod); + + if let Some((_, ref mut items)) = input.content { + // Wrap each #[test] function to call test_hook automatically + for item in items.iter_mut() { + if let syn::Item::Fn(ref mut f) = item { + let is_test = f.attrs.iter().any(|a| a.path().is_ident("test")); + if is_test { + let block = &f.block; + f.block = syn::parse_quote!({ + + let _ = stdout_logger::StdoutLoggerBuilder::new() + .context("TEST") + .log_level(score_log::LevelFilter::Trace) + .try_set_as_default_logger(); + #block + + score_log::global_logger().flush(); + }); + } + } + } + } + + TokenStream::from(quote! { + #input + }) +} From 96c7588181f0f9542428ffad06197a9efcf5d56b Mon Sep 17 00:00:00 2001 From: Pawel Rutka Date: Mon, 26 Jan 2026 11:45:56 +0100 Subject: [PATCH 30/59] Make Heap be Send for T:Send --- src/containers/storage/heap.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/containers/storage/heap.rs b/src/containers/storage/heap.rs index e6acd6795d..024e37e4e2 100644 --- a/src/containers/storage/heap.rs +++ b/src/containers/storage/heap.rs @@ -32,6 +32,9 @@ pub struct Heap { _marker: PhantomData, } +// SAFETY: `Heap` can be sent to another thread if `T` can be sent to another thread. It's because we use system allocation which is send-safe. +unsafe impl Send for Heap {} + impl Heap { fn layout(capacity: u32) -> Option { (capacity as usize) From 701d2ea212e840940f1a2cd52a18726a1a0164c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arkadiusz=20J=C4=99drzejewski?= Date: Fri, 23 Jan 2026 14:28:16 +0000 Subject: [PATCH 31/59] log: add Rust log init for C++ - Add lib for log init when Rust lib is used by C++. - Add example. --- examples/log_cpp_init/BUILD | 37 +++++++++ examples/log_cpp_init/src/example_lib.rs | 75 +++++++++++++++++ examples/log_cpp_init/src/main.cpp | 30 +++++++ src/log/stdout_logger_cpp_init/BUILD | 37 +++++++++ src/log/stdout_logger_cpp_init/ffi.rs | 83 +++++++++++++++++++ .../stdout_logger_init.cpp | 75 +++++++++++++++++ .../stdout_logger_init.h | 80 ++++++++++++++++++ 7 files changed, 417 insertions(+) create mode 100644 examples/log_cpp_init/BUILD create mode 100644 examples/log_cpp_init/src/example_lib.rs create mode 100644 examples/log_cpp_init/src/main.cpp create mode 100644 src/log/stdout_logger_cpp_init/BUILD create mode 100644 src/log/stdout_logger_cpp_init/ffi.rs create mode 100644 src/log/stdout_logger_cpp_init/stdout_logger_init.cpp create mode 100644 src/log/stdout_logger_cpp_init/stdout_logger_init.h diff --git a/examples/log_cpp_init/BUILD b/examples/log_cpp_init/BUILD new file mode 100644 index 0000000000..26aa861dbc --- /dev/null +++ b/examples/log_cpp_init/BUILD @@ -0,0 +1,37 @@ +# ******************************************************************************* +# Copyright (c) 2025 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* + +load("@rules_cc//cc:defs.bzl", "cc_binary") +load("@rules_rust//rust:defs.bzl", "rust_static_library") + +rust_static_library( + name = "example_lib", + srcs = ["src/example_lib.rs"], + edition = "2021", + visibility = ["//visibility:private"], + deps = [ + "//src/log/score_log", + "//src/log/stdout_logger", + ], +) + +cc_binary( + name = "log_cpp_init", + srcs = ["src/main.cpp"], + linkopts = ["-lpthread"], + visibility = ["//visibility:public"], + deps = [ + ":example_lib", + "//src/log/stdout_logger_cpp_init", + ], +) diff --git a/examples/log_cpp_init/src/example_lib.rs b/examples/log_cpp_init/src/example_lib.rs new file mode 100644 index 0000000000..71283565de --- /dev/null +++ b/examples/log_cpp_init/src/example_lib.rs @@ -0,0 +1,75 @@ +// +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// +// +// SPDX-License-Identifier: Apache-2.0 +// + +//! Module contains functions printing example logs. +//! Based on `//score/mw/log/rust/score_log_bridge:example`. + +use score_log::{debug, error, fatal, info, trace, warn, Log}; +use stdout_logger::StdoutLoggerBuilder; + +/// Show example logs. +#[no_mangle] +extern "C" fn show_logs() { + // Regular log usage. + trace!("This is a trace log - hidden"); + debug!("This is a debug log - hidden"); + info!("This is an info log"); + warn!("This is a warn log"); + error!("This is an error log"); + fatal!("This is a fatal log"); + + // Log with modified context. + trace!(context: "EX1", "This is a trace log - hidden"); + debug!(context: "EX1", "This is a debug log - hidden"); + info!(context: "EX1", "This is an info log"); + warn!(context: "EX1", "This is a warn log"); + error!(context: "EX1", "This is an error log"); + fatal!(context: "EX1", "This is a fatal log"); + + // Log with numeric values. + let x1 = 123.4; + let x2 = 111; + let x3 = true; + let x4 = -0x3Fi8; + error!( + "This is an error log with numeric values: {} {} {} {:x}", + x1, x2, x3, x4, + ); + + // Use logger instance with modified context. + let logger = StdoutLoggerBuilder::new() + .context("ALFA") + .show_module(false) + .show_file(true) + .show_line(false) + .build(); + + // Log with provided logger. + trace!( + logger: logger, + "This is a trace log - hidden" + ); + debug!(logger: logger, "This is a debug log - hidden"); + info!(logger: logger, "This is an info log"); + warn!(logger: logger, "This is a warn log"); + error!(logger: logger, "This is an error log"); + fatal!(logger: logger, "This is an fatal log"); + + // Log with provided logger and modified context. + trace!(logger: logger, context: "EX2", "This is a trace log - hidden"); + debug!(logger: logger, context: "EX2", "This is a debug log - hidden"); + info!(logger: logger, context: "EX2", "This is an info log"); + warn!(logger: logger, context: "EX2", "This is a warn log"); + error!(logger: logger, context: "EX2", "This is an error log"); + fatal!(logger: logger, context: "EX2", "This is an fatal log"); +} diff --git a/examples/log_cpp_init/src/main.cpp b/examples/log_cpp_init/src/main.cpp new file mode 100644 index 0000000000..0bd8ef3d13 --- /dev/null +++ b/examples/log_cpp_init/src/main.cpp @@ -0,0 +1,30 @@ +/******************************************************************************** + * Copyright (c) 2025 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Apache License Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + ********************************************************************************/ + +#include "score/mw/log/rust/stdout_logger_init.h" + +extern "C" { +void show_logs(); +} + +int main() +{ + using namespace score::mw::log::rust; + + StdoutLoggerBuilder builder; + builder.Context("ABCD").ShowModule(true).ShowFile(true).ShowLine(true).SetAsDefaultLogger(); + + show_logs(); + + return 0; +} diff --git a/src/log/stdout_logger_cpp_init/BUILD b/src/log/stdout_logger_cpp_init/BUILD new file mode 100644 index 0000000000..99437de371 --- /dev/null +++ b/src/log/stdout_logger_cpp_init/BUILD @@ -0,0 +1,37 @@ +# ******************************************************************************* +# Copyright (c) 2025 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* + +load("@rules_cc//cc:defs.bzl", "cc_library") +load("@rules_rust//rust:defs.bzl", "rust_static_library") + +rust_static_library( + name = "ffi", + srcs = ["ffi.rs"], + edition = "2021", + visibility = ["//visibility:private"], + deps = [ + "//src/log/score_log", + "//src/log/stdout_logger", + ], +) + +cc_library( + name = "stdout_logger_cpp_init", + srcs = ["stdout_logger_init.cpp"], + hdrs = ["stdout_logger_init.h"], + include_prefix = "score/mw/log/rust", + visibility = ["//visibility:public"], + deps = [ + ":ffi", + ], +) diff --git a/src/log/stdout_logger_cpp_init/ffi.rs b/src/log/stdout_logger_cpp_init/ffi.rs new file mode 100644 index 0000000000..fb4ce7fbd7 --- /dev/null +++ b/src/log/stdout_logger_cpp_init/ffi.rs @@ -0,0 +1,83 @@ +// +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// +// +// SPDX-License-Identifier: Apache-2.0 +// + +use core::ffi::c_char; +use core::slice::from_raw_parts; +use stdout_logger::StdoutLoggerBuilder; + +/// Represents severity of a log message. +#[derive(Clone, Copy)] +#[repr(u8)] +#[allow(dead_code)] +enum LogLevel { + Off = 0x00, + Fatal = 0x01, + Error = 0x02, + Warn = 0x03, + Info = 0x04, + Debug = 0x05, + Verbose = 0x06, +} + +impl From for score_log::LevelFilter { + fn from(level: LogLevel) -> score_log::LevelFilter { + match level { + LogLevel::Off => score_log::LevelFilter::Off, + LogLevel::Fatal => score_log::LevelFilter::Fatal, + LogLevel::Error => score_log::LevelFilter::Error, + LogLevel::Warn => score_log::LevelFilter::Warn, + LogLevel::Info => score_log::LevelFilter::Info, + LogLevel::Debug => score_log::LevelFilter::Debug, + LogLevel::Verbose => score_log::LevelFilter::Trace, + } + } +} + +#[no_mangle] +extern "C" fn set_default_logger( + context_ptr: *const c_char, + context_size: usize, + show_module: *const bool, + show_file: *const bool, + show_line: *const bool, + log_level: *const LogLevel, +) { + let mut builder = StdoutLoggerBuilder::new(); + + // Set parameters if non-null (option-like). + if !context_ptr.is_null() { + let context = unsafe { + let slice = from_raw_parts(context_ptr.cast(), context_size); + str::from_utf8_unchecked(slice) + }; + builder = builder.context(context); + } + + if !show_module.is_null() { + builder = builder.show_module(unsafe { *show_module }); + } + + if !show_file.is_null() { + builder = builder.show_file(unsafe { *show_file }); + } + + if !show_line.is_null() { + builder = builder.show_line(unsafe { *show_line }); + } + + if !log_level.is_null() { + builder = builder.log_level(unsafe { (*log_level).into() }); + } + + builder.set_as_default_logger(); +} diff --git a/src/log/stdout_logger_cpp_init/stdout_logger_init.cpp b/src/log/stdout_logger_cpp_init/stdout_logger_init.cpp new file mode 100644 index 0000000000..1262c06539 --- /dev/null +++ b/src/log/stdout_logger_cpp_init/stdout_logger_init.cpp @@ -0,0 +1,75 @@ +/******************************************************************************** + * Copyright (c) 2025 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Apache License Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + ********************************************************************************/ + +#include "stdout_logger_init.h" + +extern "C" void set_default_logger(const char* context_ptr, + size_t context_size, + const bool* show_module, + const bool* show_file, + const bool* show_line, + const score::mw::log::rust::LogLevel* log_level); + +namespace score::mw::log::rust +{ + +StdoutLoggerBuilder& StdoutLoggerBuilder::Context(const std::string& context) noexcept +{ + context_ = context; + return *this; +} + +StdoutLoggerBuilder& StdoutLoggerBuilder::ShowModule(bool show_module) noexcept +{ + show_module_ = show_module; + return *this; +} + +StdoutLoggerBuilder& StdoutLoggerBuilder::ShowFile(bool show_file) noexcept +{ + show_file_ = show_file; + return *this; +} + +StdoutLoggerBuilder& StdoutLoggerBuilder::ShowLine(bool show_line) noexcept +{ + show_line_ = show_line; + return *this; +} + +StdoutLoggerBuilder& StdoutLoggerBuilder::LogLevel(score::mw::log::rust::LogLevel log_level) noexcept +{ + log_level_ = log_level; + return *this; +} + +void StdoutLoggerBuilder::SetAsDefaultLogger() noexcept +{ + const char* context_ptr{nullptr}; + size_t context_size{0}; + if (context_) + { + auto value{context_.value()}; + context_ptr = value.c_str(); + context_size = value.size(); + } + + const bool* show_module{show_module_ ? &show_module_.value() : nullptr}; + const bool* show_file{show_file_ ? &show_file_.value() : nullptr}; + const bool* show_line{show_line_ ? &show_line_.value() : nullptr}; + const score::mw::log::rust::LogLevel* log_level{log_level_ ? &log_level_.value() : nullptr}; + + set_default_logger(context_ptr, context_size, show_module, show_file, show_line, log_level); +} + +} // namespace score::mw::log::rust diff --git a/src/log/stdout_logger_cpp_init/stdout_logger_init.h b/src/log/stdout_logger_cpp_init/stdout_logger_init.h new file mode 100644 index 0000000000..20e110b990 --- /dev/null +++ b/src/log/stdout_logger_cpp_init/stdout_logger_init.h @@ -0,0 +1,80 @@ +/******************************************************************************** + * Copyright (c) 2025 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Apache License Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + ********************************************************************************/ + +#pragma once + +#include +#include + +namespace score::mw::log::rust +{ + +/// @brief Represents severity of a log message. +enum class LogLevel +{ + Off, + Fatal, + Error, + Warn, + Info, + Debug, + Verbose +}; + +/// @brief +/// Builder for logger used by Rust libraries. +/// +/// @note +/// If parameter is not set explicitly then Rust-side default is used. +/// Only global logger setup is allowed. +class StdoutLoggerBuilder final +{ + public: + /// @brief Set context for the logger. + /// @param context + /// Context name. + /// @return This builder. + StdoutLoggerBuilder& Context(const std::string& context) noexcept; + + /// @brief Show module name in logs. + /// @param show_module Value to set. + /// @return This builder. + StdoutLoggerBuilder& ShowModule(bool show_module) noexcept; + + /// @brief Show file name in logs. + /// @param show_module Value to set. + /// @return This builder. + StdoutLoggerBuilder& ShowFile(bool show_file) noexcept; + + /// @brief Show line number in logs. + /// @param show_module Value to set. + /// @return This builder. + StdoutLoggerBuilder& ShowLine(bool show_line) noexcept; + + /// @brief Filter logs by level. + /// @param log_level Log level. + /// @return This builder. + StdoutLoggerBuilder& LogLevel(LogLevel log_level) noexcept; + + /// @brief Initialize default logger with provided parameters. + void SetAsDefaultLogger() noexcept; + + private: + std::optional context_; + std::optional show_module_; + std::optional show_file_; + std::optional show_line_; + std::optional log_level_; +}; + +} // namespace score::mw::log::rust From 6378a7b1efa99d2eb49d4182d827dba312f21374 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arkadiusz=20J=C4=99drzejewski?= Date: Tue, 27 Jan 2026 08:33:33 +0000 Subject: [PATCH 32/59] log: add timestamp to `stdout_logger` UTC timestamp to `stdout_logger`. Show on default, parameter available. --- src/log/stdout_logger/lib.rs | 27 ++ src/log/stdout_logger/timestamp.rs | 233 ++++++++++++++++++ src/log/stdout_logger_cpp_init/ffi.rs | 5 + .../stdout_logger_init.cpp | 10 +- .../stdout_logger_init.h | 11 + 5 files changed, 285 insertions(+), 1 deletion(-) create mode 100644 src/log/stdout_logger/timestamp.rs diff --git a/src/log/stdout_logger/lib.rs b/src/log/stdout_logger/lib.rs index 24a223447c..c5bba57690 100644 --- a/src/log/stdout_logger/lib.rs +++ b/src/log/stdout_logger/lib.rs @@ -14,10 +14,14 @@ //! String-based Rust backend for `score_log`. //! Data is written to a fixed-size buffer. +mod timestamp; + +use crate::timestamp::timestamp; use core::cell::RefCell; use core::fmt::Write; use score_log::fmt::{score_write, Error, FormatSpec, Result, ScoreWrite}; use score_log::{LevelFilter, Log, Metadata, Record}; +use std::time::{SystemTime, UNIX_EPOCH}; /// Fixed size buffer for strings. struct FixedBuf { @@ -191,6 +195,18 @@ impl StdoutLoggerBuilder { self } + /// Show timestamp. + /// + /// UTC timestamp in the following format: + /// `[year]/[month]/[day] [hour]:[minute]:[second].[subsecond digits:7]` + /// + /// Example: + /// `2026/01/27 11:33:41.1420089` + pub fn show_timestamp(mut self, show_timestamp: bool) -> Self { + self.0.show_timestamp = show_timestamp; + self + } + /// Filter logs by level. pub fn log_level(mut self, log_level: LevelFilter) -> Self { self.0.log_level = log_level; @@ -226,6 +242,7 @@ impl Default for StdoutLoggerBuilder { show_module: false, show_file: false, show_line: false, + show_timestamp: true, log_level: LevelFilter::Info, }) } @@ -241,6 +258,7 @@ pub struct StdoutLogger { show_module: bool, show_file: bool, show_line: bool, + show_timestamp: bool, log_level: LevelFilter, } @@ -269,6 +287,15 @@ impl Log for StdoutLogger { // Operate in a scope of borrowed writer. WRITER.with_borrow_mut(|writer| { + // Write timestamp. + if self.show_timestamp { + if let Ok(now) = SystemTime::now().duration_since(UNIX_EPOCH) { + let timestamp_u8 = timestamp(now); + let timestamp_str = unsafe { str::from_utf8_unchecked(timestamp_u8.as_slice()) }; + let _ = score_write!(writer, "[{}]", timestamp_str); + } + } + // Write module, file and line. if self.show_module || self.show_file || self.show_line { let _ = score_write!(writer, "["); diff --git a/src/log/stdout_logger/timestamp.rs b/src/log/stdout_logger/timestamp.rs new file mode 100644 index 0000000000..fb3b2243b9 --- /dev/null +++ b/src/log/stdout_logger/timestamp.rs @@ -0,0 +1,233 @@ +// +// Copyright (c) 2025 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// +// +// SPDX-License-Identifier: Apache-2.0 +// + +//! Generate human-readable timestamp from Unix epoch time. +//! Without allocations and external dependencies. +//! +//! WARNING: range checks are provided only for debug builds! + +use core::time::Duration; + +/// Determine if provided year is a leap year. +fn is_leap_year(year: u64) -> bool { + (year.is_multiple_of(4) && !year.is_multiple_of(100)) || year.is_multiple_of(400) +} + +/// Calculate time - hour, minute, second. +/// `secs_in_day` must be less than number of seconds in a day. +fn get_time(secs_in_day: u64) -> (u64, u64, u64) { + debug_assert!(secs_in_day < 24 * 60 * 60); + + const SECS_PER_HOUR: u64 = 60 * 60; + let hour = secs_in_day / SECS_PER_HOUR; + let secs_in_day = secs_in_day % SECS_PER_HOUR; + let minute = secs_in_day / 60; + let second = secs_in_day % 60; + + // Validate output. + debug_assert!(hour < 24); + debug_assert!(minute < 60); + debug_assert!(second < 60); + + (hour, minute, second) +} + +/// Calculate date - year, month, day. +/// `days_in_epoch` must be less than number of days between: +/// - 1970/01/01 +/// - 10000/01/01 +fn get_date(days_in_epoch: u64) -> (u64, u64, u64) { + debug_assert!(days_in_epoch <= 2932896); + + // Local and mutable copy of `days_in_epoch`. + let mut days = days_in_epoch; + + // Calculate year. + let mut year = 1970; + loop { + let days_in_year = if is_leap_year(year) { 366 } else { 365 }; + if days < days_in_year { + break; + } + days -= days_in_year; + year += 1; + } + + // Calculate month. + let days_in_feb = if is_leap_year(year) { 29 } else { 28 }; + let days_in_month = [31, days_in_feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + let mut month_index = 0; + while days >= days_in_month[month_index] { + days -= days_in_month[month_index]; + month_index += 1; + } + let month = month_index as u64 + 1; + + // Calculate day. + let day = days + 1; + + // Validate output. + debug_assert!((1970..=9999).contains(&year)); + debug_assert!((1..=12).contains(&month)); + debug_assert!(day >= 1 && day <= days_in_month[month_index]); + + (year, month, day) +} + +/// Write integer value to `u8` slice as ASCII characters. +fn write(buf: &mut [u8], value: u64) { + for (i, v) in buf.iter_mut().enumerate() { + let digit = 10u64.pow((N - i - 1) as u32); + *v = b'0' + (value / digit % 10) as u8; + } +} + +/// Get timestamp in following format: +/// `[year]/[month]/[day] [hour]:[minute]:[second].[subsecond digits:7]` +pub fn timestamp(duration_since_epoch_start: Duration) -> [u8; 27] { + debug_assert!(duration_since_epoch_start.as_secs() <= 253402300799); + + let secs = duration_since_epoch_start.as_secs(); + let subsec_nanos = duration_since_epoch_start.subsec_nanos() as u64; + + const SECS_PER_DAY: u64 = 24 * 60 * 60; + + // Calculate number of days since epoch and seconds in a day (remainder). + let days_in_epoch = secs / SECS_PER_DAY; + let secs_in_day = secs % SECS_PER_DAY; + + // Calculate time. + let (hour, minute, second) = get_time(secs_in_day); + + // Calculate date. + let (year, month, day) = get_date(days_in_epoch); + + // Format output as `u8` array of known size. + let mut output = [0; _]; + + // Write date in `YYYY/MM/dd ` format. + write::<4>(&mut output[0..4], year); + output[4] = b'/'; + write::<2>(&mut output[5..7], month); + output[7] = b'/'; + write::<2>(&mut output[8..10], day); + output[10] = b' '; + + // Write time in `HH:mm:ss.nnnnnnn` format. + write::<2>(&mut output[11..13], hour); + output[13] = b':'; + write::<2>(&mut output[14..16], minute); + output[16] = b':'; + write::<2>(&mut output[17..19], second); + output[19] = b'.'; + write::<7>(&mut output[20..27], subsec_nanos / 100); + + output +} + +#[cfg(test)] +mod tests { + use super::{get_date, get_time, timestamp}; + use core::time::Duration; + + #[test] + fn test_get_time_zero() { + let (hour, minute, second) = get_time(0); + assert_eq!(hour, 0); + assert_eq!(minute, 0); + assert_eq!(second, 0); + } + + #[test] + fn test_get_time_in_range() { + let (hour, minute, second) = get_time(45296); + assert_eq!(hour, 12); + assert_eq!(minute, 34); + assert_eq!(second, 56); + } + + #[test] + fn test_get_time_max_allowed() { + let (hour, minute, second) = get_time(24 * 60 * 60 - 1); + assert_eq!(hour, 23); + assert_eq!(minute, 59); + assert_eq!(second, 59); + } + + #[test] + #[should_panic] + fn test_get_time_out_of_range() { + let (_hour, _minute, _second) = get_time(24 * 60 * 60); + } + + #[test] + fn test_get_date_zero() { + let (year, month, day) = get_date(0); + assert_eq!(year, 1970); + assert_eq!(month, 1); + assert_eq!(day, 1); + } + + #[test] + fn test_get_date_in_range() { + let (year, month, day) = get_date(20481); + assert_eq!(year, 2026); + assert_eq!(month, 1); + assert_eq!(day, 28); + } + + #[test] + fn test_get_date_max_allowed() { + let (year, month, day) = get_date(2932896); + assert_eq!(year, 9999); + assert_eq!(month, 12); + assert_eq!(day, 31); + } + + #[test] + #[should_panic] + fn test_get_date_out_of_range() { + let (_hour, _minute, _second) = get_date(u64::MAX); + } + + #[test] + fn test_timestamp_zero() { + let duration = Duration::from_secs(0); + let ts_u8 = timestamp(duration); + let ts_str = str::from_utf8(ts_u8.as_slice()).unwrap(); + assert_eq!(ts_str, "1970/01/01 00:00:00.0000000"); + } + + #[test] + fn test_timestamp_in_range() { + let duration = Duration::from_secs(1769604017) + Duration::from_nanos(123456789); + let ts_u8 = timestamp(duration); + let ts_str = str::from_utf8(ts_u8.as_slice()).unwrap(); + assert_eq!(ts_str, "2026/01/28 12:40:17.1234567"); + } + + #[test] + fn test_timestamp_max_allowed() { + let duration = Duration::from_secs(253402300799) + Duration::from_nanos(999999999); + let ts_u8 = timestamp(duration); + let ts_str = str::from_utf8(ts_u8.as_slice()).unwrap(); + assert_eq!(ts_str, "9999/12/31 23:59:59.9999999"); + } + + #[test] + #[should_panic] + fn test_timestamp_out_of_range() { + let duration = Duration::from_secs(253402300800); + let _ = timestamp(duration); + } +} diff --git a/src/log/stdout_logger_cpp_init/ffi.rs b/src/log/stdout_logger_cpp_init/ffi.rs index fb4ce7fbd7..78c84f0aae 100644 --- a/src/log/stdout_logger_cpp_init/ffi.rs +++ b/src/log/stdout_logger_cpp_init/ffi.rs @@ -50,6 +50,7 @@ extern "C" fn set_default_logger( show_module: *const bool, show_file: *const bool, show_line: *const bool, + show_timestamp: *const bool, log_level: *const LogLevel, ) { let mut builder = StdoutLoggerBuilder::new(); @@ -75,6 +76,10 @@ extern "C" fn set_default_logger( builder = builder.show_line(unsafe { *show_line }); } + if !show_timestamp.is_null() { + builder = builder.show_timestamp(unsafe { *show_timestamp }); + } + if !log_level.is_null() { builder = builder.log_level(unsafe { (*log_level).into() }); } diff --git a/src/log/stdout_logger_cpp_init/stdout_logger_init.cpp b/src/log/stdout_logger_cpp_init/stdout_logger_init.cpp index 1262c06539..aa99c729ab 100644 --- a/src/log/stdout_logger_cpp_init/stdout_logger_init.cpp +++ b/src/log/stdout_logger_cpp_init/stdout_logger_init.cpp @@ -18,6 +18,7 @@ extern "C" void set_default_logger(const char* context_ptr, const bool* show_module, const bool* show_file, const bool* show_line, + const bool* show_timestamp, const score::mw::log::rust::LogLevel* log_level); namespace score::mw::log::rust @@ -47,6 +48,12 @@ StdoutLoggerBuilder& StdoutLoggerBuilder::ShowLine(bool show_line) noexcept return *this; } +StdoutLoggerBuilder& StdoutLoggerBuilder::ShowTimestamp(bool show_timestamp) noexcept +{ + show_timestamp_ = show_timestamp; + return *this; +} + StdoutLoggerBuilder& StdoutLoggerBuilder::LogLevel(score::mw::log::rust::LogLevel log_level) noexcept { log_level_ = log_level; @@ -67,9 +74,10 @@ void StdoutLoggerBuilder::SetAsDefaultLogger() noexcept const bool* show_module{show_module_ ? &show_module_.value() : nullptr}; const bool* show_file{show_file_ ? &show_file_.value() : nullptr}; const bool* show_line{show_line_ ? &show_line_.value() : nullptr}; + const bool* show_timestamp{show_timestamp_ ? &show_timestamp_.value() : nullptr}; const score::mw::log::rust::LogLevel* log_level{log_level_ ? &log_level_.value() : nullptr}; - set_default_logger(context_ptr, context_size, show_module, show_file, show_line, log_level); + set_default_logger(context_ptr, context_size, show_module, show_file, show_line, show_timestamp, log_level); } } // namespace score::mw::log::rust diff --git a/src/log/stdout_logger_cpp_init/stdout_logger_init.h b/src/log/stdout_logger_cpp_init/stdout_logger_init.h index 20e110b990..f595f22015 100644 --- a/src/log/stdout_logger_cpp_init/stdout_logger_init.h +++ b/src/log/stdout_logger_cpp_init/stdout_logger_init.h @@ -61,6 +61,16 @@ class StdoutLoggerBuilder final /// @return This builder. StdoutLoggerBuilder& ShowLine(bool show_line) noexcept; + /// @brief Show timestamp. + /// UTC timestamp in the following format: + /// `[year]/[month]/[day] [hour]:[minute]:[second].[subsecond digits:7]` + /// + /// Example: + /// `2026/01/27 11:33:41.1420089` + /// @param show_timestamp Value to set. + /// @return This builder. + StdoutLoggerBuilder& ShowTimestamp(bool show_timestamp) noexcept; + /// @brief Filter logs by level. /// @param log_level Log level. /// @return This builder. @@ -74,6 +84,7 @@ class StdoutLoggerBuilder final std::optional show_module_; std::optional show_file_; std::optional show_line_; + std::optional show_timestamp_; std::optional log_level_; }; From 8ead9d2d067aaf9d3ef0086e050ea84df4aa98e7 Mon Sep 17 00:00:00 2001 From: Pawel Rutka Date: Wed, 28 Jan 2026 13:17:29 +0100 Subject: [PATCH 33/59] use new toolchain --- .github/workflows/build_qnx8.yml | 2 +- MODULE.bazel | 73 ++++++++++---------------------- 2 files changed, 24 insertions(+), 51 deletions(-) diff --git a/.github/workflows/build_qnx8.yml b/.github/workflows/build_qnx8.yml index fbadd948a1..b233347da7 100644 --- a/.github/workflows/build_qnx8.yml +++ b/.github/workflows/build_qnx8.yml @@ -25,7 +25,7 @@ jobs: pull-requests: read with: bazel-target: '//src/...' - bazel-config: 'build_qnx8' + bazel-config: 'arm64-qnx' credential-helper: 'scripts/internal/qnx_creds.py' environment-name: 'workflow-approval' secrets: diff --git a/MODULE.bazel b/MODULE.bazel index a7178abb51..f689f42223 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -12,7 +12,7 @@ # ******************************************************************************* module( name = "score_baselibs_rust", - version = "0.0.1", + version = "0.0.0", compatibility_level = 0, ) @@ -26,9 +26,9 @@ bazel_dep(name = "buildifier_prebuilt", version = "7.3.1") bazel_dep(name = "platforms", version = "1.0.0") # S-CORE process rules -bazel_dep(name = "score_bazel_platforms", version = "0.0.3") +bazel_dep(name = "score_bazel_platforms", version = "0.0.4") bazel_dep(name = "score_docs_as_code", version = "2.0.2") -bazel_dep(name = "score_tooling", version = "1.0.4") +bazel_dep(name = "score_tooling", version = "1.1.0") bazel_dep(name = "score_rust_policies", version = "0.0.3") bazel_dep(name = "score_process", version = "1.4.0", dev_dependency = True) @@ -36,56 +36,33 @@ bazel_dep(name = "score_platform", version = "0.5.1", dev_dependency = True) # # bazel_dep(name = "score_virtualization", version = "0.0.1", dev_dependency = True) # Toolchains and extensions -bazel_dep(name = "score_toolchains_gcc", version = "0.5", dev_dependency = True) -bazel_dep(name = "score_toolchains_qnx", version = "0.0.6", dev_dependency = True) -bazel_dep(name = "rust_qnx8_toolchain", version = "1.2.0", dev_dependency = True) -bazel_dep(name = "score_toolchains_rust", version = "0.1.1", dev_dependency = True) +bazel_dep(name = "score_bazel_cpp_toolchains", version = "0.2.2", dev_dependency = True) +bazel_dep(name = "score_toolchains_rust", version = "0.4.0", dev_dependency = True) # S-CORE crates bazel_dep(name = "score_crates", version = "0.0.6") -# Overrides -git_override( - module_name = "score_tooling", - commit = "612d6f180a9bb6338de5f0e6667fcf83068d9c37", #until 1.0.5 is released - remote = "https://github.com/eclipse-score/tooling.git", -) - -git_override( - module_name = "score_toolchains_rust", - commit = "bcf8e5364f72cf136ec81960350a82e2b5c45449", - remote = "https://github.com/eclipse-score/toolchains_rust.git", -) - -# git_override( -# module_name = "score_virtualization", -# commit = "99d3f153c43796b67a63e82aad1ede6a881aa6af", -# remote = "https://github.com/qorix-group/score_virtualization.git", -# ) - -archive_override( - module_name = "rust_qnx8_toolchain", - strip_prefix = "qnx8", - urls = [ - "https://github.com/qorix-group/rust-lang-qnx8/releases/download/1.2.0/qnx8_rust_toolchain.tar.gz", - ], -) - # Extensions - -gcc = use_extension("@score_toolchains_gcc//extentions:gcc.bzl", "gcc", dev_dependency = True) +gcc = use_extension("@score_bazel_cpp_toolchains//extensions:gcc.bzl", "gcc", dev_dependency = True) gcc.toolchain( - sha256 = "457f5f20f57528033cb840d708b507050d711ae93e009388847e113b11bf3600", - strip_prefix = "x86_64-unknown-linux-gnu", - url = "https://github.com/eclipse-score/toolchains_gcc_packages/releases/download/0.0.1/x86_64-unknown-linux-gnu_gcc12.tar.gz", + name = "score_qcc_aarch64_toolchain", + sdp_version = "8.0.0", + target_cpu = "aarch64", + target_os = "qnx", + use_default_package = True, + version = "12.2.0", ) -use_repo(gcc, "gcc_toolchain", "gcc_toolchain_gcc") - -toolchains_qnx = use_extension("@score_toolchains_qnx//:extensions.bzl", "toolchains_qnx", dev_dependency = True) -toolchains_qnx.sdp( - sha256 = "f2e0cb21c6baddbcb65f6a70610ce498e7685de8ea2e0f1648f01b327f6bac63", - strip_prefix = "installation", - url = "https://www.qnx.com/download/download/79858/installation.tgz", +gcc.toolchain( + name = "score_gcc_x86_64_toolchain", + target_cpu = "x86_64", + target_os = "linux", + use_default_package = True, + version = "12.2.0", +) +use_repo( + gcc, + "score_gcc_x86_64_toolchain", + "score_qcc_aarch64_toolchain", ) PYTHON_VERSION = "3.12" @@ -96,7 +73,3 @@ python.toolchain( python_version = PYTHON_VERSION, ) use_repo(python) - -use_repo(toolchains_qnx, "toolchains_qnx_sdp") -use_repo(toolchains_qnx, "toolchains_qnx_qcc") -use_repo(toolchains_qnx, "toolchains_qnx_ifs") From 1a874916e446c396e5d02f1895b81ceb26a71299 Mon Sep 17 00:00:00 2001 From: Pawel Rutka Date: Thu, 29 Jan 2026 12:45:09 +0100 Subject: [PATCH 34/59] Fix headers --- examples/log_builtin/src/main.rs | 6 +++--- examples/log_cpp_init/src/example_lib.rs | 6 +++--- examples/log_custom/src/logger.rs | 6 +++--- examples/log_custom/src/main.rs | 6 +++--- src/containers/fixed_capacity/mod.rs | 4 ++-- src/containers/fixed_capacity/queue.rs | 4 ++-- src/containers/fixed_capacity/string.rs | 4 ++-- src/containers/fixed_capacity/vec.rs | 4 ++-- src/containers/generic/mod.rs | 4 ++-- src/containers/generic/queue.rs | 4 ++-- src/containers/generic/string.rs | 4 ++-- src/containers/generic/vec.rs | 4 ++-- src/containers/inline/mod.rs | 4 ++-- src/containers/inline/option.rs | 4 ++-- src/containers/inline/queue.rs | 4 ++-- src/containers/inline/result.rs | 4 ++-- src/containers/inline/string.rs | 4 ++-- src/containers/inline/vec.rs | 4 ++-- src/containers/lib.rs | 4 ++-- src/containers/storage/heap.rs | 4 ++-- src/containers/storage/inline.rs | 4 ++-- src/containers/storage/mod.rs | 4 ++-- src/elementary/allocator_traits.rs | 4 ++-- src/elementary/global_allocator.rs | 4 ++-- src/elementary/lib.rs | 4 ++-- src/log/score_log/lib.rs | 6 +++--- src/log/score_log/macros.rs | 6 +++--- src/log/score_log/tests/integration.rs | 6 +++--- src/log/score_log/tests/macros.rs | 6 +++--- src/log/score_log_fmt/builders.rs | 6 +++--- src/log/score_log_fmt/fmt.rs | 6 +++--- src/log/score_log_fmt/fmt_impl.rs | 6 +++--- src/log/score_log_fmt/fmt_impl_qm.rs | 6 +++--- src/log/score_log_fmt/fmt_spec.rs | 6 +++--- src/log/score_log_fmt/lib.rs | 6 +++--- src/log/score_log_fmt/macros.rs | 6 +++--- src/log/score_log_fmt/test_utils.rs | 6 +++--- src/log/score_log_fmt_macro/format_args.rs | 6 +++--- src/log/score_log_fmt_macro/lib.rs | 6 +++--- src/log/score_log_fmt_macro/score_debug.rs | 6 +++--- src/log/score_log_fmt_macro/tests/test_format_args.rs | 6 +++--- src/log/score_log_fmt_macro/tests/test_score_debug.rs | 6 +++--- src/log/score_log_fmt_macro/tests/tests.rs | 6 +++--- src/log/score_log_fmt_macro/tests/utils/mod.rs | 6 +++--- src/log/stdout_logger/lib.rs | 6 +++--- src/log/stdout_logger/timestamp.rs | 6 +++--- src/log/stdout_logger_cpp_init/ffi.rs | 6 +++--- src/sync/arc_in.rs | 4 ++-- src/sync/lib.rs | 4 ++-- src/testing_macros/lib.rs | 4 ++-- 50 files changed, 126 insertions(+), 126 deletions(-) diff --git a/examples/log_builtin/src/main.rs b/examples/log_builtin/src/main.rs index 7708e542dd..7de41d743d 100644 --- a/examples/log_builtin/src/main.rs +++ b/examples/log_builtin/src/main.rs @@ -1,5 +1,5 @@ -// -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// ******************************************************************************* +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. @@ -9,7 +9,7 @@ // // // SPDX-License-Identifier: Apache-2.0 -// +// ******************************************************************************* //! Example app utilizing built-in backend implementation. diff --git a/examples/log_cpp_init/src/example_lib.rs b/examples/log_cpp_init/src/example_lib.rs index 71283565de..262525f1f3 100644 --- a/examples/log_cpp_init/src/example_lib.rs +++ b/examples/log_cpp_init/src/example_lib.rs @@ -1,5 +1,5 @@ -// -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// ******************************************************************************* +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. @@ -9,7 +9,7 @@ // // // SPDX-License-Identifier: Apache-2.0 -// +// ******************************************************************************* //! Module contains functions printing example logs. //! Based on `//score/mw/log/rust/score_log_bridge:example`. diff --git a/examples/log_custom/src/logger.rs b/examples/log_custom/src/logger.rs index 5f88c81e8c..57ad0dee45 100644 --- a/examples/log_custom/src/logger.rs +++ b/examples/log_custom/src/logger.rs @@ -1,5 +1,5 @@ -// -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// ******************************************************************************* +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. @@ -9,7 +9,7 @@ // // // SPDX-License-Identifier: Apache-2.0 -// +// ******************************************************************************* use core::fmt::Write; use score_log::fmt::{write, Error, FormatSpec, Result as FmtResult, ScoreWrite}; diff --git a/examples/log_custom/src/main.rs b/examples/log_custom/src/main.rs index d2754da343..40251c3e52 100644 --- a/examples/log_custom/src/main.rs +++ b/examples/log_custom/src/main.rs @@ -1,5 +1,5 @@ -// -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// ******************************************************************************* +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. @@ -9,7 +9,7 @@ // // // SPDX-License-Identifier: Apache-2.0 -// +// ******************************************************************************* //! Example app containing basic logger implementation. diff --git a/src/containers/fixed_capacity/mod.rs b/src/containers/fixed_capacity/mod.rs index 957ca7a2e8..b6c5e18f28 100644 --- a/src/containers/fixed_capacity/mod.rs +++ b/src/containers/fixed_capacity/mod.rs @@ -1,12 +1,12 @@ // ******************************************************************************* -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. // // This program and the accompanying materials are made available under the // terms of the Apache License Version 2.0 which is available at -// https://www.apache.org/licenses/LICENSE-2.0 +// // // SPDX-License-Identifier: Apache-2.0 // ******************************************************************************* diff --git a/src/containers/fixed_capacity/queue.rs b/src/containers/fixed_capacity/queue.rs index 7310684ac0..3ac6a10a15 100644 --- a/src/containers/fixed_capacity/queue.rs +++ b/src/containers/fixed_capacity/queue.rs @@ -1,12 +1,12 @@ // ******************************************************************************* -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. // // This program and the accompanying materials are made available under the // terms of the Apache License Version 2.0 which is available at -// https://www.apache.org/licenses/LICENSE-2.0 +// // // SPDX-License-Identifier: Apache-2.0 // ******************************************************************************* diff --git a/src/containers/fixed_capacity/string.rs b/src/containers/fixed_capacity/string.rs index a52119bbeb..aad77f16df 100644 --- a/src/containers/fixed_capacity/string.rs +++ b/src/containers/fixed_capacity/string.rs @@ -1,12 +1,12 @@ // ******************************************************************************* -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. // // This program and the accompanying materials are made available under the // terms of the Apache License Version 2.0 which is available at -// https://www.apache.org/licenses/LICENSE-2.0 +// // // SPDX-License-Identifier: Apache-2.0 // ******************************************************************************* diff --git a/src/containers/fixed_capacity/vec.rs b/src/containers/fixed_capacity/vec.rs index d77a9d00ba..c1bb928df0 100644 --- a/src/containers/fixed_capacity/vec.rs +++ b/src/containers/fixed_capacity/vec.rs @@ -1,12 +1,12 @@ // ******************************************************************************* -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. // // This program and the accompanying materials are made available under the // terms of the Apache License Version 2.0 which is available at -// https://www.apache.org/licenses/LICENSE-2.0 +// // // SPDX-License-Identifier: Apache-2.0 // ******************************************************************************* diff --git a/src/containers/generic/mod.rs b/src/containers/generic/mod.rs index 04392bd369..2013bf6874 100644 --- a/src/containers/generic/mod.rs +++ b/src/containers/generic/mod.rs @@ -1,12 +1,12 @@ // ******************************************************************************* -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. // // This program and the accompanying materials are made available under the // terms of the Apache License Version 2.0 which is available at -// https://www.apache.org/licenses/LICENSE-2.0 +// // // SPDX-License-Identifier: Apache-2.0 // ******************************************************************************* diff --git a/src/containers/generic/queue.rs b/src/containers/generic/queue.rs index c3501e6a32..296b5055db 100644 --- a/src/containers/generic/queue.rs +++ b/src/containers/generic/queue.rs @@ -1,12 +1,12 @@ // ******************************************************************************* -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. // // This program and the accompanying materials are made available under the // terms of the Apache License Version 2.0 which is available at -// https://www.apache.org/licenses/LICENSE-2.0 +// // // SPDX-License-Identifier: Apache-2.0 // ******************************************************************************* diff --git a/src/containers/generic/string.rs b/src/containers/generic/string.rs index 387ccb90d0..e56229ba42 100644 --- a/src/containers/generic/string.rs +++ b/src/containers/generic/string.rs @@ -1,12 +1,12 @@ // ******************************************************************************* -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. // // This program and the accompanying materials are made available under the // terms of the Apache License Version 2.0 which is available at -// https://www.apache.org/licenses/LICENSE-2.0 +// // // SPDX-License-Identifier: Apache-2.0 // ******************************************************************************* diff --git a/src/containers/generic/vec.rs b/src/containers/generic/vec.rs index ecc06cc9e6..3cff0d3469 100644 --- a/src/containers/generic/vec.rs +++ b/src/containers/generic/vec.rs @@ -1,12 +1,12 @@ // ******************************************************************************* -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. // // This program and the accompanying materials are made available under the // terms of the Apache License Version 2.0 which is available at -// https://www.apache.org/licenses/LICENSE-2.0 +// // // SPDX-License-Identifier: Apache-2.0 // ******************************************************************************* diff --git a/src/containers/inline/mod.rs b/src/containers/inline/mod.rs index 46bea584f7..ef09f2d1c6 100644 --- a/src/containers/inline/mod.rs +++ b/src/containers/inline/mod.rs @@ -1,12 +1,12 @@ // ******************************************************************************* -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. // // This program and the accompanying materials are made available under the // terms of the Apache License Version 2.0 which is available at -// https://www.apache.org/licenses/LICENSE-2.0 +// // // SPDX-License-Identifier: Apache-2.0 // ******************************************************************************* diff --git a/src/containers/inline/option.rs b/src/containers/inline/option.rs index 4b6ac3f335..196668ed4e 100644 --- a/src/containers/inline/option.rs +++ b/src/containers/inline/option.rs @@ -1,12 +1,12 @@ // ******************************************************************************* -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. // // This program and the accompanying materials are made available under the // terms of the Apache License Version 2.0 which is available at -// https://www.apache.org/licenses/LICENSE-2.0 +// // // SPDX-License-Identifier: Apache-2.0 // ******************************************************************************* diff --git a/src/containers/inline/queue.rs b/src/containers/inline/queue.rs index 43f2bcaebf..61167a6ece 100644 --- a/src/containers/inline/queue.rs +++ b/src/containers/inline/queue.rs @@ -1,12 +1,12 @@ // ******************************************************************************* -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. // // This program and the accompanying materials are made available under the // terms of the Apache License Version 2.0 which is available at -// https://www.apache.org/licenses/LICENSE-2.0 +// // // SPDX-License-Identifier: Apache-2.0 // ******************************************************************************* diff --git a/src/containers/inline/result.rs b/src/containers/inline/result.rs index 51f8da9c2c..4286eaa2f0 100644 --- a/src/containers/inline/result.rs +++ b/src/containers/inline/result.rs @@ -1,12 +1,12 @@ // ******************************************************************************* -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. // // This program and the accompanying materials are made available under the // terms of the Apache License Version 2.0 which is available at -// https://www.apache.org/licenses/LICENSE-2.0 +// // // SPDX-License-Identifier: Apache-2.0 // ******************************************************************************* diff --git a/src/containers/inline/string.rs b/src/containers/inline/string.rs index 9d066f0b23..5b12b31f23 100644 --- a/src/containers/inline/string.rs +++ b/src/containers/inline/string.rs @@ -1,12 +1,12 @@ // ******************************************************************************* -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. // // This program and the accompanying materials are made available under the // terms of the Apache License Version 2.0 which is available at -// https://www.apache.org/licenses/LICENSE-2.0 +// // // SPDX-License-Identifier: Apache-2.0 // ******************************************************************************* diff --git a/src/containers/inline/vec.rs b/src/containers/inline/vec.rs index 1d8d7d4119..ab71131a4c 100644 --- a/src/containers/inline/vec.rs +++ b/src/containers/inline/vec.rs @@ -1,12 +1,12 @@ // ******************************************************************************* -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. // // This program and the accompanying materials are made available under the // terms of the Apache License Version 2.0 which is available at -// https://www.apache.org/licenses/LICENSE-2.0 +// // // SPDX-License-Identifier: Apache-2.0 // ******************************************************************************* diff --git a/src/containers/lib.rs b/src/containers/lib.rs index 4626585954..9b6933859a 100644 --- a/src/containers/lib.rs +++ b/src/containers/lib.rs @@ -1,12 +1,12 @@ // ******************************************************************************* -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. // // This program and the accompanying materials are made available under the // terms of the Apache License Version 2.0 which is available at -// https://www.apache.org/licenses/LICENSE-2.0 +// // // SPDX-License-Identifier: Apache-2.0 // ******************************************************************************* diff --git a/src/containers/storage/heap.rs b/src/containers/storage/heap.rs index 024e37e4e2..b7520561f2 100644 --- a/src/containers/storage/heap.rs +++ b/src/containers/storage/heap.rs @@ -1,12 +1,12 @@ // ******************************************************************************* -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. // // This program and the accompanying materials are made available under the // terms of the Apache License Version 2.0 which is available at -// https://www.apache.org/licenses/LICENSE-2.0 +// // // SPDX-License-Identifier: Apache-2.0 // ******************************************************************************* diff --git a/src/containers/storage/inline.rs b/src/containers/storage/inline.rs index fc65da4664..05bdff3f1d 100644 --- a/src/containers/storage/inline.rs +++ b/src/containers/storage/inline.rs @@ -1,12 +1,12 @@ // ******************************************************************************* -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. // // This program and the accompanying materials are made available under the // terms of the Apache License Version 2.0 which is available at -// https://www.apache.org/licenses/LICENSE-2.0 +// // // SPDX-License-Identifier: Apache-2.0 // ******************************************************************************* diff --git a/src/containers/storage/mod.rs b/src/containers/storage/mod.rs index 4d284de25f..ea60cc7d73 100644 --- a/src/containers/storage/mod.rs +++ b/src/containers/storage/mod.rs @@ -1,12 +1,12 @@ // ******************************************************************************* -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. // // This program and the accompanying materials are made available under the // terms of the Apache License Version 2.0 which is available at -// https://www.apache.org/licenses/LICENSE-2.0 +// // // SPDX-License-Identifier: Apache-2.0 // ******************************************************************************* diff --git a/src/elementary/allocator_traits.rs b/src/elementary/allocator_traits.rs index e8aa7e443b..ebf250261f 100644 --- a/src/elementary/allocator_traits.rs +++ b/src/elementary/allocator_traits.rs @@ -1,12 +1,12 @@ // ******************************************************************************* -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. // // This program and the accompanying materials are made available under the // terms of the Apache License Version 2.0 which is available at -// https://www.apache.org/licenses/LICENSE-2.0 +// // // SPDX-License-Identifier: Apache-2.0 // ******************************************************************************* diff --git a/src/elementary/global_allocator.rs b/src/elementary/global_allocator.rs index dc5dd773c4..08f58d315a 100644 --- a/src/elementary/global_allocator.rs +++ b/src/elementary/global_allocator.rs @@ -1,12 +1,12 @@ // ******************************************************************************* -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. // // This program and the accompanying materials are made available under the // terms of the Apache License Version 2.0 which is available at -// https://www.apache.org/licenses/LICENSE-2.0 +// // // SPDX-License-Identifier: Apache-2.0 // ******************************************************************************* diff --git a/src/elementary/lib.rs b/src/elementary/lib.rs index be1fd63d8d..7962df7bf0 100644 --- a/src/elementary/lib.rs +++ b/src/elementary/lib.rs @@ -1,12 +1,12 @@ // ******************************************************************************* -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. // // This program and the accompanying materials are made available under the // terms of the Apache License Version 2.0 which is available at -// https://www.apache.org/licenses/LICENSE-2.0 +// // // SPDX-License-Identifier: Apache-2.0 // ******************************************************************************* diff --git a/src/log/score_log/lib.rs b/src/log/score_log/lib.rs index 8b3017c5d9..a2b96c0a5b 100644 --- a/src/log/score_log/lib.rs +++ b/src/log/score_log/lib.rs @@ -1,5 +1,5 @@ -// -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// ******************************************************************************* +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. @@ -9,7 +9,7 @@ // // // SPDX-License-Identifier: Apache-2.0 -// +// ******************************************************************************* //! A lightweight logging facade. diff --git a/src/log/score_log/macros.rs b/src/log/score_log/macros.rs index 931bc2d6cd..6562c08a30 100644 --- a/src/log/score_log/macros.rs +++ b/src/log/score_log/macros.rs @@ -1,5 +1,5 @@ -// -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// ******************************************************************************* +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. @@ -9,7 +9,7 @@ // // // SPDX-License-Identifier: Apache-2.0 -// +// ******************************************************************************* /// The standard logging macro. /// diff --git a/src/log/score_log/tests/integration.rs b/src/log/score_log/tests/integration.rs index 2d9e58553e..350a9138ec 100644 --- a/src/log/score_log/tests/integration.rs +++ b/src/log/score_log/tests/integration.rs @@ -1,5 +1,5 @@ -// -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// ******************************************************************************* +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. @@ -9,7 +9,7 @@ // // // SPDX-License-Identifier: Apache-2.0 -// +// ******************************************************************************* #![allow(dead_code, unused_imports, missing_docs)] diff --git a/src/log/score_log/tests/macros.rs b/src/log/score_log/tests/macros.rs index 82476288da..7202db8ecb 100644 --- a/src/log/score_log/tests/macros.rs +++ b/src/log/score_log/tests/macros.rs @@ -1,5 +1,5 @@ -// -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// ******************************************************************************* +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. @@ -9,7 +9,7 @@ // // // SPDX-License-Identifier: Apache-2.0 -// +// ******************************************************************************* #![allow(missing_docs)] diff --git a/src/log/score_log_fmt/builders.rs b/src/log/score_log_fmt/builders.rs index cbaf2b248c..4b86f080f7 100644 --- a/src/log/score_log_fmt/builders.rs +++ b/src/log/score_log_fmt/builders.rs @@ -1,5 +1,5 @@ -// -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// ******************************************************************************* +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. @@ -9,7 +9,7 @@ // // // SPDX-License-Identifier: Apache-2.0 -// +// ******************************************************************************* //! Implementations of [`ScoreDebug`] implementation helper builders. diff --git a/src/log/score_log_fmt/fmt.rs b/src/log/score_log_fmt/fmt.rs index 6874d94f7c..05ac5aa431 100644 --- a/src/log/score_log_fmt/fmt.rs +++ b/src/log/score_log_fmt/fmt.rs @@ -1,5 +1,5 @@ -// -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// ******************************************************************************* +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. @@ -9,7 +9,7 @@ // // // SPDX-License-Identifier: Apache-2.0 -// +// ******************************************************************************* use crate::FormatSpec; use core::marker::PhantomData; diff --git a/src/log/score_log_fmt/fmt_impl.rs b/src/log/score_log_fmt/fmt_impl.rs index 7f42c30f04..8f83e283ce 100644 --- a/src/log/score_log_fmt/fmt_impl.rs +++ b/src/log/score_log_fmt/fmt_impl.rs @@ -1,5 +1,5 @@ -// -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// ******************************************************************************* +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. @@ -9,7 +9,7 @@ // // // SPDX-License-Identifier: Apache-2.0 -// +// ******************************************************************************* //! `ScoreDebug` implementations for common types. diff --git a/src/log/score_log_fmt/fmt_impl_qm.rs b/src/log/score_log_fmt/fmt_impl_qm.rs index 98e459de4c..d883ca0a21 100644 --- a/src/log/score_log_fmt/fmt_impl_qm.rs +++ b/src/log/score_log_fmt/fmt_impl_qm.rs @@ -1,5 +1,5 @@ -// -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// ******************************************************************************* +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. @@ -9,7 +9,7 @@ // // // SPDX-License-Identifier: Apache-2.0 -// +// ******************************************************************************* //! `ScoreDebug` implementations for types that are not ASIL-B certified. diff --git a/src/log/score_log_fmt/fmt_spec.rs b/src/log/score_log_fmt/fmt_spec.rs index 881178ed3c..67024d04bb 100644 --- a/src/log/score_log_fmt/fmt_spec.rs +++ b/src/log/score_log_fmt/fmt_spec.rs @@ -1,5 +1,5 @@ -// -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// ******************************************************************************* +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. @@ -9,7 +9,7 @@ // // // SPDX-License-Identifier: Apache-2.0 -// +// ******************************************************************************* /// Alignment of written data. #[derive(Clone, Copy, PartialEq, Eq)] diff --git a/src/log/score_log_fmt/lib.rs b/src/log/score_log_fmt/lib.rs index be6db5b6eb..4b642f5c27 100644 --- a/src/log/score_log_fmt/lib.rs +++ b/src/log/score_log_fmt/lib.rs @@ -1,5 +1,5 @@ -// -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// ******************************************************************************* +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. @@ -9,7 +9,7 @@ // // // SPDX-License-Identifier: Apache-2.0 -// +// ******************************************************************************* //! Implementation of formatting library. //! Allows creation of message frames that are not exclusively text based. diff --git a/src/log/score_log_fmt/macros.rs b/src/log/score_log_fmt/macros.rs index 2ac559ccad..1ddbe6be8d 100644 --- a/src/log/score_log_fmt/macros.rs +++ b/src/log/score_log_fmt/macros.rs @@ -1,5 +1,5 @@ -// -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// ******************************************************************************* +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. @@ -9,7 +9,7 @@ // // // SPDX-License-Identifier: Apache-2.0 -// +// ******************************************************************************* /// Writes data using provided writer. /// diff --git a/src/log/score_log_fmt/test_utils.rs b/src/log/score_log_fmt/test_utils.rs index e6ccbe6d2e..efd6adefd0 100644 --- a/src/log/score_log_fmt/test_utils.rs +++ b/src/log/score_log_fmt/test_utils.rs @@ -1,5 +1,5 @@ -// -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// ******************************************************************************* +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. @@ -9,7 +9,7 @@ // // // SPDX-License-Identifier: Apache-2.0 -// +// ******************************************************************************* //! Common testing utilities. diff --git a/src/log/score_log_fmt_macro/format_args.rs b/src/log/score_log_fmt_macro/format_args.rs index 5d4ba7f79c..a4004def9f 100644 --- a/src/log/score_log_fmt_macro/format_args.rs +++ b/src/log/score_log_fmt_macro/format_args.rs @@ -1,5 +1,5 @@ -// -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// ******************************************************************************* +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. @@ -9,7 +9,7 @@ // // // SPDX-License-Identifier: Apache-2.0 -// +// ******************************************************************************* use quote::{quote, ToTokens}; use score_log_fmt::{Alignment, DebugAsHex, DisplayHint, FormatSpec, Sign}; diff --git a/src/log/score_log_fmt_macro/lib.rs b/src/log/score_log_fmt_macro/lib.rs index f0333188d4..e47bc81253 100644 --- a/src/log/score_log_fmt_macro/lib.rs +++ b/src/log/score_log_fmt_macro/lib.rs @@ -1,5 +1,5 @@ -// -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// ******************************************************************************* +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. @@ -9,7 +9,7 @@ // // // SPDX-License-Identifier: Apache-2.0 -// +// ******************************************************************************* //! Replacement for macros provided by Rust compiler: //! - [`score_log_format_args!`] - replacement for `format_args!` diff --git a/src/log/score_log_fmt_macro/score_debug.rs b/src/log/score_log_fmt_macro/score_debug.rs index ebd8e4cb67..a0abcb9340 100644 --- a/src/log/score_log_fmt_macro/score_debug.rs +++ b/src/log/score_log_fmt_macro/score_debug.rs @@ -1,5 +1,5 @@ -// -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// ******************************************************************************* +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. @@ -9,7 +9,7 @@ // // // SPDX-License-Identifier: Apache-2.0 -// +// ******************************************************************************* use quote::{format_ident, quote}; use syn::{ diff --git a/src/log/score_log_fmt_macro/tests/test_format_args.rs b/src/log/score_log_fmt_macro/tests/test_format_args.rs index 57f18e07b5..4cc1591d8a 100644 --- a/src/log/score_log_fmt_macro/tests/test_format_args.rs +++ b/src/log/score_log_fmt_macro/tests/test_format_args.rs @@ -1,5 +1,5 @@ -// -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// ******************************************************************************* +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. @@ -9,7 +9,7 @@ // // // SPDX-License-Identifier: Apache-2.0 -// +// ******************************************************************************* //! Tests for `score_log_format_args`. //! diff --git a/src/log/score_log_fmt_macro/tests/test_score_debug.rs b/src/log/score_log_fmt_macro/tests/test_score_debug.rs index 3b2739a9ce..ad40d848e4 100644 --- a/src/log/score_log_fmt_macro/tests/test_score_debug.rs +++ b/src/log/score_log_fmt_macro/tests/test_score_debug.rs @@ -1,5 +1,5 @@ -// -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// ******************************************************************************* +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. @@ -9,7 +9,7 @@ // // // SPDX-License-Identifier: Apache-2.0 -// +// ******************************************************************************* //! Tests for `ScoreDebug` derive macro. //! diff --git a/src/log/score_log_fmt_macro/tests/tests.rs b/src/log/score_log_fmt_macro/tests/tests.rs index 4483c5ed38..19bc955872 100644 --- a/src/log/score_log_fmt_macro/tests/tests.rs +++ b/src/log/score_log_fmt_macro/tests/tests.rs @@ -1,5 +1,5 @@ -// -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// ******************************************************************************* +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. @@ -9,6 +9,6 @@ // // // SPDX-License-Identifier: Apache-2.0 -// +// ******************************************************************************* //! Workaround for `rust_test` Bazel target not being able to run without `crate_root`. diff --git a/src/log/score_log_fmt_macro/tests/utils/mod.rs b/src/log/score_log_fmt_macro/tests/utils/mod.rs index 99e5041bdc..e042aa7753 100644 --- a/src/log/score_log_fmt_macro/tests/utils/mod.rs +++ b/src/log/score_log_fmt_macro/tests/utils/mod.rs @@ -1,5 +1,5 @@ -// -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// ******************************************************************************* +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. @@ -9,7 +9,7 @@ // // // SPDX-License-Identifier: Apache-2.0 -// +// ******************************************************************************* use core::fmt::Write; use score_log_fmt::{Error, FormatSpec, Result, ScoreWrite}; diff --git a/src/log/stdout_logger/lib.rs b/src/log/stdout_logger/lib.rs index c5bba57690..837176ba26 100644 --- a/src/log/stdout_logger/lib.rs +++ b/src/log/stdout_logger/lib.rs @@ -1,5 +1,5 @@ -// -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// ******************************************************************************* +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. @@ -9,7 +9,7 @@ // // // SPDX-License-Identifier: Apache-2.0 -// +// ******************************************************************************* //! String-based Rust backend for `score_log`. //! Data is written to a fixed-size buffer. diff --git a/src/log/stdout_logger/timestamp.rs b/src/log/stdout_logger/timestamp.rs index fb3b2243b9..573f8fb664 100644 --- a/src/log/stdout_logger/timestamp.rs +++ b/src/log/stdout_logger/timestamp.rs @@ -1,5 +1,5 @@ -// -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// ******************************************************************************* +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. @@ -9,7 +9,7 @@ // // // SPDX-License-Identifier: Apache-2.0 -// +// ******************************************************************************* //! Generate human-readable timestamp from Unix epoch time. //! Without allocations and external dependencies. diff --git a/src/log/stdout_logger_cpp_init/ffi.rs b/src/log/stdout_logger_cpp_init/ffi.rs index 78c84f0aae..3716761f1b 100644 --- a/src/log/stdout_logger_cpp_init/ffi.rs +++ b/src/log/stdout_logger_cpp_init/ffi.rs @@ -1,5 +1,5 @@ -// -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// ******************************************************************************* +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. @@ -9,7 +9,7 @@ // // // SPDX-License-Identifier: Apache-2.0 -// +// ******************************************************************************* use core::ffi::c_char; use core::slice::from_raw_parts; diff --git a/src/sync/arc_in.rs b/src/sync/arc_in.rs index 26494a44a6..bfc8b6d950 100644 --- a/src/sync/arc_in.rs +++ b/src/sync/arc_in.rs @@ -1,12 +1,12 @@ // ******************************************************************************* -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. // // This program and the accompanying materials are made available under the // terms of the Apache License Version 2.0 which is available at -// https://www.apache.org/licenses/LICENSE-2.0 +// // // SPDX-License-Identifier: Apache-2.0 // ******************************************************************************* diff --git a/src/sync/lib.rs b/src/sync/lib.rs index a1f046f698..ae2926d624 100644 --- a/src/sync/lib.rs +++ b/src/sync/lib.rs @@ -1,12 +1,12 @@ // ******************************************************************************* -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. // // This program and the accompanying materials are made available under the // terms of the Apache License Version 2.0 which is available at -// https://www.apache.org/licenses/LICENSE-2.0 +// // // SPDX-License-Identifier: Apache-2.0 // ******************************************************************************* diff --git a/src/testing_macros/lib.rs b/src/testing_macros/lib.rs index 0bb008c79a..c5a3fde564 100644 --- a/src/testing_macros/lib.rs +++ b/src/testing_macros/lib.rs @@ -1,12 +1,12 @@ // ******************************************************************************* -// Copyright (c) 2025 Contributors to the Eclipse Foundation +// Copyright (c) 2026 Contributors to the Eclipse Foundation // // See the NOTICE file(s) distributed with this work for additional // information regarding copyright ownership. // // This program and the accompanying materials are made available under the // terms of the Apache License Version 2.0 which is available at -// https://www.apache.org/licenses/LICENSE-2.0 +// // // SPDX-License-Identifier: Apache-2.0 // ******************************************************************************* From f5969a60d23d716d4f47d39a63b1dd67553d96b4 Mon Sep 17 00:00:00 2001 From: Pawel Rutka Date: Fri, 30 Jan 2026 15:52:47 +0100 Subject: [PATCH 35/59] Make logs belong to process --- src/log/stdout_logger/lib.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/log/stdout_logger/lib.rs b/src/log/stdout_logger/lib.rs index 837176ba26..174a90f0a9 100644 --- a/src/log/stdout_logger/lib.rs +++ b/src/log/stdout_logger/lib.rs @@ -314,7 +314,8 @@ impl Log for StdoutLogger { // Write context, log level, log data. let context = record.context(); let level = metadata.level().as_str(); - let _ = score_write!(writer, "[{}][{}] {}", context, level, record.args()); + let pid = std::process::id(); + let _ = score_write!(writer, "[{}][{}][{}] {}", pid, context, level, record.args()); // Print to stdout. println!("{}", writer.get()); From e97b389742cecdc7ff157a7b2db52c97cb9cf9b2 Mon Sep 17 00:00:00 2001 From: Dan Calavrezo <195309321+dcalavrezo-qorix@users.noreply.github.com> Date: Thu, 5 Feb 2026 15:26:14 +0200 Subject: [PATCH 36/59] clippy: switch to rules_lint (#60) * clippy: switch to rules_lint * msrv: updated msrv to 1.90.0 --------- Signed-off-by: Dan Calavrezo <195309321+dcalavrezo-qorix@users.noreply.github.com> --- .github/workflows/lint_clippy.yml | 53 +++++++------------------------ MODULE.bazel | 4 +-- 2 files changed, 13 insertions(+), 44 deletions(-) diff --git a/.github/workflows/lint_clippy.yml b/.github/workflows/lint_clippy.yml index 912de3340b..06cec9d383 100644 --- a/.github/workflows/lint_clippy.yml +++ b/.github/workflows/lint_clippy.yml @@ -11,51 +11,20 @@ # SPDX-License-Identifier: Apache-2.0 # ******************************************************************************* -name: clippy check +name: Bazel Clippy on: pull_request: - branches: [main, development] - types: [opened, ready_for_review, reopened, synchronize] + types: [opened, reopened, synchronize] + push: + branches: + - main + merge_group: + types: [checks_requested] -env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} jobs: lint-clippy: - timeout-minutes: 6 # 6 minutes is the maximum allowed for a cold run - runs-on: ${{ vars.REPO_RUNNER_LABELS && fromJSON(vars.REPO_RUNNER_LABELS) || 'ubuntu-latest' }} - steps: - - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - - name: Install protoc 26.1 - uses: arduino/setup-protoc@v3 - with: - version: 26.1 - repo-token: ${{ secrets.GITHUB_TOKEN }} - - - name: Cache Cargo registry, git deps & target - uses: actions/cache@v3 - with: - path: | - ~/.cargo/registry - ~/.cargo/git - target - key: ${{ runner.os }}-cargo-lint-clippy-${{ hashFiles('**/Cargo.lock') }} - restore-keys: | - ${{ runner.os }}-cargo-lint-clippy- - - - name: Install Rust toolchain - uses: actions-rs/toolchain@v1 - with: - profile: minimal - toolchain: 1.90.0 - override: true - components: clippy - - - name: check clippy errors - uses: actions-rs/cargo@v1 - with: - command: clippy - args: --all-features --all-targets --workspace -- -D warnings + uses: eclipse-score/cicd-workflows/.github/workflows/static-analysis.yml@main + with: + bazel-targets: "//src/..." + bazel-config: "lint" diff --git a/MODULE.bazel b/MODULE.bazel index f689f42223..3f89e4ae55 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -21,7 +21,7 @@ bazel_dep(name = "rules_python", version = "1.4.1") bazel_dep(name = "bazel_skylib", version = "1.7.1") bazel_dep(name = "rules_rust", version = "0.61.0") bazel_dep(name = "rules_cc", version = "0.1.1") -bazel_dep(name = "aspect_rules_lint", version = "1.0.3") +bazel_dep(name = "aspect_rules_lint", version = "2.0.0") bazel_dep(name = "buildifier_prebuilt", version = "7.3.1") bazel_dep(name = "platforms", version = "1.0.0") @@ -29,7 +29,7 @@ bazel_dep(name = "platforms", version = "1.0.0") bazel_dep(name = "score_bazel_platforms", version = "0.0.4") bazel_dep(name = "score_docs_as_code", version = "2.0.2") bazel_dep(name = "score_tooling", version = "1.1.0") -bazel_dep(name = "score_rust_policies", version = "0.0.3") +bazel_dep(name = "score_rust_policies", version = "0.0.5") bazel_dep(name = "score_process", version = "1.4.0", dev_dependency = True) bazel_dep(name = "score_platform", version = "0.5.1", dev_dependency = True) # This is main score repo From 23771c9641ed3616a94d14b320f4ed77c0f8d3de Mon Sep 17 00:00:00 2001 From: Dan Calavrezo <195309321+dcalavrezo-qorix@users.noreply.github.com> Date: Fri, 6 Feb 2026 15:16:05 +0200 Subject: [PATCH 37/59] coverage: added rust coverage reporting Integrated rust code coverage using symbol_report and blanket Added reusable workflow for generating the reports Signed-off-by: Dan Calavrezo <195309321+dcalavrezo-qorix@users.noreply.github.com> --- .github/workflows/rust_coverage.yml | 27 +++++++++++++++++++++++++++ BUILD | 19 ++++++++++++++++++- 2 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/rust_coverage.yml diff --git a/.github/workflows/rust_coverage.yml b/.github/workflows/rust_coverage.yml new file mode 100644 index 0000000000..af9876d694 --- /dev/null +++ b/.github/workflows/rust_coverage.yml @@ -0,0 +1,27 @@ +# ******************************************************************************* +# Copyright (c) 2026 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* +name: Rust Coverage (Demo) +on: + pull_request: + types: [opened, reopened, synchronize] + workflow_dispatch: + +jobs: + rust_coverage: + uses: eclipse-score/cicd-workflows/.github/workflows/rust-coverage.yml@main + with: + bazel-test-targets: "//src/..." + bazel-test-config-flags: "--config=ferrocene-coverage" + coverage-target: "//:rust_coverage" + min-coverage: 0 + coverage-artifact-name: "rust-coverage-html" diff --git a/BUILD b/BUILD index ef0671e802..cd95281a35 100644 --- a/BUILD +++ b/BUILD @@ -11,7 +11,7 @@ # SPDX-License-Identifier: Apache-2.0 # ******************************************************************************* load("@score_docs_as_code//:docs.bzl", "docs") -load("@score_tooling//:defs.bzl", "copyright_checker", "dash_license_checker", "setup_starpls", "use_format_targets") +load("@score_tooling//:defs.bzl", "copyright_checker", "dash_license_checker", "rust_coverage_report", "setup_starpls", "use_format_targets") load("//:project_config.bzl", "PROJECT_CONFIG") setup_starpls( @@ -65,6 +65,23 @@ dash_license_checker( visibility = ["//visibility:public"], ) + + +rust_coverage_report( + name = "rust_coverage", + bazel_configs = [ + "ferrocene-coverage", + ], + query = 'kind("rust_test", //src/...) except //src/log/score_log_fmt_macro:tests', + visibility = ["//visibility:public"], +) + +alias( + name = "rust_coverage_report", + actual = ":rust_coverage", + visibility = ["//visibility:public"], +) + # Add target for formatting checks use_format_targets() From 30a927eccf69d38895c723ed16962debcc03db4d Mon Sep 17 00:00:00 2001 From: Dan Calavrezo <195309321+dcalavrezo-qorix@users.noreply.github.com> Date: Fri, 6 Feb 2026 16:00:52 +0200 Subject: [PATCH 38/59] formatting: fixed Fixed formatting issues Signed-off-by: Dan Calavrezo <195309321+dcalavrezo-qorix@users.noreply.github.com> --- BUILD | 2 -- 1 file changed, 2 deletions(-) diff --git a/BUILD b/BUILD index cd95281a35..2466795649 100644 --- a/BUILD +++ b/BUILD @@ -65,8 +65,6 @@ dash_license_checker( visibility = ["//visibility:public"], ) - - rust_coverage_report( name = "rust_coverage", bazel_configs = [ From b9bcb0a2c50d830da07572741003c4f39c893ef6 Mon Sep 17 00:00:00 2001 From: Piotr Korkus Date: Mon, 9 Feb 2026 16:01:35 +0100 Subject: [PATCH 39/59] bazel: bump deps - preparation for 0.6 release --- MODULE.bazel | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index 3f89e4ae55..e39f25a2c6 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -27,12 +27,17 @@ bazel_dep(name = "platforms", version = "1.0.0") # S-CORE process rules bazel_dep(name = "score_bazel_platforms", version = "0.0.4") -bazel_dep(name = "score_docs_as_code", version = "2.0.2") +bazel_dep(name = "score_docs_as_code", version = "3.0.0") bazel_dep(name = "score_tooling", version = "1.1.0") bazel_dep(name = "score_rust_policies", version = "0.0.5") -bazel_dep(name = "score_process", version = "1.4.0", dev_dependency = True) -bazel_dep(name = "score_platform", version = "0.5.1", dev_dependency = True) # This is main score repo +bazel_dep(name = "score_process", version = "1.4.3", dev_dependency = True) +bazel_dep(name = "score_platform", version = "0.5.2", dev_dependency = True) # This is main score repo +git_override( + module_name = "score_platform", + commit = "7d252e75b733b09225f1a383bb00d5d7d79fa5ae", + remote = "https://github.com/qorix-group/score.git", +) # bazel_dep(name = "score_virtualization", version = "0.0.1", dev_dependency = True) # Toolchains and extensions From 3eb0697fd50ee0c0b703ebac0ea0d38d71c5d167 Mon Sep 17 00:00:00 2001 From: Piotr Korkus Date: Wed, 11 Feb 2026 10:23:24 +0100 Subject: [PATCH 40/59] cicd: build docs on release - store documentation on GH pages for each release --- .github/workflows/docs.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 24bd39951f..bcb3dc9210 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -27,6 +27,8 @@ on: - main merge_group: types: [checks_requested] + release: + types: [created] jobs: build-docs: From 93622bda7147634cb106466565da65d9692a56e3 Mon Sep 17 00:00:00 2001 From: Piotr Korkus Date: Wed, 11 Feb 2026 10:30:33 +0100 Subject: [PATCH 41/59] bazel: add x86 toolchains --- .github/workflows/build.yml | 2 +- .github/workflows/build_qnx8.yml | 5 ++++- .github/workflows/tests.yml | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 34bc40c75e..7bc743b892 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -68,4 +68,4 @@ jobs: - name: Build with Bazel run: | - bazel build //... + bazel build --config=x86_64-linux //... diff --git a/.github/workflows/build_qnx8.yml b/.github/workflows/build_qnx8.yml index b233347da7..f11fdf1afd 100644 --- a/.github/workflows/build_qnx8.yml +++ b/.github/workflows/build_qnx8.yml @@ -23,9 +23,12 @@ jobs: permissions: contents: read pull-requests: read + strategy: + matrix: + config: ['arm64-qnx', 'x86_64-qnx'] with: bazel-target: '//src/...' - bazel-config: 'arm64-qnx' + bazel-config: ${{ matrix.config }} credential-helper: 'scripts/internal/qnx_creds.py' environment-name: 'workflow-approval' secrets: diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 6c5a1df7dc..9dba18972d 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -45,4 +45,4 @@ jobs: - name: Run Tests via Bazel run: | echo "Running: bazel test //src/..." - bazel test //src/... + bazel test --config=x86_64-linux //src/... From f5e7cd360dbdfaff54ae7a6942edde1e7f73ec04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arkadiusz=20J=C4=99drzejewski?= Date: Mon, 23 Feb 2026 15:51:04 +0100 Subject: [PATCH 42/59] infra: add additional toolchains to `MODULE.bazel` - Expand list of toolchains, including those required by CI. - Make `qnx_creds.py` executable. --- MODULE.bazel | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index e39f25a2c6..9cac3d4041 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -50,24 +50,41 @@ bazel_dep(name = "score_crates", version = "0.0.6") # Extensions gcc = use_extension("@score_bazel_cpp_toolchains//extensions:gcc.bzl", "gcc", dev_dependency = True) gcc.toolchain( - name = "score_qcc_aarch64_toolchain", - sdp_version = "8.0.0", + name = "score_gcc_x86_64_toolchain", + target_cpu = "x86_64", + target_os = "linux", + use_default_package = True, + version = "12.2.0", +) +gcc.toolchain( + name = "score_gcc_aarch64_toolchain", target_cpu = "aarch64", - target_os = "qnx", + target_os = "linux", use_default_package = True, version = "12.2.0", ) gcc.toolchain( - name = "score_gcc_x86_64_toolchain", + name = "score_qcc_x86_64_toolchain", + sdp_version = "8.0.0", target_cpu = "x86_64", - target_os = "linux", + target_os = "qnx", + use_default_package = True, + version = "12.2.0", +) +gcc.toolchain( + name = "score_qcc_aarch64_toolchain", + sdp_version = "8.0.0", + target_cpu = "aarch64", + target_os = "qnx", use_default_package = True, version = "12.2.0", ) use_repo( gcc, + "score_gcc_aarch64_toolchain", "score_gcc_x86_64_toolchain", "score_qcc_aarch64_toolchain", + "score_qcc_x86_64_toolchain", ) PYTHON_VERSION = "3.12" From e332db3572d21809862219f81d2dd90512dff0c3 Mon Sep 17 00:00:00 2001 From: Artem Shein Date: Thu, 12 Feb 2026 15:43:37 +0100 Subject: [PATCH 43/59] Add ScoreDebug impls for tuples Change-Id: I6d68980063ed5974b0d40704b7c52f2f4cd59ccf --- src/log/score_log_fmt/fmt_impl.rs | 55 +++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/src/log/score_log_fmt/fmt_impl.rs b/src/log/score_log_fmt/fmt_impl.rs index 8f83e283ce..a917c93522 100644 --- a/src/log/score_log_fmt/fmt_impl.rs +++ b/src/log/score_log_fmt/fmt_impl.rs @@ -194,6 +194,45 @@ impl ScoreDebug for std::sync::PoisonError { } } +impl ScoreDebug for (A, B) { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + DebugTuple::new(f, spec, "").field(&self.0).field(&self.1).finish() + } +} + +impl ScoreDebug for (A, B, C) { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + DebugTuple::new(f, spec, "") + .field(&self.0) + .field(&self.1) + .field(&self.2) + .finish() + } +} + +impl ScoreDebug for (A, B, C, D) { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + DebugTuple::new(f, spec, "") + .field(&self.0) + .field(&self.1) + .field(&self.2) + .field(&self.3) + .finish() + } +} + +impl ScoreDebug for (A, B, C, D, E) { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + DebugTuple::new(f, spec, "") + .field(&self.0) + .field(&self.1) + .field(&self.2) + .field(&self.3) + .field(&self.4) + .finish() + } +} + #[cfg(test)] mod tests { use crate::test_utils::common_test_debug; @@ -347,4 +386,20 @@ mod tests { let pe = std::sync::PoisonError::new(123.0); common_test_debug(pe); } + + #[test] + fn test_tuples_debug() { + common_test_debug((2.1f32, "abc")); + common_test_debug((28, Box::new(46), true)); + common_test_debug(( + ( + std::collections::HashMap::from([("x", 123), ("y", 321), ("z", 444)]), + "abc", + ), + Some(123), + std::sync::Arc::new(654), + vec![987, 654], + )); + common_test_debug(("a", "b", (r"0x64", 10, false), "0.1", "true")); + } } From 3f21094de5c8f3b3650b68304ebc162a6ce55c4e Mon Sep 17 00:00:00 2001 From: Dan Calavrezo <195309321+dcalavrezo-qorix@users.noreply.github.com> Date: Tue, 3 Mar 2026 15:39:49 +0200 Subject: [PATCH 44/59] locking: enforce Bzlmod lockfile consistency - add reusable lockfile check workflow - track MODULE.bazel.lock (remove from .gitignore) - enforce --lockfile_mode=error in CI and scripts Addresses eclipse-score/score#2628 --- .github/workflows/build.yml | 2 +- .github/workflows/bzlmod-lock.yml | 26 ++++++++++++++++++++++++++ .github/workflows/copyright.yml | 2 +- .github/workflows/docs.yml | 2 +- .github/workflows/format.yml | 2 +- .github/workflows/license_check.yml | 1 + .github/workflows/lint_clippy.yml | 1 + .github/workflows/rust_coverage.yml | 3 ++- .github/workflows/tests.yml | 4 ++-- MODULE.bazel | 1 - 10 files changed, 36 insertions(+), 8 deletions(-) create mode 100644 .github/workflows/bzlmod-lock.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7bc743b892..0b38ee30f6 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -68,4 +68,4 @@ jobs: - name: Build with Bazel run: | - bazel build --config=x86_64-linux //... + bazel build --lockfile_mode=error --config=x86_64-linux //... diff --git a/.github/workflows/bzlmod-lock.yml b/.github/workflows/bzlmod-lock.yml new file mode 100644 index 0000000000..eebb3df68d --- /dev/null +++ b/.github/workflows/bzlmod-lock.yml @@ -0,0 +1,26 @@ +# ******************************************************************************* +# Copyright (c) 2025 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* +name: Bzlmod Lockfile Check +on: + pull_request: + types: [opened, reopened, synchronize] + merge_group: + types: [checks_requested] + push: + branches: + - main +jobs: + bzlmod-lock: + uses: eclipse-score/cicd-workflows/.github/workflows/bzlmod-lock-check.yml@main + with: + working-directory: . diff --git a/.github/workflows/copyright.yml b/.github/workflows/copyright.yml index 8483278df7..aee334dfa5 100644 --- a/.github/workflows/copyright.yml +++ b/.github/workflows/copyright.yml @@ -24,4 +24,4 @@ jobs: copyright-check: uses: eclipse-score/cicd-workflows/.github/workflows/copyright.yml@main with: - bazel-target: "run //:copyright.check" + bazel-target: "run --lockfile_mode=error //:copyright.check" diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index bcb3dc9210..d8c477c78f 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -41,5 +41,5 @@ jobs: with: # the bazel-target depends on your repo specific docs_targets configuration (e.g. "suffix") - bazel-target: "//:docs -- --github_user=${{ github.repository_owner }} --github_repo=${{ github.event.repository.name }}" + bazel-target: "--lockfile_mode=error //:docs -- --github_user=${{ github.repository_owner }} --github_repo=${{ github.event.repository.name }}" retention-days: 3 diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml index adb88769ae..35cbc74e32 100644 --- a/.github/workflows/format.yml +++ b/.github/workflows/format.yml @@ -24,4 +24,4 @@ jobs: formatting-check: uses: eclipse-score/cicd-workflows/.github/workflows/format.yml@main with: - bazel-target: "test //:format.check" # optional, this is the default + bazel-target: "test --lockfile_mode=error //:format.check" # optional, this is the default diff --git a/.github/workflows/license_check.yml b/.github/workflows/license_check.yml index 49319672a8..c2fc1b9046 100644 --- a/.github/workflows/license_check.yml +++ b/.github/workflows/license_check.yml @@ -29,5 +29,6 @@ jobs: uses: eclipse-score/cicd-workflows/.github/workflows/license-check.yml@main with: repo-url: "${{ github.server_url }}/${{ github.repository }}" + bazel-target: "run --lockfile_mode=error //:license-check" secrets: dash-api-token: ${{ secrets.ECLIPSE_GITLAB_API_TOKEN }} diff --git a/.github/workflows/lint_clippy.yml b/.github/workflows/lint_clippy.yml index 06cec9d383..ebd84b839a 100644 --- a/.github/workflows/lint_clippy.yml +++ b/.github/workflows/lint_clippy.yml @@ -28,3 +28,4 @@ jobs: with: bazel-targets: "//src/..." bazel-config: "lint" + bazel-args: "--lockfile_mode=error" diff --git a/.github/workflows/rust_coverage.yml b/.github/workflows/rust_coverage.yml index af9876d694..5038bb5360 100644 --- a/.github/workflows/rust_coverage.yml +++ b/.github/workflows/rust_coverage.yml @@ -22,6 +22,7 @@ jobs: with: bazel-test-targets: "//src/..." bazel-test-config-flags: "--config=ferrocene-coverage" - coverage-target: "//:rust_coverage" + bazel-test-args: "--nocache_test_results --lockfile_mode=error" + coverage-target: "--lockfile_mode=error //:rust_coverage" min-coverage: 0 coverage-artifact-name: "rust-coverage-html" diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 9dba18972d..2b185fb27a 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -44,5 +44,5 @@ jobs: - name: Run Tests via Bazel run: | - echo "Running: bazel test //src/..." - bazel test --config=x86_64-linux //src/... + echo "Running: bazel test --lockfile_mode=error --config=x86_64-linux //src/..." + bazel test --lockfile_mode=error --config=x86_64-linux //src/... diff --git a/MODULE.bazel b/MODULE.bazel index 9cac3d4041..a56a9da1e8 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -94,4 +94,3 @@ python.toolchain( is_default = True, python_version = PYTHON_VERSION, ) -use_repo(python) From b1621b03d72c811f6c1d23a29d2b1052da2b5c44 Mon Sep 17 00:00:00 2001 From: Dan Calavrezo <195309321+dcalavrezo-qorix@users.noreply.github.com> Date: Wed, 4 Mar 2026 17:18:12 +0200 Subject: [PATCH 45/59] fix: correction small correction Signed-off-by: Dan Calavrezo <195309321+dcalavrezo-qorix@users.noreply.github.com> --- .github/workflows/rust_coverage.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/rust_coverage.yml b/.github/workflows/rust_coverage.yml index 5038bb5360..49846f1005 100644 --- a/.github/workflows/rust_coverage.yml +++ b/.github/workflows/rust_coverage.yml @@ -22,7 +22,7 @@ jobs: with: bazel-test-targets: "//src/..." bazel-test-config-flags: "--config=ferrocene-coverage" - bazel-test-args: "--nocache_test_results --lockfile_mode=error" - coverage-target: "--lockfile_mode=error //:rust_coverage" + bazel-test-args: "--lockfile_mode=error" + coverage-target: "//:rust_coverage" min-coverage: 0 coverage-artifact-name: "rust-coverage-html" From c9242c7ea11bc9b8cf1fc175e7a2fe6a86802303 Mon Sep 17 00:00:00 2001 From: Prabakaran Chinnasamy Date: Fri, 20 Mar 2026 14:15:48 +0530 Subject: [PATCH 46/59] improvement: Implement ScoreDebug for u128, Duration and AddrParseError (#75) Implemented ScoreDebug for u128, i128, core::time::Duration and core::net::parser::AddrParseError (QM). --- examples/log_custom/src/logger.rs | 8 +++++++ src/log/score_log_fmt/fmt.rs | 24 +++++++++++++++++-- src/log/score_log_fmt/fmt_impl.rs | 24 +++++++++++++++++++ src/log/score_log_fmt/fmt_impl_qm.rs | 14 +++++++++++ src/log/score_log_fmt/test_utils.rs | 8 +++++++ .../score_log_fmt_macro/tests/utils/mod.rs | 8 +++++++ src/log/stdout_logger/lib.rs | 8 +++++++ 7 files changed, 92 insertions(+), 2 deletions(-) diff --git a/examples/log_custom/src/logger.rs b/examples/log_custom/src/logger.rs index 57ad0dee45..0d2accd388 100644 --- a/examples/log_custom/src/logger.rs +++ b/examples/log_custom/src/logger.rs @@ -58,6 +58,10 @@ impl ScoreWrite for StringWriter { write!(self.buffer, "{}", v).map_err(|_| Error) } + fn write_i128(&mut self, v: &i128, _spec: &FormatSpec) -> FmtResult { + write!(self.buffer, "{}", v).map_err(|_| Error) + } + fn write_u8(&mut self, v: &u8, _spec: &FormatSpec) -> FmtResult { write!(self.buffer, "{}", v).map_err(|_| Error) } @@ -74,6 +78,10 @@ impl ScoreWrite for StringWriter { write!(self.buffer, "{}", v).map_err(|_| Error) } + fn write_u128(&mut self, v: &u128, _spec: &FormatSpec) -> FmtResult { + write!(self.buffer, "{}", v).map_err(|_| Error) + } + fn write_str(&mut self, v: &str, _spec: &FormatSpec) -> FmtResult { write!(self.buffer, "{}", v).map_err(|_| Error) } diff --git a/src/log/score_log_fmt/fmt.rs b/src/log/score_log_fmt/fmt.rs index 05ac5aa431..4674196808 100644 --- a/src/log/score_log_fmt/fmt.rs +++ b/src/log/score_log_fmt/fmt.rs @@ -48,6 +48,8 @@ pub trait ScoreWrite { fn write_i32(&mut self, v: &i32, spec: &FormatSpec) -> Result; /// Write a `i64` into this writer. fn write_i64(&mut self, v: &i64, spec: &FormatSpec) -> Result; + /// Write a `i128` into this writer. + fn write_i128(&mut self, v: &i128, spec: &FormatSpec) -> Result; /// Write a `u8` into this writer. fn write_u8(&mut self, v: &u8, spec: &FormatSpec) -> Result; /// Write a `u16` into this writer. @@ -56,6 +58,8 @@ pub trait ScoreWrite { fn write_u32(&mut self, v: &u32, spec: &FormatSpec) -> Result; /// Write a `u64` into this writer. fn write_u64(&mut self, v: &u64, spec: &FormatSpec) -> Result; + /// Write a `u128` into this writer. + fn write_u128(&mut self, v: &u128, spec: &FormatSpec) -> Result; /// Write a `&str` into this writer. fn write_str(&mut self, v: &str, spec: &FormatSpec) -> Result; } @@ -154,10 +158,18 @@ mod tests { Fragment::Placeholder(Placeholder::new(&-1234i16, FormatSpec::new())), Fragment::Placeholder(Placeholder::new(&-123456i32, FormatSpec::new())), Fragment::Placeholder(Placeholder::new(&-1200000000000000000i64, FormatSpec::new())), + Fragment::Placeholder(Placeholder::new( + &-128000000000000000000000000000000000000i128, + FormatSpec::new(), + )), Fragment::Placeholder(Placeholder::new(&123u8, FormatSpec::new())), Fragment::Placeholder(Placeholder::new(&1234u16, FormatSpec::new())), Fragment::Placeholder(Placeholder::new(&123456u32, FormatSpec::new())), Fragment::Placeholder(Placeholder::new(&1200000000000000000u64, FormatSpec::new())), + Fragment::Placeholder(Placeholder::new( + &128000000000000000000000000000000000000u128, + FormatSpec::new(), + )), Fragment::Literal("_string"), ]; let args = Arguments(&fragments); @@ -165,7 +177,7 @@ mod tests { let result = ScoreDebug::fmt(&args, &mut w, &FormatSpec::new()); assert!(result == Ok(())); assert!( - w.get() == "test_true123.4432.2-100-1234-123456-120000000000000000012312341234561200000000000000000_string" + w.get() == "test_true123.4432.2-100-1234-123456-1200000000000000000-12800000000000000000000000000000000000012312341234561200000000000000000128000000000000000000000000000000000000_string" ) } @@ -195,16 +207,24 @@ mod tests { Fragment::Placeholder(Placeholder::new(&-1234i16, FormatSpec::new())), Fragment::Placeholder(Placeholder::new(&-123456i32, FormatSpec::new())), Fragment::Placeholder(Placeholder::new(&-1200000000000000000i64, FormatSpec::new())), + Fragment::Placeholder(Placeholder::new( + &-128000000000000000000000000000000000000i128, + FormatSpec::new(), + )), Fragment::Placeholder(Placeholder::new(&123u8, FormatSpec::new())), Fragment::Placeholder(Placeholder::new(&1234u16, FormatSpec::new())), Fragment::Placeholder(Placeholder::new(&123456u32, FormatSpec::new())), Fragment::Placeholder(Placeholder::new(&1200000000000000000u64, FormatSpec::new())), + Fragment::Placeholder(Placeholder::new( + &128000000000000000000000000000000000000u128, + FormatSpec::new(), + )), Fragment::Placeholder(Placeholder::new(&"test", FormatSpec::new())), ]; let args = Arguments(&fragments); assert!(write(&mut w, args) == Ok(())); - let exp_pattern = "true123.4432.2-100-1234-123456-120000000000000000012312341234561200000000000000000test"; + let exp_pattern = "true123.4432.2-100-1234-123456-1200000000000000000-12800000000000000000000000000000000000012312341234561200000000000000000128000000000000000000000000000000000000test"; assert_eq!(w.get(), exp_pattern); } diff --git a/src/log/score_log_fmt/fmt_impl.rs b/src/log/score_log_fmt/fmt_impl.rs index a917c93522..8ebd5aa415 100644 --- a/src/log/score_log_fmt/fmt_impl.rs +++ b/src/log/score_log_fmt/fmt_impl.rs @@ -35,10 +35,12 @@ impl_debug_for_t!(i8, write_i8); impl_debug_for_t!(i16, write_i16); impl_debug_for_t!(i32, write_i32); impl_debug_for_t!(i64, write_i64); +impl_debug_for_t!(i128, write_i128); impl_debug_for_t!(u8, write_u8); impl_debug_for_t!(u16, write_u16); impl_debug_for_t!(u32, write_u32); impl_debug_for_t!(u64, write_u64); +impl_debug_for_t!(u128, write_u128); impl ScoreDebug for () { fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { @@ -86,6 +88,13 @@ impl ScoreDebug for std::string::FromUtf8Error { } } +impl ScoreDebug for core::time::Duration { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + f.write_f64(&self.as_secs_f64(), spec)?; + f.write_str("s", spec) + } +} + macro_rules! impl_debug_for_t_casted { ($ti:ty, $to:ty, $fn:ident) => { impl ScoreDebug for $ti { @@ -272,6 +281,11 @@ mod tests { common_test_debug(-1200000000000000000i64); } + #[test] + fn test_i128_debug() { + common_test_debug(-128000000000000000000000000000000000000i128); + } + #[test] fn test_u8_debug() { common_test_debug(123u8); @@ -292,6 +306,11 @@ mod tests { common_test_debug(1200000000000000000u64); } + #[test] + fn test_u128_debug() { + common_test_debug(128000000000000000000000000000000000000u128); + } + #[test] fn test_unit_debug() { common_test_debug(()); @@ -376,6 +395,11 @@ mod tests { common_test_debug(Box::new(432.1)); } + #[test] + fn test_duration_debug() { + common_test_debug(core::time::Duration::new(123, 456789)); + } + #[test] fn test_hashmap_debug() { common_test_debug(std::collections::HashMap::from([("x", 123), ("y", 321), ("z", 444)])); diff --git a/src/log/score_log_fmt/fmt_impl_qm.rs b/src/log/score_log_fmt/fmt_impl_qm.rs index d883ca0a21..b7ddded700 100644 --- a/src/log/score_log_fmt/fmt_impl_qm.rs +++ b/src/log/score_log_fmt/fmt_impl_qm.rs @@ -15,6 +15,7 @@ use crate::fmt::{Result, ScoreDebug, Writer}; use crate::fmt_spec::FormatSpec; +use core::net::AddrParseError; use std::path::{Path, PathBuf}; // TODO: replace with `core::char::MAX_LEN_UTF8` once stable. @@ -51,6 +52,12 @@ impl ScoreDebug for PathBuf { } } +impl ScoreDebug for AddrParseError { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + f.write_str(&format!("{:?}", self), spec) + } +} + #[cfg(test)] mod tests { use crate::test_utils::common_test_debug; @@ -65,4 +72,11 @@ mod tests { fn test_pathbuf_debug() { common_test_debug(PathBuf::from("/tmp/test_path")); } + + #[test] + fn test_addr_parse_error_debug() { + let a1 = "invalid address"; + let a2: Result = a1.parse(); + common_test_debug(a2.unwrap_err()); + } } diff --git a/src/log/score_log_fmt/test_utils.rs b/src/log/score_log_fmt/test_utils.rs index efd6adefd0..0420998b0d 100644 --- a/src/log/score_log_fmt/test_utils.rs +++ b/src/log/score_log_fmt/test_utils.rs @@ -65,6 +65,10 @@ impl ScoreWrite for StringWriter { Ok(write!(self.buf, "{}", v)?) } + fn write_i128(&mut self, v: &i128, _spec: &FormatSpec) -> Result { + Ok(write!(self.buf, "{}", v)?) + } + fn write_u8(&mut self, v: &u8, _spec: &FormatSpec) -> Result { Ok(write!(self.buf, "{}", v)?) } @@ -81,6 +85,10 @@ impl ScoreWrite for StringWriter { Ok(write!(self.buf, "{}", v)?) } + fn write_u128(&mut self, v: &u128, _spec: &FormatSpec) -> Result { + Ok(write!(self.buf, "{}", v)?) + } + fn write_str(&mut self, v: &str, _spec: &FormatSpec) -> Result { Ok(write!(self.buf, "{}", v)?) } diff --git a/src/log/score_log_fmt_macro/tests/utils/mod.rs b/src/log/score_log_fmt_macro/tests/utils/mod.rs index e042aa7753..cbf22518d8 100644 --- a/src/log/score_log_fmt_macro/tests/utils/mod.rs +++ b/src/log/score_log_fmt_macro/tests/utils/mod.rs @@ -59,6 +59,10 @@ impl ScoreWrite for StringWriter { write!(self.buf, "{}", v).map_err(|_| Error) } + fn write_i128(&mut self, v: &i128, _spec: &FormatSpec) -> Result { + write!(self.buf, "{}", v).map_err(|_| Error) + } + fn write_u8(&mut self, v: &u8, _spec: &FormatSpec) -> Result { write!(self.buf, "{}", v).map_err(|_| Error) } @@ -75,6 +79,10 @@ impl ScoreWrite for StringWriter { write!(self.buf, "{}", v).map_err(|_| Error) } + fn write_u128(&mut self, v: &u128, _spec: &FormatSpec) -> Result { + write!(self.buf, "{}", v).map_err(|_| Error) + } + fn write_str(&mut self, v: &str, _spec: &FormatSpec) -> Result { write!(self.buf, "{}", v).map_err(|_| Error) } diff --git a/src/log/stdout_logger/lib.rs b/src/log/stdout_logger/lib.rs index 174a90f0a9..05d7ef2653 100644 --- a/src/log/stdout_logger/lib.rs +++ b/src/log/stdout_logger/lib.rs @@ -141,6 +141,10 @@ impl ScoreWrite for FixedBufWriter { write!(self.buf, "{}", v).map_err(|_| Error) } + fn write_i128(&mut self, v: &i128, _spec: &FormatSpec) -> Result { + write!(self.buf, "{}", v).map_err(|_| Error) + } + fn write_u8(&mut self, v: &u8, _spec: &FormatSpec) -> Result { write!(self.buf, "{}", v).map_err(|_| Error) } @@ -157,6 +161,10 @@ impl ScoreWrite for FixedBufWriter { write!(self.buf, "{}", v).map_err(|_| Error) } + fn write_u128(&mut self, v: &u128, _spec: &FormatSpec) -> Result { + write!(self.buf, "{}", v).map_err(|_| Error) + } + fn write_str(&mut self, v: &str, _spec: &FormatSpec) -> Result { write!(self.buf, "{}", v).map_err(|_| Error) } From b62fd1e95a7e6c4ee51b5c3c1420baa079ae5830 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arkadiusz=20J=C4=99drzejewski?= <32277297+arkjedrz@users.noreply.github.com> Date: Tue, 24 Mar 2026 09:57:00 +0100 Subject: [PATCH 47/59] thread: add `pthread`-based threading module (#72) Parametrizable threading module. --- Cargo.toml | 9 + src/pal/BUILD | 35 +++ src/pal/Cargo.toml | 28 ++ src/pal/affinity.rs | 330 ++++++++++++++++++++++++ src/pal/errno.rs | 26 ++ src/pal/lib.rs | 49 ++++ src/thread/BUILD | 34 +++ src/thread/Cargo.toml | 27 ++ src/thread/lib.rs | 20 ++ src/thread/parameters.rs | 211 +++++++++++++++ src/thread/thread.rs | 541 +++++++++++++++++++++++++++++++++++++++ 11 files changed, 1310 insertions(+) create mode 100644 src/pal/BUILD create mode 100644 src/pal/Cargo.toml create mode 100644 src/pal/affinity.rs create mode 100644 src/pal/errno.rs create mode 100644 src/pal/lib.rs create mode 100644 src/thread/BUILD create mode 100644 src/thread/Cargo.toml create mode 100644 src/thread/lib.rs create mode 100644 src/thread/parameters.rs create mode 100644 src/thread/thread.rs diff --git a/Cargo.toml b/Cargo.toml index 8aa01c8dd6..da56e5b3eb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,6 +19,8 @@ default-members = [ "src/containers", "src/sync", "src/elementary", + "src/pal", + "src/thread", "src/log/score_log_fmt_macro", "src/log/stdout_logger", "src/testing_macros", @@ -28,6 +30,8 @@ members = [ "src/containers", "src/sync", "src/elementary", + "src/pal", + "src/thread", "src/log/score_log", "src/log/score_log_fmt", "src/log/score_log_fmt_macro", @@ -44,12 +48,17 @@ license-file = "LICENSE.md" authors = ["S-CORE Contributors"] [workspace.dependencies] +libc = "0.2.177" + +containers = { path = "src/containers" } score_log = { path = "src/log/score_log" } score_log_fmt = { path = "src/log/score_log_fmt" } score_log_fmt_macro = { path = "src/log/score_log_fmt_macro" } stdout_logger = { path = "src/log/stdout_logger" } elementary = { path = "src/elementary" } testing_macros = { path = "src/testing_macros" } +pal = { path = "src/pal" } +thread = { path = "src/thread" } [workspace.lints.clippy] std_instead_of_core = "warn" diff --git a/src/pal/BUILD b/src/pal/BUILD new file mode 100644 index 0000000000..61e41e7553 --- /dev/null +++ b/src/pal/BUILD @@ -0,0 +1,35 @@ +# ******************************************************************************* +# Copyright (c) 2026 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* + +load("@rules_rust//rust:defs.bzl", "rust_library", "rust_test") + +rust_library( + name = "pal", + srcs = glob(["**/*.rs"]), + edition = "2021", + visibility = ["//src:__subpackages__"], + deps = [ + "//src/containers", + "//src/log/score_log", + "@score_crates//:libc", + ], +) + +rust_test( + name = "tests", + crate = "pal", + tags = [ + "unit_tests", + "ut", + ], +) diff --git a/src/pal/Cargo.toml b/src/pal/Cargo.toml new file mode 100644 index 0000000000..b093c5bc83 --- /dev/null +++ b/src/pal/Cargo.toml @@ -0,0 +1,28 @@ +# ******************************************************************************* +# Copyright (c) 2026 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* + +[package] +name = "pal" +description = "Minimal POSIX adaptation layer." +version.workspace = true +authors.workspace = true +readme.workspace = true +edition.workspace = true + +[lib] +path = "lib.rs" + +[dependencies] +libc.workspace = true +containers.workspace = true +score_log.workspace = true diff --git a/src/pal/affinity.rs b/src/pal/affinity.rs new file mode 100644 index 0000000000..3c2210905e --- /dev/null +++ b/src/pal/affinity.rs @@ -0,0 +1,330 @@ +// ******************************************************************************* +// Copyright (c) 2026 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// +// +// SPDX-License-Identifier: Apache-2.0 +// ******************************************************************************* + +//! Affinity handling differs between Linux and QNX. +//! Module ensures similar behavior between both OSes. + +use crate::errno; +use containers::fixed_capacity::FixedCapacityVec; +use score_log::ScoreDebug; + +#[cfg(target_os = "linux")] +use libc::{cpu_set_t, sched_getaffinity, sched_setaffinity}; + +#[cfg(target_os = "nto")] +use libc::{ThreadCtl, _NTO_TCTL_RUNMASK_GET_AND_SET_INHERIT}; + +const MAX_CPU_NUM: usize = 1024; +const CPU_MASK_SIZE: usize = MAX_CPU_NUM / (u8::BITS as usize); + +/// Common CPU set representation. +/// Limited to 1024 CPUs. +#[derive(Clone, Copy, Debug, ScoreDebug, PartialEq, Eq)] +pub struct CpuSet { + mask: [u8; CPU_MASK_SIZE], +} + +impl CpuSet { + /// Create a new CPU set. + pub fn new(affinity: &[usize]) -> Self { + let mask = Self::create_mask(affinity); + Self { mask } + } + + /// Create mask based on provided list. + fn create_mask(affinity: &[usize]) -> [u8; CPU_MASK_SIZE] { + let mut mask = [0u8; _]; + for cpu_id in affinity.iter().copied() { + const MAX_CPU_ID: usize = MAX_CPU_NUM - 1; + assert!( + cpu_id <= MAX_CPU_ID, + "CPU ID provided to affinity exceeds max supported size, provided: {cpu_id}, max: {MAX_CPU_ID}" + ); + + let index = cpu_id / 8; + let offset = cpu_id % 8; + mask[index] |= 1 << offset; + } + + mask + } + + /// Create list based on provided mask. + fn create_list(mask: &[u8; CPU_MASK_SIZE]) -> FixedCapacityVec { + let mut list = FixedCapacityVec::new(MAX_CPU_NUM); + for cpu_id in 0..MAX_CPU_NUM { + let index = cpu_id / 8; + let offset = cpu_id % 8; + + if (mask[index] & (1 << offset)) != 0 { + // Error should not occur, since capacity is matching the mask size. + list.push(cpu_id).expect("failed to push CPU ID to the list"); + } + } + + list + } + + pub fn set(&mut self, affinity: &[usize]) { + self.mask = Self::create_mask(affinity); + } + + pub fn get(&self) -> FixedCapacityVec { + Self::create_list(&self.mask) + } +} + +#[cfg(target_os = "linux")] +impl From for CpuSet { + fn from(value: cpu_set_t) -> Self { + assert!( + core::mem::size_of::() == CPU_MASK_SIZE, + "unsupported native CPU mask size" + ); + + // SAFETY: CPU mask layout and size is ensured. + let mask: [u8; CPU_MASK_SIZE] = unsafe { core::mem::transmute(value) }; + Self { mask } + } +} + +#[cfg(target_os = "linux")] +impl From for cpu_set_t { + fn from(value: CpuSet) -> Self { + assert!( + core::mem::size_of::() == CPU_MASK_SIZE, + "unsupported native CPU mask size" + ); + + // SAFETY: CPU mask layout and size is ensured. + unsafe { core::mem::transmute(value.mask) } + } +} + +/// QNX representation of a CPU set. +/// +/// Number of CPUs is restricted to 1024 - same as for Linux. +/// QNX docs recommend the following: +/// - read the number of CPUs from `_syspage_ptr->num_cpu` +/// - allocate mask fields dynamically +/// +/// Current approach avoids dynamic alloc and aligns the behavior with Linux. +/// +/// Refer to QNX docs for more information: +/// https://www.qnx.com/developers/docs/8.0/com.qnx.doc.neutrino.lib_ref/topic/t/threadctl.html +#[cfg(target_os = "nto")] +#[repr(C)] +#[derive(Clone, Copy)] +struct NtoCpuSet { + // Expected to always be set to `32` - see comment above. + size: i32, + run_mask: [u32; 32], + // Expected to always be zeroed - left unaltered. + inherit_mask: [u32; 32], +} + +#[cfg(target_os = "nto")] +impl NtoCpuSet { + fn new(mask: [u32; 32]) -> Self { + Self { + size: 32, + run_mask: mask, + inherit_mask: [0; 32], + } + } +} + +#[cfg(target_os = "nto")] +impl From for CpuSet { + fn from(value: NtoCpuSet) -> Self { + // SAFETY: CPU mask layout and size is ensured. + let mask = unsafe { core::mem::transmute(value.run_mask) }; + Self { mask } + } +} + +#[cfg(target_os = "nto")] +impl From for NtoCpuSet { + fn from(value: CpuSet) -> Self { + // SAFETY: CPU mask layout and size is ensured. + let run_mask = unsafe { core::mem::transmute(value.mask) }; + Self::new(run_mask) + } +} + +/// Set affinity of a current thread. +pub fn set_affinity(cpu_set: CpuSet) { + #[cfg(target_os = "linux")] + { + let native_cpu_set = cpu_set_t::from(cpu_set); + let cpu_set_size = core::mem::size_of::(); + // SAFETY: + // Native CPU set is properly initialized. + // Pointer is ensured to be valid. + let rc = unsafe { sched_setaffinity(0, cpu_set_size, &native_cpu_set) }; + if rc != 0 { + let errno = errno(); + panic!("sched_setaffinity failed, rc: {rc}, errno: {errno}"); + } + } + + #[cfg(target_os = "nto")] + { + let mut native_cpu_set = NtoCpuSet::from(cpu_set); + // SAFETY: + // Native CPU set is properly initialized. + // `NtoCpuSet` layout must be as expected by `ThreadCtl`. + // Pointer is ensured to be valid. + let rc = unsafe { + ThreadCtl( + _NTO_TCTL_RUNMASK_GET_AND_SET_INHERIT as crate::c_int, + (&mut native_cpu_set as *mut NtoCpuSet).cast(), + ) + }; + if rc != 0 { + let errno = errno(); + panic!("ThreadCtl failed, rc: {rc}, errno: {errno}"); + } + } +} + +/// Get affinity of a current thread. +pub fn get_affinity() -> FixedCapacityVec { + #[cfg(target_os = "linux")] + { + let mut native_cpu_set = core::mem::MaybeUninit::zeroed(); + let cpu_set_size = core::mem::size_of::(); + // SAFETY: + // Provided native CPU set is zeroed, then initialized by a `sched_getaffinity` call. + // Pointer is ensured to be valid. + let rc = unsafe { sched_getaffinity(0, cpu_set_size, native_cpu_set.as_mut_ptr()) }; + if rc != 0 { + let errno = errno(); + panic!("sched_getaffinity failed, rc: {rc}, errno: {errno}"); + } + + // SAFETY: refer to a comment above. + let cpu_set = CpuSet::from(unsafe { native_cpu_set.assume_init() }); + cpu_set.get() + } + + #[cfg(target_os = "nto")] + { + let mut native_cpu_set = NtoCpuSet::new([0; _]); + // SAFETY: + // Native CPU set is properly initialized. + // `NtoCpuSet` layout must be as expected by `ThreadCtl`. + // Pointer is ensured to be valid. + let rc = unsafe { + ThreadCtl( + _NTO_TCTL_RUNMASK_GET_AND_SET_INHERIT as crate::c_int, + (&mut native_cpu_set as *mut NtoCpuSet).cast(), + ) + }; + if rc != 0 { + let errno = errno(); + panic!("ThreadCtl failed, rc: {rc}, errno: {errno}"); + } + + let cpu_set = CpuSet::from(native_cpu_set); + cpu_set.get() + } +} + +#[cfg(test)] +mod tests { + use crate::affinity::{get_affinity, set_affinity, CpuSet, MAX_CPU_NUM}; + use std::sync::mpsc::channel; + + #[test] + fn cpu_set_new_empty_succeeds() { + let cpu_set = CpuSet::new(&[]); + assert!(cpu_set.mask.iter().all(|x| *x == 0)); + } + + #[test] + fn cpu_set_new_some_succeeds() { + let cpu_set = CpuSet::new(&[0, 123, 1023]); + let mut data_vec = cpu_set.mask.to_vec(); + + // Test removes from `Vec`, start from the end. + assert_eq!(data_vec.remove(127), 0x80); + assert_eq!(data_vec.remove(15), 0x08); + assert_eq!(data_vec.remove(0), 0x01); + } + + #[test] + fn cpu_set_new_full_succeeds() { + let all_ids: Vec<_> = (0..MAX_CPU_NUM).collect(); + let cpu_set = CpuSet::new(&all_ids); + assert!(cpu_set.mask.iter().all(|x| *x == 0xFF)); + } + + #[test] + #[should_panic(expected = "CPU ID provided to affinity exceeds max supported size, provided: 1024, max: 1023")] + fn cpu_set_new_out_of_range() { + let _ = CpuSet::new(&[0, 123, 1023, 1024]); + } + + #[test] + fn cpu_set_set_succeeds() { + let mut cpu_set = CpuSet::new(&[]); + cpu_set.set(&[0, 123, 1023]); + let mut data_vec = cpu_set.mask.to_vec(); + + // Test removes from `Vec`, start from the end. + assert_eq!(data_vec.remove(127), 0x80); + assert_eq!(data_vec.remove(15), 0x08); + assert_eq!(data_vec.remove(0), 0x01); + } + + #[test] + #[should_panic(expected = "CPU ID provided to affinity exceeds max supported size, provided: 1024, max: 1023")] + fn cpu_set_set_out_of_range() { + let mut cpu_set = CpuSet::new(&[]); + cpu_set.set(&[0, 123, 1023, 1024]); + } + + #[test] + fn cpu_set_get_succeeds() { + let exp = vec![0, 123, 1023]; + let cpu_set = CpuSet::new(&exp); + let got = cpu_set.get(); + assert_eq!(exp, got.iter().copied().collect::>()); + } + + #[test] + fn set_affinity_succeeds() { + let exp_affinity = vec![0]; + let cpu_set = CpuSet::new(&exp_affinity); + let (tx, rx) = channel(); + let join_handle = std::thread::spawn(move || { + set_affinity(cpu_set); + tx.send(get_affinity()).unwrap(); + }); + join_handle.join().unwrap(); + + assert_eq!(rx.recv().unwrap().iter().copied().collect::>(), exp_affinity); + } + + #[test] + fn set_affinity_out_of_range() { + // Assuming test is not running on a 1000-core machine, still within valid CPU mask. + let cpu_set = CpuSet::new(&[1000]); + let join_handle = std::thread::spawn(move || { + set_affinity(cpu_set); + }); + let result = join_handle.join(); + assert!(result.is_err()); + } +} diff --git a/src/pal/errno.rs b/src/pal/errno.rs new file mode 100644 index 0000000000..2de557b46c --- /dev/null +++ b/src/pal/errno.rs @@ -0,0 +1,26 @@ +// ******************************************************************************* +// Copyright (c) 2026 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// +// +// SPDX-License-Identifier: Apache-2.0 +// ******************************************************************************* + +//! Unified `errno` access. + +#[cfg(target_os = "linux")] +use libc::__errno_location as errno_ptr; + +#[cfg(target_os = "nto")] +use libc::__get_errno_ptr as errno_ptr; + +/// Current errno value. +pub fn errno() -> crate::c_int { + // SAFETY: `errno_ptr` returns a pointer to a thread-local variable. + unsafe { *errno_ptr() } +} diff --git a/src/pal/lib.rs b/src/pal/lib.rs new file mode 100644 index 0000000000..e26151818e --- /dev/null +++ b/src/pal/lib.rs @@ -0,0 +1,49 @@ +// ******************************************************************************* +// Copyright (c) 2026 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// +// +// SPDX-License-Identifier: Apache-2.0 +// ******************************************************************************* + +//! Minimal POSIX adaptation layer. + +mod affinity; +mod errno; + +pub use affinity::{get_affinity, set_affinity, CpuSet}; +pub use errno::errno; + +pub use libc::{ + c_int, c_ulong, c_void, pid_t, pthread_attr_destroy, pthread_attr_getstacksize, pthread_attr_init, + pthread_attr_setstacksize, pthread_attr_t, pthread_create, pthread_getschedparam, pthread_join, pthread_self, + pthread_setschedparam, pthread_t, sched_get_priority_max, sched_get_priority_min, sched_param, SCHED_FIFO, + SCHED_OTHER, SCHED_RR, +}; + +#[cfg(target_os = "linux")] +pub use libc::{ + pthread_attr_getinheritsched, pthread_attr_getschedparam, pthread_attr_getschedpolicy, + pthread_attr_setinheritsched, pthread_attr_setschedparam, pthread_attr_setschedpolicy, PTHREAD_EXPLICIT_SCHED, + PTHREAD_INHERIT_SCHED, +}; + +#[cfg(target_os = "nto")] +pub const PTHREAD_INHERIT_SCHED: c_int = 0; +#[cfg(target_os = "nto")] +pub const PTHREAD_EXPLICIT_SCHED: c_int = 1; + +#[cfg(target_os = "nto")] +extern "C" { + pub fn pthread_attr_getinheritsched(attr: *const pthread_attr_t, inheritsched: *mut c_int) -> c_int; + pub fn pthread_attr_setinheritsched(attr: *mut pthread_attr_t, inheritsched: c_int) -> c_int; + pub fn pthread_attr_getschedparam(attr: *const pthread_attr_t, param: *mut sched_param) -> c_int; + pub fn pthread_attr_setschedparam(attr: *mut pthread_attr_t, param: *const sched_param) -> c_int; + pub fn pthread_attr_getschedpolicy(attr: *const pthread_attr_t, policy: *mut c_int) -> c_int; + pub fn pthread_attr_setschedpolicy(attr: *mut pthread_attr_t, policy: c_int) -> c_int; +} diff --git a/src/thread/BUILD b/src/thread/BUILD new file mode 100644 index 0000000000..0b2b958cb2 --- /dev/null +++ b/src/thread/BUILD @@ -0,0 +1,34 @@ +# ******************************************************************************* +# Copyright (c) 2026 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* + +load("@rules_rust//rust:defs.bzl", "rust_library", "rust_test") + +rust_library( + name = "thread", + srcs = glob(["**/*.rs"]), + edition = "2021", + visibility = ["//visibility:public"], + deps = [ + "//src/log/score_log", + "//src/pal", + ], +) + +rust_test( + name = "tests", + crate = "thread", + tags = [ + "unit_tests", + "ut", + ], +) diff --git a/src/thread/Cargo.toml b/src/thread/Cargo.toml new file mode 100644 index 0000000000..8013db41bf --- /dev/null +++ b/src/thread/Cargo.toml @@ -0,0 +1,27 @@ +# ******************************************************************************* +# Copyright (c) 2026 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* + +[package] +name = "thread" +description = "`pthread`-based parametrizable threading module." +version.workspace = true +authors.workspace = true +readme.workspace = true +edition.workspace = true + +[lib] +path = "lib.rs" + +[dependencies] +pal.workspace = true +score_log.workspace = true diff --git a/src/thread/lib.rs b/src/thread/lib.rs new file mode 100644 index 0000000000..aebd4f2e05 --- /dev/null +++ b/src/thread/lib.rs @@ -0,0 +1,20 @@ +// ******************************************************************************* +// Copyright (c) 2026 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// +// +// SPDX-License-Identifier: Apache-2.0 +// ******************************************************************************* + +//! `pthread`-based parametrizable threading module. + +mod parameters; +mod thread; + +pub use parameters::{SchedulerParameters, SchedulerPolicy, ThreadParameters}; +pub use thread::{spawn, JoinHandle, Result}; diff --git a/src/thread/parameters.rs b/src/thread/parameters.rs new file mode 100644 index 0000000000..ff86f2ca90 --- /dev/null +++ b/src/thread/parameters.rs @@ -0,0 +1,211 @@ +// ******************************************************************************* +// Copyright (c) 2026 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// +// +// SPDX-License-Identifier: Apache-2.0 +// ******************************************************************************* + +use pal::CpuSet; +use score_log::ScoreDebug; + +/// Scheduler policy. +#[repr(i32)] +#[derive(Clone, Copy, Debug, ScoreDebug, PartialEq, Eq)] +pub enum SchedulerPolicy { + Other = pal::SCHED_OTHER, + Fifo = pal::SCHED_FIFO, + RoundRobin = pal::SCHED_RR, +} + +impl SchedulerPolicy { + /// Get min thread priority for this policy. + pub fn priority_min(&self) -> i32 { + let policy_native = *self as i32; + // SAFETY: + // Native policy value is ensured. + // Operation is non-fallible. + unsafe { pal::sched_get_priority_min(policy_native) } + } + + /// Get max thread priority for this policy. + pub fn priority_max(&self) -> i32 { + let policy_native = *self as i32; + // SAFETY: + // Native policy value is ensured. + // Operation is non-fallible. + unsafe { pal::sched_get_priority_max(policy_native) } + } +} + +/// Indicates that provided scheduler policy is unknown or unsupported. +#[derive(Clone, Copy, Default, Debug)] +pub struct UnknownSchedulerPolicy; + +impl core::fmt::Display for UnknownSchedulerPolicy { + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + write!(f, "unknown or unsupported scheduler policy") + } +} + +impl score_log::fmt::ScoreDebug for UnknownSchedulerPolicy { + fn fmt(&self, f: score_log::fmt::Writer, _spec: &score_log::fmt::FormatSpec) -> score_log::fmt::Result { + score_log::fmt::score_write!(f, "unknown or unsupported scheduler policy") + } +} + +impl core::error::Error for UnknownSchedulerPolicy {} + +impl TryFrom for SchedulerPolicy { + type Error = UnknownSchedulerPolicy; + + fn try_from(value: i32) -> Result { + match value { + pal::SCHED_OTHER => Ok(SchedulerPolicy::Other), + pal::SCHED_FIFO => Ok(SchedulerPolicy::Fifo), + pal::SCHED_RR => Ok(SchedulerPolicy::RoundRobin), + _ => Err(UnknownSchedulerPolicy), + } + } +} + +/// Scheduler parameters. +#[derive(Clone, Copy, Debug, ScoreDebug, PartialEq, Eq)] +pub struct SchedulerParameters { + policy: SchedulerPolicy, + priority: i32, +} + +impl SchedulerParameters { + /// Create a new [`SchedulerParameters`]. + /// + /// # Panics + /// + /// Priority must be in allowed range for the scheduler policy. + pub fn new(policy: SchedulerPolicy, priority: i32) -> Self { + let allowed_priority_range = policy.priority_min()..=policy.priority_max(); + if !allowed_priority_range.contains(&priority) { + panic!("priority is not in allowed range for the scheduler policy") + } + + Self { policy, priority } + } + + /// Scheduler policy. + pub fn policy(&self) -> SchedulerPolicy { + self.policy + } + + /// Thread priority. + pub fn priority(&self) -> i32 { + self.priority + } +} + +/// Thread parameters. +#[derive(Clone, Default, Debug, ScoreDebug, PartialEq, Eq)] +pub struct ThreadParameters { + pub(crate) scheduler_parameters: Option, + pub(crate) affinity: Option, + pub(crate) stack_size: Option, +} + +impl ThreadParameters { + /// Create a new [`ThreadParameters`] containing default values. + pub fn new() -> Self { + Self::default() + } + + /// Scheduler parameters, including scheduler policy and thread priority. + pub fn scheduler_parameters(mut self, scheduler_parameters: SchedulerParameters) -> Self { + self.scheduler_parameters = Some(scheduler_parameters); + self + } + + /// Set thread affinity - array of CPU core IDs that the thread can run on. + pub fn affinity(mut self, affinity: &[usize]) -> Self { + self.affinity = Some(CpuSet::new(affinity)); + self + } + + /// Set stack size. + pub fn stack_size(mut self, stack_size: usize) -> Self { + self.stack_size = Some(stack_size); + self + } +} + +#[cfg(all(test, not(miri)))] +mod tests { + use crate::parameters::{SchedulerParameters, SchedulerPolicy}; + use crate::ThreadParameters; + use pal::CpuSet; + + #[test] + fn scheduler_policy_min_max_priority() { + let policy = SchedulerPolicy::Fifo; + assert_eq!(policy.priority_min(), 1); + assert_eq!(policy.priority_max(), 99); + } + + #[test] + fn scheduler_policy_from_i32_succeeds() { + let policy_as_int = SchedulerPolicy::Other as i32; + let policy = SchedulerPolicy::try_from(policy_as_int); + assert!(policy.is_ok_and(|p| p == SchedulerPolicy::Other)); + } + + #[test] + fn scheduler_policy_from_i32_unknown() { + let result = SchedulerPolicy::try_from(123); + assert!(result.is_err()) + } + + #[test] + fn scheduler_parameters_new_succeeds() { + let policy = SchedulerPolicy::Fifo; + let priority = 40; + let params = SchedulerParameters::new(policy, priority); + assert_eq!(params.policy(), policy); + assert_eq!(params.priority(), priority); + } + + #[test] + #[should_panic(expected = "priority is not in allowed range for the scheduler policy")] + fn scheduler_parameters_new_priority_out_of_range() { + let policy = SchedulerPolicy::Other; + let priority = 1; + let _ = SchedulerParameters::new(policy, priority); + } + + #[test] + fn thread_parameters_new_succeeds() { + let new_tp = ThreadParameters::new(); + let def_tp = ThreadParameters::default(); + + assert_eq!(new_tp.scheduler_parameters, None); + assert_eq!(new_tp.affinity, None); + assert_eq!(new_tp.stack_size, None); + assert_eq!(new_tp, def_tp); + } + + #[test] + fn thread_parameters_parameters_succeeds() { + let exp_scheduler_parameters = SchedulerParameters::new(SchedulerPolicy::Fifo, 50); + let exp_affinity = vec![1, 2, 3]; + let exp_stack_size = 1024 * 1024; + let thread_parameters = ThreadParameters::new() + .scheduler_parameters(exp_scheduler_parameters) + .affinity(&exp_affinity) + .stack_size(exp_stack_size); + + assert_eq!(thread_parameters.scheduler_parameters, Some(exp_scheduler_parameters)); + assert_eq!(thread_parameters.affinity, Some(CpuSet::new(&exp_affinity))); + assert_eq!(thread_parameters.stack_size, Some(exp_stack_size)); + } +} diff --git a/src/thread/thread.rs b/src/thread/thread.rs new file mode 100644 index 0000000000..cc9754be3f --- /dev/null +++ b/src/thread/thread.rs @@ -0,0 +1,541 @@ +// ******************************************************************************* +// Copyright (c) 2026 Contributors to the Eclipse Foundation +// +// See the NOTICE file(s) distributed with this work for additional +// information regarding copyright ownership. +// +// This program and the accompanying materials are made available under the +// terms of the Apache License Version 2.0 which is available at +// +// +// SPDX-License-Identifier: Apache-2.0 +// ******************************************************************************* + +use crate::parameters::{SchedulerPolicy, ThreadParameters}; +use core::cell::OnceCell; +use core::mem::MaybeUninit; +use core::ptr::null_mut; +use core::sync::atomic::{fence, Ordering}; +use std::panic::{catch_unwind, AssertUnwindSafe}; +use std::sync::Arc; + +/// `pthread` attributes object. +struct Attributes { + attr_handle: pal::pthread_attr_t, +} + +impl Attributes { + /// Create `pthread` attributes object. + fn new() -> Self { + let mut attr = MaybeUninit::uninit(); + // SAFETY: initializes `attr`, pointer is ensured to be valid. + let rc = unsafe { pal::pthread_attr_init(attr.as_mut_ptr()) }; + assert!(rc == 0, "pthread_attr_init failed, rc: {rc}"); + + // SAFETY: `attr` is initialized by a `pthread_attr_init` call. + let attr_handle = unsafe { attr.assume_init() }; + Self { attr_handle } + } + + /// Pointer to mutable internal handle. + fn ptr(&mut self) -> *mut pal::pthread_attr_t { + // SAFETY: + // Handle is initialized during object construction. + // Pointer is ensured to be valid. + &mut self.attr_handle + } + + /// Set inherit scheduling attributes. + fn inherit_scheduling_attributes(&mut self, inherit: bool) { + let inherit_native = if inherit { + pal::PTHREAD_INHERIT_SCHED + } else { + pal::PTHREAD_EXPLICIT_SCHED + }; + + // SAFETY: value is ensured to be valid. + let rc = unsafe { pal::pthread_attr_setinheritsched(self.ptr(), inherit_native) }; + assert!(rc == 0, "pthread_attr_setinheritsched failed, rc: {rc}"); + } + + /// Set thread priority. + fn priority(&mut self, priority: i32) { + let mut params = MaybeUninit::uninit(); + // Create `sched_param` struct. + // SAFETY: initializes `params`, pointer is ensured to be valid. + let rc = unsafe { pal::pthread_attr_getschedparam(self.ptr(), params.as_mut_ptr()) }; + assert!(rc == 0, "pthread_attr_getschedparam failed, rc: {rc}"); + + // Store and modify `sched_param` struct. + // SAFETY: `params` is initialized by a `pthread_attr_getschedparam` call. + let mut params = unsafe { params.assume_init() }; + params.sched_priority = priority; + + // Set modified `sched_param`. + // SAFETY: + // `params` is initialized by a `pthread_attr_getschedparam` call. + // Pointer is ensured to be valid. + let rc = unsafe { pal::pthread_attr_setschedparam(self.ptr(), ¶ms) }; + assert!(rc == 0, "pthread_attr_setschedparam failed, rc: {rc}"); + } + + /// Set scheduler policy. + fn scheduler_policy(&mut self, scheduler_policy: SchedulerPolicy) { + let policy = scheduler_policy as i32; + // SAFETY: `policy` value is ensured to be valid. + let rc = unsafe { pal::pthread_attr_setschedpolicy(self.ptr(), policy) }; + assert!(rc == 0, "pthread_attr_setschedpolicy failed, rc: {rc}"); + } + + /// Set stack size. + fn stack_size(&mut self, stack_size: usize) { + // SAFETY: `stack_size` type is valid, invalid value will cause abort. + let rc = unsafe { pal::pthread_attr_setstacksize(self.ptr(), stack_size) }; + assert!(rc == 0, "pthread_attr_setstacksize failed, rc: {rc}"); + } + + /// Get reference to inner handle. + fn get(&self) -> &pal::pthread_attr_t { + &self.attr_handle + } +} + +impl Drop for Attributes { + fn drop(&mut self) { + // SAFETY: after drop handle is no longer needed and can be destructed. + let rc = unsafe { pal::pthread_attr_destroy(self.ptr()) }; + debug_assert!(rc == 0, "pthread_attr_destroy failed, rc: {rc}"); + } +} + +struct ThreadData { + f: F, +} + +/// `pthread` thread object. +struct Thread { + thread_handle: pal::pthread_t, +} + +impl Thread { + fn new(attributes: Attributes, f: F) -> Self + where + F: FnOnce() + Send + 'static, + { + let mut thread_handle = MaybeUninit::uninit(); + + // SAFETY: + // It is safe to use `extern "C"`. + // Provided callback is a wrapper containing panic handling. + extern "C" fn start_routine(data: *mut pal::c_void) -> *mut pal::c_void { + // SAFETY: + // `data` is ensured to be valid - it is boxed right before `pthread_create`. + // On `pthread_create` failure it is deallocated during error handling. + let data: Box> = unsafe { Box::from_raw(data.cast()) }; + (data.f)(); + null_mut() + } + + let data = Box::into_raw(Box::new(ThreadData { f })); + // SAFETY: + // Initializes `thread_handle`. + // Validity of all pointers is ensured. + let rc = unsafe { + pal::pthread_create( + thread_handle.as_mut_ptr(), + attributes.get(), + start_routine::, + data.cast(), + ) + }; + if rc != 0 { + // Reobtain and drop `ThreadData`. + // SAFETY: + // `data` is ensured to be valid - it is boxed right before `pthread_create`. + // On `pthread_create` success it is deallocated after `start_routine` finishes. + let _ = unsafe { Box::from_raw(data) }; + panic!("pthread_create failed, rc: {rc}"); + } + + Self { + // SAFETY: `thread_handle` is initialized by a `pthread_create` call. + thread_handle: unsafe { thread_handle.assume_init() }, + } + } +} + +/// A specialized [`Result`] type for threads. +/// Indicates the manner in which a thread exited. +pub type Result = core::result::Result>; + +/// Packet containing thread result. +/// +/// No need for a mutex because: +/// - state is set during thread. +/// - the caller will never read this packet until the thread has exited. +struct Packet(OnceCell>); + +impl Packet { + fn new() -> Self { + Self(OnceCell::new()) + } +} + +// SAFETY: +// Due to the usage of `OnceCell` manual implementation of `Sync` is required. +// The caller will never read this packet until the thread has exited. +// This is based on `std::thread` implementation. +unsafe impl Sync for Packet {} + +impl Drop for Packet { + fn drop(&mut self) { + // Make sure that panic was handled. + if let Some(result) = self.0.get() { + if result.is_err() { + panic!("unhandled panic occurred in a thread") + } + } + } +} + +/// Inner representation for [`JoinHandle`]. +pub struct JoinInner { + thread: Thread, + packet: Arc>, +} + +impl JoinInner { + fn new(thread: Thread, packet: Arc>) -> Self { + Self { thread, packet } + } + + /// Wait for the associated thread to finish. + /// + /// This function will return immediately if the associated thread has already finished. + pub fn join(mut self) -> Result { + // Perform native join. + self.join_internal(); + + // Obtain `packet` from `Arc`. + // This can only be done once thread finished. + fence(Ordering::Acquire); + let packet = Arc::get_mut(&mut self.packet).expect("thread not yet finished"); + let result = packet.0.take().expect("thread result uninitialized"); + + // Prevent destructor from running - thread is already joined. + core::mem::forget(self); + + result + } + + fn join_internal(&self) { + // Perform join. + let thread_handle = self.thread.thread_handle; + // SAFETY: `thread_handle` is ensured to be valid. + let rc = unsafe { pal::pthread_join(thread_handle, null_mut()) }; + assert!(rc == 0, "pthread_join failed, rc: {rc}"); + } +} + +impl Drop for JoinInner { + fn drop(&mut self) { + self.join_internal(); + } +} + +/// An owned permission to join on a thread (block on its termination). +/// +/// Thread is joined on [`Self::join`] and [`drop`] (if still joinable). +pub struct JoinHandle(JoinInner); + +impl JoinHandle { + /// Wait for the associated thread to finish. + /// + /// This function will return immediately if the associated thread has already finished. + pub fn join(self) -> Result { + self.0.join() + } +} + +/// Spawn a new thread, returning [`JoinHandle`] for it. +pub fn spawn(f: F, thread_parameters: ThreadParameters) -> JoinHandle +where + F: FnOnce() -> T, + F: Send + 'static, + T: Send + 'static, +{ + // Construct attributes based on provided parameters. + let mut attributes = Attributes::new(); + + if let Some(scheduler_parameters) = thread_parameters.scheduler_parameters { + attributes.inherit_scheduling_attributes(false); + attributes.scheduler_policy(scheduler_parameters.policy()); + attributes.priority(scheduler_parameters.priority()); + } + if let Some(stack_size) = thread_parameters.stack_size { + attributes.stack_size(stack_size); + } + + // Construct a wrapper containing affinity configuration and panic handling. + let packet = Arc::new(Packet::new()); + let packet_clone = packet.clone(); + let thread_wrapper = move || { + let result = catch_unwind(AssertUnwindSafe(|| { + // Set affinity. + if let Some(cpu_set) = thread_parameters.affinity { + pal::set_affinity(cpu_set); + } + + // Execute function. + f() + })); + + // Set thread result. + if packet_clone.0.set(result).is_err() { + panic!("thread result is already set"); + } + }; + + // Create a `Thread` and place it in a `JoinHandle`. + let thread = Thread::new(attributes, thread_wrapper); + JoinHandle(JoinInner::new(thread, packet)) +} + +#[cfg(all(test, not(miri)))] +mod tests { + use crate::parameters::{SchedulerParameters, SchedulerPolicy, ThreadParameters}; + use crate::thread::{spawn, Attributes}; + use core::mem::MaybeUninit; + use pal::get_affinity; + use std::sync::mpsc::channel; + + fn attr_inherit_scheduling_attributes(attrs: &Attributes) -> bool { + let mut native = MaybeUninit::uninit(); + let rc = unsafe { pal::pthread_attr_getinheritsched(attrs.get(), native.as_mut_ptr()) }; + assert!(rc == 0, "pthread_attr_getinheritsched failed, rc: {rc}"); + + match unsafe { native.assume_init() } { + pal::PTHREAD_INHERIT_SCHED => true, + pal::PTHREAD_EXPLICIT_SCHED => false, + _ => panic!("unknown inherit scheduling attributes value"), + } + } + + fn attr_priority(attrs: &Attributes) -> i32 { + let mut param_native = MaybeUninit::uninit(); + let rc = unsafe { pal::pthread_attr_getschedparam(attrs.get(), param_native.as_mut_ptr()) }; + assert!(rc == 0, "pthread_attr_getschedparam failed, rc: {rc}"); + + unsafe { param_native.assume_init().sched_priority } + } + + fn attr_policy(attrs: &Attributes) -> SchedulerPolicy { + let mut policy_native = MaybeUninit::uninit(); + let rc = unsafe { pal::pthread_attr_getschedpolicy(attrs.get(), policy_native.as_mut_ptr()) }; + assert!(rc == 0, "pthread_attr_getschedpolicy failed, rc: {rc}"); + + SchedulerPolicy::try_from(unsafe { policy_native.assume_init() }).unwrap() + } + + fn attr_stack_size(attrs: &Attributes) -> usize { + let mut stack_size = MaybeUninit::uninit(); + let rc = unsafe { pal::pthread_attr_getstacksize(attrs.get(), stack_size.as_mut_ptr()) }; + assert!(rc == 0, "pthread_attr_getstacksize failed, rc: {rc}"); + + unsafe { stack_size.assume_init() } + } + + #[test] + fn attributes_new_succeeds() { + // Also checks `Drop` on exit. + let _ = Attributes::new(); + } + + #[test] + fn attributes_inherit_scheduling_attributes_succeeds() { + let mut attrs = Attributes::new(); + + attrs.inherit_scheduling_attributes(true); + assert!(attr_inherit_scheduling_attributes(&attrs)); + + attrs.inherit_scheduling_attributes(false); + assert!(!attr_inherit_scheduling_attributes(&attrs)); + } + + #[test] + fn attributes_priority_succeeds() { + let mut attrs = Attributes::new(); + + attrs.scheduler_policy(SchedulerPolicy::Fifo); + attrs.priority(50); + assert_eq!(attr_priority(&attrs), 50); + } + + #[test] + #[should_panic(expected = "pthread_attr_setschedparam failed, rc:")] + fn attributes_priority_wrong_scheduler_policy() { + let mut attrs = Attributes::new(); + attrs.priority(50); + } + + #[test] + fn attributes_scheduler_policy_succeeds() { + let mut attrs = Attributes::new(); + + attrs.scheduler_policy(SchedulerPolicy::Fifo); + assert_eq!(attr_policy(&attrs), SchedulerPolicy::Fifo); + } + + #[test] + fn attributes_stack_size_succeeds() { + let mut attrs = Attributes::new(); + + let expected_stack_size = 1024 * 1024; + attrs.stack_size(expected_stack_size); + assert_eq!(attr_stack_size(&attrs), expected_stack_size); + } + + #[test] + #[should_panic(expected = "pthread_attr_setstacksize failed, rc:")] + fn attributes_stack_size_too_small() { + let mut attrs = Attributes::new(); + attrs.stack_size(4 * 1024); + } + + #[test] + fn spawn_joined_succeeds() { + let thread_parameters = ThreadParameters::default(); + let (tx, rx) = channel(); + let join_handle = spawn( + move || { + tx.send(654321).unwrap(); + 123 + }, + thread_parameters, + ); + let result = join_handle.join(); + + assert!(result.is_ok_and(|x| x == 123)); + assert_eq!(rx.recv().unwrap(), 654321) + } + + #[test] + fn spawn_not_joined_succeeds() { + let thread_parameters = ThreadParameters::default(); + let (tx, rx) = channel(); + let _ = spawn( + move || { + tx.send(654321).unwrap(); + }, + thread_parameters, + ); + + assert_eq!(rx.recv().unwrap(), 654321) + } + + #[test] + fn spawn_joined_panics() { + let thread_parameters = ThreadParameters::default(); + let join_handle = spawn( + move || { + panic!("internal panic"); + }, + thread_parameters, + ); + let result = join_handle.join(); + assert!(result.is_err()); + } + + #[test] + #[should_panic(expected = "unhandled panic occurred in a thread")] + fn spawn_not_joined_panics() { + let thread_parameters = ThreadParameters::default(); + let _ = spawn( + move || { + panic!("internal panic"); + }, + thread_parameters, + ); + } + + fn current_sched_params() -> (SchedulerPolicy, i32) { + let thread = unsafe { pal::pthread_self() }; + let mut policy = MaybeUninit::uninit(); + let mut param = MaybeUninit::uninit(); + let rc = unsafe { pal::pthread_getschedparam(thread, policy.as_mut_ptr(), param.as_mut_ptr()) }; + assert!(rc == 0, "pthread_getschedparam failed, rc: {rc}"); + + let policy_native = unsafe { policy.assume_init() }; + let scheduler_policy = match policy_native { + pal::SCHED_OTHER => SchedulerPolicy::Other, + pal::SCHED_FIFO => SchedulerPolicy::Fifo, + pal::SCHED_RR => SchedulerPolicy::RoundRobin, + _ => panic!("unknown scheduler type"), + }; + + let priority = unsafe { param.assume_init().sched_priority }; + + (scheduler_policy, priority) + } + + #[test] + #[ignore = "test requires cap_sys_nice=ep"] + fn spawn_scheduler_params_succeeds() { + let exp_scheduler_parameters = SchedulerParameters::new(SchedulerPolicy::Fifo, 10); + let thread_parameters = ThreadParameters::new().scheduler_parameters(exp_scheduler_parameters); + let (tx, rx) = channel(); + let join_handle = spawn( + move || { + let sched_params = current_sched_params(); + tx.send(sched_params).unwrap(); + }, + thread_parameters, + ); + let result = join_handle.join(); + assert!(result.is_ok()); + + let (scheduler_policy, priority) = rx.recv().unwrap(); + assert_eq!(scheduler_policy, exp_scheduler_parameters.policy()); + assert_eq!(priority, exp_scheduler_parameters.priority()); + } + + #[test] + fn spawn_affinity_succeeds() { + let exp_affinity = vec![0]; + let thread_parameters = ThreadParameters::new().affinity(&exp_affinity); + let (tx, rx) = channel(); + let join_handle = spawn( + move || { + let affinity = get_affinity(); + tx.send(affinity).unwrap(); + }, + thread_parameters, + ); + let result = join_handle.join(); + assert!(result.is_ok()); + + assert_eq!(rx.recv().unwrap().iter().copied().collect::>(), exp_affinity); + } + + #[test] + #[should_panic(expected = "CPU ID provided to affinity exceeds max supported size, provided: 1234, max: 1023")] + fn spawn_affinity_out_of_range() { + let thread_parameters = ThreadParameters::new().affinity(&[1234]); + let _ = spawn(|| {}, thread_parameters); + } + + #[test] + fn spawn_stack_size_succeeds() { + // Check that nothing fails - cannot check stack size from within. + let stack_size = 1024 * 1024; + let thread_parameters = ThreadParameters::new().stack_size(stack_size); + let join_handle = spawn( + || { + // Do nothing. + }, + thread_parameters, + ); + let result = join_handle.join(); + assert!(result.is_ok()); + } +} From fe2ca7cc43a609feda2e7c666da51855aa752742 Mon Sep 17 00:00:00 2001 From: Prabakaran Chinnasamy Date: Tue, 24 Mar 2026 17:56:26 +0530 Subject: [PATCH 48/59] datatype: Remove implementation of write_i128 and write_u128 Removed implementation of write_i128 and write_u128 since C++ logging backend does not support 128-bit datatype. --- examples/log_custom/src/logger.rs | 8 ------- src/log/score_log_fmt/fmt.rs | 24 ++----------------- src/log/score_log_fmt/fmt_impl.rs | 12 ---------- src/log/score_log_fmt/test_utils.rs | 8 ------- .../score_log_fmt_macro/tests/utils/mod.rs | 8 ------- src/log/stdout_logger/lib.rs | 8 ------- 6 files changed, 2 insertions(+), 66 deletions(-) diff --git a/examples/log_custom/src/logger.rs b/examples/log_custom/src/logger.rs index 0d2accd388..57ad0dee45 100644 --- a/examples/log_custom/src/logger.rs +++ b/examples/log_custom/src/logger.rs @@ -58,10 +58,6 @@ impl ScoreWrite for StringWriter { write!(self.buffer, "{}", v).map_err(|_| Error) } - fn write_i128(&mut self, v: &i128, _spec: &FormatSpec) -> FmtResult { - write!(self.buffer, "{}", v).map_err(|_| Error) - } - fn write_u8(&mut self, v: &u8, _spec: &FormatSpec) -> FmtResult { write!(self.buffer, "{}", v).map_err(|_| Error) } @@ -78,10 +74,6 @@ impl ScoreWrite for StringWriter { write!(self.buffer, "{}", v).map_err(|_| Error) } - fn write_u128(&mut self, v: &u128, _spec: &FormatSpec) -> FmtResult { - write!(self.buffer, "{}", v).map_err(|_| Error) - } - fn write_str(&mut self, v: &str, _spec: &FormatSpec) -> FmtResult { write!(self.buffer, "{}", v).map_err(|_| Error) } diff --git a/src/log/score_log_fmt/fmt.rs b/src/log/score_log_fmt/fmt.rs index 4674196808..05ac5aa431 100644 --- a/src/log/score_log_fmt/fmt.rs +++ b/src/log/score_log_fmt/fmt.rs @@ -48,8 +48,6 @@ pub trait ScoreWrite { fn write_i32(&mut self, v: &i32, spec: &FormatSpec) -> Result; /// Write a `i64` into this writer. fn write_i64(&mut self, v: &i64, spec: &FormatSpec) -> Result; - /// Write a `i128` into this writer. - fn write_i128(&mut self, v: &i128, spec: &FormatSpec) -> Result; /// Write a `u8` into this writer. fn write_u8(&mut self, v: &u8, spec: &FormatSpec) -> Result; /// Write a `u16` into this writer. @@ -58,8 +56,6 @@ pub trait ScoreWrite { fn write_u32(&mut self, v: &u32, spec: &FormatSpec) -> Result; /// Write a `u64` into this writer. fn write_u64(&mut self, v: &u64, spec: &FormatSpec) -> Result; - /// Write a `u128` into this writer. - fn write_u128(&mut self, v: &u128, spec: &FormatSpec) -> Result; /// Write a `&str` into this writer. fn write_str(&mut self, v: &str, spec: &FormatSpec) -> Result; } @@ -158,18 +154,10 @@ mod tests { Fragment::Placeholder(Placeholder::new(&-1234i16, FormatSpec::new())), Fragment::Placeholder(Placeholder::new(&-123456i32, FormatSpec::new())), Fragment::Placeholder(Placeholder::new(&-1200000000000000000i64, FormatSpec::new())), - Fragment::Placeholder(Placeholder::new( - &-128000000000000000000000000000000000000i128, - FormatSpec::new(), - )), Fragment::Placeholder(Placeholder::new(&123u8, FormatSpec::new())), Fragment::Placeholder(Placeholder::new(&1234u16, FormatSpec::new())), Fragment::Placeholder(Placeholder::new(&123456u32, FormatSpec::new())), Fragment::Placeholder(Placeholder::new(&1200000000000000000u64, FormatSpec::new())), - Fragment::Placeholder(Placeholder::new( - &128000000000000000000000000000000000000u128, - FormatSpec::new(), - )), Fragment::Literal("_string"), ]; let args = Arguments(&fragments); @@ -177,7 +165,7 @@ mod tests { let result = ScoreDebug::fmt(&args, &mut w, &FormatSpec::new()); assert!(result == Ok(())); assert!( - w.get() == "test_true123.4432.2-100-1234-123456-1200000000000000000-12800000000000000000000000000000000000012312341234561200000000000000000128000000000000000000000000000000000000_string" + w.get() == "test_true123.4432.2-100-1234-123456-120000000000000000012312341234561200000000000000000_string" ) } @@ -207,24 +195,16 @@ mod tests { Fragment::Placeholder(Placeholder::new(&-1234i16, FormatSpec::new())), Fragment::Placeholder(Placeholder::new(&-123456i32, FormatSpec::new())), Fragment::Placeholder(Placeholder::new(&-1200000000000000000i64, FormatSpec::new())), - Fragment::Placeholder(Placeholder::new( - &-128000000000000000000000000000000000000i128, - FormatSpec::new(), - )), Fragment::Placeholder(Placeholder::new(&123u8, FormatSpec::new())), Fragment::Placeholder(Placeholder::new(&1234u16, FormatSpec::new())), Fragment::Placeholder(Placeholder::new(&123456u32, FormatSpec::new())), Fragment::Placeholder(Placeholder::new(&1200000000000000000u64, FormatSpec::new())), - Fragment::Placeholder(Placeholder::new( - &128000000000000000000000000000000000000u128, - FormatSpec::new(), - )), Fragment::Placeholder(Placeholder::new(&"test", FormatSpec::new())), ]; let args = Arguments(&fragments); assert!(write(&mut w, args) == Ok(())); - let exp_pattern = "true123.4432.2-100-1234-123456-1200000000000000000-12800000000000000000000000000000000000012312341234561200000000000000000128000000000000000000000000000000000000test"; + let exp_pattern = "true123.4432.2-100-1234-123456-120000000000000000012312341234561200000000000000000test"; assert_eq!(w.get(), exp_pattern); } diff --git a/src/log/score_log_fmt/fmt_impl.rs b/src/log/score_log_fmt/fmt_impl.rs index 8ebd5aa415..d3b83179cf 100644 --- a/src/log/score_log_fmt/fmt_impl.rs +++ b/src/log/score_log_fmt/fmt_impl.rs @@ -35,12 +35,10 @@ impl_debug_for_t!(i8, write_i8); impl_debug_for_t!(i16, write_i16); impl_debug_for_t!(i32, write_i32); impl_debug_for_t!(i64, write_i64); -impl_debug_for_t!(i128, write_i128); impl_debug_for_t!(u8, write_u8); impl_debug_for_t!(u16, write_u16); impl_debug_for_t!(u32, write_u32); impl_debug_for_t!(u64, write_u64); -impl_debug_for_t!(u128, write_u128); impl ScoreDebug for () { fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { @@ -281,11 +279,6 @@ mod tests { common_test_debug(-1200000000000000000i64); } - #[test] - fn test_i128_debug() { - common_test_debug(-128000000000000000000000000000000000000i128); - } - #[test] fn test_u8_debug() { common_test_debug(123u8); @@ -306,11 +299,6 @@ mod tests { common_test_debug(1200000000000000000u64); } - #[test] - fn test_u128_debug() { - common_test_debug(128000000000000000000000000000000000000u128); - } - #[test] fn test_unit_debug() { common_test_debug(()); diff --git a/src/log/score_log_fmt/test_utils.rs b/src/log/score_log_fmt/test_utils.rs index 0420998b0d..efd6adefd0 100644 --- a/src/log/score_log_fmt/test_utils.rs +++ b/src/log/score_log_fmt/test_utils.rs @@ -65,10 +65,6 @@ impl ScoreWrite for StringWriter { Ok(write!(self.buf, "{}", v)?) } - fn write_i128(&mut self, v: &i128, _spec: &FormatSpec) -> Result { - Ok(write!(self.buf, "{}", v)?) - } - fn write_u8(&mut self, v: &u8, _spec: &FormatSpec) -> Result { Ok(write!(self.buf, "{}", v)?) } @@ -85,10 +81,6 @@ impl ScoreWrite for StringWriter { Ok(write!(self.buf, "{}", v)?) } - fn write_u128(&mut self, v: &u128, _spec: &FormatSpec) -> Result { - Ok(write!(self.buf, "{}", v)?) - } - fn write_str(&mut self, v: &str, _spec: &FormatSpec) -> Result { Ok(write!(self.buf, "{}", v)?) } diff --git a/src/log/score_log_fmt_macro/tests/utils/mod.rs b/src/log/score_log_fmt_macro/tests/utils/mod.rs index cbf22518d8..e042aa7753 100644 --- a/src/log/score_log_fmt_macro/tests/utils/mod.rs +++ b/src/log/score_log_fmt_macro/tests/utils/mod.rs @@ -59,10 +59,6 @@ impl ScoreWrite for StringWriter { write!(self.buf, "{}", v).map_err(|_| Error) } - fn write_i128(&mut self, v: &i128, _spec: &FormatSpec) -> Result { - write!(self.buf, "{}", v).map_err(|_| Error) - } - fn write_u8(&mut self, v: &u8, _spec: &FormatSpec) -> Result { write!(self.buf, "{}", v).map_err(|_| Error) } @@ -79,10 +75,6 @@ impl ScoreWrite for StringWriter { write!(self.buf, "{}", v).map_err(|_| Error) } - fn write_u128(&mut self, v: &u128, _spec: &FormatSpec) -> Result { - write!(self.buf, "{}", v).map_err(|_| Error) - } - fn write_str(&mut self, v: &str, _spec: &FormatSpec) -> Result { write!(self.buf, "{}", v).map_err(|_| Error) } diff --git a/src/log/stdout_logger/lib.rs b/src/log/stdout_logger/lib.rs index 05d7ef2653..174a90f0a9 100644 --- a/src/log/stdout_logger/lib.rs +++ b/src/log/stdout_logger/lib.rs @@ -141,10 +141,6 @@ impl ScoreWrite for FixedBufWriter { write!(self.buf, "{}", v).map_err(|_| Error) } - fn write_i128(&mut self, v: &i128, _spec: &FormatSpec) -> Result { - write!(self.buf, "{}", v).map_err(|_| Error) - } - fn write_u8(&mut self, v: &u8, _spec: &FormatSpec) -> Result { write!(self.buf, "{}", v).map_err(|_| Error) } @@ -161,10 +157,6 @@ impl ScoreWrite for FixedBufWriter { write!(self.buf, "{}", v).map_err(|_| Error) } - fn write_u128(&mut self, v: &u128, _spec: &FormatSpec) -> Result { - write!(self.buf, "{}", v).map_err(|_| Error) - } - fn write_str(&mut self, v: &str, _spec: &FormatSpec) -> Result { write!(self.buf, "{}", v).map_err(|_| Error) } From 7caaf143a2e9d4053ee94d78f677415bd90ddf99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arkadiusz=20J=C4=99drzejewski?= <32277297+arkjedrz@users.noreply.github.com> Date: Thu, 26 Mar 2026 12:27:02 +0100 Subject: [PATCH 49/59] alloc: allow `containers` to use custom allocators (#77) Reworked abstraction to allow usage of custom allocator implementations. --- src/containers/BUILD | 1 + src/containers/Cargo.toml | 3 + src/containers/fixed_capacity/mod.rs | 6 +- src/containers/fixed_capacity/queue.rs | 63 ++++++++--- src/containers/fixed_capacity/string.rs | 100 ++++++++++++++---- src/containers/fixed_capacity/vec.rs | 89 ++++++++++++---- src/containers/generic/queue.rs | 29 ++--- src/containers/generic/string.rs | 33 ++---- src/containers/generic/vec.rs | 30 ++---- src/containers/inline/queue.rs | 6 +- src/containers/inline/string.rs | 7 +- src/containers/inline/vec.rs | 7 +- src/containers/storage/heap.rs | 43 ++++---- src/containers/storage/inline.rs | 36 ++----- src/containers/storage/mod.rs | 42 +++----- src/elementary/allocator_traits.rs | 5 +- ...{global_allocator.rs => heap_allocator.rs} | 31 +++--- src/elementary/lib.rs | 7 +- src/sync/arc_in.rs | 22 ++-- 19 files changed, 331 insertions(+), 229 deletions(-) rename src/elementary/{global_allocator.rs => heap_allocator.rs} (64%) diff --git a/src/containers/BUILD b/src/containers/BUILD index 40d30abe54..af9cb47e95 100644 --- a/src/containers/BUILD +++ b/src/containers/BUILD @@ -18,6 +18,7 @@ rust_library( srcs = glob(["**/*.rs"]), edition = "2021", visibility = ["//visibility:public"], + deps = ["//src/elementary"], ) rust_test( diff --git a/src/containers/Cargo.toml b/src/containers/Cargo.toml index d57d11928a..18a071be66 100644 --- a/src/containers/Cargo.toml +++ b/src/containers/Cargo.toml @@ -21,3 +21,6 @@ license-file = "../../LICENSE.md" [lib] path = "lib.rs" + +[dependencies] +elementary.workspace = true diff --git a/src/containers/fixed_capacity/mod.rs b/src/containers/fixed_capacity/mod.rs index b6c5e18f28..d2690a8b6b 100644 --- a/src/containers/fixed_capacity/mod.rs +++ b/src/containers/fixed_capacity/mod.rs @@ -15,6 +15,6 @@ mod queue; mod string; mod vec; -pub use self::queue::FixedCapacityQueue; -pub use self::string::FixedCapacityString; -pub use self::vec::FixedCapacityVec; +pub use self::queue::{FixedCapacityQueue, FixedCapacityQueueIn}; +pub use self::string::{FixedCapacityString, FixedCapacityStringIn}; +pub use self::vec::{FixedCapacityVec, FixedCapacityVecIn}; diff --git a/src/containers/fixed_capacity/queue.rs b/src/containers/fixed_capacity/queue.rs index 3ac6a10a15..6cd3d5942c 100644 --- a/src/containers/fixed_capacity/queue.rs +++ b/src/containers/fixed_capacity/queue.rs @@ -11,20 +11,20 @@ // SPDX-License-Identifier: Apache-2.0 // ******************************************************************************* -use core::ops; - use crate::generic::queue::GenericQueue; use crate::storage::Heap; +use core::ops; +use elementary::{BasicAllocator, HeapAllocator, GLOBAL_ALLOCATOR}; -/// A fixed-capacity queue. +/// A fixed-capacity queue, using provided allocator. /// /// The queue can hold between 0 and `CAPACITY` elements, and behaves similarly to Rust's `VecDeque`, /// except that it allocates memory immediately on construction, and can't shrink or grow. -pub struct FixedCapacityQueue { - inner: GenericQueue>, +pub struct FixedCapacityQueueIn<'alloc, T, A: BasicAllocator> { + inner: GenericQueue>, } -impl FixedCapacityQueue { +impl<'alloc, T, A: BasicAllocator> FixedCapacityQueueIn<'alloc, T, A> { /// Creates an empty queue and allocates memory for up to `capacity` elements, where `capacity <= u32::MAX`. /// /// # Panics @@ -32,42 +32,73 @@ impl FixedCapacityQueue { /// - Panics if `capacity > u32::MAX`. /// - Panics if the memory allocation fails. #[must_use] - pub fn new(capacity: usize) -> Self { + pub fn new(capacity: usize, alloc: &'alloc A) -> Self { assert!( capacity <= u32::MAX as usize, "FixedQueue can hold at most u32::MAX elements" ); - Self { - inner: GenericQueue::new(capacity as u32), - } + + let storage = Heap::new(capacity as u32, alloc); + let inner = GenericQueue::new(storage); + Self { inner } } } -impl Drop for FixedCapacityQueue { +impl Drop for FixedCapacityQueueIn<'_, T, A> { fn drop(&mut self) { self.inner.clear(); } } -impl ops::Deref for FixedCapacityQueue { - type Target = GenericQueue>; +impl<'alloc, T, A: BasicAllocator> ops::Deref for FixedCapacityQueueIn<'alloc, T, A> { + type Target = GenericQueue>; fn deref(&self) -> &Self::Target { &self.inner } } -impl ops::DerefMut for FixedCapacityQueue { +impl ops::DerefMut for FixedCapacityQueueIn<'_, T, A> { fn deref_mut(&mut self) -> &mut Self::Target { &mut self.inner } } +/// A fixed-capacity queue, using global allocator. +/// Refer to [`FixedCapacityQueueIn`] for more information. +pub struct FixedCapacityQueue(FixedCapacityQueueIn<'static, T, HeapAllocator>); + +impl FixedCapacityQueue { + /// Creates an empty queue and allocates memory for up to `capacity` elements, where `capacity <= u32::MAX`. + /// + /// # Panics + /// + /// - Panics if `capacity > u32::MAX`. + /// - Panics if the memory allocation fails. + #[must_use] + pub fn new(capacity: usize) -> Self { + Self(FixedCapacityQueueIn::new(capacity, &GLOBAL_ALLOCATOR)) + } +} + +impl ops::Deref for FixedCapacityQueue { + type Target = GenericQueue>; + + fn deref(&self) -> &Self::Target { + &self.0.inner + } +} + +impl ops::DerefMut for FixedCapacityQueue { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0.inner + } +} + #[cfg(test)] mod tests { - use std::collections::VecDeque; - use super::*; + use std::collections::VecDeque; fn to_vec((first, second): (&[T], &[T])) -> Vec { let mut elements = first.to_vec(); diff --git a/src/containers/fixed_capacity/string.rs b/src/containers/fixed_capacity/string.rs index aad77f16df..7fba59436f 100644 --- a/src/containers/fixed_capacity/string.rs +++ b/src/containers/fixed_capacity/string.rs @@ -11,23 +11,24 @@ // SPDX-License-Identifier: Apache-2.0 // ******************************************************************************* -use core::fmt; -use core::ops; - use crate::generic::string::GenericString; use crate::storage::Heap; +use core::fmt; +use core::ops; +use elementary::GLOBAL_ALLOCATOR; +use elementary::{BasicAllocator, HeapAllocator}; -/// A fixed-capacity Unicode string. +/// A fixed-capacity Unicode string, using provided allocator.. /// /// Note that the string is encoded as UTF-8, so each character (Unicode codepoint) requires between 1 and 4 bytes of storage. /// /// The string can hold between 0 and `CAPACITY` **bytes**, and behaves similarly to Rust's `String`, /// except that it allocates memory immediately on construction, and can't shrink or grow. -pub struct FixedCapacityString { - inner: GenericString>, +pub struct FixedCapacityStringIn<'alloc, A: BasicAllocator> { + inner: GenericString>, } -impl FixedCapacityString { +impl<'alloc, A: BasicAllocator> FixedCapacityStringIn<'alloc, A> { /// Creates an empty string and allocates memory for up to `capacity` bytes, where `capacity <= u32::MAX`. /// /// Note that the string is encoded as UTF-8, so each character (Unicode codepoint) requires between 1 and 4 bytes of storage. @@ -37,14 +38,15 @@ impl FixedCapacityString { /// - Panics if `capacity > u32::MAX`. /// - Panics if the memory allocation fails. #[must_use] - pub fn new(capacity: usize) -> Self { + pub fn new(capacity: usize, alloc: &'alloc A) -> Self { assert!( capacity <= u32::MAX as usize, "FixedCapacityString can hold at most u32::MAX bytes" ); - Self { - inner: GenericString::new(capacity as u32), - } + + let storage = Heap::new(capacity as u32, alloc); + let inner = GenericString::new(storage); + Self { inner } } /// Tries to create an empty string for up to `capacity` bytes, where `capacity <= u32::MAX`. @@ -53,49 +55,105 @@ impl FixedCapacityString { /// /// Returns `None` if `capacity > u32::MAX`, or if the memory allocation fails. #[must_use] - pub fn try_new(capacity: usize) -> Option { + pub fn try_new(capacity: usize, alloc: &'alloc A) -> Option { if capacity <= u32::MAX as usize { - Some(Self { - inner: GenericString::try_new(capacity as u32)?, - }) + let storage = Heap::try_new(capacity as u32, alloc)?; + let inner = GenericString::new(storage); + Some(Self { inner }) } else { None } } } -impl Drop for FixedCapacityString { +impl Drop for FixedCapacityStringIn<'_, A> { fn drop(&mut self) { self.inner.clear(); } } -impl ops::Deref for FixedCapacityString { - type Target = GenericString>; +impl<'alloc, A: BasicAllocator> ops::Deref for FixedCapacityStringIn<'alloc, A> { + type Target = GenericString>; fn deref(&self) -> &Self::Target { &self.inner } } -impl ops::DerefMut for FixedCapacityString { +impl ops::DerefMut for FixedCapacityStringIn<'_, A> { fn deref_mut(&mut self) -> &mut Self::Target { &mut self.inner } } -impl fmt::Display for FixedCapacityString { +impl fmt::Display for FixedCapacityStringIn<'_, A> { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { fmt::Display::fmt(self.as_str(), f) } } -impl fmt::Debug for FixedCapacityString { +impl fmt::Debug for FixedCapacityStringIn<'_, A> { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { fmt::Debug::fmt(self.as_str(), f) } } +/// A fixed-capacity Unicode string, using global allocator. +/// Refer to [`FixedCapacityStringIn`] for more information. +pub struct FixedCapacityString(FixedCapacityStringIn<'static, HeapAllocator>); + +impl FixedCapacityString { + /// Creates an empty string and allocates memory for up to `capacity` bytes, where `capacity <= u32::MAX`. + /// + /// Note that the string is encoded as UTF-8, so each character (Unicode codepoint) requires between 1 and 4 bytes of storage. + /// + /// # Panics + /// + /// - Panics if `capacity > u32::MAX`. + /// - Panics if the memory allocation fails. + #[must_use] + pub fn new(capacity: usize) -> Self { + Self(FixedCapacityStringIn::new(capacity, &GLOBAL_ALLOCATOR)) + } + + /// Tries to create an empty string for up to `capacity` bytes, where `capacity <= u32::MAX`. + /// + /// Note that the string is encoded as UTF-8, so each character (Unicode codepoint) requires between 1 and 4 bytes of storage. + /// + /// Returns `None` if `capacity > u32::MAX`, or if the memory allocation fails. + #[must_use] + pub fn try_new(capacity: usize) -> Option { + let inner = FixedCapacityStringIn::try_new(capacity, &GLOBAL_ALLOCATOR)?; + Some(Self(inner)) + } +} + +impl ops::Deref for FixedCapacityString { + type Target = GenericString>; + + fn deref(&self) -> &Self::Target { + &self.0.inner + } +} + +impl ops::DerefMut for FixedCapacityString { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0.inner + } +} + +impl fmt::Display for FixedCapacityString { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + fmt::Display::fmt(self.0.as_str(), f) + } +} + +impl fmt::Debug for FixedCapacityString { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + fmt::Debug::fmt(self.0.as_str(), f) + } +} + #[cfg(test)] mod tests { use super::*; diff --git a/src/containers/fixed_capacity/vec.rs b/src/containers/fixed_capacity/vec.rs index c1bb928df0..5679c16442 100644 --- a/src/containers/fixed_capacity/vec.rs +++ b/src/containers/fixed_capacity/vec.rs @@ -11,21 +11,21 @@ // SPDX-License-Identifier: Apache-2.0 // ******************************************************************************* -use core::fmt; -use core::ops; - use crate::generic::vec::GenericVec; use crate::storage::Heap; +use core::fmt; +use core::ops; +use elementary::{BasicAllocator, HeapAllocator, GLOBAL_ALLOCATOR}; -/// A fixed-capacity vector. +/// A fixed-capacity vector, using provided allocator. /// -/// The vector can hold between 0 and `CAPACITY` elements, and behaves similarly to Rust's `Vec`, +/// The vector can hold between 0 and `capacity` elements, and behaves similarly to Rust's `Vec`, /// except that it allocates memory immediately on construction, and can't shrink or grow. -pub struct FixedCapacityVec { - inner: GenericVec>, +pub struct FixedCapacityVecIn<'alloc, T, A: BasicAllocator> { + inner: GenericVec>, } -impl FixedCapacityVec { +impl<'alloc, T, A: BasicAllocator> FixedCapacityVecIn<'alloc, T, A> { /// Creates an empty vector and allocates memory for up to `capacity` elements, where `capacity <= u32::MAX`. /// /// # Panics @@ -33,57 +33,104 @@ impl FixedCapacityVec { /// - Panics if `capacity > u32::MAX`. /// - Panics if the memory allocation fails. #[must_use] - pub fn new(capacity: usize) -> Self { + pub fn new(capacity: usize, alloc: &'alloc A) -> Self { assert!( capacity <= u32::MAX as usize, "FixedCapacityVec can hold at most u32::MAX elements" ); - Self { - inner: GenericVec::new(capacity as u32), - } + + let storage = Heap::new(capacity as u32, alloc); + let inner = GenericVec::new(storage); + Self { inner } } /// Tries to create an empty vector for up to `capacity` elements, where `capacity <= u32::MAX`. /// /// Returns `None` if `capacity > u32::MAX`, or if the memory allocation fails. #[must_use] - pub fn try_new(capacity: usize) -> Option { + pub fn try_new(capacity: usize, alloc: &'alloc A) -> Option { if capacity <= u32::MAX as usize { - Some(Self { - inner: GenericVec::try_new(capacity as u32)?, - }) + let storage = Heap::try_new(capacity as u32, alloc)?; + let inner = GenericVec::new(storage); + Some(Self { inner }) } else { None } } } -impl Drop for FixedCapacityVec { +impl Drop for FixedCapacityVecIn<'_, T, A> { fn drop(&mut self) { self.inner.clear(); } } -impl ops::Deref for FixedCapacityVec { - type Target = GenericVec>; +impl<'alloc, T, A: BasicAllocator> ops::Deref for FixedCapacityVecIn<'alloc, T, A> { + type Target = GenericVec>; fn deref(&self) -> &Self::Target { &self.inner } } -impl ops::DerefMut for FixedCapacityVec { +impl ops::DerefMut for FixedCapacityVecIn<'_, T, A> { fn deref_mut(&mut self) -> &mut Self::Target { &mut self.inner } } -impl fmt::Debug for FixedCapacityVec { +impl fmt::Debug for FixedCapacityVecIn<'_, T, A> { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { fmt::Debug::fmt(self.as_slice(), f) } } +/// A fixed-capacity vector, using global allocator. +/// Refer to [`FixedCapacityVecIn`] for more information. +pub struct FixedCapacityVec(FixedCapacityVecIn<'static, T, HeapAllocator>); + +impl FixedCapacityVec { + /// Creates an empty vector and allocates memory for up to `capacity` elements, where `capacity <= u32::MAX`. + /// + /// # Panics + /// + /// - Panics if `capacity > u32::MAX`. + /// - Panics if the memory allocation fails. + #[must_use] + pub fn new(capacity: usize) -> Self { + Self(FixedCapacityVecIn::new(capacity, &GLOBAL_ALLOCATOR)) + } + + /// Tries to create an empty vector for up to `capacity` elements, where `capacity <= u32::MAX`. + /// + /// Returns `None` if `capacity > u32::MAX`, or if the memory allocation fails. + #[must_use] + pub fn try_new(capacity: usize) -> Option { + let inner = FixedCapacityVecIn::try_new(capacity, &GLOBAL_ALLOCATOR)?; + Some(Self(inner)) + } +} + +impl ops::Deref for FixedCapacityVec { + type Target = GenericVec>; + + fn deref(&self) -> &Self::Target { + &self.0.inner + } +} + +impl ops::DerefMut for FixedCapacityVec { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0.inner + } +} + +impl fmt::Debug for FixedCapacityVec { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + fmt::Debug::fmt(self.0.as_slice(), f) + } +} + #[cfg(test)] mod tests { use super::*; diff --git a/src/containers/generic/queue.rs b/src/containers/generic/queue.rs index 296b5055db..9cfdccae7d 100644 --- a/src/containers/generic/queue.rs +++ b/src/containers/generic/queue.rs @@ -33,12 +33,12 @@ pub struct GenericQueue> { } impl> GenericQueue { - /// Creates an empty queue. - pub fn new(capacity: u32) -> Self { + /// Creates an empty queue backed by the given storage. + pub fn new(storage: S) -> Self { Self { len: 0, front_index: 0, - storage: S::new(capacity), + storage, _marker: PhantomData, } } @@ -382,9 +382,9 @@ impl FusedIterator for IterMut<'_, T> {} #[cfg(test)] mod tests { - use std::{collections::VecDeque, mem::MaybeUninit}; - use super::*; + use crate::storage::test_utils::TestVec; + use std::collections::VecDeque; fn to_vec((first, second): (&[T], &[T])) -> Vec { let mut elements = first.to_vec(); @@ -394,7 +394,7 @@ mod tests { #[test] fn front_and_back() { - fn check_front_and_back(queue: &mut GenericQueue>>, control: &mut VecDeque) { + fn check_front_and_back(queue: &mut GenericQueue>, control: &mut VecDeque) { assert_eq!(queue.front(), control.front()); assert_eq!(queue.front_mut(), control.front_mut()); assert_eq!(queue.back(), control.back()); @@ -402,7 +402,8 @@ mod tests { } fn run_test(n: usize) { - let mut queue = GenericQueue::>>::new(n as u32); + let storage = TestVec::new(n); + let mut queue = GenericQueue::new(storage); let mut control = VecDeque::new(); // Completely fill and empty the queue n times, but move the internal start point @@ -437,7 +438,7 @@ mod tests { #[test] fn iter() { - fn check_iter(queue: &mut GenericQueue>>, control: &mut VecDeque) { + fn check_iter(queue: &mut GenericQueue>, control: &mut VecDeque) { // Test the Iterator::next() implementation: assert_eq!(queue.iter().collect::>(), control.iter().collect::>()); assert_eq!( @@ -456,7 +457,8 @@ mod tests { } fn run_test(n: usize) { - let mut queue = GenericQueue::>>::new(n as u32); + let storage = TestVec::new(n); + let mut queue = GenericQueue::new(storage); let mut control = VecDeque::new(); // Completely fill and empty the queue n times, but move the internal start point @@ -492,7 +494,8 @@ mod tests { #[test] fn push_back_and_pop_front() { fn run_test(n: usize) { - let mut queue = GenericQueue::>>::new(n as u32); + let storage = TestVec::new(n); + let mut queue = GenericQueue::new(storage); let mut control = VecDeque::new(); // Completely fill and empty the queue n times, but move the internal start point @@ -535,7 +538,8 @@ mod tests { #[test] fn push_front_and_pop_back() { fn run_test(n: usize) { - let mut queue = GenericQueue::>>::new(n as u32); + let storage = TestVec::new(n); + let mut queue = GenericQueue::new(storage); let mut control = VecDeque::new(); // Completely fill and empty the queue n times, but move the internal start point @@ -578,7 +582,8 @@ mod tests { #[test] fn is_empty_and_is_full() { fn run_test(n: usize) { - let mut queue = GenericQueue::>>::new(n as u32); + let storage = TestVec::new(n); + let mut queue = GenericQueue::new(storage); // Completely fill and empty the queue n times, but move the internal start point // ahead by one each time diff --git a/src/containers/generic/string.rs b/src/containers/generic/string.rs index e56229ba42..a567d51867 100644 --- a/src/containers/generic/string.rs +++ b/src/containers/generic/string.rs @@ -27,30 +27,15 @@ pub struct GenericString> { } impl> GenericString { - /// Creates an empty string with the given capacity in bytes. + /// Creates an empty string backed by the given storage. /// /// Note that the string is encoded as UTF-8, so each character (Unicode codepoint) requires between 1 and 4 bytes of storage. - /// - /// # Panics - /// - /// Panics if not enough memory could be allocated. - pub fn new(capacity: u32) -> Self { + pub fn new(storage: S) -> Self { Self { - vec: GenericVec::new(capacity), + vec: GenericVec::new(storage), } } - /// Tries to create an empty string with the given capacity in bytes. - /// - /// Note that the string is encoded as UTF-8, so each character (Unicode codepoint) requires between 1 and 4 bytes of storage. - /// - /// Returns `None` if not enough memory could be allocated. - pub fn try_new(capacity: u32) -> Option { - Some(Self { - vec: GenericVec::try_new(capacity)?, - }) - } - pub fn as_bytes(&self) -> &[u8] { self.vec.as_slice() } @@ -154,14 +139,14 @@ impl> fmt::Debug for GenericString { #[cfg(test)] mod tests { - use std::mem::MaybeUninit; - use super::*; + use crate::storage::test_utils::TestVec; #[test] fn push_and_pop() { fn run_test(n: usize) { - let mut string = GenericString::>>::new(n as u32); + let storage = TestVec::new(n); + let mut string = GenericString::new(storage); let mut control = String::new(); let result = string.pop(); @@ -196,7 +181,8 @@ mod tests { #[test] fn push_str() { fn run_test(n: usize) { - let mut string = GenericString::>>::new(n as u32); + let storage = TestVec::new(n); + let mut string = GenericString::new(storage); let mut control = String::new(); let samples = ["abc", "\0", "😉", "👍🏼🚀", "αβγ"]; @@ -224,7 +210,8 @@ mod tests { #[test] fn is_full_and_is_empty() { fn run_test(n: usize) { - let mut string = GenericString::>>::new(n as u32); + let storage = TestVec::new(n); + let mut string = GenericString::new(storage); assert!(string.is_empty()); let sample = "abcdefghi"; diff --git a/src/containers/generic/vec.rs b/src/containers/generic/vec.rs index 3cff0d3469..13345bab10 100644 --- a/src/containers/generic/vec.rs +++ b/src/containers/generic/vec.rs @@ -28,30 +28,15 @@ pub struct GenericVec> { } impl> GenericVec { - /// Creates an empty vector with the given capacity. - /// - /// # Panics - /// - /// Panics if not enough memory could be allocated. - pub fn new(capacity: u32) -> Self { + /// Creates an empty vector backed by the given storage. + pub fn new(storage: S) -> Self { Self { len: 0, - storage: S::new(capacity), + storage, _marker: PhantomData, } } - /// Tries to create an empty vector with the given capacity. - /// - /// Returns `None` if not enough memory could be allocated. - pub fn try_new(capacity: u32) -> Option { - Some(Self { - len: 0, - storage: S::try_new(capacity)?, - _marker: PhantomData, - }) - } - /// Extracts a slice containing the entire vector. /// /// Equivalent to `&v[..]`. @@ -192,14 +177,14 @@ impl> fmt::Debug for GenericVec { #[cfg(test)] mod tests { - use std::mem::MaybeUninit; - use super::*; + use crate::storage::test_utils::TestVec; #[test] fn push_and_pop() { fn run_test(n: usize) { - let mut vector = GenericVec::>>::new(n as u32); + let storage = TestVec::new(n); + let mut vector = GenericVec::new(storage); let mut control = vec![]; let result = vector.pop(); @@ -234,7 +219,8 @@ mod tests { #[test] fn is_full_and_is_empty() { fn run_test(n: usize) { - let mut vector = GenericVec::>>::new(n as u32); + let storage = TestVec::new(n); + let mut vector = GenericVec::new(storage); assert!(vector.is_empty()); for i in 0..n { diff --git a/src/containers/inline/queue.rs b/src/containers/inline/queue.rs index 61167a6ece..2c50294821 100644 --- a/src/containers/inline/queue.rs +++ b/src/containers/inline/queue.rs @@ -47,9 +47,9 @@ impl InlineQueue { pub fn new() -> Self { let () = Self::CHECK_CAPACITY; - Self { - inner: GenericQueue::new(CAPACITY as u32), - } + let storage = Inline::::new(); + let inner = GenericQueue::new(storage); + Self { inner } } } diff --git a/src/containers/inline/string.rs b/src/containers/inline/string.rs index 5b12b31f23..f1e3b40f86 100644 --- a/src/containers/inline/string.rs +++ b/src/containers/inline/string.rs @@ -45,12 +45,13 @@ impl InlineString { const CHECK_CAPACITY: () = assert!(0 < CAPACITY && CAPACITY <= u32::MAX as usize); /// Creates an empty string. + #[must_use] pub fn new() -> Self { let () = Self::CHECK_CAPACITY; - Self { - inner: GenericString::new(CAPACITY as u32), - } + let storage = Inline::<_, CAPACITY>::new(); + let inner = GenericString::new(storage); + Self { inner } } } diff --git a/src/containers/inline/vec.rs b/src/containers/inline/vec.rs index ab71131a4c..2dcefff502 100644 --- a/src/containers/inline/vec.rs +++ b/src/containers/inline/vec.rs @@ -43,12 +43,13 @@ impl InlineVec { const CHECK_CAPACITY: () = assert!(0 < CAPACITY && CAPACITY <= u32::MAX as usize); /// Creates an empty vector. + #[must_use] pub fn new() -> Self { let () = Self::CHECK_CAPACITY; - Self { - inner: GenericVec::new(CAPACITY as u32), - } + let storage = Inline::::new(); + let inner = GenericVec::new(storage); + Self { inner } } } diff --git a/src/containers/storage/heap.rs b/src/containers/storage/heap.rs index b7520561f2..ccef09913a 100644 --- a/src/containers/storage/heap.rs +++ b/src/containers/storage/heap.rs @@ -11,31 +11,31 @@ // SPDX-License-Identifier: Apache-2.0 // ******************************************************************************* -use alloc::alloc::alloc; -use alloc::alloc::dealloc; +use crate::storage::Storage; use alloc::alloc::Layout; use core::marker::PhantomData; use core::mem::MaybeUninit; use core::ptr; use core::ptr::NonNull; - -use super::Storage; +use elementary::BasicAllocator; /// Fixed-capacity, heap-allocated storage. -pub struct Heap { +pub struct Heap<'alloc, T, A: BasicAllocator> { /// Allocated capacity, in number of elements. capacity: u32, /// Pointer to the allocated memory. /// /// If `self.capacity > 0`, this points to an allocated memory area of size `self.capacity * size_of` and alignment `align_of`. elements: NonNull, + /// Allocator used by the storage. + alloc: &'alloc A, _marker: PhantomData, } -// SAFETY: `Heap` can be sent to another thread if `T` can be sent to another thread. It's because we use system allocation which is send-safe. -unsafe impl Send for Heap {} +// SAFETY: `Heap` can be sent to another thread if `T` can be sent to another thread and used allocator is send-safe. +unsafe impl Send for Heap<'_, T, A> {} -impl Heap { +impl Heap<'_, T, A> { fn layout(capacity: u32) -> Option { (capacity as usize) .checked_mul(size_of::()) @@ -43,14 +43,14 @@ impl Heap { } } -impl Storage for Heap { +impl<'alloc, T, A: BasicAllocator> Heap<'alloc, T, A> { /// Creates a new instance with capacity for exactly the given number of elements. /// /// # Panics /// /// Panics if the memory allocation failed. - fn new(capacity: u32) -> Self { - Self::try_new(capacity).unwrap_or_else(|| { + pub fn new(capacity: u32, alloc: &'alloc A) -> Self { + Self::try_new(capacity, alloc).unwrap_or_else(|| { panic!( "failed to allocate {capacity} elements of {typ}", typ = core::any::type_name::() @@ -61,21 +61,24 @@ impl Storage for Heap { /// Tries to create a new instance with capacity for exactly the given number of elements. /// /// Returns `None` if the memory allocation failed. - fn try_new(capacity: u32) -> Option { + pub fn try_new(capacity: u32, alloc: &'alloc A) -> Option { let storage = if capacity > 0 { let layout = Self::layout(capacity)?; // SAFETY: `layout` has a non-zero size (because `capacity` is > 0) - NonNull::new(unsafe { alloc(layout) })? + NonNull::new(alloc.allocate(layout).ok()?.as_ptr())? } else { NonNull::dangling() }; Some(Self { capacity, elements: storage.cast::(), + alloc, _marker: PhantomData, }) } +} +impl Storage for Heap<'_, T, A> { fn capacity(&self) -> u32 { self.capacity } @@ -119,7 +122,7 @@ impl Storage for Heap { } } -impl Drop for Heap { +impl Drop for Heap<'_, T, A> { fn drop(&mut self) { if self.capacity > 0 { let layout = Self::layout(self.capacity).unwrap(); @@ -127,7 +130,8 @@ impl Drop for Heap { // - `self.elements` has previously been allocated with `alloc` // - `layout` is the same as the one used for the allocation unsafe { - dealloc(self.elements.as_ptr().cast::(), layout); + let ptr = self.elements.cast(); + self.alloc.deallocate(ptr, layout); } } } @@ -136,13 +140,14 @@ impl Drop for Heap { #[cfg(test)] mod tests { use super::*; + use elementary::{HeapAllocator, GLOBAL_ALLOCATOR}; #[test] fn subslice() { type T = u64; fn run_test(capacity: u32) { - let instance = Heap::::new(capacity); + let instance = Heap::::new(capacity, &GLOBAL_ALLOCATOR); let empty_slice = unsafe { instance.subslice(0, 0) }; assert_eq!(empty_slice.len(), 0); @@ -176,7 +181,7 @@ mod tests { type T = u64; fn run_test(capacity: u32) { - let mut instance = Heap::::new(capacity); + let mut instance = Heap::::new(capacity, &GLOBAL_ALLOCATOR); let empty_slice = unsafe { instance.subslice_mut(0, 0) }; assert_eq!(empty_slice.len(), 0); @@ -210,7 +215,7 @@ mod tests { type T = u64; fn run_test(capacity: u32) { - let instance = Heap::::new(capacity); + let instance = Heap::::new(capacity, &GLOBAL_ALLOCATOR); if capacity >= 1 { let first_element = unsafe { instance.element(0) }; @@ -245,7 +250,7 @@ mod tests { type T = u64; fn run_test(capacity: u32) { - let mut instance = Heap::::new(capacity); + let mut instance = Heap::::new(capacity, &GLOBAL_ALLOCATOR); if capacity >= 1 { let first_element = unsafe { instance.element_mut(0) }; diff --git a/src/containers/storage/inline.rs b/src/containers/storage/inline.rs index 05bdff3f1d..20dc1d04e6 100644 --- a/src/containers/storage/inline.rs +++ b/src/containers/storage/inline.rs @@ -28,38 +28,24 @@ impl Inline { // Compile-time check. This condition _must_ be referenced in every function that depends on it, // otherwise it will be removed during monomorphization. const CHECK_CAPACITY: () = assert!(0 < CAPACITY && CAPACITY <= (u32::MAX as usize)); -} -impl Storage for Inline { /// Creates a new instance. - /// - /// # Panics - /// - /// Panics if and only if `capacity != CAPACITY`. - fn new(capacity: u32) -> Self { + pub fn new() -> Self { let () = Self::CHECK_CAPACITY; - assert_eq!(capacity as usize, CAPACITY); Self { elements: [const { MaybeUninit::uninit() }; CAPACITY], } } +} - /// Tries to create a new instance. - /// - /// Returns `None` if and only if `capacity != CAPACITY`. - fn try_new(capacity: u32) -> Option { - let () = Self::CHECK_CAPACITY; - - if capacity as usize == CAPACITY { - Some(Self { - elements: [const { MaybeUninit::uninit() }; CAPACITY], - }) - } else { - None - } +impl Default for Inline { + fn default() -> Self { + Self::new() } +} +impl Storage for Inline { fn capacity(&self) -> u32 { let () = Self::CHECK_CAPACITY; @@ -119,7 +105,7 @@ mod tests { fn run_test() { let capacity = N as u32; - let instance = Inline::::new(capacity); + let instance = Inline::::new(); let empty_slice = unsafe { instance.subslice(0, 0) }; assert_eq!(empty_slice.len(), 0); @@ -159,7 +145,7 @@ mod tests { fn run_test() { let capacity = N as u32; - let mut instance = Inline::::new(capacity); + let mut instance = Inline::::new(); let empty_slice = unsafe { instance.subslice_mut(0, 0) }; assert_eq!(empty_slice.len(), 0); @@ -199,7 +185,7 @@ mod tests { fn run_test() { let capacity = N as u32; - let instance = Inline::::new(capacity); + let instance = Inline::::new(); if capacity >= 1 { let first_element = unsafe { instance.element(0) }; @@ -240,7 +226,7 @@ mod tests { fn run_test() { let capacity = N as u32; - let mut instance = Inline::::new(capacity); + let mut instance = Inline::::new(); if capacity >= 1 { let first_element = unsafe { instance.element_mut(0) }; diff --git a/src/containers/storage/mod.rs b/src/containers/storage/mod.rs index ea60cc7d73..4e56b484c9 100644 --- a/src/containers/storage/mod.rs +++ b/src/containers/storage/mod.rs @@ -23,23 +23,9 @@ use core::mem::MaybeUninit; /// /// # Panics /// -/// With the exception of [`new`](Storage::new), the methods in this trait are *not* allowed to panic when `cfg(debug_assertions)` is not enabled. +/// The methods in this trait are *not* allowed to panic when `cfg(debug_assertions)` is not enabled. /// Implementors should use `debug_assert!` to check that preconditions are fulfilled. pub trait Storage { - /// Creates a new instance with enough capacity for the given number of elements. - /// - /// # Panics - /// - /// This method is allowed to panic when `capacity` is invalid, or when not enough memory could be allocated. - fn new(capacity: u32) -> Self; - - /// Tries to create a new instance with enough capacity for the given number of elements. - /// - /// Returns `None` if the allocation failed for any reason. - fn try_new(capacity: u32) -> Option - where - Self: Sized; - /// Returns the allocated capacity. fn capacity(&self) -> u32; @@ -73,44 +59,48 @@ pub trait Storage { } #[cfg(test)] -mod test_utils { +pub(crate) mod test_utils { //! A simple impl of [`Storage`] for [`Vec`], to be used for tests of generic containers. use super::*; use core::ptr; - impl Storage for Vec> { - fn new(capacity: u32) -> Self { + pub struct TestVec(Vec>); + + impl TestVec { + pub fn new(capacity: usize) -> Self { Self::try_new(capacity).unwrap_or_else(|| panic!("failed to allocate for {capacity} elements")) } - fn try_new(capacity: u32) -> Option + pub fn try_new(capacity: usize) -> Option where Self: Sized, { let mut instance = vec![]; - instance.try_reserve_exact(capacity as usize).ok()?; + instance.try_reserve_exact(capacity).ok()?; instance.extend((0..capacity).map(|_| MaybeUninit::zeroed())); - Some(instance) + Some(Self(instance)) } + } + impl Storage for TestVec { fn capacity(&self) -> u32 { - self.capacity() as u32 + self.0.capacity() as u32 } unsafe fn element(&self, index: u32) -> &MaybeUninit { - &self[index as usize] + &self.0[index as usize] } unsafe fn element_mut(&mut self, index: u32) -> &mut MaybeUninit { - &mut self[index as usize] + &mut self.0[index as usize] } unsafe fn subslice(&self, start: u32, end: u32) -> *const [T] { debug_assert!(start <= end); debug_assert!(end <= Storage::capacity(self)); // SAFETY: `start` is in-bounds of the array, as per the pre-condition on the trait method. - let ptr = unsafe { self.as_ptr().add(start as usize).cast() }; + let ptr = unsafe { self.0.as_ptr().add(start as usize).cast() }; let len = end - start; ptr::slice_from_raw_parts(ptr, len as usize) } @@ -119,7 +109,7 @@ mod test_utils { debug_assert!(start <= end); debug_assert!(end <= Storage::capacity(self)); // SAFETY: `start` is in-bounds of the array, as per the pre-condition on the trait method. - let ptr = unsafe { self.as_mut_ptr().add(start as usize).cast() }; + let ptr = unsafe { self.0.as_mut_ptr().add(start as usize).cast() }; let len = end - start; ptr::slice_from_raw_parts_mut(ptr, len as usize) } diff --git a/src/elementary/allocator_traits.rs b/src/elementary/allocator_traits.rs index ebf250261f..7553737b42 100644 --- a/src/elementary/allocator_traits.rs +++ b/src/elementary/allocator_traits.rs @@ -11,6 +11,7 @@ // SPDX-License-Identifier: Apache-2.0 // ******************************************************************************* +use core::alloc::Layout; use core::ptr::NonNull; #[derive(Debug, Clone, Copy)] @@ -27,7 +28,7 @@ pub enum AllocationError { pub trait BasicAllocator { /// Allocates a block of memory as described by `layout`. - fn allocate(&self, layout: core::alloc::Layout) -> Result, AllocationError>; + fn allocate(&self, layout: Layout) -> Result, AllocationError>; /// Deallocates the memory block pointed to by `ptr` with the given `layout`. /// @@ -35,5 +36,5 @@ pub trait BasicAllocator { /// - `ptr` must have been allocated by a previous call to `allocate` with the same `layout`. /// - `layout` must match the layout used during allocation. /// - unsafe fn deallocate(&self, ptr: NonNull, layout: core::alloc::Layout); + unsafe fn deallocate(&self, ptr: NonNull, layout: Layout); } diff --git a/src/elementary/global_allocator.rs b/src/elementary/heap_allocator.rs similarity index 64% rename from src/elementary/global_allocator.rs rename to src/elementary/heap_allocator.rs index 08f58d315a..5276791b8d 100644 --- a/src/elementary/global_allocator.rs +++ b/src/elementary/heap_allocator.rs @@ -12,18 +12,22 @@ // ******************************************************************************* extern crate alloc; -use alloc::alloc::alloc; -use alloc::alloc::dealloc; +use alloc::alloc::{alloc, dealloc}; +use core::alloc::Layout; use core::ptr::NonNull; use crate::allocator_traits::{AllocationError, BasicAllocator}; -#[derive(Debug, Clone, Copy)] -pub struct GlobalAllocator; +/// Global allocator. +pub static GLOBAL_ALLOCATOR: HeapAllocator = HeapAllocator; -impl BasicAllocator for GlobalAllocator { - fn allocate(&self, layout: core::alloc::Layout) -> Result, AllocationError> { +/// Proxy to global heap allocation in Rust. +#[derive(Debug, Default, Clone, Copy)] +pub struct HeapAllocator; + +impl BasicAllocator for HeapAllocator { + fn allocate(&self, layout: Layout) -> Result, AllocationError> { if layout.size() == 0 { return Err(AllocationError::ZeroSizeAllocation); } @@ -33,20 +37,13 @@ impl BasicAllocator for GlobalAllocator { if ptr.is_null() { return Err(AllocationError::OutOfMemory); } - Ok(NonNull::slice_from_raw_parts( - NonNull::new_unchecked(ptr), - layout.size(), - )) + + // SAFETY: already checked for null. + Ok(NonNull::new_unchecked(ptr)) } } - unsafe fn deallocate(&self, ptr: NonNull, layout: core::alloc::Layout) { + unsafe fn deallocate(&self, ptr: NonNull, layout: Layout) { dealloc(ptr.as_ptr(), layout); } } - -impl Default for GlobalAllocator { - fn default() -> Self { - GlobalAllocator - } -} diff --git a/src/elementary/lib.rs b/src/elementary/lib.rs index 7962df7bf0..6eeaa4e9c6 100644 --- a/src/elementary/lib.rs +++ b/src/elementary/lib.rs @@ -11,5 +11,8 @@ // SPDX-License-Identifier: Apache-2.0 // ******************************************************************************* -pub mod allocator_traits; -pub mod global_allocator; +mod allocator_traits; +mod heap_allocator; + +pub use allocator_traits::{AllocationError, BasicAllocator}; +pub use heap_allocator::{HeapAllocator, GLOBAL_ALLOCATOR}; diff --git a/src/sync/arc_in.rs b/src/sync/arc_in.rs index bfc8b6d950..459f9e46ba 100644 --- a/src/sync/arc_in.rs +++ b/src/sync/arc_in.rs @@ -20,7 +20,7 @@ use std::{ sync::atomic::{AtomicUsize, Ordering as AtomicOrdering}, }; -use elementary::allocator_traits::BasicAllocator; +use elementary::BasicAllocator; /// A reference-counted smart pointer with custom allocator support like `std::sync::Arc`. /// The `ArcIn` type provides shared ownership of a value of type `T`, allocated using the specified allocator `A`. @@ -155,13 +155,13 @@ impl Drop for ArcIn { #[cfg(test)] mod tests { use super::*; - use elementary::global_allocator::GlobalAllocator; + use elementary::HeapAllocator; use std::collections::hash_map::DefaultHasher; use std::hash::Hash; #[test] fn new_and_deref() { - let alloc = GlobalAllocator; + let alloc = HeapAllocator; let arc = ArcIn::new_in(42, alloc); assert_eq!(*arc, 42); assert_eq!(ArcIn::strong_count(&arc), 1); @@ -169,7 +169,7 @@ mod tests { #[test] fn clone_increases_count() { - let alloc = GlobalAllocator; + let alloc = HeapAllocator; let arc1 = ArcIn::new_in(100, alloc); let arc2 = arc1.clone(); assert_eq!(ArcIn::strong_count(&arc1), 2); @@ -178,7 +178,7 @@ mod tests { #[test] fn drop_decreases_count() { - let alloc = GlobalAllocator; + let alloc = HeapAllocator; let arc1 = ArcIn::new_in(55, alloc); assert_eq!(ArcIn::strong_count(&arc1), 1); { @@ -191,7 +191,7 @@ mod tests { #[test] fn debug_trait() { - let alloc = GlobalAllocator; + let alloc = HeapAllocator; let arc = ArcIn::new_in("hello", alloc); let s = format!("{:?}", arc); assert_eq!(s, "\"hello\""); @@ -199,14 +199,14 @@ mod tests { #[test] fn default_trait() { - let arc: ArcIn = ArcIn::default(); + let arc: ArcIn = ArcIn::default(); assert_eq!(*arc, 0); assert_eq!(ArcIn::strong_count(&arc), 1); } #[test] fn as_ref_trait() { - let alloc = GlobalAllocator; + let alloc = HeapAllocator; let arc = ArcIn::new_in("world".to_string(), alloc); let s: &str = arc.as_ref(); assert_eq!(s, "world"); @@ -214,7 +214,7 @@ mod tests { #[test] fn eq_ord_hash() { - let alloc = GlobalAllocator; + let alloc = HeapAllocator; let arc1 = ArcIn::new_in(5, alloc); let arc2 = ArcIn::new_in(5, alloc); let arc3 = ArcIn::new_in(10, alloc); @@ -233,7 +233,7 @@ mod tests { #[test] fn strong_count_multiple_clones() { - let alloc = GlobalAllocator; + let alloc = HeapAllocator; let arc = ArcIn::new_in(123, alloc); let clones: Vec<_> = (0..5).map(|_| arc.clone()).collect(); assert_eq!(ArcIn::strong_count(&arc), 6); @@ -250,7 +250,7 @@ mod tests { } } - let alloc = GlobalAllocator; + let alloc = HeapAllocator; let mut dropped = false; { let arc = ArcIn::new_in(DropCounter(&mut dropped), alloc); From 0f57ea471aa48b94e3f931ba07ca5d8c69af511f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arkadiusz=20J=C4=99drzejewski?= <32277297+arkjedrz@users.noreply.github.com> Date: Fri, 27 Mar 2026 13:08:09 +0100 Subject: [PATCH 50/59] containers: add `ScoreDebug` and `Debug` (#83) * containers: add `ScoreDebug` and `Debug` Add `ScoreDebug` and `Debug` implementations. * containers: make `score_log` obligatory - Remove gated features. - Remove `no_std` from containers. --- src/containers/BUILD | 5 +- src/containers/Cargo.toml | 1 + src/containers/fixed_capacity/queue.rs | 26 +++++++++ src/containers/fixed_capacity/string.rs | 18 +++++- src/containers/fixed_capacity/vec.rs | 13 +++++ src/containers/generic/queue.rs | 14 +++++ src/containers/generic/string.rs | 7 +++ src/containers/generic/vec.rs | 7 +++ src/containers/inline/option.rs | 10 ++++ src/containers/inline/queue.rs | 14 +++++ src/containers/inline/result.rs | 10 ++++ src/containers/inline/string.rs | 7 +++ src/containers/inline/vec.rs | 7 +++ src/containers/lib.rs | 2 - src/log/score_log_fmt/fmt_impl.rs | 77 +++++++++++++++++-------- 15 files changed, 187 insertions(+), 31 deletions(-) diff --git a/src/containers/BUILD b/src/containers/BUILD index af9cb47e95..9c5446613f 100644 --- a/src/containers/BUILD +++ b/src/containers/BUILD @@ -18,7 +18,10 @@ rust_library( srcs = glob(["**/*.rs"]), edition = "2021", visibility = ["//visibility:public"], - deps = ["//src/elementary"], + deps = [ + "//src/elementary", + "//src/log/score_log", + ], ) rust_test( diff --git a/src/containers/Cargo.toml b/src/containers/Cargo.toml index 18a071be66..82a468e27b 100644 --- a/src/containers/Cargo.toml +++ b/src/containers/Cargo.toml @@ -24,3 +24,4 @@ path = "lib.rs" [dependencies] elementary.workspace = true +score_log.workspace = true diff --git a/src/containers/fixed_capacity/queue.rs b/src/containers/fixed_capacity/queue.rs index 6cd3d5942c..92a3a3356b 100644 --- a/src/containers/fixed_capacity/queue.rs +++ b/src/containers/fixed_capacity/queue.rs @@ -13,8 +13,10 @@ use crate::generic::queue::GenericQueue; use crate::storage::Heap; +use core::fmt; use core::ops; use elementary::{BasicAllocator, HeapAllocator, GLOBAL_ALLOCATOR}; +use score_log::fmt::{FormatSpec, Result as ScoreLogResult, ScoreDebug, Writer}; /// A fixed-capacity queue, using provided allocator. /// @@ -64,6 +66,18 @@ impl ops::DerefMut for FixedCapacityQueueIn<'_, T, A> { } } +impl fmt::Debug for FixedCapacityQueueIn<'_, T, A> { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + fmt::Debug::fmt(&self.inner, f) + } +} + +impl ScoreDebug for FixedCapacityQueueIn<'_, T, A> { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> ScoreLogResult { + ScoreDebug::fmt(&self.inner, f, spec) + } +} + /// A fixed-capacity queue, using global allocator. /// Refer to [`FixedCapacityQueueIn`] for more information. pub struct FixedCapacityQueue(FixedCapacityQueueIn<'static, T, HeapAllocator>); @@ -95,6 +109,18 @@ impl ops::DerefMut for FixedCapacityQueue { } } +impl fmt::Debug for FixedCapacityQueue { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + fmt::Debug::fmt(&self.0, f) + } +} + +impl ScoreDebug for FixedCapacityQueue { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> ScoreLogResult { + ScoreDebug::fmt(&self.0, f, spec) + } +} + #[cfg(test)] mod tests { use super::*; diff --git a/src/containers/fixed_capacity/string.rs b/src/containers/fixed_capacity/string.rs index 7fba59436f..2929763b7c 100644 --- a/src/containers/fixed_capacity/string.rs +++ b/src/containers/fixed_capacity/string.rs @@ -15,8 +15,8 @@ use crate::generic::string::GenericString; use crate::storage::Heap; use core::fmt; use core::ops; -use elementary::GLOBAL_ALLOCATOR; -use elementary::{BasicAllocator, HeapAllocator}; +use elementary::{BasicAllocator, HeapAllocator, GLOBAL_ALLOCATOR}; +use score_log::fmt::{FormatSpec, Result as ScoreLogResult, ScoreDebug, Writer}; /// A fixed-capacity Unicode string, using provided allocator.. /// @@ -98,6 +98,12 @@ impl fmt::Debug for FixedCapacityStringIn<'_, A> { } } +impl ScoreDebug for FixedCapacityStringIn<'_, A> { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> ScoreLogResult { + ScoreDebug::fmt(self.as_str(), f, spec) + } +} + /// A fixed-capacity Unicode string, using global allocator. /// Refer to [`FixedCapacityStringIn`] for more information. pub struct FixedCapacityString(FixedCapacityStringIn<'static, HeapAllocator>); @@ -150,7 +156,13 @@ impl fmt::Display for FixedCapacityString { impl fmt::Debug for FixedCapacityString { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - fmt::Debug::fmt(self.0.as_str(), f) + fmt::Debug::fmt(&self.0, f) + } +} + +impl ScoreDebug for FixedCapacityString { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> ScoreLogResult { + ScoreDebug::fmt(&self.0, f, spec) } } diff --git a/src/containers/fixed_capacity/vec.rs b/src/containers/fixed_capacity/vec.rs index 5679c16442..09ee3790cb 100644 --- a/src/containers/fixed_capacity/vec.rs +++ b/src/containers/fixed_capacity/vec.rs @@ -16,6 +16,7 @@ use crate::storage::Heap; use core::fmt; use core::ops; use elementary::{BasicAllocator, HeapAllocator, GLOBAL_ALLOCATOR}; +use score_log::fmt::{FormatSpec, Result as ScoreLogResult, ScoreDebug, Writer}; /// A fixed-capacity vector, using provided allocator. /// @@ -85,6 +86,12 @@ impl fmt::Debug for FixedCapacityVecIn<'_, T, } } +impl ScoreDebug for FixedCapacityVecIn<'_, T, A> { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> ScoreLogResult { + ScoreDebug::fmt(self.as_slice(), f, spec) + } +} + /// A fixed-capacity vector, using global allocator. /// Refer to [`FixedCapacityVecIn`] for more information. pub struct FixedCapacityVec(FixedCapacityVecIn<'static, T, HeapAllocator>); @@ -131,6 +138,12 @@ impl fmt::Debug for FixedCapacityVec { } } +impl ScoreDebug for FixedCapacityVec { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> ScoreLogResult { + ScoreDebug::fmt(&self.0, f, spec) + } +} + #[cfg(test)] mod tests { use super::*; diff --git a/src/containers/generic/queue.rs b/src/containers/generic/queue.rs index 9cfdccae7d..24a184f03d 100644 --- a/src/containers/generic/queue.rs +++ b/src/containers/generic/queue.rs @@ -11,12 +11,14 @@ // SPDX-License-Identifier: Apache-2.0 // ******************************************************************************* +use core::fmt; use core::iter::FusedIterator; use core::marker::PhantomData; use core::mem::needs_drop; use core::ops::Range; use core::ptr; use core::slice; +use score_log::fmt::{DebugList, FormatSpec, Result as ScoreLogResult, ScoreDebug, Writer}; use crate::storage::Storage; use crate::InsufficientCapacity; @@ -278,6 +280,18 @@ impl> GenericQueue { } } +impl> fmt::Debug for GenericQueue { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.debug_list().entries(self.iter()).finish() + } +} + +impl> ScoreDebug for GenericQueue { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> ScoreLogResult { + DebugList::new(f, spec).entries(self.iter()).finish() + } +} + pub struct Iter<'a, T> { first: slice::Iter<'a, T>, second: slice::Iter<'a, T>, diff --git a/src/containers/generic/string.rs b/src/containers/generic/string.rs index a567d51867..e42f7bf136 100644 --- a/src/containers/generic/string.rs +++ b/src/containers/generic/string.rs @@ -14,6 +14,7 @@ use core::fmt; use core::ops; use core::str; +use score_log::fmt::{FormatSpec, Result as ScoreLogResult, ScoreDebug, Writer}; use super::vec::GenericVec; use crate::storage::Storage; @@ -137,6 +138,12 @@ impl> fmt::Debug for GenericString { } } +impl> ScoreDebug for GenericString { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> ScoreLogResult { + ScoreDebug::fmt(self.as_str(), f, spec) + } +} + #[cfg(test)] mod tests { use super::*; diff --git a/src/containers/generic/vec.rs b/src/containers/generic/vec.rs index 13345bab10..2d915667b0 100644 --- a/src/containers/generic/vec.rs +++ b/src/containers/generic/vec.rs @@ -16,6 +16,7 @@ use core::marker::PhantomData; use core::mem::needs_drop; use core::ops; use core::ptr; +use score_log::fmt::{FormatSpec, Result as ScoreLogResult, ScoreDebug, Writer}; use crate::storage::Storage; use crate::InsufficientCapacity; @@ -175,6 +176,12 @@ impl> fmt::Debug for GenericVec { } } +impl> ScoreDebug for GenericVec { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> ScoreLogResult { + ScoreDebug::fmt(self.as_slice(), f, spec) + } +} + #[cfg(test)] mod tests { use super::*; diff --git a/src/containers/inline/option.rs b/src/containers/inline/option.rs index 196668ed4e..ef9805e35b 100644 --- a/src/containers/inline/option.rs +++ b/src/containers/inline/option.rs @@ -14,6 +14,7 @@ use core::cmp; use core::fmt; use core::mem::MaybeUninit; +use score_log::fmt::{FormatSpec, Result as ScoreLogResult, ScoreDebug, Writer}; /// An optional value, similar to [`Option`] in the Rust standard library. /// @@ -174,6 +175,15 @@ where } } +impl ScoreDebug for InlineOption +where + for<'a> Option<&'a T>: ScoreDebug, +{ + fn fmt(&self, f: Writer, spec: &FormatSpec) -> ScoreLogResult { + ScoreDebug::fmt(&self.as_ref(), f, spec) + } +} + #[cfg(test)] mod tests { use super::*; diff --git a/src/containers/inline/queue.rs b/src/containers/inline/queue.rs index 2c50294821..ea934fda4a 100644 --- a/src/containers/inline/queue.rs +++ b/src/containers/inline/queue.rs @@ -11,7 +11,9 @@ // SPDX-License-Identifier: Apache-2.0 // ******************************************************************************* +use core::fmt; use core::ops; +use score_log::fmt::{FormatSpec, Result as ScoreLogResult, ScoreDebug, Writer}; use crate::generic::queue::GenericQueue; use crate::storage::Inline; @@ -73,6 +75,18 @@ impl ops::DerefMut for InlineQueue } } +impl fmt::Debug for InlineQueue { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + fmt::Debug::fmt(&self.inner, f) + } +} + +impl ScoreDebug for InlineQueue { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> ScoreLogResult { + ScoreDebug::fmt(&self.inner, f, spec) + } +} + #[cfg(test)] mod tests { use std::collections::VecDeque; diff --git a/src/containers/inline/result.rs b/src/containers/inline/result.rs index 4286eaa2f0..8506d6e773 100644 --- a/src/containers/inline/result.rs +++ b/src/containers/inline/result.rs @@ -14,6 +14,7 @@ use core::cmp; use core::fmt; use core::mem::ManuallyDrop; +use score_log::fmt::{FormatSpec, Result as ScoreLogResult, ScoreDebug, Writer}; /// An result value for error handling, similar to [`Result`] in the Rust standard library. /// @@ -188,6 +189,15 @@ where } } +impl ScoreDebug for InlineResult +where + for<'a> Result<&'a T, &'a E>: ScoreDebug, +{ + fn fmt(&self, f: Writer, spec: &FormatSpec) -> ScoreLogResult { + ScoreDebug::fmt(&self.as_ref(), f, spec) + } +} + #[cfg(test)] mod tests { use super::*; diff --git a/src/containers/inline/string.rs b/src/containers/inline/string.rs index f1e3b40f86..17308329a0 100644 --- a/src/containers/inline/string.rs +++ b/src/containers/inline/string.rs @@ -13,6 +13,7 @@ use core::fmt; use core::ops; +use score_log::fmt::{FormatSpec, Result as ScoreLogResult, ScoreDebug, Writer}; use crate::generic::string::GenericString; use crate::storage::Inline; @@ -81,6 +82,12 @@ impl fmt::Debug for InlineString { } } +impl ScoreDebug for InlineString { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> ScoreLogResult { + ScoreDebug::fmt(self.as_str(), f, spec) + } +} + #[cfg(test)] mod tests { use super::*; diff --git a/src/containers/inline/vec.rs b/src/containers/inline/vec.rs index 2dcefff502..9f45364d9f 100644 --- a/src/containers/inline/vec.rs +++ b/src/containers/inline/vec.rs @@ -13,6 +13,7 @@ use core::fmt; use core::ops; +use score_log::fmt::{FormatSpec, Result as ScoreLogResult, ScoreDebug, Writer}; use crate::generic::vec::GenericVec; use crate::storage::Inline; @@ -79,6 +80,12 @@ impl fmt::Debug for InlineVec ScoreDebug for InlineVec { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> ScoreLogResult { + ScoreDebug::fmt(self.as_slice(), f, spec) + } +} + #[cfg(test)] mod tests { use super::*; diff --git a/src/containers/lib.rs b/src/containers/lib.rs index 9b6933859a..5444c96a79 100644 --- a/src/containers/lib.rs +++ b/src/containers/lib.rs @@ -11,8 +11,6 @@ // SPDX-License-Identifier: Apache-2.0 // ******************************************************************************* -#![cfg_attr(not(test), no_std)] - extern crate alloc; pub mod fixed_capacity; diff --git a/src/log/score_log_fmt/fmt_impl.rs b/src/log/score_log_fmt/fmt_impl.rs index d3b83179cf..d516f8ec32 100644 --- a/src/log/score_log_fmt/fmt_impl.rs +++ b/src/log/score_log_fmt/fmt_impl.rs @@ -14,14 +14,14 @@ //! `ScoreDebug` implementations for common types. use crate::builders::{DebugList, DebugStruct, DebugTuple}; -use crate::fmt::{Error, Result, ScoreDebug, Writer}; +use crate::fmt::{Error, Result as FmtResult, ScoreDebug, Writer}; use crate::fmt_spec::{DisplayHint, FormatSpec}; use crate::DebugMap; macro_rules! impl_debug_for_t { ($t:ty, $fn:ident) => { impl ScoreDebug for $t { - fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> FmtResult { f.$fn(self, spec) } } @@ -41,13 +41,13 @@ impl_debug_for_t!(u32, write_u32); impl_debug_for_t!(u64, write_u64); impl ScoreDebug for () { - fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> FmtResult { f.write_str("()", spec) } } impl ScoreDebug for str { - fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> FmtResult { match spec.get_display_hint() { DisplayHint::Debug => { let queue_spec = FormatSpec::new(); @@ -61,13 +61,13 @@ impl ScoreDebug for str { } impl ScoreDebug for String { - fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> FmtResult { ScoreDebug::fmt(&self.as_str(), f, spec) } } impl ScoreDebug for core::str::Utf8Error { - fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> FmtResult { let mut debug_struct = DebugStruct::new(f, spec, "Utf8Error"); debug_struct .field("valid_up_to", &self.valid_up_to()) @@ -77,7 +77,7 @@ impl ScoreDebug for core::str::Utf8Error { } impl ScoreDebug for std::string::FromUtf8Error { - fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> FmtResult { let mut debug_struct = DebugStruct::new(f, spec, "FromUtf8Error"); debug_struct .field("bytes", &self.as_bytes()) @@ -87,7 +87,7 @@ impl ScoreDebug for std::string::FromUtf8Error { } impl ScoreDebug for core::time::Duration { - fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> FmtResult { f.write_f64(&self.as_secs_f64(), spec)?; f.write_str("s", spec) } @@ -96,7 +96,7 @@ impl ScoreDebug for core::time::Duration { macro_rules! impl_debug_for_t_casted { ($ti:ty, $to:ty, $fn:ident) => { impl ScoreDebug for $ti { - fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> FmtResult { let casted = <$to>::try_from(*self).map_err(|_| Error)?; f.$fn(&casted, spec) } @@ -114,57 +114,57 @@ impl_debug_for_t_casted!(usize, u32, write_u32); impl_debug_for_t_casted!(usize, u64, write_u64); impl ScoreDebug for &T { - fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> FmtResult { ScoreDebug::fmt(&**self, f, spec) } } impl ScoreDebug for &mut T { - fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> FmtResult { ScoreDebug::fmt(&**self, f, spec) } } impl ScoreDebug for [T] { - fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> FmtResult { let mut debug_list = DebugList::new(f, spec); debug_list.entries(self.iter()).finish() } } impl ScoreDebug for [T; N] { - fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> FmtResult { ScoreDebug::fmt(&&self[..], f, spec) } } impl ScoreDebug for core::array::TryFromSliceError { - fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> FmtResult { let mut debug_tuple = DebugTuple::new(f, spec, "TryFromSliceError"); debug_tuple.field(&()).finish() } } impl ScoreDebug for Vec { - fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> FmtResult { ScoreDebug::fmt(&**self, f, spec) } } impl ScoreDebug for std::rc::Rc { - fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> FmtResult { ScoreDebug::fmt(&**self, f, spec) } } impl ScoreDebug for std::sync::Arc { - fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> FmtResult { ScoreDebug::fmt(&**self, f, spec) } } impl ScoreDebug for Option { - fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> FmtResult { match self { Some(v) => { let outer_spec = FormatSpec::new(); @@ -177,8 +177,27 @@ impl ScoreDebug for Option { } } +impl ScoreDebug for Result { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> FmtResult { + match self { + Ok(v) => { + let outer_spec = FormatSpec::new(); + f.write_str("Ok(", &outer_spec)?; + ScoreDebug::fmt(v, f, spec)?; + f.write_str(")", &outer_spec) + }, + Err(e) => { + let outer_spec = FormatSpec::new(); + f.write_str("Err(", &outer_spec)?; + ScoreDebug::fmt(e, f, spec)?; + f.write_str(")", &outer_spec) + }, + } + } +} + impl ScoreDebug for Box { - fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> FmtResult { ScoreDebug::fmt(&**self, f, spec) } } @@ -188,27 +207,27 @@ where K: ScoreDebug, V: ScoreDebug, { - fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> FmtResult { let mut debug_map = DebugMap::new(f, spec); debug_map.entries(self.iter()).finish() } } impl ScoreDebug for std::sync::PoisonError { - fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> FmtResult { let mut debug_struct = DebugStruct::new(f, spec, "PoisonError"); debug_struct.finish_non_exhaustive() } } impl ScoreDebug for (A, B) { - fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> FmtResult { DebugTuple::new(f, spec, "").field(&self.0).field(&self.1).finish() } } impl ScoreDebug for (A, B, C) { - fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> FmtResult { DebugTuple::new(f, spec, "") .field(&self.0) .field(&self.1) @@ -218,7 +237,7 @@ impl ScoreDebug for (A, B, C) { } impl ScoreDebug for (A, B, C, D) { - fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> FmtResult { DebugTuple::new(f, spec, "") .field(&self.0) .field(&self.1) @@ -229,7 +248,7 @@ impl ScoreDebug for } impl ScoreDebug for (A, B, C, D, E) { - fn fmt(&self, f: Writer, spec: &FormatSpec) -> Result { + fn fmt(&self, f: Writer, spec: &FormatSpec) -> FmtResult { DebugTuple::new(f, spec, "") .field(&self.0) .field(&self.1) @@ -378,6 +397,14 @@ mod tests { common_test_debug(Option::::None); } + #[test] + fn test_result_debug() { + let r1: Result = Ok(123); + common_test_debug(r1); + let r2: Result = Err("fail"); + common_test_debug(r2); + } + #[test] fn test_box_debug() { common_test_debug(Box::new(432.1)); From 95d0a240d1a18e2f370dc62714b1936865c186bb Mon Sep 17 00:00:00 2001 From: Alexander Lanin Date: Wed, 15 Apr 2026 16:32:15 +0200 Subject: [PATCH 51/59] feat: upgrade docs-as-code to 4.0.0 (#85) --- MODULE.bazel | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index a56a9da1e8..cc7509cfb6 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -10,11 +10,7 @@ # # SPDX-License-Identifier: Apache-2.0 # ******************************************************************************* -module( - name = "score_baselibs_rust", - version = "0.0.0", - compatibility_level = 0, -) +module(name = "score_baselibs_rust") # Bazel global rules bazel_dep(name = "rules_python", version = "1.4.1") @@ -27,16 +23,17 @@ bazel_dep(name = "platforms", version = "1.0.0") # S-CORE process rules bazel_dep(name = "score_bazel_platforms", version = "0.0.4") -bazel_dep(name = "score_docs_as_code", version = "3.0.0") +bazel_dep(name = "score_docs_as_code", version = "4.0.1") bazel_dep(name = "score_tooling", version = "1.1.0") bazel_dep(name = "score_rust_policies", version = "0.0.5") +bazel_dep(name = "score_process", version = "1.5.3") +bazel_dep(name = "score_platform", version = "0.5.4") # This is main score repo -bazel_dep(name = "score_process", version = "1.4.3", dev_dependency = True) -bazel_dep(name = "score_platform", version = "0.5.2", dev_dependency = True) # This is main score repo +# 0.5.4 is ancient, we pull a recent version from main branch (2026-04-15): git_override( module_name = "score_platform", - commit = "7d252e75b733b09225f1a383bb00d5d7d79fa5ae", - remote = "https://github.com/qorix-group/score.git", + commit = "ab3b9e4a4e62b251aeebed73c465fb241e0e50a3", + remote = "https://github.com/eclipse-score/score.git", ) # bazel_dep(name = "score_virtualization", version = "0.0.1", dev_dependency = True) From cd6ce516cc913ed03532b8e18c51df6f3e668c46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maximilian=20S=C3=B6ren=20Pollak?= Date: Wed, 22 Apr 2026 14:45:50 +0200 Subject: [PATCH 52/59] Fix: Upgrade dependencies (#86) * Fix: Fixing toolchain calls --- MODULE.bazel | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index cc7509cfb6..1123b07596 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -22,9 +22,9 @@ bazel_dep(name = "buildifier_prebuilt", version = "7.3.1") bazel_dep(name = "platforms", version = "1.0.0") # S-CORE process rules -bazel_dep(name = "score_bazel_platforms", version = "0.0.4") +bazel_dep(name = "score_bazel_platforms", version = "0.1.1") bazel_dep(name = "score_docs_as_code", version = "4.0.1") -bazel_dep(name = "score_tooling", version = "1.1.0") +bazel_dep(name = "score_tooling", version = "1.2.0") bazel_dep(name = "score_rust_policies", version = "0.0.5") bazel_dep(name = "score_process", version = "1.5.3") bazel_dep(name = "score_platform", version = "0.5.4") # This is main score repo @@ -38,8 +38,8 @@ git_override( # bazel_dep(name = "score_virtualization", version = "0.0.1", dev_dependency = True) # Toolchains and extensions -bazel_dep(name = "score_bazel_cpp_toolchains", version = "0.2.2", dev_dependency = True) -bazel_dep(name = "score_toolchains_rust", version = "0.4.0", dev_dependency = True) +bazel_dep(name = "score_bazel_cpp_toolchains", version = "0.5.1", dev_dependency = True) +bazel_dep(name = "score_toolchains_rust", version = "0.8.0", dev_dependency = True) # S-CORE crates bazel_dep(name = "score_crates", version = "0.0.6") From 883475363d79b5f720f3d382f063f7e939536dbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maximilian=20S=C3=B6ren=20Pollak?= Date: Mon, 27 Apr 2026 09:29:47 +0200 Subject: [PATCH 53/59] Feat: Upgrade Deps (#87) * Feat: Upgrade Deps - Upgrade Docs-As-Code - Upgrade score_bazel_platforms - Upgrade Process * Feat: Upgrade score_platform --- MODULE.bazel | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index 1123b07596..ccf1b359ac 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -22,19 +22,13 @@ bazel_dep(name = "buildifier_prebuilt", version = "7.3.1") bazel_dep(name = "platforms", version = "1.0.0") # S-CORE process rules -bazel_dep(name = "score_bazel_platforms", version = "0.1.1") -bazel_dep(name = "score_docs_as_code", version = "4.0.1") +bazel_dep(name = "score_bazel_platforms", version = "0.1.2") +bazel_dep(name = "score_docs_as_code", version = "4.0.3") bazel_dep(name = "score_tooling", version = "1.2.0") bazel_dep(name = "score_rust_policies", version = "0.0.5") -bazel_dep(name = "score_process", version = "1.5.3") -bazel_dep(name = "score_platform", version = "0.5.4") # This is main score repo +bazel_dep(name = "score_process", version = "1.5.4") +bazel_dep(name = "score_platform", version = "0.5.5") # This is main score repo -# 0.5.4 is ancient, we pull a recent version from main branch (2026-04-15): -git_override( - module_name = "score_platform", - commit = "ab3b9e4a4e62b251aeebed73c465fb241e0e50a3", - remote = "https://github.com/eclipse-score/score.git", -) # bazel_dep(name = "score_virtualization", version = "0.0.1", dev_dependency = True) # Toolchains and extensions From 8a54c832bbeaefe713d5242b76fb5fab7091877d Mon Sep 17 00:00:00 2001 From: Anton Krivoborodov <63401640+antonkri@users.noreply.github.com> Date: Mon, 27 Apr 2026 14:23:53 +0300 Subject: [PATCH 54/59] adapt v07 deps (#89) * adapt v07 deps * Feat: Upgrade rules_rust dep & Lockfile --------- Co-authored-by: MaximilianSoerenPollak --- MODULE.bazel | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MODULE.bazel b/MODULE.bazel index ccf1b359ac..0057caae03 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -15,7 +15,7 @@ module(name = "score_baselibs_rust") # Bazel global rules bazel_dep(name = "rules_python", version = "1.4.1") bazel_dep(name = "bazel_skylib", version = "1.7.1") -bazel_dep(name = "rules_rust", version = "0.61.0") +bazel_dep(name = "rules_rust", version = "0.68.1-score") bazel_dep(name = "rules_cc", version = "0.1.1") bazel_dep(name = "aspect_rules_lint", version = "2.0.0") bazel_dep(name = "buildifier_prebuilt", version = "7.3.1") From 2f6fa1d95709b613c978b4b8e7511a10909f0b93 Mon Sep 17 00:00:00 2001 From: Andrey Babanin Date: Fri, 5 Jun 2026 17:28:12 +0200 Subject: [PATCH 55/59] Cleanup workflows for rust --- .bazelrc | 24 + .github/actions/setup-rust-build/action.yml | 47 + .github/workflows/build.yml | 71 - .github/workflows/build_linux.yml | 6 +- .github/workflows/build_qnx.yml | 4 +- .github/workflows/build_qnx8.yml | 37 - .github/workflows/bzlmod-lock.yml | 26 - .github/workflows/cargo_required.yml | 13 - .github/workflows/copyright.yml | 12 +- .github/workflows/docs-cleanup.yml | 29 - .github/workflows/docs.yml | 45 - .github/workflows/format.yml | 27 +- .github/workflows/gitlint.yml | 34 - .github/workflows/license_check.yml | 34 - .github/workflows/lint_clippy.yml | 3 - .github/workflows/rust_coverage.yml | 1 - .github/workflows/tests.yml | 48 - BUILD | 2 +- MODULE.bazel | 1 + MODULE.bazel.lock | 5477 ++++++++++++++++++- examples/integration/main.cpp | 24 +- 21 files changed, 5545 insertions(+), 420 deletions(-) create mode 100644 .github/actions/setup-rust-build/action.yml delete mode 100644 .github/workflows/build.yml delete mode 100644 .github/workflows/build_qnx8.yml delete mode 100644 .github/workflows/bzlmod-lock.yml delete mode 100644 .github/workflows/docs-cleanup.yml delete mode 100644 .github/workflows/docs.yml delete mode 100644 .github/workflows/gitlint.yml delete mode 100644 .github/workflows/license_check.yml delete mode 100644 .github/workflows/tests.yml diff --git a/.bazelrc b/.bazelrc index 04e3d5562e..26ba1d0574 100644 --- a/.bazelrc +++ b/.bazelrc @@ -24,6 +24,10 @@ build --tool_java_runtime_version=remotejdk_17 build --credential_helper="*.qnx.com=%workspace%/.github/tools/qnx_credential_helper.py" build --experimental_retain_test_configuration_across_testonly # needed for QNX tests until bazel update to 8.6.0. See https://github.com/bazelbuild/bazel/pull/28115 +# Ferrocene must be common compiler for HOST. To ensure metadata compatibility for proc macro crates! +common --extra_toolchains=@score_gcc_x86_64_toolchain//:x86_64-linux-gcc_12.2.0 +common --extra_toolchains=@score_toolchains_rust//toolchains/ferrocene:ferrocene_x86_64_unknown_linux_gnu + build:_bl_stub --//score/json:base_library=nlohmann build:_bl_stub --//score/memory/shared/flags:use_typedshmd=False @@ -43,6 +47,7 @@ build:bl-x86_64-linux --config=_bl_stub build:bl-x86_64-linux --config=_bl_toolchain_common build:bl-x86_64-linux --platforms=@score_bazel_platforms//:x86_64-linux-gcc_12.2.0-posix build:bl-x86_64-linux --extra_toolchains=@score_gcc_x86_64_toolchain//:x86_64-linux-gcc_12.2.0 +build:bl-x86_64-linux --extra_toolchains=@score_toolchains_rust//toolchains/ferrocene:ferrocene_x86_64_unknown_linux_gnu test:bl-x86_64-linux --config=_bl_common # Target configuration for CPU:AArch64|OS:Linux build (do not use it in case of system toolchains!) @@ -50,6 +55,7 @@ build:bl-aarch64-linux --config=_bl_stub build:bl-aarch64-linux --config=_bl_toolchain_common build:bl-aarch64-linux --platforms=@score_bazel_platforms//:aarch64-linux-gcc_12.2.0-posix build:bl-aarch64-linux --extra_toolchains=@score_gcc_aarch64_toolchain//:aarch64-linux-gcc_12.2.0 +build:bl-aarch64-linux --extra_toolchains=@score_toolchains_rust//toolchains/ferrocene:ferrocene_aarch64_unknown_linux_gnu test:bl-aarch64-linux --config=_bl_common test:bl-aarch64-linux --test_timeout=300 test:bl-aarch64-linux --run_under=//:qemu_aarch64 @@ -61,6 +67,7 @@ build:bl-x86_64-qnx --config=_bl_toolchain_common build:bl-x86_64-qnx --platforms=@score_bazel_platforms//:x86_64-qnx-sdp_8.0.0-posix build:bl-x86_64-qnx --extra_toolchains=@score_qcc_x86_64_toolchain//:x86_64-qnx-sdp_8.0.0 build:bl-x86_64-qnx --extra_toolchains=@score_qnx_x86_64_ifs_toolchain//:ifs-x86_64-qnx-sdp_8.0.0 +build:bl-x86_64-qnx --extra_toolchains=@score_toolchains_rust//toolchains/ferrocene:ferrocene_x86_64_pc_nto_qnx800 test:bl-x86_64-qnx --config=_bl_common test:bl-x86_64-qnx --run_under=@score_qnx_unit_tests//src:run_under_qnx test:bl-x86_64-qnx --test_tag_filters= @@ -73,12 +80,29 @@ build:bl-aarch64-qnx --incompatible_strict_action_env build:bl-aarch64-qnx --platforms=@score_bazel_platforms//:aarch64-qnx-sdp_8.0.0-posix build:bl-aarch64-qnx --extra_toolchains=@score_qcc_aarch64_toolchain//:aarch64-qnx-sdp_8.0.0 build:bl-aarch64-qnx --extra_toolchains=@score_qnx_aarch64_ifs_toolchain//:ifs-aarch64-qnx-sdp_8.0.0 +build:bl-aarch64-qnx --extra_toolchains=@score_toolchains_rust//toolchains/ferrocene:ferrocene_aarch64_unknown_nto_qnx800 test:bl-aarch64-qnx --config=_bl_common test:bl-aarch64-qnx --test_timeout=300 test:bl-aarch64-qnx --run_under=@score_qnx_unit_tests//src:run_under_qnx test:bl-aarch64-qnx --test_tag_filters= test:bl-aarch64-qnx --test_lang_filters=cc,rust +# Ferrocene Rust coverage config +build:ferrocene-coverage --@rules_rust//rust/settings:extra_rustc_flag=-Cinstrument-coverage +build:ferrocene-coverage --@rules_rust//rust/settings:extra_rustc_flag=-Clink-dead-code +build:ferrocene-coverage --@rules_rust//rust/settings:extra_rustc_flag=-Ccodegen-units=1 +build:ferrocene-coverage --@rules_rust//rust/settings:extra_rustc_flag=-Cdebuginfo=2 +build:ferrocene-coverage --@rules_rust//rust/settings:extra_exec_rustc_flag=-Cinstrument-coverage +build:ferrocene-coverage --@rules_rust//rust/settings:extra_exec_rustc_flag=-Clink-dead-code +build:ferrocene-coverage --@rules_rust//rust/settings:extra_exec_rustc_flag=-Ccodegen-units=1 +build:ferrocene-coverage --@rules_rust//rust/settings:extra_exec_rustc_flag=-Cdebuginfo=2 +test:ferrocene-coverage --run_under=@score_tooling//coverage:llvm_profile_wrapper + +# Clippy linting for Rust +build --aspects=@score_rust_policies//clippy:linters.bzl%clippy_strict +build --output_groups=+rules_lint_human +build:lint --@aspect_rules_lint//lint:fail_on_violation=true + # Coverage configuration for C++ coverage --features=coverage coverage --combined_report=lcov diff --git a/.github/actions/setup-rust-build/action.yml b/.github/actions/setup-rust-build/action.yml new file mode 100644 index 0000000000..c02d25bc11 --- /dev/null +++ b/.github/actions/setup-rust-build/action.yml @@ -0,0 +1,47 @@ +# ******************************************************************************* +# Copyright (c) 2026 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# This program and the accompanying materials are made available under the +# terms of the Apache License Version 2.0 which is available at +# https://www.apache.org/licenses/LICENSE-2.0 +# +# SPDX-License-Identifier: Apache-2.0 +# ******************************************************************************* +name: 'Setup Rust Build Environment' +description: 'Checks out code, installs protoc, and caches cargo dependencies' +inputs: + repo-token: + description: 'GitHub token for protoc downloads' + required: true +runs: + using: "composite" + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + - name: Install protoc 26.1 + uses: arduino/setup-protoc@v3 + with: + version: 26.1 + repo-token: ${{ inputs.repo-token }} + - name: Cache cargo & target + uses: actions/cache@v3 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + target + ~/.cargo/bin + key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} + restore-keys: | + ${{ runner.os }}-cargo- + - name: Install cargo-tarpaulin if not already installed + run: | + if ! command -v cargo-tarpaulin > /dev/null; then + cargo install cargo-tarpaulin --version 0.32.7 --locked + else + echo "cargo-tarpaulin is already installed" + fi + shell: bash diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml deleted file mode 100644 index 0b38ee30f6..0000000000 --- a/.github/workflows/build.yml +++ /dev/null @@ -1,71 +0,0 @@ -# ******************************************************************************* -# Copyright (c) 2025 Contributors to the Eclipse Foundation -# -# See the NOTICE file(s) distributed with this work for additional -# information regarding copyright ownership. -# -# This program and the accompanying materials are made available under the -# terms of the Apache License Version 2.0 which is available at -# https://www.apache.org/licenses/LICENSE-2.0 -# -# SPDX-License-Identifier: Apache-2.0 -# ******************************************************************************* - -name: Bazel Build - -on: - pull_request: - types: [opened, reopened, synchronize] - merge_group: - types: [checks_requested] - -env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - SCORE_QNX_USER: ${{ secrets.SCORE_QNX_USER }} - SCORE_QNX_PASSWORD: ${{ secrets.SCORE_QNX_PASSWORD }} - SCORE_QNX_LICENSE: ${{ secrets.SCORE_QNX_LICENSE }} -jobs: - build: - name: Build Bazel Code - runs-on: ${{ vars.REPO_RUNNER_LABELS && fromJSON(vars.REPO_RUNNER_LABELS) || 'ubuntu-latest' }} - steps: - - name: Checkout code - uses: actions/checkout@v4.2.2 - - - name: Install protoc 26.1 - uses: arduino/setup-protoc@v3 - with: - version: 26.1 - repo-token: ${{ secrets.GITHUB_TOKEN }} - - - name: Setup Bazel - uses: bazel-contrib/setup-bazel@0.15.0 - with: - bazelisk-version: 1.26.0 # newest LTS before 1 Jun 2025 - disk-cache: true - repository-cache: true - bazelisk-cache: true - - - name: Bazel info (discover paths) - id: bazel-info - run: | - echo "BAZEL_OUTPUT_BASE=$(bazel info output_base)" >> $GITHUB_ENV - echo "BAZEL_USER_ROOT=$(bazel info output_user_root)" >> $GITHUB_ENV - echo "BAZEL_REPO_CACHE=$(bazel info repository_cache)" >> $GITHUB_ENV - bazel info - - - name: Cache Bazel output base - uses: actions/cache@v4 - with: - path: | - ${{ env.BAZEL_OUTPUT_BASE }}/action_cache - ${{ env.BAZEL_OUTPUT_BASE }}/bazel-out - ${{ env.BAZEL_OUTPUT_BASE }}/external - ${{ env.BAZEL_OUTPUT_BASE }}/execroot - key: bazel-ob-v2-${{ runner.os }}-${{ hashFiles('.bazelversion', 'MODULE.bazel', 'MODULE.bazel.lock', '**/*.bzl', 'Cargo.lock') }} - restore-keys: | - bazel-ob-v2-${{ runner.os }}- - - - name: Build with Bazel - run: | - bazel build --lockfile_mode=error --config=x86_64-linux //... diff --git a/.github/workflows/build_linux.yml b/.github/workflows/build_linux.yml index 4850649654..678aee5424 100644 --- a/.github/workflows/build_linux.yml +++ b/.github/workflows/build_linux.yml @@ -31,15 +31,17 @@ jobs: matrix: include: - bazel-config: bl-x86_64-linux - bazel-build-target: "//score/..." + bazel-build-target: "//score/... //src/..." bazel-test-target: >- //score/... + //src/... -//score/language/safecpp/aborts_upon_exception:abortsuponexception_toolchain_test bazel-test-extra-flags: "" - bazel-config: bl-aarch64-linux - bazel-build-target: "//score/..." + bazel-build-target: "//score/... //src/..." bazel-test-target: >- //score/... + //src/... -//score/language/safecpp/aborts_upon_exception:abortsuponexception_toolchain_test -//score/os/test:acl_test -//score/os/test:errno_test diff --git a/.github/workflows/build_qnx.yml b/.github/workflows/build_qnx.yml index d722b6a820..ce6b7d2fa8 100644 --- a/.github/workflows/build_qnx.yml +++ b/.github/workflows/build_qnx.yml @@ -30,6 +30,7 @@ jobs: - bazel-config: bl-x86_64-qnx bazel-test-target: >- //score/... + //src/... -//score/language/futurecpp/tests:memory_resource_test -//score/language/futurecpp/tests:zip_iterator_test -//score/language/safecpp/aborts_upon_exception:abortsuponexception_toolchain_test @@ -40,6 +41,7 @@ jobs: - bazel-config: bl-aarch64-qnx bazel-test-target: >- //score/... + //src/... -//score/language/futurecpp/tests:memory_resource_test -//score/language/safecpp/aborts_upon_exception:abortsuponexception_toolchain_test -//score/memory/shared:shared_memory_factory_test @@ -51,7 +53,7 @@ jobs: contents: read pull-requests: read with: - bazel-target: "//score/..." + bazel-target: "//score/... //src/..." bazel-config: ${{ matrix.bazel-config }} bazel-test-target: ${{ matrix.bazel-test-target }} credential-helper: ".github/tools/qnx_credential_helper.py" diff --git a/.github/workflows/build_qnx8.yml b/.github/workflows/build_qnx8.yml deleted file mode 100644 index f11fdf1afd..0000000000 --- a/.github/workflows/build_qnx8.yml +++ /dev/null @@ -1,37 +0,0 @@ -# ******************************************************************************* -# Copyright (c) 2025 Contributors to the Eclipse Foundation -# -# See the NOTICE file(s) distributed with this work for additional -# information regarding copyright ownership. -# -# This program and the accompanying materials are made available under the -# terms of the Apache License Version 2.0 which is available at -# https://www.apache.org/licenses/LICENSE-2.0 -# -# SPDX-License-Identifier: Apache-2.0 -# ******************************************************************************* - -name: QNX8 Build -on: - pull_request_target: - types: [opened, reopened, synchronize] - merge_group: - types: [checks_requested] -jobs: - qnx-build: - uses: eclipse-score/cicd-workflows/.github/workflows/qnx-build.yml@main - permissions: - contents: read - pull-requests: read - strategy: - matrix: - config: ['arm64-qnx', 'x86_64-qnx'] - with: - bazel-target: '//src/...' - bazel-config: ${{ matrix.config }} - credential-helper: 'scripts/internal/qnx_creds.py' - environment-name: 'workflow-approval' - secrets: - score-qnx-license: ${{ secrets.SCORE_QNX_LICENSE }} - score-qnx-user: ${{ secrets.SCORE_QNX_USER }} - score-qnx-password: ${{ secrets.SCORE_QNX_PASSWORD }} diff --git a/.github/workflows/bzlmod-lock.yml b/.github/workflows/bzlmod-lock.yml deleted file mode 100644 index eebb3df68d..0000000000 --- a/.github/workflows/bzlmod-lock.yml +++ /dev/null @@ -1,26 +0,0 @@ -# ******************************************************************************* -# Copyright (c) 2025 Contributors to the Eclipse Foundation -# -# See the NOTICE file(s) distributed with this work for additional -# information regarding copyright ownership. -# -# This program and the accompanying materials are made available under the -# terms of the Apache License Version 2.0 which is available at -# https://www.apache.org/licenses/LICENSE-2.0 -# -# SPDX-License-Identifier: Apache-2.0 -# ******************************************************************************* -name: Bzlmod Lockfile Check -on: - pull_request: - types: [opened, reopened, synchronize] - merge_group: - types: [checks_requested] - push: - branches: - - main -jobs: - bzlmod-lock: - uses: eclipse-score/cicd-workflows/.github/workflows/bzlmod-lock-check.yml@main - with: - working-directory: . diff --git a/.github/workflows/cargo_required.yml b/.github/workflows/cargo_required.yml index 2383d2a532..e2461747c3 100644 --- a/.github/workflows/cargo_required.yml +++ b/.github/workflows/cargo_required.yml @@ -10,20 +10,16 @@ # # SPDX-License-Identifier: Apache-2.0 # ******************************************************************************* - name: cargo build, test, coverage and miri report - on: push: branches: [main, development] pull_request: branches: [main, development] types: [opened, ready_for_review, reopened, synchronize] - env: CARGO_TERM_COLOR: always GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - jobs: cargo-checks: #permissions for docs deployment @@ -36,26 +32,21 @@ jobs: steps: - name: Checkout Repository uses: actions/checkout@v4 - - name: Setup Rust Build Environment uses: ./.github/actions/setup-rust-build with: repo-token: ${{ secrets.GITHUB_TOKEN }} - # ---------- BUILD ---------- - name: Cargo build run: cargo build --verbose - # ---------- TARPAULIN(TEST + COVERAGE) ---------- - name: Run tests under coverage run: cargo +nightly tarpaulin --version 0.32.7 --skip-clean --out Html --verbose --no-dead-code --engine llvm --all-features - - name: Upload coverage report uses: actions/upload-artifact@v4 with: name: coverage-report path: tarpaulin-report.html - # ---------- MIRI ---------- - name: Install nightly + miri (minimal profile) uses: actions-rs/toolchain@v1 @@ -65,21 +56,17 @@ jobs: profile: minimal components: miri override: true - - name: Prefetch crates for nightly if: github.event.pull_request.draft == false run: cargo +nightly-2025-12-15 fetch --locked - - name: Purge Miri artifacts if: github.event.pull_request.draft == false run: | rm -rf target/miri rm -rf ~/.cache/miri - - name: Prefetch and build dependencies for Miri if: github.event.pull_request.draft == false run: cargo +nightly-2025-12-15 miri setup - - name: Run Miri and save report if: github.event.pull_request.draft == false env: diff --git a/.github/workflows/copyright.yml b/.github/workflows/copyright.yml index aee334dfa5..b35386b3d4 100644 --- a/.github/workflows/copyright.yml +++ b/.github/workflows/copyright.yml @@ -1,5 +1,5 @@ # ******************************************************************************* -# Copyright (c) 2025 Contributors to the Eclipse Foundation +# Copyright (c) 2026 Contributors to the Eclipse Foundation # # See the NOTICE file(s) distributed with this work for additional # information regarding copyright ownership. @@ -10,18 +10,14 @@ # # SPDX-License-Identifier: Apache-2.0 # ******************************************************************************* - name: Copyright checks +permissions: + contents: read on: pull_request: types: [opened, reopened, synchronize] merge_group: types: [checks_requested] -env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - jobs: copyright-check: - uses: eclipse-score/cicd-workflows/.github/workflows/copyright.yml@main - with: - bazel-target: "run --lockfile_mode=error //:copyright.check" + uses: eclipse-score/cicd-workflows/.github/workflows/copyright.yml@af347722c7ae3ed85518895c11268d96ac728f62 diff --git a/.github/workflows/docs-cleanup.yml b/.github/workflows/docs-cleanup.yml deleted file mode 100644 index 56626f0fbb..0000000000 --- a/.github/workflows/docs-cleanup.yml +++ /dev/null @@ -1,29 +0,0 @@ -# ******************************************************************************* -# Copyright (c) 2025 Contributors to the Eclipse Foundation -# -# See the NOTICE file(s) distributed with this work for additional -# information regarding copyright ownership. -# -# This program and the accompanying materials are made available under the -# terms of the Apache License Version 2.0 which is available at -# https://www.apache.org/licenses/LICENSE-2.0 -# -# SPDX-License-Identifier: Apache-2.0 -# ******************************************************************************* - -name: Documentation Cleanup - -permissions: - contents: write - pages: write - id-token: write - -on: - schedule: - - cron: "0 0 * * *" # Runs every day at midnight UTC - -jobs: - docs-cleanup: - uses: eclipse-score/cicd-workflows/.github/workflows/docs-cleanup.yml@main - secrets: - token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml deleted file mode 100644 index d8c477c78f..0000000000 --- a/.github/workflows/docs.yml +++ /dev/null @@ -1,45 +0,0 @@ -# ******************************************************************************* -# Copyright (c) 2025 Contributors to the Eclipse Foundation -# -# See the NOTICE file(s) distributed with this work for additional -# information regarding copyright ownership. -# -# This program and the accompanying materials are made available under the -# terms of the Apache License Version 2.0 which is available at -# https://www.apache.org/licenses/LICENSE-2.0 -# -# SPDX-License-Identifier: Apache-2.0 -# ******************************************************************************* - -name: Documentation - -permissions: - contents: write - pages: write - pull-requests: write - id-token: write - -on: - pull_request_target: - types: [opened, reopened, synchronize] # Allows forks to trigger the docs build - push: - branches: - - main - merge_group: - types: [checks_requested] - release: - types: [created] - -jobs: - build-docs: - uses: eclipse-score/cicd-workflows/.github/workflows/docs.yml@main - permissions: - contents: write - pages: write - pull-requests: write - id-token: write - - with: - # the bazel-target depends on your repo specific docs_targets configuration (e.g. "suffix") - bazel-target: "--lockfile_mode=error //:docs -- --github_user=${{ github.repository_owner }} --github_repo=${{ github.event.repository.name }}" - retention-days: 3 diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml index 35cbc74e32..5f58e11f71 100644 --- a/.github/workflows/format.yml +++ b/.github/workflows/format.yml @@ -1,5 +1,5 @@ # ******************************************************************************* -# Copyright (c) 2025 Contributors to the Eclipse Foundation +# Copyright (c) 2026 Contributors to the Eclipse Foundation # # See the NOTICE file(s) distributed with this work for additional # information regarding copyright ownership. @@ -10,18 +10,29 @@ # # SPDX-License-Identifier: Apache-2.0 # ******************************************************************************* - name: Formatting checks - +permissions: + contents: read on: pull_request: types: [opened, reopened, synchronize] merge_group: types: [checks_requested] -env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} jobs: formatting-check: - uses: eclipse-score/cicd-workflows/.github/workflows/format.yml@main - with: - bazel-target: "test --lockfile_mode=error //:format.check" # optional, this is the default + uses: eclipse-score/cicd-workflows/.github/workflows/format.yml@af347722c7ae3ed85518895c11268d96ac728f62 + clang-format: + runs-on: ubuntu-latest + steps: + - name: Checkout Repository + uses: actions/checkout@v6 + - name: Setup Bazel + uses: bazel-contrib/setup-bazel@0.19.0 + with: + bazelisk-cache: true + disk-cache: ${{ github.job }} + repository-cache: true + cache-save: ${{ github.event_name == 'push' }} + - name: Bazel Build with clang-format + run: | + bazel build --config clang_format -- //... || true diff --git a/.github/workflows/gitlint.yml b/.github/workflows/gitlint.yml deleted file mode 100644 index 61b8fe0c5f..0000000000 --- a/.github/workflows/gitlint.yml +++ /dev/null @@ -1,34 +0,0 @@ -# ******************************************************************************* -# Copyright (c) 2025 Contributors to the Eclipse Foundation -# -# See the NOTICE file(s) distributed with this work for additional -# information regarding copyright ownership. -# -# This program and the accompanying materials are made available under the -# terms of the Apache License Version 2.0 which is available at -# https://www.apache.org/licenses/LICENSE-2.0 -# -# SPDX-License-Identifier: Apache-2.0 -# ******************************************************************************* - -name: Gitlint check -on: - pull_request: - types: [opened, synchronize, reopened] -env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} -jobs: - lint-commits: - name: check-commit-messages - runs-on: ${{ vars.REPO_RUNNER_LABELS && fromJSON(vars.REPO_RUNNER_LABELS) || 'ubuntu-latest' }} - steps: - - name: Checkout code - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - name: Run Gitlint Action - if: ${{ github.event_name == 'pull_request' }} - uses: ./.github/actions/gitlint - with: - pr-number: ${{ github.event.number }} - base-branch: ${{ github.event.pull_request.base.ref }} diff --git a/.github/workflows/license_check.yml b/.github/workflows/license_check.yml deleted file mode 100644 index c2fc1b9046..0000000000 --- a/.github/workflows/license_check.yml +++ /dev/null @@ -1,34 +0,0 @@ -# ******************************************************************************* -# Copyright (c) 2025 Contributors to the Eclipse Foundation -# -# See the NOTICE file(s) distributed with this work for additional -# information regarding copyright ownership. -# -# This program and the accompanying materials are made available under the -# terms of the Apache License Version 2.0 which is available at -# https://www.apache.org/licenses/LICENSE-2.0 -# -# SPDX-License-Identifier: Apache-2.0 -# ******************************************************************************* - -name: License check preparation -on: - pull_request_target: - types: [opened, reopened, synchronize] - merge_group: - types: [checks_requested] -env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} -permissions: - pull-requests: write - issues: write - -jobs: - license-check: - if: ${{ github.repository == 'eclipse-score/baselibs_rust' }} - uses: eclipse-score/cicd-workflows/.github/workflows/license-check.yml@main - with: - repo-url: "${{ github.server_url }}/${{ github.repository }}" - bazel-target: "run --lockfile_mode=error //:license-check" - secrets: - dash-api-token: ${{ secrets.ECLIPSE_GITLAB_API_TOKEN }} diff --git a/.github/workflows/lint_clippy.yml b/.github/workflows/lint_clippy.yml index ebd84b839a..617807833d 100644 --- a/.github/workflows/lint_clippy.yml +++ b/.github/workflows/lint_clippy.yml @@ -10,9 +10,7 @@ # # SPDX-License-Identifier: Apache-2.0 # ******************************************************************************* - name: Bazel Clippy - on: pull_request: types: [opened, reopened, synchronize] @@ -21,7 +19,6 @@ on: - main merge_group: types: [checks_requested] - jobs: lint-clippy: uses: eclipse-score/cicd-workflows/.github/workflows/static-analysis.yml@main diff --git a/.github/workflows/rust_coverage.yml b/.github/workflows/rust_coverage.yml index 49846f1005..fbcb088709 100644 --- a/.github/workflows/rust_coverage.yml +++ b/.github/workflows/rust_coverage.yml @@ -15,7 +15,6 @@ on: pull_request: types: [opened, reopened, synchronize] workflow_dispatch: - jobs: rust_coverage: uses: eclipse-score/cicd-workflows/.github/workflows/rust-coverage.yml@main diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml deleted file mode 100644 index 2b185fb27a..0000000000 --- a/.github/workflows/tests.yml +++ /dev/null @@ -1,48 +0,0 @@ -# ******************************************************************************* -# Copyright (c) 2025 Contributors to the Eclipse Foundation -# -# See the NOTICE file(s) distributed with this work for additional -# information regarding copyright ownership. -# -# This program and the accompanying materials are made available under the -# terms of the Apache License Version 2.0 which is available at -# https://www.apache.org/licenses/LICENSE-2.0 -# -# SPDX-License-Identifier: Apache-2.0 -# ******************************************************************************* - -name: Bazel Tests - -on: - pull_request: - types: [opened, reopened, synchronize] - merge_group: - types: [checks_requested] -env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - -jobs: - setup-and-run-tests: - runs-on: ${{ vars.REPO_RUNNER_LABELS && fromJSON(vars.REPO_RUNNER_LABELS) || 'ubuntu-latest' }} - steps: - - name: Checkout repository - uses: actions/checkout@v4.2.2 - - - name: Install protoc 26.1 - uses: arduino/setup-protoc@v3 - with: - version: 26.1 - repo-token: ${{ secrets.GITHUB_TOKEN }} - - - name: Setup Bazel with shared caching - uses: bazel-contrib/setup-bazel@0.15.0 - with: - bazelisk-version: 1.26.0 - disk-cache: true - repository-cache: true - bazelisk-cache: true - - - name: Run Tests via Bazel - run: | - echo "Running: bazel test --lockfile_mode=error --config=x86_64-linux //src/..." - bazel test --lockfile_mode=error --config=x86_64-linux //src/... diff --git a/BUILD b/BUILD index 306e853a96..30a253b765 100644 --- a/BUILD +++ b/BUILD @@ -14,8 +14,8 @@ load("@score_bazel_tools_cc//quality:defs.bzl", "clang_format_config", "quality_clang_tidy_config") load("@score_docs_as_code//:docs.bzl", "docs") load("@score_tooling//:defs.bzl", "copyright_checker", "dash_license_checker", "rust_coverage_report", "setup_starpls", "use_format_targets") -load(":qemu.bzl", "qemu_aarch64") load("//:project_config.bzl", "PROJECT_CONFIG") +load(":qemu.bzl", "qemu_aarch64") setup_starpls( name = "starpls_server", diff --git a/MODULE.bazel b/MODULE.bazel index a78bf9d944..4f194380d4 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -92,6 +92,7 @@ bazel_dep(name = "openssl", version = "3.5.5.bcr.4") bazel_dep(name = "rules_rust", version = "0.68.1-score") bazel_dep(name = "score_rust_policies", version = "0.0.5") bazel_dep(name = "score_crates", version = "0.0.6") + bazel_dep(name = "score_toolchains_rust", version = "0.8.0", dev_dependency = True) ## Custom Module Loading diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 771e2ca486..17237c0baa 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -51,6 +51,7 @@ "https://bcr.bazel.build/modules/aspect_rules_lint/1.4.2/MODULE.bazel": "78d025facf6fa675fd6f0b62fd6a9a2bec7ef5ae1e288e5b53f4383b98017105", "https://bcr.bazel.build/modules/aspect_rules_lint/1.4.4/MODULE.bazel": "24459eeeeb084bc3e7628c338e494746718bc17b3a3cbd94415c8df5c7c6dc37", "https://bcr.bazel.build/modules/aspect_rules_lint/1.5.3/MODULE.bazel": "7fee71b11be63f1cf0458cd8c731712a0e672d0bb6df8879ed70249bf8dfdfdc", + "https://bcr.bazel.build/modules/aspect_rules_lint/2.0.0/MODULE.bazel": "1f4c81edd9af0c54e65dedbe36653fc63dc9a91605313d54d5ab371f853d693c", "https://bcr.bazel.build/modules/aspect_rules_lint/2.3.0/MODULE.bazel": "4d36bce3c1347bb4fed5906877dce0e683cb207f4032711aff32334003bcf835", "https://bcr.bazel.build/modules/aspect_rules_lint/2.3.0/source.json": "07c6e7333ac089e2428a02d68deb5f90e3947aa9b9ac22c26b9e8b0083122926", "https://bcr.bazel.build/modules/aspect_rules_py/1.0.0/MODULE.bazel": "8eb29876512d3242af50a424300bec5c5f8957b455963df5f618cb7fd4e8ae19", @@ -212,6 +213,7 @@ "https://bcr.bazel.build/modules/grpc/1.70.1/MODULE.bazel": "b800cd8e3e7555c1e61cba2e02d3a2fcf0e91f66e800db286d965d3b7a6a721a", "https://bcr.bazel.build/modules/grpc/1.70.1/source.json": "e2977ea6cf9f2755418934d4ae134a6569713dd200fd7aded86a4b7f1b86efc9", "https://bcr.bazel.build/modules/jq.bzl/0.1.0/MODULE.bazel": "2ce69b1af49952cd4121a9c3055faa679e748ce774c7f1fda9657f936cae902f", + "https://bcr.bazel.build/modules/jq.bzl/0.4.0/MODULE.bazel": "a7b39b37589f2b0dad53fd6c1ccaabbdb290330caa920d7ef3e6aad068cd4ab2", "https://bcr.bazel.build/modules/jq.bzl/0.6.0/MODULE.bazel": "26ec5118e66a55fef36f8ea39d6415d55fc966671fe4d61a6b9ef0cd6bc7b6a1", "https://bcr.bazel.build/modules/jq.bzl/0.6.0/source.json": "2ed4e35b9fa9505495784114f7637fbde5846ec14af917841b6c045d877f20eb", "https://bcr.bazel.build/modules/jsoncpp/1.9.5/MODULE.bazel": "31271aedc59e815656f5736f282bb7509a97c7ecb43e927ac1a37966e0578075", @@ -421,9 +423,9 @@ "https://bcr.bazel.build/modules/rules_python/1.5.1/MODULE.bazel": "acfe65880942d44a69129d4c5c3122d57baaf3edf58ae5a6bd4edea114906bf5", "https://bcr.bazel.build/modules/rules_python/1.8.3/MODULE.bazel": "f343e159b59701334be3914416b9f1b72845801ba47920fcb288af4ce8c5cce3", "https://bcr.bazel.build/modules/rules_python/1.8.3/source.json": "e5439f308e3c6f79f318a0f87108db46fc575be89370c3dfb3f7e0eaa571a3f8", + "https://bcr.bazel.build/modules/rules_rust/0.56.0/MODULE.bazel": "3295b00757db397122092322fe1e920be7f5c9fbfb8619138977e820f2cbbbae", "https://bcr.bazel.build/modules/rules_rust/0.61.0/MODULE.bazel": "0318a95777b9114c8740f34b60d6d68f9cfef61e2f4b52424ca626213d33787b", "https://bcr.bazel.build/modules/rules_rust/0.67.0/MODULE.bazel": "87c3816c4321352dcfd9e9e26b58e84efc5b21351ae3ef8fb5d0d57bde7237f5", - "https://bcr.bazel.build/modules/rules_rust/0.67.0/source.json": "a8ef4d3be30eb98e060cad9e5875a55b603195487f76e01b619b51a1df4641cc", "https://bcr.bazel.build/modules/rules_shell/0.2.0/MODULE.bazel": "fda8a652ab3c7d8fee214de05e7a9916d8b28082234e8d2c0094505c5268ed3c", "https://bcr.bazel.build/modules/rules_shell/0.3.0/MODULE.bazel": "de4402cd12f4cc8fda2354fce179fdb068c0b9ca1ec2d2b17b3e21b24c1a937b", "https://bcr.bazel.build/modules/rules_shell/0.4.1/MODULE.bazel": "00e501db01bbf4e3e1dd1595959092c2fadf2087b2852d3f553b5370f5633592", @@ -516,6 +518,7 @@ "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/aspect_rules_lint/1.4.2/MODULE.bazel": "not found", "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/aspect_rules_lint/1.4.4/MODULE.bazel": "not found", "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/aspect_rules_lint/1.5.3/MODULE.bazel": "not found", + "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/aspect_rules_lint/2.0.0/MODULE.bazel": "not found", "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/aspect_rules_lint/2.3.0/MODULE.bazel": "not found", "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/aspect_rules_py/1.0.0/MODULE.bazel": "not found", "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/aspect_rules_py/1.4.0/MODULE.bazel": "not found", @@ -632,6 +635,7 @@ "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/grpc/1.66.0.bcr.3/MODULE.bazel": "not found", "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/grpc/1.70.1/MODULE.bazel": "not found", "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/jq.bzl/0.1.0/MODULE.bazel": "not found", + "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/jq.bzl/0.4.0/MODULE.bazel": "not found", "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/jq.bzl/0.6.0/MODULE.bazel": "not found", "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/jsoncpp/1.9.5/MODULE.bazel": "not found", "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/libpfm/4.11.0.bcr.1/MODULE.bazel": "not found", @@ -804,8 +808,11 @@ "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/rules_python/1.4.1/MODULE.bazel": "not found", "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/rules_python/1.5.1/MODULE.bazel": "not found", "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/rules_python/1.8.3/MODULE.bazel": "not found", + "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/rules_rust/0.56.0/MODULE.bazel": "not found", "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/rules_rust/0.61.0/MODULE.bazel": "not found", "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/rules_rust/0.67.0/MODULE.bazel": "not found", + "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/rules_rust/0.68.1-score/MODULE.bazel": "dc1c87d74ef6d32190e65c3c8aabfa7e7764e457bf9888312e0313c3c11fdb69", + "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/rules_rust/0.68.1-score/source.json": "a9234d019b87b0deeebda96a67a8d56500bf28cadde3a47dc0eaf245f561ce02", "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/rules_shell/0.2.0/MODULE.bazel": "not found", "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/rules_shell/0.3.0/MODULE.bazel": "not found", "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/rules_shell/0.4.1/MODULE.bazel": "not found", @@ -816,6 +823,7 @@ "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/rules_swift/2.1.1/MODULE.bazel": "not found", "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/score_bazel_cpp_toolchains/0.5.1/MODULE.bazel": "c92d6f92b79fc96c4d9f033af21d65a0f8ce714da387da61160111e3b3babd25", "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/score_bazel_cpp_toolchains/0.5.1/source.json": "e3bb1beaf9e8e08fe682a616647d17badb1d7f8eeed4d2582277a9d7a1186c62", + "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/score_bazel_platforms/0.0.3/MODULE.bazel": "14c96e378c08705a46abe0799d6236fe3095c342c34f83f8d1b3f6046ce00651", "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/score_bazel_platforms/0.1.1/MODULE.bazel": "236e5bdff6f2d6de6f96cc4f5f4b1bf2cd6137547ce279668a2dd4c54cd4236c", "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/score_bazel_platforms/0.1.2/MODULE.bazel": "d1889bf36241521c5d5c401aaf1e98242a60f9cab9d223f8190e5d7087956e83", "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/score_bazel_platforms/0.1.2/source.json": "549c18a968c1ab76135ad38fd15981fcc04d377a62f20e2e5e0b5faa9de2b01d", @@ -825,6 +833,8 @@ "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/score_bazel_tools_python/0.1.3/source.json": "f87907b20372ca2c4ad15719cba03423577ed1ea8392c7373eb37f73499decce", "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/score_cr_checker/0.2.2/MODULE.bazel": "dc36d9c35543db918c3fb5b93a8e684431f56c7c784cf2a1b90f35802a373c98", "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/score_cr_checker/0.3.1/MODULE.bazel": "f49e037d7fbc0b2a8b2734fc6b47334e8cc8589ca7a5aa0f3ccca85cc5f79fac", + "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/score_crates/0.0.6/MODULE.bazel": "da72d24b2afb4456377f7ee13d0d95fb6bfc70dbfb949c7b8676618e661edf61", + "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/score_crates/0.0.6/source.json": "835d9f14e0a1d8e06f3c4c006c36c30c20ba428cffb6ad622cb1fbc62b5a13ef", "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/score_dash_license_checker/0.1.1/MODULE.bazel": "76681dbd2d45b5c540869a2337174086c56c54953aab1d02cd878b59d31d13a5", "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/score_devcontainer/1.5.0/MODULE.bazel": "c38b90903d66136ccd0559cf881508ef6c9430c119767a528fba95bda2b0a541", "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/score_devcontainer/1.5.0/source.json": "1cfbdab7f602eecec68f68a8c590872a3a80ff7011c056993a756b62aaf50e23", @@ -866,7 +876,10 @@ "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/score_rules_imagefs/0.0.3/MODULE.bazel": "d87fcd3485438284fa96d6a5a81923d6b6672468947423517cc43c4d7692ca6a", "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/score_rules_imagefs/0.0.3/source.json": "5f2de07264fbc8f3adecffde5aea326b9f8fccf9e74fd6a057fc9c3556b00cfa", "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/score_rust_policies/0.0.2/MODULE.bazel": "ade2bad4a331b02d9b7e7d9842e8de8c6fded6186486e02c4f7db5cd4b71d34d", - "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/score_rust_policies/0.0.2/source.json": "fbcbc738e652b0c68d5d28dd1db09f2e643dc111f5739b2f6af7ec56c2e88043", + "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/score_rust_policies/0.0.5/MODULE.bazel": "7de02547bdf121d3dedf5141b97f0fd9a545bd255ff5c7b699056b35816ffad9", + "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/score_rust_policies/0.0.5/source.json": "22c8bf0a5cbf7c7b06f774f3f66498e0bc14346a8b2208f7427a8fbb78a42547", + "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/score_toolchains_rust/0.8.0/MODULE.bazel": "ea57a9a4dcb8ad49f4556f824500eb559365f413ccbb39d70d0b363685aacec5", + "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/score_toolchains_rust/0.8.0/source.json": "394a615e03ad722bc27bd4a6f098c6ff2fe7120b69cdf3925d47e39d30ada8a4", "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/score_tooling/1.0.2/MODULE.bazel": "e70f396375b9d612b4f41ebceff7f18f68ab423b14625c138a354cc01bc62a10", "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/score_tooling/1.1.0/MODULE.bazel": "5a04a5ce3512eb742a036600fba58b465f427e2e193db8e88857132e4a4eb513", "https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/modules/score_tooling/1.1.2-RC/MODULE.bazel": "ac89da18ac88f7169d2fe675bfd173464f8de58ea934c12079aed0488c3b4dcd", @@ -2615,8 +2628,8 @@ }, "@@rules_rust+//crate_universe:extensions.bzl%crate": { "general": { - "bzlTransitiveDigest": "BuajqYHaQFUSREbc4fSrO/S4Okn6qdd4Z6EvAbUKeSs=", - "usagesDigest": "cVdscpSlFdl79/WfeaFFp7KYFb2dNBCZ79adGMpYlEk=", + "bzlTransitiveDigest": "yU/p2o3ywZISHjzDwxWcXKpIu/R3ZzzD0/vEV78R36k=", + "usagesDigest": "PV3GsYDOxW8wmm8xrwTv23L1gs+qEzqFLEA6bwT+lyw=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": { @@ -2630,13 +2643,5221 @@ "REPIN": null }, "generatedRepoSpecs": { + "crate_index": { + "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 'score_crates'\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 = \"adler32-1.2.0\",\n actual = \"@crate_index__adler32-1.2.0//:adler32\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"adler32\",\n actual = \"@crate_index__adler32-1.2.0//:adler32\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"anyhow-1.0.102\",\n actual = \"@crate_index__anyhow-1.0.102//:anyhow\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"anyhow\",\n actual = \"@crate_index__anyhow-1.0.102//:anyhow\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"argh-0.1.19\",\n actual = \"@crate_index__argh-0.1.19//:argh\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"argh\",\n actual = \"@crate_index__argh-0.1.19//:argh\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"arrayvec-0.7.6\",\n actual = \"@crate_index__arrayvec-0.7.6//:arrayvec\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"arrayvec\",\n actual = \"@crate_index__arrayvec-0.7.6//:arrayvec\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"async-stream-0.3.6\",\n actual = \"@crate_index__async-stream-0.3.6//:async_stream\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"async-stream\",\n actual = \"@crate_index__async-stream-0.3.6//:async_stream\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"bytes-1.11.1\",\n actual = \"@crate_index__bytes-1.11.1//:bytes\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"bytes\",\n actual = \"@crate_index__bytes-1.11.1//:bytes\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"cc-1.2.63\",\n actual = \"@crate_index__cc-1.2.63//:cc\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"cc\",\n actual = \"@crate_index__cc-1.2.63//:cc\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"clap-4.6.1\",\n actual = \"@crate_index__clap-4.6.1//:clap\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"clap\",\n actual = \"@crate_index__clap-4.6.1//:clap\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"console-0.16.3\",\n actual = \"@crate_index__console-0.16.3//:console\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"console\",\n actual = \"@crate_index__console-0.16.3//:console\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"ctrlc-3.5.2\",\n actual = \"@crate_index__ctrlc-3.5.2//:ctrlc\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"ctrlc\",\n actual = \"@crate_index__ctrlc-3.5.2//:ctrlc\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"env_logger-0.11.10\",\n actual = \"@crate_index__env_logger-0.11.10//:env_logger\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"env_logger\",\n actual = \"@crate_index__env_logger-0.11.10//:env_logger\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"futures-0.3.32\",\n actual = \"@crate_index__futures-0.3.32//:futures\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"futures\",\n actual = \"@crate_index__futures-0.3.32//:futures\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"human_bytes-0.4.3\",\n actual = \"@crate_index__human_bytes-0.4.3//:human_bytes\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"human_bytes\",\n actual = \"@crate_index__human_bytes-0.4.3//:human_bytes\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"iceoryx2-0.5.0\",\n actual = \"@crate_index__iceoryx2-0.5.0//:iceoryx2\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"iceoryx2\",\n actual = \"@crate_index__iceoryx2-0.5.0//:iceoryx2\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"iceoryx2-bb-container-qnx8-0.7.0\",\n actual = \"@crate_index__iceoryx2-bb-container-qnx8-0.7.0//:iceoryx2_bb_container_qnx8\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"iceoryx2-bb-container-qnx8\",\n actual = \"@crate_index__iceoryx2-bb-container-qnx8-0.7.0//:iceoryx2_bb_container_qnx8\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"iceoryx2-bb-derive-macros-qnx8-0.7.0\",\n actual = \"@crate_index__iceoryx2-bb-derive-macros-qnx8-0.7.0//:iceoryx2_bb_derive_macros_qnx8\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"iceoryx2-bb-derive-macros-qnx8\",\n actual = \"@crate_index__iceoryx2-bb-derive-macros-qnx8-0.7.0//:iceoryx2_bb_derive_macros_qnx8\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"iceoryx2-bb-elementary-qnx8-0.7.0\",\n actual = \"@crate_index__iceoryx2-bb-elementary-qnx8-0.7.0//:iceoryx2_bb_elementary_qnx8\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"iceoryx2-bb-elementary-qnx8\",\n actual = \"@crate_index__iceoryx2-bb-elementary-qnx8-0.7.0//:iceoryx2_bb_elementary_qnx8\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"iceoryx2-bb-elementary-traits-qnx8-0.7.0\",\n actual = \"@crate_index__iceoryx2-bb-elementary-traits-qnx8-0.7.0//:iceoryx2_bb_elementary_traits_qnx8\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"iceoryx2-bb-elementary-traits-qnx8\",\n actual = \"@crate_index__iceoryx2-bb-elementary-traits-qnx8-0.7.0//:iceoryx2_bb_elementary_traits_qnx8\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"iceoryx2-bb-lock-free-qnx8-0.7.0\",\n actual = \"@crate_index__iceoryx2-bb-lock-free-qnx8-0.7.0//:iceoryx2_bb_lock_free_qnx8\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"iceoryx2-bb-lock-free-qnx8\",\n actual = \"@crate_index__iceoryx2-bb-lock-free-qnx8-0.7.0//:iceoryx2_bb_lock_free_qnx8\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"iceoryx2-bb-memory-qnx8-0.7.0\",\n actual = \"@crate_index__iceoryx2-bb-memory-qnx8-0.7.0//:iceoryx2_bb_memory_qnx8\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"iceoryx2-bb-memory-qnx8\",\n actual = \"@crate_index__iceoryx2-bb-memory-qnx8-0.7.0//:iceoryx2_bb_memory_qnx8\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"iceoryx2-bb-posix-qnx8-0.7.0\",\n actual = \"@crate_index__iceoryx2-bb-posix-qnx8-0.7.0//:iceoryx2_bb_posix_qnx8\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"iceoryx2-bb-posix-qnx8\",\n actual = \"@crate_index__iceoryx2-bb-posix-qnx8-0.7.0//:iceoryx2_bb_posix_qnx8\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"iceoryx2-bb-system-types-qnx8-0.7.0\",\n actual = \"@crate_index__iceoryx2-bb-system-types-qnx8-0.7.0//:iceoryx2_bb_system_types_qnx8\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"iceoryx2-bb-system-types-qnx8\",\n actual = \"@crate_index__iceoryx2-bb-system-types-qnx8-0.7.0//:iceoryx2_bb_system_types_qnx8\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"iceoryx2-bb-testing-qnx8-0.7.0\",\n actual = \"@crate_index__iceoryx2-bb-testing-qnx8-0.7.0//:iceoryx2_bb_testing_qnx8\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"iceoryx2-bb-testing-qnx8\",\n actual = \"@crate_index__iceoryx2-bb-testing-qnx8-0.7.0//:iceoryx2_bb_testing_qnx8\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"iceoryx2-bb-threadsafe-qnx8-0.7.0\",\n actual = \"@crate_index__iceoryx2-bb-threadsafe-qnx8-0.7.0//:iceoryx2_bb_threadsafe_qnx8\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"iceoryx2-bb-threadsafe-qnx8\",\n actual = \"@crate_index__iceoryx2-bb-threadsafe-qnx8-0.7.0//:iceoryx2_bb_threadsafe_qnx8\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"iceoryx2-cal-qnx8-0.7.0\",\n actual = \"@crate_index__iceoryx2-cal-qnx8-0.7.0//:iceoryx2_cal_qnx8\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"iceoryx2-cal-qnx8\",\n actual = \"@crate_index__iceoryx2-cal-qnx8-0.7.0//:iceoryx2_cal_qnx8\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"iceoryx2-pal-concurrency-sync-qnx8-0.7.0\",\n actual = \"@crate_index__iceoryx2-pal-concurrency-sync-qnx8-0.7.0//:iceoryx2_pal_concurrency_sync_qnx8\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"iceoryx2-pal-concurrency-sync-qnx8\",\n actual = \"@crate_index__iceoryx2-pal-concurrency-sync-qnx8-0.7.0//:iceoryx2_pal_concurrency_sync_qnx8\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"iceoryx2-qnx8-0.7.0\",\n actual = \"@crate_index__iceoryx2-qnx8-0.7.0//:iceoryx2_qnx8\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"iceoryx2-qnx8\",\n actual = \"@crate_index__iceoryx2-qnx8-0.7.0//:iceoryx2_qnx8\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"indicatif-0.18.4\",\n actual = \"@crate_index__indicatif-0.18.4//:indicatif\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"indicatif\",\n actual = \"@crate_index__indicatif-0.18.4//:indicatif\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"indicatif-log-bridge-0.2.3\",\n actual = \"@crate_index__indicatif-log-bridge-0.2.3//:indicatif_log_bridge\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"indicatif-log-bridge\",\n actual = \"@crate_index__indicatif-log-bridge-0.2.3//:indicatif_log_bridge\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"ipc-channel-0.20.2\",\n actual = \"@crate_index__ipc-channel-0.20.2//:ipc_channel\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"ipc-channel\",\n actual = \"@crate_index__ipc-channel-0.20.2//:ipc_channel\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"libc-0.2.186\",\n actual = \"@crate_index__libc-0.2.186//:libc\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"libc\",\n actual = \"@crate_index__libc-0.2.186//:libc\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"log-0.4.32\",\n actual = \"@crate_index__log-0.4.32//:log\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"log\",\n actual = \"@crate_index__log-0.4.32//:log\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"mio-1.2.1\",\n actual = \"@crate_index__mio-1.2.1//:mio\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"mio\",\n actual = \"@crate_index__mio-1.2.1//:mio\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"nix-0.30.1\",\n actual = \"@crate_index__nix-0.30.1//:nix\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"nix\",\n actual = \"@crate_index__nix-0.30.1//:nix\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"paste-1.0.15\",\n actual = \"@crate_index__paste-1.0.15//:paste\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"paste\",\n actual = \"@crate_index__paste-1.0.15//:paste\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"pico-args-0.5.0\",\n actual = \"@crate_index__pico-args-0.5.0//:pico_args\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"pico-args\",\n actual = \"@crate_index__pico-args-0.5.0//:pico_args\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"postcard-1.1.3\",\n actual = \"@crate_index__postcard-1.1.3//:postcard\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"postcard\",\n actual = \"@crate_index__postcard-1.1.3//:postcard\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"proc-macro2-1.0.106\",\n actual = \"@crate_index__proc-macro2-1.0.106//:proc_macro2\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"proc-macro2\",\n actual = \"@crate_index__proc-macro2-1.0.106//:proc_macro2\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"prost-0.14.3\",\n actual = \"@crate_index__prost-0.14.3//:prost\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"prost\",\n actual = \"@crate_index__prost-0.14.3//:prost\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"prost-build-0.14.3\",\n actual = \"@crate_index__prost-build-0.14.3//:prost_build\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"prost-build\",\n actual = \"@crate_index__prost-build-0.14.3//:prost_build\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"prost-types-0.14.3\",\n actual = \"@crate_index__prost-types-0.14.3//:prost_types\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"prost-types\",\n actual = \"@crate_index__prost-types-0.14.3//:prost_types\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"protoc-gen-prost-0.4.0\",\n actual = \"@crate_index__protoc-gen-prost-0.4.0//:protoc_gen_prost\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"protoc-gen-prost\",\n actual = \"@crate_index__protoc-gen-prost-0.4.0//:protoc_gen_prost\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"protoc-gen-tonic-0.4.1\",\n actual = \"@crate_index__protoc-gen-tonic-0.4.1//:protoc_gen_tonic\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"protoc-gen-tonic\",\n actual = \"@crate_index__protoc-gen-tonic-0.4.1//:protoc_gen_tonic\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"quote-1.0.45\",\n actual = \"@crate_index__quote-1.0.45//:quote\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"quote\",\n actual = \"@crate_index__quote-1.0.45//:quote\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rand-0.9.4\",\n actual = \"@crate_index__rand-0.9.4//:rand\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"rand\",\n actual = \"@crate_index__rand-0.9.4//:rand\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde-1.0.228\",\n actual = \"@crate_index__serde-1.0.228//:serde\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde\",\n actual = \"@crate_index__serde-1.0.228//:serde\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde_json-1.0.150\",\n actual = \"@crate_index__serde_json-1.0.150//:serde_json\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde_json\",\n actual = \"@crate_index__serde_json-1.0.150//:serde_json\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"signal-hook-0.3.18\",\n actual = \"@crate_index__signal-hook-0.3.18//:signal_hook\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"signal-hook\",\n actual = \"@crate_index__signal-hook-0.3.18//:signal_hook\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"socket2-0.6.4\",\n actual = \"@crate_index__socket2-0.6.4//:socket2\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"socket2\",\n actual = \"@crate_index__socket2-0.6.4//:socket2\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"syn-2.0.117\",\n actual = \"@crate_index__syn-2.0.117//:syn\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"syn\",\n actual = \"@crate_index__syn-2.0.117//:syn\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tempfile-3.27.0\",\n actual = \"@crate_index__tempfile-3.27.0//:tempfile\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tempfile\",\n actual = \"@crate_index__tempfile-3.27.0//:tempfile\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"time-0.3.47\",\n actual = \"@crate_index__time-0.3.47//:time\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"time\",\n actual = \"@crate_index__time-0.3.47//:time\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tinyjson-2.5.1\",\n actual = \"@crate_index__tinyjson-2.5.1//:tinyjson\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tinyjson\",\n actual = \"@crate_index__tinyjson-2.5.1//:tinyjson\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tokio-1.52.3\",\n actual = \"@crate_index__tokio-1.52.3//:tokio\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tokio\",\n actual = \"@crate_index__tokio-1.52.3//:tokio\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tokio-seqpacket-0.8.2\",\n actual = \"@crate_index__tokio-seqpacket-0.8.2//:tokio_seqpacket\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tokio-seqpacket\",\n actual = \"@crate_index__tokio-seqpacket-0.8.2//:tokio_seqpacket\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tokio-util-0.7.18\",\n actual = \"@crate_index__tokio-util-0.7.18//:tokio_util\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tokio-util\",\n actual = \"@crate_index__tokio-util-0.7.18//:tokio_util\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tonic-0.14.6\",\n actual = \"@crate_index__tonic-0.14.6//:tonic\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tonic\",\n actual = \"@crate_index__tonic-0.14.6//:tonic\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tracing-0.1.44\",\n actual = \"@crate_index__tracing-0.1.44//:tracing\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tracing\",\n actual = \"@crate_index__tracing-0.1.44//:tracing\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tracing-subscriber-0.3.23\",\n actual = \"@crate_index__tracing-subscriber-0.3.23//:tracing_subscriber\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"tracing-subscriber\",\n actual = \"@crate_index__tracing-subscriber-0.3.23//:tracing_subscriber\",\n tags = [\"manual\"],\n)\n\n# Binaries\nalias(\n name = \"protoc-gen-prost__protoc-gen-prost\",\n actual = \"@crate_index__protoc-gen-prost-0.4.0//:protoc-gen-prost__bin\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"protoc-gen-tonic__protoc-gen-tonic\",\n actual = \"@crate_index__protoc-gen-tonic-0.4.1//:protoc-gen-tonic__bin\",\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 'score_crates'\n###############################################################################\n\"\"\"\n# `crates_repository` API\n\n- [aliases](#aliases)\n- [crate_deps](#crate_deps)\n- [all_crate_deps](#all_crate_deps)\n- [crate_repositories](#crate_repositories)\n\n\"\"\"\n\nload(\"@bazel_tools//tools/build_defs/repo:git.bzl\", \"new_git_repository\")\nload(\"@bazel_tools//tools/build_defs/repo:http.bzl\", \"http_archive\")\nload(\"@bazel_tools//tools/build_defs/repo:utils.bzl\", \"maybe\")\nload(\"@bazel_skylib//lib:selects.bzl\", \"selects\")\nload(\"@rules_rust//crate_universe/private:local_crate_mirror.bzl\", \"local_crate_mirror\")\n\n###############################################################################\n# MACROS API\n###############################################################################\n\n# An identifier that represent common dependencies (unconditional).\n_COMMON_CONDITION = \"\"\n\ndef _flatten_dependency_maps(all_dependency_maps):\n \"\"\"Flatten a list of dependency maps into one dictionary.\n\n Dependency maps have the following structure:\n\n ```python\n DEPENDENCIES_MAP = {\n # The first key in the map is a Bazel package\n # name of the workspace this file is defined in.\n \"workspace_member_package\": {\n\n # Not all dependencies are supported for all platforms.\n # the condition key is the condition required to be true\n # on the host platform.\n \"condition\": {\n\n # An alias to a crate target. # The label of the crate target the\n # Aliases are only crate names. # package name refers to.\n \"package_name\": \"@full//:label\",\n }\n }\n }\n ```\n\n Args:\n all_dependency_maps (list): A list of dicts as described above\n\n Returns:\n dict: A dictionary as described above\n \"\"\"\n dependencies = {}\n\n for workspace_deps_map in all_dependency_maps:\n for pkg_name, conditional_deps_map in workspace_deps_map.items():\n if pkg_name not in dependencies:\n non_frozen_map = dict()\n for key, values in conditional_deps_map.items():\n non_frozen_map.update({key: dict(values.items())})\n dependencies.setdefault(pkg_name, non_frozen_map)\n continue\n\n for condition, deps_map in conditional_deps_map.items():\n # If the condition has not been recorded, do so and continue\n if condition not in dependencies[pkg_name]:\n dependencies[pkg_name].setdefault(condition, dict(deps_map.items()))\n continue\n\n # Alert on any miss-matched dependencies\n inconsistent_entries = []\n for crate_name, crate_label in deps_map.items():\n existing = dependencies[pkg_name][condition].get(crate_name)\n if existing and existing != crate_label:\n inconsistent_entries.append((crate_name, existing, crate_label))\n dependencies[pkg_name][condition].update({crate_name: crate_label})\n\n return dependencies\n\ndef crate_deps(deps, package_name = None):\n \"\"\"Finds the fully qualified label of the requested crates for the package where this macro is called.\n\n Args:\n deps (list): The desired list of crate targets.\n package_name (str, optional): The package name of the set of dependencies to look up.\n Defaults to `native.package_name()`.\n\n Returns:\n list: A list of labels to generated rust targets (str)\n \"\"\"\n\n if not deps:\n return []\n\n if package_name == None:\n package_name = native.package_name()\n\n # Join both sets of dependencies\n dependencies = _flatten_dependency_maps([\n _NORMAL_DEPENDENCIES,\n _NORMAL_DEV_DEPENDENCIES,\n _PROC_MACRO_DEPENDENCIES,\n _PROC_MACRO_DEV_DEPENDENCIES,\n _BUILD_DEPENDENCIES,\n _BUILD_PROC_MACRO_DEPENDENCIES,\n ]).pop(package_name, {})\n\n # Combine all conditional packages so we can easily index over a flat list\n # TODO: Perhaps this should actually return select statements and maintain\n # the conditionals of the dependencies\n flat_deps = {}\n for deps_set in dependencies.values():\n for crate_name, crate_label in deps_set.items():\n flat_deps.update({crate_name: crate_label})\n\n missing_crates = []\n crate_targets = []\n for crate_target in deps:\n if crate_target not in flat_deps:\n missing_crates.append(crate_target)\n else:\n crate_targets.append(flat_deps[crate_target])\n\n if missing_crates:\n fail(\"Could not find crates `{}` among dependencies of `{}`. Available dependencies were `{}`\".format(\n missing_crates,\n package_name,\n dependencies,\n ))\n\n return crate_targets\n\ndef all_crate_deps(\n normal = False, \n normal_dev = False, \n proc_macro = False, \n proc_macro_dev = False,\n build = False,\n build_proc_macro = False,\n package_name = None):\n \"\"\"Finds the fully qualified label of all requested direct crate dependencies \\\n for the package where this macro is called.\n\n If no parameters are set, all normal dependencies are returned. Setting any one flag will\n otherwise impact the contents of the returned list.\n\n Args:\n normal (bool, optional): If True, normal dependencies are included in the\n output list.\n normal_dev (bool, optional): If True, normal dev dependencies will be\n included in the output list.\n proc_macro (bool, optional): If True, proc_macro dependencies are included\n in the output list.\n proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are\n included in the output list.\n build (bool, optional): If True, build dependencies are included\n in the output list.\n build_proc_macro (bool, optional): If True, build proc_macro dependencies are\n included in the output list.\n package_name (str, optional): The package name of the set of dependencies to look up.\n Defaults to `native.package_name()` when unset.\n\n Returns:\n list: A list of labels to generated rust targets (str)\n \"\"\"\n\n if package_name == None:\n package_name = native.package_name()\n\n # Determine the relevant maps to use\n all_dependency_maps = []\n if normal:\n all_dependency_maps.append(_NORMAL_DEPENDENCIES)\n if normal_dev:\n all_dependency_maps.append(_NORMAL_DEV_DEPENDENCIES)\n if proc_macro:\n all_dependency_maps.append(_PROC_MACRO_DEPENDENCIES)\n if proc_macro_dev:\n all_dependency_maps.append(_PROC_MACRO_DEV_DEPENDENCIES)\n if build:\n all_dependency_maps.append(_BUILD_DEPENDENCIES)\n if build_proc_macro:\n all_dependency_maps.append(_BUILD_PROC_MACRO_DEPENDENCIES)\n\n # Default to always using normal dependencies\n if not all_dependency_maps:\n all_dependency_maps.append(_NORMAL_DEPENDENCIES)\n\n dependencies = _flatten_dependency_maps(all_dependency_maps).pop(package_name, None)\n\n if not dependencies:\n if dependencies == None:\n fail(\"Tried to get all_crate_deps for package \" + package_name + \" but that package had no Cargo.toml file\")\n else:\n return []\n\n crate_deps = list(dependencies.pop(_COMMON_CONDITION, {}).values())\n for condition, deps in dependencies.items():\n crate_deps += selects.with_or({\n tuple(_CONDITIONS[condition]): deps.values(),\n \"//conditions:default\": [],\n })\n\n return crate_deps\n\ndef aliases(\n normal = False,\n normal_dev = False,\n proc_macro = False,\n proc_macro_dev = False,\n build = False,\n build_proc_macro = False,\n package_name = None):\n \"\"\"Produces a map of Crate alias names to their original label\n\n If no dependency kinds are specified, `normal` and `proc_macro` are used by default.\n Setting any one flag will otherwise determine the contents of the returned dict.\n\n Args:\n normal (bool, optional): If True, normal dependencies are included in the\n output list.\n normal_dev (bool, optional): If True, normal dev dependencies will be\n included in the output list..\n proc_macro (bool, optional): If True, proc_macro dependencies are included\n in the output list.\n proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are\n included in the output list.\n build (bool, optional): If True, build dependencies are included\n in the output list.\n build_proc_macro (bool, optional): If True, build proc_macro dependencies are\n included in the output list.\n package_name (str, optional): The package name of the set of dependencies to look up.\n Defaults to `native.package_name()` when unset.\n\n Returns:\n dict: The aliases of all associated packages\n \"\"\"\n if package_name == None:\n package_name = native.package_name()\n\n # Determine the relevant maps to use\n all_aliases_maps = []\n if normal:\n all_aliases_maps.append(_NORMAL_ALIASES)\n if normal_dev:\n all_aliases_maps.append(_NORMAL_DEV_ALIASES)\n if proc_macro:\n all_aliases_maps.append(_PROC_MACRO_ALIASES)\n if proc_macro_dev:\n all_aliases_maps.append(_PROC_MACRO_DEV_ALIASES)\n if build:\n all_aliases_maps.append(_BUILD_ALIASES)\n if build_proc_macro:\n all_aliases_maps.append(_BUILD_PROC_MACRO_ALIASES)\n\n # Default to always using normal aliases\n if not all_aliases_maps:\n all_aliases_maps.append(_NORMAL_ALIASES)\n all_aliases_maps.append(_PROC_MACRO_ALIASES)\n\n aliases = _flatten_dependency_maps(all_aliases_maps).pop(package_name, None)\n\n if not aliases:\n return dict()\n\n common_items = aliases.pop(_COMMON_CONDITION, {}).items()\n\n # If there are only common items in the dictionary, immediately return them\n if not len(aliases.keys()) == 1:\n return dict(common_items)\n\n # Build a single select statement where each conditional has accounted for the\n # common set of aliases.\n crate_aliases = {\"//conditions:default\": dict(common_items)}\n for condition, deps in aliases.items():\n condition_triples = _CONDITIONS[condition]\n for triple in condition_triples:\n if triple in crate_aliases:\n crate_aliases[triple].update(deps)\n else:\n crate_aliases.update({triple: dict(deps.items() + common_items)})\n\n return select(crate_aliases)\n\n###############################################################################\n# WORKSPACE MEMBER DEPS AND ALIASES\n###############################################################################\n\n_NORMAL_DEPENDENCIES = {\n \"\": {\n _COMMON_CONDITION: {\n \"adler32\": Label(\"@crate_index//:adler32-1.2.0\"),\n \"anyhow\": Label(\"@crate_index//:anyhow-1.0.102\"),\n \"argh\": Label(\"@crate_index//:argh-0.1.19\"),\n \"arrayvec\": Label(\"@crate_index//:arrayvec-0.7.6\"),\n \"async-stream\": Label(\"@crate_index//:async-stream-0.3.6\"),\n \"bytes\": Label(\"@crate_index//:bytes-1.11.1\"),\n \"cc\": Label(\"@crate_index//:cc-1.2.63\"),\n \"clap\": Label(\"@crate_index//:clap-4.6.1\"),\n \"console\": Label(\"@crate_index//:console-0.16.3\"),\n \"ctrlc\": Label(\"@crate_index//:ctrlc-3.5.2\"),\n \"env_logger\": Label(\"@crate_index//:env_logger-0.11.10\"),\n \"futures\": Label(\"@crate_index//:futures-0.3.32\"),\n \"human_bytes\": Label(\"@crate_index//:human_bytes-0.4.3\"),\n \"iceoryx2\": Label(\"@crate_index//:iceoryx2-0.5.0\"),\n \"iceoryx2-bb-container-qnx8\": Label(\"@crate_index//:iceoryx2-bb-container-qnx8-0.7.0\"),\n \"iceoryx2-bb-elementary-qnx8\": Label(\"@crate_index//:iceoryx2-bb-elementary-qnx8-0.7.0\"),\n \"iceoryx2-bb-elementary-traits-qnx8\": Label(\"@crate_index//:iceoryx2-bb-elementary-traits-qnx8-0.7.0\"),\n \"iceoryx2-bb-lock-free-qnx8\": Label(\"@crate_index//:iceoryx2-bb-lock-free-qnx8-0.7.0\"),\n \"iceoryx2-bb-memory-qnx8\": Label(\"@crate_index//:iceoryx2-bb-memory-qnx8-0.7.0\"),\n \"iceoryx2-bb-posix-qnx8\": Label(\"@crate_index//:iceoryx2-bb-posix-qnx8-0.7.0\"),\n \"iceoryx2-bb-system-types-qnx8\": Label(\"@crate_index//:iceoryx2-bb-system-types-qnx8-0.7.0\"),\n \"iceoryx2-bb-testing-qnx8\": Label(\"@crate_index//:iceoryx2-bb-testing-qnx8-0.7.0\"),\n \"iceoryx2-bb-threadsafe-qnx8\": Label(\"@crate_index//:iceoryx2-bb-threadsafe-qnx8-0.7.0\"),\n \"iceoryx2-cal-qnx8\": Label(\"@crate_index//:iceoryx2-cal-qnx8-0.7.0\"),\n \"iceoryx2-pal-concurrency-sync-qnx8\": Label(\"@crate_index//:iceoryx2-pal-concurrency-sync-qnx8-0.7.0\"),\n \"iceoryx2-qnx8\": Label(\"@crate_index//:iceoryx2-qnx8-0.7.0\"),\n \"indicatif\": Label(\"@crate_index//:indicatif-0.18.4\"),\n \"indicatif-log-bridge\": Label(\"@crate_index//:indicatif-log-bridge-0.2.3\"),\n \"ipc-channel\": Label(\"@crate_index//:ipc-channel-0.20.2\"),\n \"libc\": Label(\"@crate_index//:libc-0.2.186\"),\n \"log\": Label(\"@crate_index//:log-0.4.32\"),\n \"mio\": Label(\"@crate_index//:mio-1.2.1\"),\n \"nix\": Label(\"@crate_index//:nix-0.30.1\"),\n \"pico-args\": Label(\"@crate_index//:pico-args-0.5.0\"),\n \"postcard\": Label(\"@crate_index//:postcard-1.1.3\"),\n \"proc-macro2\": Label(\"@crate_index//:proc-macro2-1.0.106\"),\n \"prost\": Label(\"@crate_index//:prost-0.14.3\"),\n \"prost-build\": Label(\"@crate_index//:prost-build-0.14.3\"),\n \"prost-types\": Label(\"@crate_index//:prost-types-0.14.3\"),\n \"protoc-gen-prost\": Label(\"@crate_index//:protoc-gen-prost-0.4.0\"),\n \"protoc-gen-tonic\": Label(\"@crate_index//:protoc-gen-tonic-0.4.1\"),\n \"quote\": Label(\"@crate_index//:quote-1.0.45\"),\n \"rand\": Label(\"@crate_index//:rand-0.9.4\"),\n \"serde\": Label(\"@crate_index//:serde-1.0.228\"),\n \"serde_json\": Label(\"@crate_index//:serde_json-1.0.150\"),\n \"signal-hook\": Label(\"@crate_index//:signal-hook-0.3.18\"),\n \"socket2\": Label(\"@crate_index//:socket2-0.6.4\"),\n \"syn\": Label(\"@crate_index//:syn-2.0.117\"),\n \"tempfile\": Label(\"@crate_index//:tempfile-3.27.0\"),\n \"time\": Label(\"@crate_index//:time-0.3.47\"),\n \"tinyjson\": Label(\"@crate_index//:tinyjson-2.5.1\"),\n \"tokio\": Label(\"@crate_index//:tokio-1.52.3\"),\n \"tokio-seqpacket\": Label(\"@crate_index//:tokio-seqpacket-0.8.2\"),\n \"tokio-util\": Label(\"@crate_index//:tokio-util-0.7.18\"),\n \"tonic\": Label(\"@crate_index//:tonic-0.14.6\"),\n \"tracing\": Label(\"@crate_index//:tracing-0.1.44\"),\n \"tracing-subscriber\": Label(\"@crate_index//:tracing-subscriber-0.3.23\"),\n },\n },\n}\n\n\n_NORMAL_ALIASES = {\n \"\": {\n _COMMON_CONDITION: {\n },\n },\n}\n\n\n_NORMAL_DEV_DEPENDENCIES = {\n \"\": {\n },\n}\n\n\n_NORMAL_DEV_ALIASES = {\n \"\": {\n },\n}\n\n\n_PROC_MACRO_DEPENDENCIES = {\n \"\": {\n _COMMON_CONDITION: {\n \"iceoryx2-bb-derive-macros-qnx8\": Label(\"@crate_index//:iceoryx2-bb-derive-macros-qnx8-0.7.0\"),\n \"paste\": Label(\"@crate_index//:paste-1.0.15\"),\n },\n },\n}\n\n\n_PROC_MACRO_ALIASES = {\n \"\": {\n },\n}\n\n\n_PROC_MACRO_DEV_DEPENDENCIES = {\n \"\": {\n },\n}\n\n\n_PROC_MACRO_DEV_ALIASES = {\n \"\": {\n },\n}\n\n\n_BUILD_DEPENDENCIES = {\n \"\": {\n },\n}\n\n\n_BUILD_ALIASES = {\n \"\": {\n },\n}\n\n\n_BUILD_PROC_MACRO_DEPENDENCIES = {\n \"\": {\n },\n}\n\n\n_BUILD_PROC_MACRO_ALIASES = {\n \"\": {\n },\n}\n\n\n_CONDITIONS = {\n \"aarch64-pc-windows-gnullvm\": [],\n \"aarch64-unknown-nto-qnx710\": [\"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\"],\n \"cfg(all(any(target_arch = \\\"x86_64\\\", target_arch = \\\"arm64ec\\\"), target_env = \\\"msvc\\\", not(windows_raw_dylib)))\": [],\n \"cfg(all(any(target_os = \\\"android\\\", target_os = \\\"linux\\\"), any(rustix_use_libc, miri, not(all(target_os = \\\"linux\\\", any(target_endian = \\\"little\\\", target_arch = \\\"s390x\\\"), any(target_arch = \\\"arm\\\", all(target_arch = \\\"aarch64\\\", target_pointer_width = \\\"64\\\"), target_arch = \\\"riscv64\\\", all(rustix_use_experimental_asm, target_arch = \\\"powerpc64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"s390x\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips32r6\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64r6\\\"), target_arch = \\\"x86\\\", all(target_arch = \\\"x86_64\\\", target_pointer_width = \\\"64\\\")))))))\": [],\n \"cfg(all(any(target_os = \\\"linux\\\", target_os = \\\"android\\\"), any(rustix_use_libc, miri, not(all(target_os = \\\"linux\\\", any(target_endian = \\\"little\\\", any(target_arch = \\\"s390x\\\", target_arch = \\\"powerpc\\\")), any(target_arch = \\\"arm\\\", all(target_arch = \\\"aarch64\\\", target_pointer_width = \\\"64\\\"), target_arch = \\\"riscv64\\\", all(rustix_use_experimental_asm, target_arch = \\\"powerpc\\\"), all(rustix_use_experimental_asm, target_arch = \\\"powerpc64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"s390x\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips32r6\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64r6\\\"), target_arch = \\\"x86\\\", all(target_arch = \\\"x86_64\\\", target_pointer_width = \\\"64\\\")))))))\": [],\n \"cfg(all(any(target_os = \\\"linux\\\", target_os = \\\"android\\\"), not(any(all(target_os = \\\"linux\\\", target_env = \\\"\\\"), getrandom_backend = \\\"custom\\\", getrandom_backend = \\\"linux_raw\\\", getrandom_backend = \\\"rdrand\\\", getrandom_backend = \\\"rndr\\\"))))\": [\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(all(not(rustix_use_libc), not(miri), target_os = \\\"linux\\\", any(target_endian = \\\"little\\\", any(target_arch = \\\"s390x\\\", target_arch = \\\"powerpc\\\")), any(target_arch = \\\"arm\\\", all(target_arch = \\\"aarch64\\\", target_pointer_width = \\\"64\\\"), target_arch = \\\"riscv64\\\", all(rustix_use_experimental_asm, target_arch = \\\"powerpc\\\"), all(rustix_use_experimental_asm, target_arch = \\\"powerpc64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"s390x\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips32r6\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64r6\\\"), target_arch = \\\"x86\\\", all(target_arch = \\\"x86_64\\\", target_pointer_width = \\\"64\\\"))))\": [\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(all(not(rustix_use_libc), not(miri), target_os = \\\"linux\\\", any(target_endian = \\\"little\\\", target_arch = \\\"s390x\\\"), any(target_arch = \\\"arm\\\", all(target_arch = \\\"aarch64\\\", target_pointer_width = \\\"64\\\"), target_arch = \\\"riscv64\\\", all(rustix_use_experimental_asm, target_arch = \\\"powerpc64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"s390x\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips32r6\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64r6\\\"), target_arch = \\\"x86\\\", all(target_arch = \\\"x86_64\\\", target_pointer_width = \\\"64\\\"))))\": [\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(all(not(windows), any(rustix_use_libc, miri, not(all(target_os = \\\"linux\\\", any(target_endian = \\\"little\\\", any(target_arch = \\\"s390x\\\", target_arch = \\\"powerpc\\\")), any(target_arch = \\\"arm\\\", all(target_arch = \\\"aarch64\\\", target_pointer_width = \\\"64\\\"), target_arch = \\\"riscv64\\\", all(rustix_use_experimental_asm, target_arch = \\\"powerpc\\\"), all(rustix_use_experimental_asm, target_arch = \\\"powerpc64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"s390x\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips32r6\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64r6\\\"), target_arch = \\\"x86\\\", all(target_arch = \\\"x86_64\\\", target_pointer_width = \\\"64\\\")))))))\": [\"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\",\"@rules_rust//rust/platform:x86_64-unknown-none\"],\n \"cfg(all(not(windows), any(rustix_use_libc, miri, not(all(target_os = \\\"linux\\\", any(target_endian = \\\"little\\\", target_arch = \\\"s390x\\\"), any(target_arch = \\\"arm\\\", all(target_arch = \\\"aarch64\\\", target_pointer_width = \\\"64\\\"), target_arch = \\\"riscv64\\\", all(rustix_use_experimental_asm, target_arch = \\\"powerpc64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"s390x\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips32r6\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64\\\"), all(rustix_use_experimental_asm, target_arch = \\\"mips64r6\\\"), target_arch = \\\"x86\\\", all(target_arch = \\\"x86_64\\\", target_pointer_width = \\\"64\\\")))))))\": [\"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\",\"@rules_rust//rust/platform:x86_64-unknown-none\"],\n \"cfg(all(target_arch = \\\"aarch64\\\", target_env = \\\"msvc\\\", not(windows_raw_dylib)))\": [],\n \"cfg(all(target_arch = \\\"wasm32\\\", target_os = \\\"wasi\\\", target_env = \\\"p2\\\"))\": [],\n \"cfg(all(target_arch = \\\"wasm32\\\", target_os = \\\"wasi\\\", target_env = \\\"p3\\\"))\": [],\n \"cfg(all(target_arch = \\\"x86\\\", target_env = \\\"gnu\\\", not(target_abi = \\\"llvm\\\"), not(windows_raw_dylib)))\": [],\n \"cfg(all(target_arch = \\\"x86\\\", target_env = \\\"gnu\\\", not(windows_raw_dylib)))\": [],\n \"cfg(all(target_arch = \\\"x86\\\", target_env = \\\"msvc\\\", not(windows_raw_dylib)))\": [],\n \"cfg(all(target_arch = \\\"x86_64\\\", target_env = \\\"gnu\\\", not(target_abi = \\\"llvm\\\"), not(windows_raw_dylib)))\": [\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(all(target_arch = \\\"x86_64\\\", target_env = \\\"msvc\\\", not(windows_raw_dylib)))\": [],\n \"cfg(all(target_family = \\\"wasm\\\", target_os = \\\"unknown\\\"))\": [],\n \"cfg(all(target_os = \\\"uefi\\\", getrandom_backend = \\\"efi_rng\\\"))\": [],\n \"cfg(any())\": [],\n \"cfg(any(target_os = \\\"dragonfly\\\", target_os = \\\"freebsd\\\", target_os = \\\"hurd\\\", target_os = \\\"illumos\\\", target_os = \\\"cygwin\\\", all(target_os = \\\"horizon\\\", target_arch = \\\"arm\\\")))\": [],\n \"cfg(any(target_os = \\\"haiku\\\", target_os = \\\"redox\\\", target_os = \\\"nto\\\", target_os = \\\"aix\\\"))\": [\"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\"],\n \"cfg(any(target_os = \\\"ios\\\", target_os = \\\"visionos\\\", target_os = \\\"watchos\\\", target_os = \\\"tvos\\\"))\": [],\n \"cfg(any(target_os = \\\"linux\\\", target_os = \\\"openbsd\\\", target_os = \\\"freebsd\\\", target_os = \\\"illumos\\\"))\": [\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(any(target_os = \\\"macos\\\", target_os = \\\"openbsd\\\", target_os = \\\"vita\\\", target_os = \\\"emscripten\\\"))\": [],\n \"cfg(any(unix, target_os = \\\"hermit\\\", target_os = \\\"wasi\\\"))\": [\"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(any(unix, target_os = \\\"wasi\\\"))\": [\"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(any(windows, unix, target_os = \\\"redox\\\"))\": [\"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(not(target_has_atomic = \\\"ptr\\\"))\": [],\n \"cfg(target_arch = \\\"x86_64\\\")\": [\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-none\"],\n \"cfg(target_os = \\\"hermit\\\")\": [],\n \"cfg(target_os = \\\"macos\\\")\": [],\n \"cfg(target_os = \\\"netbsd\\\")\": [],\n \"cfg(target_os = \\\"solaris\\\")\": [],\n \"cfg(target_os = \\\"vxworks\\\")\": [],\n \"cfg(target_os = \\\"wasi\\\")\": [],\n \"cfg(target_os = \\\"windows\\\")\": [],\n \"cfg(target_vendor = \\\"apple\\\")\": [],\n \"cfg(unix)\": [\"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"cfg(windows)\": [],\n \"i686-pc-windows-gnu\": [],\n \"i686-pc-windows-gnullvm\": [],\n \"riscv32i-unknown-none-elf\": [],\n \"riscv32imc-unknown-none-elf\": [],\n \"x86_64-pc-windows-gnu\": [],\n \"x86_64-pc-windows-gnullvm\": [],\n \"x86_64-unknown-linux-gnu\": [\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"x86_64-unknown-none\": [\"@rules_rust//rust/platform:x86_64-unknown-none\"],\n \"xtensa-esp32s2-none-elf\": [],\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 = \"crate_index__adler32-1.2.0\",\n sha256 = \"aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/adler32/1.2.0/download\"],\n strip_prefix = \"adler32-1.2.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.adler32-1.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__aho-corasick-1.1.4\",\n sha256 = \"ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/aho-corasick/1.1.4/download\"],\n strip_prefix = \"aho-corasick-1.1.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.aho-corasick-1.1.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__aliasable-0.1.3\",\n sha256 = \"250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/aliasable/0.1.3/download\"],\n strip_prefix = \"aliasable-0.1.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.aliasable-0.1.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__anstream-1.0.0\",\n sha256 = \"824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstream/1.0.0/download\"],\n strip_prefix = \"anstream-1.0.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.anstream-1.0.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__anstyle-1.0.14\",\n sha256 = \"940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstyle/1.0.14/download\"],\n strip_prefix = \"anstyle-1.0.14\",\n build_file = Label(\"@crate_index//crate_index:BUILD.anstyle-1.0.14.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__anstyle-parse-1.0.0\",\n sha256 = \"52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstyle-parse/1.0.0/download\"],\n strip_prefix = \"anstyle-parse-1.0.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.anstyle-parse-1.0.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__anstyle-query-1.1.5\",\n sha256 = \"40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstyle-query/1.1.5/download\"],\n strip_prefix = \"anstyle-query-1.1.5\",\n build_file = Label(\"@crate_index//crate_index:BUILD.anstyle-query-1.1.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__anstyle-wincon-3.0.11\",\n sha256 = \"291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstyle-wincon/3.0.11/download\"],\n strip_prefix = \"anstyle-wincon-3.0.11\",\n build_file = Label(\"@crate_index//crate_index:BUILD.anstyle-wincon-3.0.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__anyhow-1.0.102\",\n sha256 = \"7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anyhow/1.0.102/download\"],\n strip_prefix = \"anyhow-1.0.102\",\n build_file = Label(\"@crate_index//crate_index:BUILD.anyhow-1.0.102.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__argh-0.1.19\",\n sha256 = \"211818e820cda9ca6f167a64a5c808837366a6dfd807157c64c1304c486cd033\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/argh/0.1.19/download\"],\n strip_prefix = \"argh-0.1.19\",\n build_file = Label(\"@crate_index//crate_index:BUILD.argh-0.1.19.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__argh_derive-0.1.19\",\n sha256 = \"c442a9d18cef5dde467405d27d461d080d68972d6d0dfd0408265b6749ec427d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/argh_derive/0.1.19/download\"],\n strip_prefix = \"argh_derive-0.1.19\",\n build_file = Label(\"@crate_index//crate_index:BUILD.argh_derive-0.1.19.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__argh_shared-0.1.19\",\n sha256 = \"e5ade012bac4db278517a0132c8c10c6427025868dca16c801087c28d5a411f1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/argh_shared/0.1.19/download\"],\n strip_prefix = \"argh_shared-0.1.19\",\n build_file = Label(\"@crate_index//crate_index:BUILD.argh_shared-0.1.19.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__arrayvec-0.7.6\",\n sha256 = \"7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/arrayvec/0.7.6/download\"],\n strip_prefix = \"arrayvec-0.7.6\",\n build_file = Label(\"@crate_index//crate_index:BUILD.arrayvec-0.7.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__async-stream-0.3.6\",\n sha256 = \"0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/async-stream/0.3.6/download\"],\n strip_prefix = \"async-stream-0.3.6\",\n build_file = Label(\"@crate_index//crate_index:BUILD.async-stream-0.3.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__async-stream-impl-0.3.6\",\n sha256 = \"c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/async-stream-impl/0.3.6/download\"],\n strip_prefix = \"async-stream-impl-0.3.6\",\n build_file = Label(\"@crate_index//crate_index:BUILD.async-stream-impl-0.3.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__async-trait-0.1.89\",\n sha256 = \"9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/async-trait/0.1.89/download\"],\n strip_prefix = \"async-trait-0.1.89\",\n build_file = Label(\"@crate_index//crate_index:BUILD.async-trait-0.1.89.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__atomic-polyfill-1.0.3\",\n sha256 = \"8cf2bce30dfe09ef0bfaef228b9d414faaf7e563035494d7fe092dba54b300f4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/atomic-polyfill/1.0.3/download\"],\n strip_prefix = \"atomic-polyfill-1.0.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.atomic-polyfill-1.0.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__atomic-waker-1.1.2\",\n sha256 = \"1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/atomic-waker/1.1.2/download\"],\n strip_prefix = \"atomic-waker-1.1.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.atomic-waker-1.1.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__axum-0.8.9\",\n sha256 = \"31b698c5f9a010f6573133b09e0de5408834d0c82f8d7475a89fc1867a71cd90\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/axum/0.8.9/download\"],\n strip_prefix = \"axum-0.8.9\",\n build_file = Label(\"@crate_index//crate_index:BUILD.axum-0.8.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__axum-core-0.5.6\",\n sha256 = \"08c78f31d7b1291f7ee735c1c6780ccde7785daae9a9206026862dab7d8792d1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/axum-core/0.5.6/download\"],\n strip_prefix = \"axum-core-0.5.6\",\n build_file = Label(\"@crate_index//crate_index:BUILD.axum-core-0.5.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__base64-0.22.1\",\n sha256 = \"72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/base64/0.22.1/download\"],\n strip_prefix = \"base64-0.22.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.base64-0.22.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__bincode-1.3.3\",\n sha256 = \"b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bincode/1.3.3/download\"],\n strip_prefix = \"bincode-1.3.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.bincode-1.3.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__bindgen-0.69.5\",\n sha256 = \"271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bindgen/0.69.5/download\"],\n strip_prefix = \"bindgen-0.69.5\",\n build_file = Label(\"@crate_index//crate_index:BUILD.bindgen-0.69.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__bindgen-0.72.1\",\n sha256 = \"993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bindgen/0.72.1/download\"],\n strip_prefix = \"bindgen-0.72.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.bindgen-0.72.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__bitflags-2.12.1\",\n sha256 = \"84d7ced0ae9557296835c32bf1b1e02b44c746701f898460fb000d7eaa84f00a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bitflags/2.12.1/download\"],\n strip_prefix = \"bitflags-2.12.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.bitflags-2.12.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__block2-0.6.2\",\n sha256 = \"cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/block2/0.6.2/download\"],\n strip_prefix = \"block2-0.6.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.block2-0.6.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__bumpalo-3.20.3\",\n sha256 = \"72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bumpalo/3.20.3/download\"],\n strip_prefix = \"bumpalo-3.20.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.bumpalo-3.20.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.byteorder-1.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__bytes-1.11.1\",\n sha256 = \"1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bytes/1.11.1/download\"],\n strip_prefix = \"bytes-1.11.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.bytes-1.11.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__cc-1.2.63\",\n sha256 = \"556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cc/1.2.63/download\"],\n strip_prefix = \"cc-1.2.63\",\n build_file = Label(\"@crate_index//crate_index:BUILD.cc-1.2.63.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__cdr-0.2.4\",\n sha256 = \"9617422bf43fde9280707a7e90f8f7494389c182f5c70b0f67592d0f06d41dfa\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cdr/0.2.4/download\"],\n strip_prefix = \"cdr-0.2.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.cdr-0.2.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__cexpr-0.6.0\",\n sha256 = \"6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cexpr/0.6.0/download\"],\n strip_prefix = \"cexpr-0.6.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.cexpr-0.6.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__cfg-if-1.0.4\",\n sha256 = \"9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cfg-if/1.0.4/download\"],\n strip_prefix = \"cfg-if-1.0.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.cfg-if-1.0.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__cfg_aliases-0.2.1\",\n sha256 = \"613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cfg_aliases/0.2.1/download\"],\n strip_prefix = \"cfg_aliases-0.2.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.cfg_aliases-0.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__clang-sys-1.8.1\",\n sha256 = \"0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clang-sys/1.8.1/download\"],\n strip_prefix = \"clang-sys-1.8.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.clang-sys-1.8.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__clap-4.6.1\",\n sha256 = \"1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap/4.6.1/download\"],\n strip_prefix = \"clap-4.6.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.clap-4.6.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__clap_builder-4.6.0\",\n sha256 = \"714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap_builder/4.6.0/download\"],\n strip_prefix = \"clap_builder-4.6.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.clap_builder-4.6.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__clap_derive-4.6.1\",\n sha256 = \"f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap_derive/4.6.1/download\"],\n strip_prefix = \"clap_derive-4.6.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.clap_derive-4.6.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__clap_lex-1.1.0\",\n sha256 = \"c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap_lex/1.1.0/download\"],\n strip_prefix = \"clap_lex-1.1.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.clap_lex-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__cobs-0.3.0\",\n sha256 = \"0fa961b519f0b462e3a3b4a34b64d119eeaca1d59af726fe450bbba07a9fc0a1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cobs/0.3.0/download\"],\n strip_prefix = \"cobs-0.3.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.cobs-0.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__colorchoice-1.0.5\",\n sha256 = \"1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/colorchoice/1.0.5/download\"],\n strip_prefix = \"colorchoice-1.0.5\",\n build_file = Label(\"@crate_index//crate_index:BUILD.colorchoice-1.0.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__console-0.16.3\",\n sha256 = \"d64e8af5551369d19cf50138de61f1c42074ab970f74e99be916646777f8fc87\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/console/0.16.3/download\"],\n strip_prefix = \"console-0.16.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.console-0.16.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__critical-section-1.2.0\",\n sha256 = \"790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/critical-section/1.2.0/download\"],\n strip_prefix = \"critical-section-1.2.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.critical-section-1.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__crossbeam-channel-0.5.15\",\n sha256 = \"82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/crossbeam-channel/0.5.15/download\"],\n strip_prefix = \"crossbeam-channel-0.5.15\",\n build_file = Label(\"@crate_index//crate_index:BUILD.crossbeam-channel-0.5.15.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.crossbeam-utils-0.8.21.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__ctrlc-3.5.2\",\n sha256 = \"e0b1fab2ae45819af2d0731d60f2afe17227ebb1a1538a236da84c93e9a60162\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ctrlc/3.5.2/download\"],\n strip_prefix = \"ctrlc-3.5.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.ctrlc-3.5.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__deranged-0.5.8\",\n sha256 = \"7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/deranged/0.5.8/download\"],\n strip_prefix = \"deranged-0.5.8\",\n build_file = Label(\"@crate_index//crate_index:BUILD.deranged-0.5.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__dispatch2-0.3.1\",\n sha256 = \"1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/dispatch2/0.3.1/download\"],\n strip_prefix = \"dispatch2-0.3.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.dispatch2-0.3.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__either-1.16.0\",\n sha256 = \"91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/either/1.16.0/download\"],\n strip_prefix = \"either-1.16.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.either-1.16.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__embedded-io-0.4.0\",\n sha256 = \"ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/embedded-io/0.4.0/download\"],\n strip_prefix = \"embedded-io-0.4.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.embedded-io-0.4.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__embedded-io-0.6.1\",\n sha256 = \"edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/embedded-io/0.6.1/download\"],\n strip_prefix = \"embedded-io-0.6.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.embedded-io-0.6.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__encode_unicode-1.0.0\",\n sha256 = \"34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/encode_unicode/1.0.0/download\"],\n strip_prefix = \"encode_unicode-1.0.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.encode_unicode-1.0.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__enum-iterator-2.3.0\",\n sha256 = \"a4549325971814bda7a44061bf3fe7e487d447cba01e4220a4b454d630d7a016\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/enum-iterator/2.3.0/download\"],\n strip_prefix = \"enum-iterator-2.3.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.enum-iterator-2.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__enum-iterator-derive-1.5.0\",\n sha256 = \"685adfa4d6f3d765a26bc5dbc936577de9abf756c1feeb3089b01dd395034842\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/enum-iterator-derive/1.5.0/download\"],\n strip_prefix = \"enum-iterator-derive-1.5.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.enum-iterator-derive-1.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__env_filter-1.0.1\",\n sha256 = \"32e90c2accc4b07a8456ea0debdc2e7587bdd890680d71173a15d4ae604f6eef\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/env_filter/1.0.1/download\"],\n strip_prefix = \"env_filter-1.0.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.env_filter-1.0.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__env_logger-0.11.10\",\n sha256 = \"0621c04f2196ac3f488dd583365b9c09be011a4ab8b9f37248ffcc8f6198b56a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/env_logger/0.11.10/download\"],\n strip_prefix = \"env_logger-0.11.10\",\n build_file = Label(\"@crate_index//crate_index:BUILD.env_logger-0.11.10.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__equivalent-1.0.2\",\n sha256 = \"877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/equivalent/1.0.2/download\"],\n strip_prefix = \"equivalent-1.0.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.equivalent-1.0.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__errno-0.3.14\",\n sha256 = \"39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/errno/0.3.14/download\"],\n strip_prefix = \"errno-0.3.14\",\n build_file = Label(\"@crate_index//crate_index:BUILD.errno-0.3.14.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__fastrand-2.4.1\",\n sha256 = \"9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/fastrand/2.4.1/download\"],\n strip_prefix = \"fastrand-2.4.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.fastrand-2.4.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__filedesc-0.6.3\",\n sha256 = \"c4960c866d9cf4c48f64f11ef0020c98900d0cb32e9b019c000ed838470daa1d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/filedesc/0.6.3/download\"],\n strip_prefix = \"filedesc-0.6.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.filedesc-0.6.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__find-msvc-tools-0.1.9\",\n sha256 = \"5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/find-msvc-tools/0.1.9/download\"],\n strip_prefix = \"find-msvc-tools-0.1.9\",\n build_file = Label(\"@crate_index//crate_index:BUILD.find-msvc-tools-0.1.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__fixedbitset-0.5.7\",\n sha256 = \"1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/fixedbitset/0.5.7/download\"],\n strip_prefix = \"fixedbitset-0.5.7\",\n build_file = Label(\"@crate_index//crate_index:BUILD.fixedbitset-0.5.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.fnv-1.0.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__foldhash-0.1.5\",\n sha256 = \"d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/foldhash/0.1.5/download\"],\n strip_prefix = \"foldhash-0.1.5\",\n build_file = Label(\"@crate_index//crate_index:BUILD.foldhash-0.1.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__futures-0.3.32\",\n sha256 = \"8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures/0.3.32/download\"],\n strip_prefix = \"futures-0.3.32\",\n build_file = Label(\"@crate_index//crate_index:BUILD.futures-0.3.32.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__futures-channel-0.3.32\",\n sha256 = \"07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-channel/0.3.32/download\"],\n strip_prefix = \"futures-channel-0.3.32\",\n build_file = Label(\"@crate_index//crate_index:BUILD.futures-channel-0.3.32.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__futures-core-0.3.32\",\n sha256 = \"7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-core/0.3.32/download\"],\n strip_prefix = \"futures-core-0.3.32\",\n build_file = Label(\"@crate_index//crate_index:BUILD.futures-core-0.3.32.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__futures-executor-0.3.32\",\n sha256 = \"baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-executor/0.3.32/download\"],\n strip_prefix = \"futures-executor-0.3.32\",\n build_file = Label(\"@crate_index//crate_index:BUILD.futures-executor-0.3.32.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__futures-io-0.3.32\",\n sha256 = \"cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-io/0.3.32/download\"],\n strip_prefix = \"futures-io-0.3.32\",\n build_file = Label(\"@crate_index//crate_index:BUILD.futures-io-0.3.32.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__futures-macro-0.3.32\",\n sha256 = \"e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-macro/0.3.32/download\"],\n strip_prefix = \"futures-macro-0.3.32\",\n build_file = Label(\"@crate_index//crate_index:BUILD.futures-macro-0.3.32.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__futures-sink-0.3.32\",\n sha256 = \"c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-sink/0.3.32/download\"],\n strip_prefix = \"futures-sink-0.3.32\",\n build_file = Label(\"@crate_index//crate_index:BUILD.futures-sink-0.3.32.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__futures-task-0.3.32\",\n sha256 = \"037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-task/0.3.32/download\"],\n strip_prefix = \"futures-task-0.3.32\",\n build_file = Label(\"@crate_index//crate_index:BUILD.futures-task-0.3.32.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__futures-util-0.3.32\",\n sha256 = \"389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/futures-util/0.3.32/download\"],\n strip_prefix = \"futures-util-0.3.32\",\n build_file = Label(\"@crate_index//crate_index:BUILD.futures-util-0.3.32.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__getrandom-0.3.4\",\n sha256 = \"899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/getrandom/0.3.4/download\"],\n strip_prefix = \"getrandom-0.3.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.getrandom-0.3.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__getrandom-0.4.2\",\n sha256 = \"0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/getrandom/0.4.2/download\"],\n strip_prefix = \"getrandom-0.4.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.getrandom-0.4.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__glob-0.3.3\",\n sha256 = \"0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/glob/0.3.3/download\"],\n strip_prefix = \"glob-0.3.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.glob-0.3.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__h2-0.4.14\",\n sha256 = \"171fefbc92fe4a4de27e0698d6a5b392d6a0e333506bc49133760b3bcf948733\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/h2/0.4.14/download\"],\n strip_prefix = \"h2-0.4.14\",\n build_file = Label(\"@crate_index//crate_index:BUILD.h2-0.4.14.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__hash32-0.2.1\",\n sha256 = \"b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hash32/0.2.1/download\"],\n strip_prefix = \"hash32-0.2.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.hash32-0.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__hashbrown-0.15.5\",\n sha256 = \"9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hashbrown/0.15.5/download\"],\n strip_prefix = \"hashbrown-0.15.5\",\n build_file = Label(\"@crate_index//crate_index:BUILD.hashbrown-0.15.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__hashbrown-0.17.1\",\n sha256 = \"ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hashbrown/0.17.1/download\"],\n strip_prefix = \"hashbrown-0.17.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.hashbrown-0.17.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__heapless-0.7.17\",\n sha256 = \"cdc6457c0eb62c71aac4bc17216026d8410337c4126773b9c5daba343f17964f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/heapless/0.7.17/download\"],\n strip_prefix = \"heapless-0.7.17\",\n build_file = Label(\"@crate_index//crate_index:BUILD.heapless-0.7.17.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__heck-0.4.1\",\n sha256 = \"95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/heck/0.4.1/download\"],\n strip_prefix = \"heck-0.4.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.heck-0.4.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__heck-0.5.0\",\n sha256 = \"2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/heck/0.5.0/download\"],\n strip_prefix = \"heck-0.5.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.heck-0.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__home-0.5.12\",\n sha256 = \"cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/home/0.5.12/download\"],\n strip_prefix = \"home-0.5.12\",\n build_file = Label(\"@crate_index//crate_index:BUILD.home-0.5.12.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__http-1.4.1\",\n sha256 = \"8be7462df143984c4598a256ef469b251d7d7f9e271135073e78fc535414f3d0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/http/1.4.1/download\"],\n strip_prefix = \"http-1.4.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.http-1.4.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__http-body-1.0.1\",\n sha256 = \"1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/http-body/1.0.1/download\"],\n strip_prefix = \"http-body-1.0.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.http-body-1.0.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__http-body-util-0.1.3\",\n sha256 = \"b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/http-body-util/0.1.3/download\"],\n strip_prefix = \"http-body-util-0.1.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.http-body-util-0.1.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__httparse-1.10.1\",\n sha256 = \"6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/httparse/1.10.1/download\"],\n strip_prefix = \"httparse-1.10.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.httparse-1.10.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__httpdate-1.0.3\",\n sha256 = \"df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/httpdate/1.0.3/download\"],\n strip_prefix = \"httpdate-1.0.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.httpdate-1.0.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__human_bytes-0.4.3\",\n sha256 = \"91f255a4535024abf7640cb288260811fc14794f62b063652ed349f9a6c2348e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/human_bytes/0.4.3/download\"],\n strip_prefix = \"human_bytes-0.4.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.human_bytes-0.4.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__hyper-1.10.1\",\n sha256 = \"55281c53a1894c864990125767da440a4e630446785086f52523b20033b74498\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hyper/1.10.1/download\"],\n strip_prefix = \"hyper-1.10.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.hyper-1.10.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__hyper-timeout-0.5.2\",\n sha256 = \"2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hyper-timeout/0.5.2/download\"],\n strip_prefix = \"hyper-timeout-0.5.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.hyper-timeout-0.5.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__hyper-util-0.1.20\",\n sha256 = \"96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hyper-util/0.1.20/download\"],\n strip_prefix = \"hyper-util-0.1.20\",\n build_file = Label(\"@crate_index//crate_index:BUILD.hyper-util-0.1.20.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__iceoryx2-0.5.0\",\n sha256 = \"12c091b5786a230240f8f2691b9d29508ed0a02c025c254abaed8bc788a66bb3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/iceoryx2/0.5.0/download\"],\n strip_prefix = \"iceoryx2-0.5.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.iceoryx2-0.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__iceoryx2-bb-container-0.5.0\",\n sha256 = \"fff9d75921f8ccd3e19261d72082b52ccc4704dcdd6930efe6c17b15693ab519\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/iceoryx2-bb-container/0.5.0/download\"],\n strip_prefix = \"iceoryx2-bb-container-0.5.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.iceoryx2-bb-container-0.5.0.bazel\"),\n )\n\n maybe(\n new_git_repository,\n name = \"crate_index__iceoryx2-bb-container-qnx8-0.7.0\",\n commit = \"bd16da32190d53d69c3e5504aab47df52ca8b5f8\",\n init_submodules = True,\n remote = \"https://github.com/qorix-group/iceoryx2.git\",\n build_file = Label(\"@crate_index//crate_index:BUILD.iceoryx2-bb-container-qnx8-0.7.0.bazel\"),\n strip_prefix = \"iceoryx2-bb/container\",\n )\n\n maybe(\n http_archive,\n name = \"crate_index__iceoryx2-bb-derive-macros-0.5.0\",\n sha256 = \"9257482fb822946bb3028225b6807350e3f815068961ff5bf683735ce01d59a4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/iceoryx2-bb-derive-macros/0.5.0/download\"],\n strip_prefix = \"iceoryx2-bb-derive-macros-0.5.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.iceoryx2-bb-derive-macros-0.5.0.bazel\"),\n )\n\n maybe(\n new_git_repository,\n name = \"crate_index__iceoryx2-bb-derive-macros-qnx8-0.7.0\",\n commit = \"bd16da32190d53d69c3e5504aab47df52ca8b5f8\",\n init_submodules = True,\n patches = [\n \"@@score_crates+//patches:iceoryx2_bb_derive_macros_readme.patch\",\n ],\n remote = \"https://github.com/qorix-group/iceoryx2.git\",\n build_file = Label(\"@crate_index//crate_index:BUILD.iceoryx2-bb-derive-macros-qnx8-0.7.0.bazel\"),\n strip_prefix = \"iceoryx2-bb/derive-macros\",\n )\n\n maybe(\n http_archive,\n name = \"crate_index__iceoryx2-bb-elementary-0.5.0\",\n sha256 = \"38aae0237ff1575a7d9672c0202e5d313e7f674a635f6aaf619d2090fb7a12c2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/iceoryx2-bb-elementary/0.5.0/download\"],\n strip_prefix = \"iceoryx2-bb-elementary-0.5.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.iceoryx2-bb-elementary-0.5.0.bazel\"),\n )\n\n maybe(\n new_git_repository,\n name = \"crate_index__iceoryx2-bb-elementary-qnx8-0.7.0\",\n commit = \"bd16da32190d53d69c3e5504aab47df52ca8b5f8\",\n init_submodules = True,\n remote = \"https://github.com/qorix-group/iceoryx2.git\",\n build_file = Label(\"@crate_index//crate_index:BUILD.iceoryx2-bb-elementary-qnx8-0.7.0.bazel\"),\n strip_prefix = \"iceoryx2-bb/elementary\",\n )\n\n maybe(\n new_git_repository,\n name = \"crate_index__iceoryx2-bb-elementary-traits-qnx8-0.7.0\",\n commit = \"bd16da32190d53d69c3e5504aab47df52ca8b5f8\",\n init_submodules = True,\n remote = \"https://github.com/qorix-group/iceoryx2.git\",\n build_file = Label(\"@crate_index//crate_index:BUILD.iceoryx2-bb-elementary-traits-qnx8-0.7.0.bazel\"),\n strip_prefix = \"iceoryx2-bb/elementary-traits\",\n )\n\n maybe(\n new_git_repository,\n name = \"crate_index__iceoryx2-bb-linux-qnx8-0.7.0\",\n commit = \"bd16da32190d53d69c3e5504aab47df52ca8b5f8\",\n init_submodules = True,\n remote = \"https://github.com/qorix-group/iceoryx2.git\",\n build_file = Label(\"@crate_index//crate_index:BUILD.iceoryx2-bb-linux-qnx8-0.7.0.bazel\"),\n strip_prefix = \"iceoryx2-bb/linux\",\n )\n\n maybe(\n http_archive,\n name = \"crate_index__iceoryx2-bb-lock-free-0.5.0\",\n sha256 = \"3ec3227a0c8b1d9e1ea4c61fa6a773e7c3b721fa3e2fd4363324f302b35ac85b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/iceoryx2-bb-lock-free/0.5.0/download\"],\n strip_prefix = \"iceoryx2-bb-lock-free-0.5.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.iceoryx2-bb-lock-free-0.5.0.bazel\"),\n )\n\n maybe(\n new_git_repository,\n name = \"crate_index__iceoryx2-bb-lock-free-qnx8-0.7.0\",\n commit = \"bd16da32190d53d69c3e5504aab47df52ca8b5f8\",\n init_submodules = True,\n remote = \"https://github.com/qorix-group/iceoryx2.git\",\n build_file = Label(\"@crate_index//crate_index:BUILD.iceoryx2-bb-lock-free-qnx8-0.7.0.bazel\"),\n strip_prefix = \"iceoryx2-bb/lock-free\",\n )\n\n maybe(\n http_archive,\n name = \"crate_index__iceoryx2-bb-log-0.5.0\",\n sha256 = \"07df5e6ff06cc2ffb0a86b67c7cd4be86b11264d5e83c02a52b384e2d5e6363a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/iceoryx2-bb-log/0.5.0/download\"],\n strip_prefix = \"iceoryx2-bb-log-0.5.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.iceoryx2-bb-log-0.5.0.bazel\"),\n )\n\n maybe(\n new_git_repository,\n name = \"crate_index__iceoryx2-bb-log-qnx8-0.7.0\",\n commit = \"bd16da32190d53d69c3e5504aab47df52ca8b5f8\",\n init_submodules = True,\n remote = \"https://github.com/qorix-group/iceoryx2.git\",\n build_file = Label(\"@crate_index//crate_index:BUILD.iceoryx2-bb-log-qnx8-0.7.0.bazel\"),\n strip_prefix = \"iceoryx2-bb/log\",\n )\n\n maybe(\n http_archive,\n name = \"crate_index__iceoryx2-bb-memory-0.5.0\",\n sha256 = \"55a4ae8856404b6e7eca567004673ca39109fc70fcf387b96ca6d6d27c61f31b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/iceoryx2-bb-memory/0.5.0/download\"],\n strip_prefix = \"iceoryx2-bb-memory-0.5.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.iceoryx2-bb-memory-0.5.0.bazel\"),\n )\n\n maybe(\n new_git_repository,\n name = \"crate_index__iceoryx2-bb-memory-qnx8-0.7.0\",\n commit = \"bd16da32190d53d69c3e5504aab47df52ca8b5f8\",\n init_submodules = True,\n remote = \"https://github.com/qorix-group/iceoryx2.git\",\n build_file = Label(\"@crate_index//crate_index:BUILD.iceoryx2-bb-memory-qnx8-0.7.0.bazel\"),\n strip_prefix = \"iceoryx2-bb/memory\",\n )\n\n maybe(\n http_archive,\n name = \"crate_index__iceoryx2-bb-posix-0.5.0\",\n sha256 = \"122ff88c452a3045a9de6db73d0429da736578f76eab75779dd0d3681de75d57\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/iceoryx2-bb-posix/0.5.0/download\"],\n strip_prefix = \"iceoryx2-bb-posix-0.5.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.iceoryx2-bb-posix-0.5.0.bazel\"),\n )\n\n maybe(\n new_git_repository,\n name = \"crate_index__iceoryx2-bb-posix-qnx8-0.7.0\",\n commit = \"bd16da32190d53d69c3e5504aab47df52ca8b5f8\",\n init_submodules = True,\n remote = \"https://github.com/qorix-group/iceoryx2.git\",\n build_file = Label(\"@crate_index//crate_index:BUILD.iceoryx2-bb-posix-qnx8-0.7.0.bazel\"),\n strip_prefix = \"iceoryx2-bb/posix\",\n )\n\n maybe(\n http_archive,\n name = \"crate_index__iceoryx2-bb-system-types-0.5.0\",\n sha256 = \"ac2fb11a94823c3b9117a5e14edf16fd467794cf5391738eb2d8b7fc8e9b04fd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/iceoryx2-bb-system-types/0.5.0/download\"],\n strip_prefix = \"iceoryx2-bb-system-types-0.5.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.iceoryx2-bb-system-types-0.5.0.bazel\"),\n )\n\n maybe(\n new_git_repository,\n name = \"crate_index__iceoryx2-bb-system-types-qnx8-0.7.0\",\n commit = \"bd16da32190d53d69c3e5504aab47df52ca8b5f8\",\n init_submodules = True,\n remote = \"https://github.com/qorix-group/iceoryx2.git\",\n build_file = Label(\"@crate_index//crate_index:BUILD.iceoryx2-bb-system-types-qnx8-0.7.0.bazel\"),\n strip_prefix = \"iceoryx2-bb/system-types\",\n )\n\n maybe(\n new_git_repository,\n name = \"crate_index__iceoryx2-bb-testing-qnx8-0.7.0\",\n commit = \"bd16da32190d53d69c3e5504aab47df52ca8b5f8\",\n init_submodules = True,\n remote = \"https://github.com/qorix-group/iceoryx2.git\",\n build_file = Label(\"@crate_index//crate_index:BUILD.iceoryx2-bb-testing-qnx8-0.7.0.bazel\"),\n strip_prefix = \"iceoryx2-bb/testing\",\n )\n\n maybe(\n new_git_repository,\n name = \"crate_index__iceoryx2-bb-threadsafe-qnx8-0.7.0\",\n commit = \"bd16da32190d53d69c3e5504aab47df52ca8b5f8\",\n init_submodules = True,\n remote = \"https://github.com/qorix-group/iceoryx2.git\",\n build_file = Label(\"@crate_index//crate_index:BUILD.iceoryx2-bb-threadsafe-qnx8-0.7.0.bazel\"),\n strip_prefix = \"iceoryx2-bb/threadsafe\",\n )\n\n maybe(\n http_archive,\n name = \"crate_index__iceoryx2-cal-0.5.0\",\n sha256 = \"6c64b8eee1d57c4336d7df7d521671d8b76c72cac16af0db651e40f8c45f0946\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/iceoryx2-cal/0.5.0/download\"],\n strip_prefix = \"iceoryx2-cal-0.5.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.iceoryx2-cal-0.5.0.bazel\"),\n )\n\n maybe(\n new_git_repository,\n name = \"crate_index__iceoryx2-cal-qnx8-0.7.0\",\n commit = \"bd16da32190d53d69c3e5504aab47df52ca8b5f8\",\n init_submodules = True,\n remote = \"https://github.com/qorix-group/iceoryx2.git\",\n build_file = Label(\"@crate_index//crate_index:BUILD.iceoryx2-cal-qnx8-0.7.0.bazel\"),\n strip_prefix = \"iceoryx2-cal\",\n )\n\n maybe(\n http_archive,\n name = \"crate_index__iceoryx2-pal-concurrency-sync-0.5.0\",\n sha256 = \"92dc4ec7c023819c41b5a14c9ca58e8dbb86476053321decda73ac440996f35f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/iceoryx2-pal-concurrency-sync/0.5.0/download\"],\n strip_prefix = \"iceoryx2-pal-concurrency-sync-0.5.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.iceoryx2-pal-concurrency-sync-0.5.0.bazel\"),\n )\n\n maybe(\n new_git_repository,\n name = \"crate_index__iceoryx2-pal-concurrency-sync-qnx8-0.7.0\",\n commit = \"bd16da32190d53d69c3e5504aab47df52ca8b5f8\",\n init_submodules = True,\n remote = \"https://github.com/qorix-group/iceoryx2.git\",\n build_file = Label(\"@crate_index//crate_index:BUILD.iceoryx2-pal-concurrency-sync-qnx8-0.7.0.bazel\"),\n strip_prefix = \"iceoryx2-pal/concurrency-sync\",\n )\n\n maybe(\n http_archive,\n name = \"crate_index__iceoryx2-pal-configuration-0.5.0\",\n sha256 = \"d900aa8f9c5b661a9c5ddfbdc28eb87ac8c32be5375ca9b055b087d1c89c984d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/iceoryx2-pal-configuration/0.5.0/download\"],\n strip_prefix = \"iceoryx2-pal-configuration-0.5.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.iceoryx2-pal-configuration-0.5.0.bazel\"),\n )\n\n maybe(\n new_git_repository,\n name = \"crate_index__iceoryx2-pal-configuration-qnx8-0.7.0\",\n commit = \"bd16da32190d53d69c3e5504aab47df52ca8b5f8\",\n init_submodules = True,\n remote = \"https://github.com/qorix-group/iceoryx2.git\",\n build_file = Label(\"@crate_index//crate_index:BUILD.iceoryx2-pal-configuration-qnx8-0.7.0.bazel\"),\n strip_prefix = \"iceoryx2-pal/configuration\",\n )\n\n maybe(\n new_git_repository,\n name = \"crate_index__iceoryx2-pal-os-api-qnx8-0.7.0\",\n commit = \"bd16da32190d53d69c3e5504aab47df52ca8b5f8\",\n init_submodules = True,\n remote = \"https://github.com/qorix-group/iceoryx2.git\",\n build_file = Label(\"@crate_index//crate_index:BUILD.iceoryx2-pal-os-api-qnx8-0.7.0.bazel\"),\n strip_prefix = \"iceoryx2-pal/os-api\",\n )\n\n maybe(\n http_archive,\n name = \"crate_index__iceoryx2-pal-posix-0.5.0\",\n sha256 = \"5789169791a6274b492561b95543e1c635285cb454d547f78e53cbc1acd9b3f5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/iceoryx2-pal-posix/0.5.0/download\"],\n strip_prefix = \"iceoryx2-pal-posix-0.5.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.iceoryx2-pal-posix-0.5.0.bazel\"),\n )\n\n maybe(\n new_git_repository,\n name = \"crate_index__iceoryx2-pal-posix-qnx8-0.7.0\",\n commit = \"bd16da32190d53d69c3e5504aab47df52ca8b5f8\",\n init_submodules = True,\n patches = [\n \"@@score_crates+//patches:qnx8_iceoryx2.patch\",\n ],\n remote = \"https://github.com/qorix-group/iceoryx2.git\",\n build_file = Label(\"@crate_index//crate_index:BUILD.iceoryx2-pal-posix-qnx8-0.7.0.bazel\"),\n strip_prefix = \"iceoryx2-pal/posix\",\n )\n\n maybe(\n new_git_repository,\n name = \"crate_index__iceoryx2-pal-testing-qnx8-0.7.0\",\n commit = \"bd16da32190d53d69c3e5504aab47df52ca8b5f8\",\n init_submodules = True,\n remote = \"https://github.com/qorix-group/iceoryx2.git\",\n build_file = Label(\"@crate_index//crate_index:BUILD.iceoryx2-pal-testing-qnx8-0.7.0.bazel\"),\n strip_prefix = \"iceoryx2-pal/testing\",\n )\n\n maybe(\n new_git_repository,\n name = \"crate_index__iceoryx2-qnx8-0.7.0\",\n commit = \"bd16da32190d53d69c3e5504aab47df52ca8b5f8\",\n init_submodules = True,\n remote = \"https://github.com/qorix-group/iceoryx2.git\",\n build_file = Label(\"@crate_index//crate_index:BUILD.iceoryx2-qnx8-0.7.0.bazel\"),\n strip_prefix = \"iceoryx2\",\n )\n\n maybe(\n http_archive,\n name = \"crate_index__id-arena-2.3.0\",\n sha256 = \"3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/id-arena/2.3.0/download\"],\n strip_prefix = \"id-arena-2.3.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.id-arena-2.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__indexmap-2.14.0\",\n sha256 = \"d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/indexmap/2.14.0/download\"],\n strip_prefix = \"indexmap-2.14.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.indexmap-2.14.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__indicatif-0.18.4\",\n sha256 = \"25470f23803092da7d239834776d653104d551bc4d7eacaf31e6837854b8e9eb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/indicatif/0.18.4/download\"],\n strip_prefix = \"indicatif-0.18.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.indicatif-0.18.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__indicatif-log-bridge-0.2.3\",\n sha256 = \"63703cf9069b85dbe6fe26e1c5230d013dee99d3559cd3d02ba39e099ef7ab02\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/indicatif-log-bridge/0.2.3/download\"],\n strip_prefix = \"indicatif-log-bridge-0.2.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.indicatif-log-bridge-0.2.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__ipc-channel-0.20.2\",\n sha256 = \"f93600b5616c2d075f8af8dbd23c1d69278c5d24e4913d220cbc60b14c95c180\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ipc-channel/0.20.2/download\"],\n strip_prefix = \"ipc-channel-0.20.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.ipc-channel-0.20.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__is_terminal_polyfill-1.70.2\",\n sha256 = \"a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/is_terminal_polyfill/1.70.2/download\"],\n strip_prefix = \"is_terminal_polyfill-1.70.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.is_terminal_polyfill-1.70.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.itertools-0.12.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__itertools-0.13.0\",\n sha256 = \"413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/itertools/0.13.0/download\"],\n strip_prefix = \"itertools-0.13.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.itertools-0.13.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__itertools-0.14.0\",\n sha256 = \"2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/itertools/0.14.0/download\"],\n strip_prefix = \"itertools-0.14.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.itertools-0.14.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__itoa-1.0.18\",\n sha256 = \"8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/itoa/1.0.18/download\"],\n strip_prefix = \"itoa-1.0.18\",\n build_file = Label(\"@crate_index//crate_index:BUILD.itoa-1.0.18.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__jiff-0.2.28\",\n sha256 = \"4603d3033e49e2b0e31229fcab20a5d40089c607d975cd9c80551dc69eed9102\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/jiff/0.2.28/download\"],\n strip_prefix = \"jiff-0.2.28\",\n build_file = Label(\"@crate_index//crate_index:BUILD.jiff-0.2.28.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__jiff-static-0.2.28\",\n sha256 = \"782d32378dddf207193ac91cefb848ad41abb58195c95168e1291227a0832b47\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/jiff-static/0.2.28/download\"],\n strip_prefix = \"jiff-static-0.2.28\",\n build_file = Label(\"@crate_index//crate_index:BUILD.jiff-static-0.2.28.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__js-sys-0.3.99\",\n sha256 = \"142bc4740e452c1e57ade0cbc129f139c9093e354346f0872ef985f4f5cf5f11\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/js-sys/0.3.99/download\"],\n strip_prefix = \"js-sys-0.3.99\",\n build_file = Label(\"@crate_index//crate_index:BUILD.js-sys-0.3.99.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.lazy_static-1.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__lazycell-1.3.0\",\n sha256 = \"830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/lazycell/1.3.0/download\"],\n strip_prefix = \"lazycell-1.3.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.lazycell-1.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__leb128fmt-0.1.0\",\n sha256 = \"09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/leb128fmt/0.1.0/download\"],\n strip_prefix = \"leb128fmt-0.1.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.leb128fmt-0.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__libc-0.2.186\",\n sha256 = \"68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/libc/0.2.186/download\"],\n strip_prefix = \"libc-0.2.186\",\n build_file = Label(\"@crate_index//crate_index:BUILD.libc-0.2.186.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__libloading-0.8.9\",\n sha256 = \"d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/libloading/0.8.9/download\"],\n strip_prefix = \"libloading-0.8.9\",\n build_file = Label(\"@crate_index//crate_index:BUILD.libloading-0.8.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__linux-raw-sys-0.12.1\",\n sha256 = \"32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/linux-raw-sys/0.12.1/download\"],\n strip_prefix = \"linux-raw-sys-0.12.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.linux-raw-sys-0.12.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__linux-raw-sys-0.4.15\",\n sha256 = \"d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/linux-raw-sys/0.4.15/download\"],\n strip_prefix = \"linux-raw-sys-0.4.15\",\n build_file = Label(\"@crate_index//crate_index:BUILD.linux-raw-sys-0.4.15.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__lock_api-0.4.14\",\n sha256 = \"224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/lock_api/0.4.14/download\"],\n strip_prefix = \"lock_api-0.4.14\",\n build_file = Label(\"@crate_index//crate_index:BUILD.lock_api-0.4.14.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__log-0.4.32\",\n sha256 = \"953f07c43838f8e6f9758cab68bf5bed85465e7587ebe0b823f1bcd81978ad3a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/log/0.4.32/download\"],\n strip_prefix = \"log-0.4.32\",\n build_file = Label(\"@crate_index//crate_index:BUILD.log-0.4.32.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__matchit-0.8.4\",\n sha256 = \"47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/matchit/0.8.4/download\"],\n strip_prefix = \"matchit-0.8.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.matchit-0.8.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__memchr-2.8.1\",\n sha256 = \"6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/memchr/2.8.1/download\"],\n strip_prefix = \"memchr-2.8.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.memchr-2.8.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__mime-0.3.17\",\n sha256 = \"6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/mime/0.3.17/download\"],\n strip_prefix = \"mime-0.3.17\",\n build_file = Label(\"@crate_index//crate_index:BUILD.mime-0.3.17.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.minimal-lexical-0.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__mio-1.2.1\",\n sha256 = \"02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/mio/1.2.1/download\"],\n strip_prefix = \"mio-1.2.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.mio-1.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__multimap-0.10.1\",\n sha256 = \"1d87ecb2933e8aeadb3e3a02b828fed80a7528047e68b4f424523a0981a3a084\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/multimap/0.10.1/download\"],\n strip_prefix = \"multimap-0.10.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.multimap-0.10.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__nix-0.30.1\",\n sha256 = \"74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/nix/0.30.1/download\"],\n strip_prefix = \"nix-0.30.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.nix-0.30.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__nix-0.31.3\",\n sha256 = \"cf20d2fde8ff38632c426f1165ed7436270b44f199fc55284c38276f9db47c3d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/nix/0.31.3/download\"],\n strip_prefix = \"nix-0.31.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.nix-0.31.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.nom-7.1.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__nu-ansi-term-0.50.3\",\n sha256 = \"7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/nu-ansi-term/0.50.3/download\"],\n strip_prefix = \"nu-ansi-term-0.50.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.nu-ansi-term-0.50.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__num-conv-0.2.2\",\n sha256 = \"521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/num-conv/0.2.2/download\"],\n strip_prefix = \"num-conv-0.2.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.num-conv-0.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__objc2-0.6.4\",\n sha256 = \"3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/objc2/0.6.4/download\"],\n strip_prefix = \"objc2-0.6.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.objc2-0.6.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__objc2-encode-4.1.0\",\n sha256 = \"ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/objc2-encode/4.1.0/download\"],\n strip_prefix = \"objc2-encode-4.1.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.objc2-encode-4.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__once_cell-1.21.4\",\n sha256 = \"9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/once_cell/1.21.4/download\"],\n strip_prefix = \"once_cell-1.21.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.once_cell-1.21.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__once_cell_polyfill-1.70.2\",\n sha256 = \"384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/once_cell_polyfill/1.70.2/download\"],\n strip_prefix = \"once_cell_polyfill-1.70.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.once_cell_polyfill-1.70.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__ouroboros-0.18.5\",\n sha256 = \"1e0f050db9c44b97a94723127e6be766ac5c340c48f2c4bb3ffa11713744be59\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ouroboros/0.18.5/download\"],\n strip_prefix = \"ouroboros-0.18.5\",\n build_file = Label(\"@crate_index//crate_index:BUILD.ouroboros-0.18.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__ouroboros_macro-0.18.5\",\n sha256 = \"3c7028bdd3d43083f6d8d4d5187680d0d3560d54df4cc9d752005268b41e64d0\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ouroboros_macro/0.18.5/download\"],\n strip_prefix = \"ouroboros_macro-0.18.5\",\n build_file = Label(\"@crate_index//crate_index:BUILD.ouroboros_macro-0.18.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.paste-1.0.15.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__percent-encoding-2.3.2\",\n sha256 = \"9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/percent-encoding/2.3.2/download\"],\n strip_prefix = \"percent-encoding-2.3.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.percent-encoding-2.3.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__petgraph-0.7.1\",\n sha256 = \"3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/petgraph/0.7.1/download\"],\n strip_prefix = \"petgraph-0.7.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.petgraph-0.7.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__petgraph-0.8.3\",\n sha256 = \"8701b58ea97060d5e5b155d383a69952a60943f0e6dfe30b04c287beb0b27455\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/petgraph/0.8.3/download\"],\n strip_prefix = \"petgraph-0.8.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.petgraph-0.8.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__pico-args-0.5.0\",\n sha256 = \"5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pico-args/0.5.0/download\"],\n strip_prefix = \"pico-args-0.5.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.pico-args-0.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__pin-project-1.1.13\",\n sha256 = \"2466b2336ed02bcdca6b294417127b90ec92038d1d5c4fbeac971a922e0e0924\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pin-project/1.1.13/download\"],\n strip_prefix = \"pin-project-1.1.13\",\n build_file = Label(\"@crate_index//crate_index:BUILD.pin-project-1.1.13.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__pin-project-internal-1.1.13\",\n sha256 = \"c96395f0a926bc13b1c17622aaddda1ecb55d49c8f1bf9777e4d877800a43f8b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pin-project-internal/1.1.13/download\"],\n strip_prefix = \"pin-project-internal-1.1.13\",\n build_file = Label(\"@crate_index//crate_index:BUILD.pin-project-internal-1.1.13.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__pin-project-lite-0.2.17\",\n sha256 = \"a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pin-project-lite/0.2.17/download\"],\n strip_prefix = \"pin-project-lite-0.2.17\",\n build_file = Label(\"@crate_index//crate_index:BUILD.pin-project-lite-0.2.17.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__portable-atomic-1.13.1\",\n sha256 = \"c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/portable-atomic/1.13.1/download\"],\n strip_prefix = \"portable-atomic-1.13.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.portable-atomic-1.13.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__portable-atomic-util-0.2.7\",\n sha256 = \"c2a106d1259c23fac8e543272398ae0e3c0b8d33c88ed73d0cc71b0f1d902618\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/portable-atomic-util/0.2.7/download\"],\n strip_prefix = \"portable-atomic-util-0.2.7\",\n build_file = Label(\"@crate_index//crate_index:BUILD.portable-atomic-util-0.2.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__postcard-1.1.3\",\n sha256 = \"6764c3b5dd454e283a30e6dfe78e9b31096d9e32036b5d1eaac7a6119ccb9a24\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/postcard/1.1.3/download\"],\n strip_prefix = \"postcard-1.1.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.postcard-1.1.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__postcard-derive-0.2.2\",\n sha256 = \"e0232bd009a197ceec9cc881ba46f727fcd8060a2d8d6a9dde7a69030a6fe2bb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/postcard-derive/0.2.2/download\"],\n strip_prefix = \"postcard-derive-0.2.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.postcard-derive-0.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__powerfmt-0.2.0\",\n sha256 = \"439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/powerfmt/0.2.0/download\"],\n strip_prefix = \"powerfmt-0.2.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.powerfmt-0.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__ppv-lite86-0.2.21\",\n sha256 = \"85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ppv-lite86/0.2.21/download\"],\n strip_prefix = \"ppv-lite86-0.2.21\",\n build_file = Label(\"@crate_index//crate_index:BUILD.ppv-lite86-0.2.21.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__prettyplease-0.2.37\",\n sha256 = \"479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/prettyplease/0.2.37/download\"],\n strip_prefix = \"prettyplease-0.2.37\",\n build_file = Label(\"@crate_index//crate_index:BUILD.prettyplease-0.2.37.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__proc-macro2-1.0.106\",\n sha256 = \"8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/proc-macro2/1.0.106/download\"],\n strip_prefix = \"proc-macro2-1.0.106\",\n build_file = Label(\"@crate_index//crate_index:BUILD.proc-macro2-1.0.106.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__proc-macro2-diagnostics-0.10.1\",\n sha256 = \"af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/proc-macro2-diagnostics/0.10.1/download\"],\n strip_prefix = \"proc-macro2-diagnostics-0.10.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.proc-macro2-diagnostics-0.10.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__prost-0.13.5\",\n sha256 = \"2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/prost/0.13.5/download\"],\n strip_prefix = \"prost-0.13.5\",\n build_file = Label(\"@crate_index//crate_index:BUILD.prost-0.13.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__prost-0.14.3\",\n sha256 = \"d2ea70524a2f82d518bce41317d0fae74151505651af45faf1ffbd6fd33f0568\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/prost/0.14.3/download\"],\n strip_prefix = \"prost-0.14.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.prost-0.14.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__prost-build-0.13.5\",\n sha256 = \"be769465445e8c1474e9c5dac2018218498557af32d9ed057325ec9a41ae81bf\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/prost-build/0.13.5/download\"],\n strip_prefix = \"prost-build-0.13.5\",\n build_file = Label(\"@crate_index//crate_index:BUILD.prost-build-0.13.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__prost-build-0.14.3\",\n sha256 = \"343d3bd7056eda839b03204e68deff7d1b13aba7af2b2fd16890697274262ee7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/prost-build/0.14.3/download\"],\n strip_prefix = \"prost-build-0.14.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.prost-build-0.14.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__prost-derive-0.13.5\",\n sha256 = \"8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/prost-derive/0.13.5/download\"],\n strip_prefix = \"prost-derive-0.13.5\",\n build_file = Label(\"@crate_index//crate_index:BUILD.prost-derive-0.13.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__prost-derive-0.14.3\",\n sha256 = \"27c6023962132f4b30eb4c172c91ce92d933da334c59c23cddee82358ddafb0b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/prost-derive/0.14.3/download\"],\n strip_prefix = \"prost-derive-0.14.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.prost-derive-0.14.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__prost-types-0.13.5\",\n sha256 = \"52c2c1bf36ddb1a1c396b3601a3cec27c2462e45f07c386894ec3ccf5332bd16\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/prost-types/0.13.5/download\"],\n strip_prefix = \"prost-types-0.13.5\",\n build_file = Label(\"@crate_index//crate_index:BUILD.prost-types-0.13.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__prost-types-0.14.3\",\n sha256 = \"8991c4cbdb8bc5b11f0b074ffe286c30e523de90fee5ba8132f1399f23cb3dd7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/prost-types/0.14.3/download\"],\n strip_prefix = \"prost-types-0.14.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.prost-types-0.14.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__protoc-gen-prost-0.4.0\",\n sha256 = \"77eb17a7657a703f30cb9b7ba4d981e4037b8af2d819ab0077514b0bef537406\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/protoc-gen-prost/0.4.0/download\"],\n strip_prefix = \"protoc-gen-prost-0.4.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.protoc-gen-prost-0.4.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__protoc-gen-tonic-0.4.1\",\n sha256 = \"6ab6a0d73a0914752ed8fd7cc51afe169e28da87be3efef292de5676cc527634\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/protoc-gen-tonic/0.4.1/download\"],\n strip_prefix = \"protoc-gen-tonic-0.4.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.protoc-gen-tonic-0.4.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__quote-1.0.45\",\n sha256 = \"41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/quote/1.0.45/download\"],\n strip_prefix = \"quote-1.0.45\",\n build_file = Label(\"@crate_index//crate_index:BUILD.quote-1.0.45.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__r-efi-5.3.0\",\n sha256 = \"69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/r-efi/5.3.0/download\"],\n strip_prefix = \"r-efi-5.3.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.r-efi-5.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__r-efi-6.0.0\",\n sha256 = \"f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/r-efi/6.0.0/download\"],\n strip_prefix = \"r-efi-6.0.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.r-efi-6.0.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__rand-0.9.4\",\n sha256 = \"44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rand/0.9.4/download\"],\n strip_prefix = \"rand-0.9.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.rand-0.9.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__rand_chacha-0.9.0\",\n sha256 = \"d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rand_chacha/0.9.0/download\"],\n strip_prefix = \"rand_chacha-0.9.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.rand_chacha-0.9.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__rand_core-0.9.5\",\n sha256 = \"76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rand_core/0.9.5/download\"],\n strip_prefix = \"rand_core-0.9.5\",\n build_file = Label(\"@crate_index//crate_index:BUILD.rand_core-0.9.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__regex-1.12.3\",\n sha256 = \"e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/regex/1.12.3/download\"],\n strip_prefix = \"regex-1.12.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.regex-1.12.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__regex-automata-0.4.14\",\n sha256 = \"6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/regex-automata/0.4.14/download\"],\n strip_prefix = \"regex-automata-0.4.14\",\n build_file = Label(\"@crate_index//crate_index:BUILD.regex-automata-0.4.14.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__regex-syntax-0.8.10\",\n sha256 = \"dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/regex-syntax/0.8.10/download\"],\n strip_prefix = \"regex-syntax-0.8.10\",\n build_file = Label(\"@crate_index//crate_index:BUILD.regex-syntax-0.8.10.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__rustc-hash-1.1.0\",\n sha256 = \"08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustc-hash/1.1.0/download\"],\n strip_prefix = \"rustc-hash-1.1.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.rustc-hash-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__rustc-hash-2.1.2\",\n sha256 = \"94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustc-hash/2.1.2/download\"],\n strip_prefix = \"rustc-hash-2.1.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.rustc-hash-2.1.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__rustc_version-0.4.1\",\n sha256 = \"cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustc_version/0.4.1/download\"],\n strip_prefix = \"rustc_version-0.4.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.rustc_version-0.4.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__rustix-0.38.44\",\n sha256 = \"fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustix/0.38.44/download\"],\n strip_prefix = \"rustix-0.38.44\",\n build_file = Label(\"@crate_index//crate_index:BUILD.rustix-0.38.44.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__rustix-1.1.4\",\n sha256 = \"b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustix/1.1.4/download\"],\n strip_prefix = \"rustix-1.1.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.rustix-1.1.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__rustversion-1.0.22\",\n sha256 = \"b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustversion/1.0.22/download\"],\n strip_prefix = \"rustversion-1.0.22\",\n build_file = Label(\"@crate_index//crate_index:BUILD.rustversion-1.0.22.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__scopeguard-1.2.0\",\n sha256 = \"94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/scopeguard/1.2.0/download\"],\n strip_prefix = \"scopeguard-1.2.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.scopeguard-1.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__semver-1.0.28\",\n sha256 = \"8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/semver/1.0.28/download\"],\n strip_prefix = \"semver-1.0.28\",\n build_file = Label(\"@crate_index//crate_index:BUILD.semver-1.0.28.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__serde-1.0.228\",\n sha256 = \"9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde/1.0.228/download\"],\n strip_prefix = \"serde-1.0.228\",\n build_file = Label(\"@crate_index//crate_index:BUILD.serde-1.0.228.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__serde_core-1.0.228\",\n sha256 = \"41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_core/1.0.228/download\"],\n strip_prefix = \"serde_core-1.0.228\",\n build_file = Label(\"@crate_index//crate_index:BUILD.serde_core-1.0.228.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__serde_derive-1.0.228\",\n sha256 = \"d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_derive/1.0.228/download\"],\n strip_prefix = \"serde_derive-1.0.228\",\n build_file = Label(\"@crate_index//crate_index:BUILD.serde_derive-1.0.228.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__serde_json-1.0.150\",\n sha256 = \"e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_json/1.0.150/download\"],\n strip_prefix = \"serde_json-1.0.150\",\n build_file = Label(\"@crate_index//crate_index:BUILD.serde_json-1.0.150.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__serde_spanned-0.6.9\",\n sha256 = \"bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_spanned/0.6.9/download\"],\n strip_prefix = \"serde_spanned-0.6.9\",\n build_file = Label(\"@crate_index//crate_index:BUILD.serde_spanned-0.6.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__sha1_smol-1.0.1\",\n sha256 = \"bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/sha1_smol/1.0.1/download\"],\n strip_prefix = \"sha1_smol-1.0.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.sha1_smol-1.0.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__sharded-slab-0.1.7\",\n sha256 = \"f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/sharded-slab/0.1.7/download\"],\n strip_prefix = \"sharded-slab-0.1.7\",\n build_file = Label(\"@crate_index//crate_index:BUILD.sharded-slab-0.1.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__shlex-1.3.0\",\n sha256 = \"0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/shlex/1.3.0/download\"],\n strip_prefix = \"shlex-1.3.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.shlex-1.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__shlex-2.0.1\",\n sha256 = \"f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/shlex/2.0.1/download\"],\n strip_prefix = \"shlex-2.0.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.shlex-2.0.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__signal-hook-0.3.18\",\n sha256 = \"d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/signal-hook/0.3.18/download\"],\n strip_prefix = \"signal-hook-0.3.18\",\n build_file = Label(\"@crate_index//crate_index:BUILD.signal-hook-0.3.18.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__signal-hook-registry-1.4.8\",\n sha256 = \"c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/signal-hook-registry/1.4.8/download\"],\n strip_prefix = \"signal-hook-registry-1.4.8\",\n build_file = Label(\"@crate_index//crate_index:BUILD.signal-hook-registry-1.4.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__slab-0.4.12\",\n sha256 = \"0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/slab/0.4.12/download\"],\n strip_prefix = \"slab-0.4.12\",\n build_file = Label(\"@crate_index//crate_index:BUILD.slab-0.4.12.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__smallvec-1.15.1\",\n sha256 = \"67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/smallvec/1.15.1/download\"],\n strip_prefix = \"smallvec-1.15.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.smallvec-1.15.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__socket2-0.6.4\",\n sha256 = \"52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/socket2/0.6.4/download\"],\n strip_prefix = \"socket2-0.6.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.socket2-0.6.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__spin-0.9.8\",\n sha256 = \"6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/spin/0.9.8/download\"],\n strip_prefix = \"spin-0.9.8\",\n build_file = Label(\"@crate_index//crate_index:BUILD.spin-0.9.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__stable_deref_trait-1.2.1\",\n sha256 = \"6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/stable_deref_trait/1.2.1/download\"],\n strip_prefix = \"stable_deref_trait-1.2.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.stable_deref_trait-1.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__static_assertions-1.1.0\",\n sha256 = \"a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/static_assertions/1.1.0/download\"],\n strip_prefix = \"static_assertions-1.1.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.static_assertions-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__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(\"@crate_index//crate_index:BUILD.strsim-0.11.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__syn-2.0.117\",\n sha256 = \"e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/syn/2.0.117/download\"],\n strip_prefix = \"syn-2.0.117\",\n build_file = Label(\"@crate_index//crate_index:BUILD.syn-2.0.117.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__sync_wrapper-1.0.2\",\n sha256 = \"0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/sync_wrapper/1.0.2/download\"],\n strip_prefix = \"sync_wrapper-1.0.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.sync_wrapper-1.0.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__tempfile-3.27.0\",\n sha256 = \"32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tempfile/3.27.0/download\"],\n strip_prefix = \"tempfile-3.27.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.tempfile-3.27.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__termsize-0.1.9\",\n sha256 = \"6f11ff5c25c172608d5b85e2fb43ee9a6d683a7f4ab7f96ae07b3d8b590368fd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/termsize/0.1.9/download\"],\n strip_prefix = \"termsize-0.1.9\",\n build_file = Label(\"@crate_index//crate_index:BUILD.termsize-0.1.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__thiserror-2.0.18\",\n sha256 = \"4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/thiserror/2.0.18/download\"],\n strip_prefix = \"thiserror-2.0.18\",\n build_file = Label(\"@crate_index//crate_index:BUILD.thiserror-2.0.18.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__thiserror-impl-2.0.18\",\n sha256 = \"ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/thiserror-impl/2.0.18/download\"],\n strip_prefix = \"thiserror-impl-2.0.18\",\n build_file = Label(\"@crate_index//crate_index:BUILD.thiserror-impl-2.0.18.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__thread_local-1.1.9\",\n sha256 = \"f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/thread_local/1.1.9/download\"],\n strip_prefix = \"thread_local-1.1.9\",\n build_file = Label(\"@crate_index//crate_index:BUILD.thread_local-1.1.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__time-0.3.47\",\n sha256 = \"743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/time/0.3.47/download\"],\n strip_prefix = \"time-0.3.47\",\n build_file = Label(\"@crate_index//crate_index:BUILD.time-0.3.47.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__time-core-0.1.8\",\n sha256 = \"7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/time-core/0.1.8/download\"],\n strip_prefix = \"time-core-0.1.8\",\n build_file = Label(\"@crate_index//crate_index:BUILD.time-core-0.1.8.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__time-macros-0.2.27\",\n sha256 = \"2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/time-macros/0.2.27/download\"],\n strip_prefix = \"time-macros-0.2.27\",\n build_file = Label(\"@crate_index//crate_index:BUILD.time-macros-0.2.27.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__tiny-fn-0.1.9\",\n sha256 = \"9659b108631d1e1cf3e8e489f894bee40bc9d68fd6cc67ec4d4ce9b72d565228\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tiny-fn/0.1.9/download\"],\n strip_prefix = \"tiny-fn-0.1.9\",\n build_file = Label(\"@crate_index//crate_index:BUILD.tiny-fn-0.1.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__tinyjson-2.5.1\",\n sha256 = \"9ab95735ea2c8fd51154d01e39cf13912a78071c2d89abc49a7ef102a7dd725a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tinyjson/2.5.1/download\"],\n strip_prefix = \"tinyjson-2.5.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.tinyjson-2.5.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__tokio-1.52.3\",\n sha256 = \"8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tokio/1.52.3/download\"],\n strip_prefix = \"tokio-1.52.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.tokio-1.52.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__tokio-macros-2.7.0\",\n sha256 = \"385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tokio-macros/2.7.0/download\"],\n strip_prefix = \"tokio-macros-2.7.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.tokio-macros-2.7.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__tokio-seqpacket-0.8.2\",\n sha256 = \"24d1294c36e418ee280e57ba514cc260c0c80c69571abf44109eef2823a1c1c6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tokio-seqpacket/0.8.2/download\"],\n strip_prefix = \"tokio-seqpacket-0.8.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.tokio-seqpacket-0.8.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__tokio-stream-0.1.18\",\n sha256 = \"32da49809aab5c3bc678af03902d4ccddea2a87d028d86392a4b1560c6906c70\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tokio-stream/0.1.18/download\"],\n strip_prefix = \"tokio-stream-0.1.18\",\n build_file = Label(\"@crate_index//crate_index:BUILD.tokio-stream-0.1.18.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__tokio-util-0.7.18\",\n sha256 = \"9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tokio-util/0.7.18/download\"],\n strip_prefix = \"tokio-util-0.7.18\",\n build_file = Label(\"@crate_index//crate_index:BUILD.tokio-util-0.7.18.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__toml-0.8.23\",\n sha256 = \"dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/toml/0.8.23/download\"],\n strip_prefix = \"toml-0.8.23\",\n build_file = Label(\"@crate_index//crate_index:BUILD.toml-0.8.23.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__toml_datetime-0.6.11\",\n sha256 = \"22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/toml_datetime/0.6.11/download\"],\n strip_prefix = \"toml_datetime-0.6.11\",\n build_file = Label(\"@crate_index//crate_index:BUILD.toml_datetime-0.6.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__toml_edit-0.22.27\",\n sha256 = \"41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/toml_edit/0.22.27/download\"],\n strip_prefix = \"toml_edit-0.22.27\",\n build_file = Label(\"@crate_index//crate_index:BUILD.toml_edit-0.22.27.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__toml_write-0.1.2\",\n sha256 = \"5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/toml_write/0.1.2/download\"],\n strip_prefix = \"toml_write-0.1.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.toml_write-0.1.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__tonic-0.14.6\",\n sha256 = \"ac2a5518c70fa84342385732db33fb3f44bc4cc748936eb5833d2df34d6445ef\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tonic/0.14.6/download\"],\n strip_prefix = \"tonic-0.14.6\",\n build_file = Label(\"@crate_index//crate_index:BUILD.tonic-0.14.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__tonic-build-0.12.3\",\n sha256 = \"9557ce109ea773b399c9b9e5dca39294110b74f1f342cb347a80d1fce8c26a11\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tonic-build/0.12.3/download\"],\n strip_prefix = \"tonic-build-0.12.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.tonic-build-0.12.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__tower-0.5.3\",\n sha256 = \"ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tower/0.5.3/download\"],\n strip_prefix = \"tower-0.5.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.tower-0.5.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__tower-layer-0.3.3\",\n sha256 = \"121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tower-layer/0.3.3/download\"],\n strip_prefix = \"tower-layer-0.3.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.tower-layer-0.3.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__tower-service-0.3.3\",\n sha256 = \"8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tower-service/0.3.3/download\"],\n strip_prefix = \"tower-service-0.3.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.tower-service-0.3.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__tracing-0.1.44\",\n sha256 = \"63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tracing/0.1.44/download\"],\n strip_prefix = \"tracing-0.1.44\",\n build_file = Label(\"@crate_index//crate_index:BUILD.tracing-0.1.44.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__tracing-attributes-0.1.31\",\n sha256 = \"7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tracing-attributes/0.1.31/download\"],\n strip_prefix = \"tracing-attributes-0.1.31\",\n build_file = Label(\"@crate_index//crate_index:BUILD.tracing-attributes-0.1.31.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__tracing-core-0.1.36\",\n sha256 = \"db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tracing-core/0.1.36/download\"],\n strip_prefix = \"tracing-core-0.1.36\",\n build_file = Label(\"@crate_index//crate_index:BUILD.tracing-core-0.1.36.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__tracing-log-0.2.0\",\n sha256 = \"ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tracing-log/0.2.0/download\"],\n strip_prefix = \"tracing-log-0.2.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.tracing-log-0.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__tracing-serde-0.2.0\",\n sha256 = \"704b1aeb7be0d0a84fc9828cae51dab5970fee5088f83d1dd7ee6f6246fc6ff1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tracing-serde/0.2.0/download\"],\n strip_prefix = \"tracing-serde-0.2.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.tracing-serde-0.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__tracing-subscriber-0.3.23\",\n sha256 = \"cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/tracing-subscriber/0.3.23/download\"],\n strip_prefix = \"tracing-subscriber-0.3.23\",\n build_file = Label(\"@crate_index//crate_index:BUILD.tracing-subscriber-0.3.23.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__try-lock-0.2.5\",\n sha256 = \"e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/try-lock/0.2.5/download\"],\n strip_prefix = \"try-lock-0.2.5\",\n build_file = Label(\"@crate_index//crate_index:BUILD.try-lock-0.2.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__unicode-ident-1.0.24\",\n sha256 = \"e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unicode-ident/1.0.24/download\"],\n strip_prefix = \"unicode-ident-1.0.24\",\n build_file = Label(\"@crate_index//crate_index:BUILD.unicode-ident-1.0.24.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__unicode-width-0.2.2\",\n sha256 = \"b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unicode-width/0.2.2/download\"],\n strip_prefix = \"unicode-width-0.2.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.unicode-width-0.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__unicode-xid-0.2.6\",\n sha256 = \"ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unicode-xid/0.2.6/download\"],\n strip_prefix = \"unicode-xid-0.2.6\",\n build_file = Label(\"@crate_index//crate_index:BUILD.unicode-xid-0.2.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__unit-prefix-0.5.2\",\n sha256 = \"81e544489bf3d8ef66c953931f56617f423cd4b5494be343d9b9d3dda037b9a3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unit-prefix/0.5.2/download\"],\n strip_prefix = \"unit-prefix-0.5.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.unit-prefix-0.5.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__utf8parse-0.2.2\",\n sha256 = \"06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/utf8parse/0.2.2/download\"],\n strip_prefix = \"utf8parse-0.2.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.utf8parse-0.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__uuid-1.23.2\",\n sha256 = \"d258b83ceec21034727ecee8c382cfa6c3e133699b0742c64571814fb420c9f7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/uuid/1.23.2/download\"],\n strip_prefix = \"uuid-1.23.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.uuid-1.23.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__valuable-0.1.1\",\n sha256 = \"ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/valuable/0.1.1/download\"],\n strip_prefix = \"valuable-0.1.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.valuable-0.1.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__version_check-0.9.5\",\n sha256 = \"0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/version_check/0.9.5/download\"],\n strip_prefix = \"version_check-0.9.5\",\n build_file = Label(\"@crate_index//crate_index:BUILD.version_check-0.9.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__want-0.3.1\",\n sha256 = \"bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/want/0.3.1/download\"],\n strip_prefix = \"want-0.3.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.want-0.3.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__wasi-0.11.1-wasi-snapshot-preview1\",\n sha256 = \"ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasi/0.11.1+wasi-snapshot-preview1/download\"],\n strip_prefix = \"wasi-0.11.1+wasi-snapshot-preview1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.wasi-0.11.1+wasi-snapshot-preview1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__wasip2-1.0.3-wasi-0.2.9\",\n sha256 = \"20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasip2/1.0.3+wasi-0.2.9/download\"],\n strip_prefix = \"wasip2-1.0.3+wasi-0.2.9\",\n build_file = Label(\"@crate_index//crate_index:BUILD.wasip2-1.0.3+wasi-0.2.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__wasip3-0.4.0-wasi-0.3.0-rc-2026-01-06\",\n sha256 = \"5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasip3/0.4.0+wasi-0.3.0-rc-2026-01-06/download\"],\n strip_prefix = \"wasip3-0.4.0+wasi-0.3.0-rc-2026-01-06\",\n build_file = Label(\"@crate_index//crate_index:BUILD.wasip3-0.4.0+wasi-0.3.0-rc-2026-01-06.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__wasm-bindgen-0.2.122\",\n sha256 = \"3ed04576f974d2b2fba0f38c51dbc5518011e38c36bf1143164be765528fd409\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen/0.2.122/download\"],\n strip_prefix = \"wasm-bindgen-0.2.122\",\n build_file = Label(\"@crate_index//crate_index:BUILD.wasm-bindgen-0.2.122.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__wasm-bindgen-macro-0.2.122\",\n sha256 = \"916151b09da36bd82f6615cbf3a419e2f0ba23a03c6160e8e92eb6bd4aa1dec6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen-macro/0.2.122/download\"],\n strip_prefix = \"wasm-bindgen-macro-0.2.122\",\n build_file = Label(\"@crate_index//crate_index:BUILD.wasm-bindgen-macro-0.2.122.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__wasm-bindgen-macro-support-0.2.122\",\n sha256 = \"299047362ccbfce148b67ab7e73349f77748e00c8296f9542adfad2ad82c5c5e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen-macro-support/0.2.122/download\"],\n strip_prefix = \"wasm-bindgen-macro-support-0.2.122\",\n build_file = Label(\"@crate_index//crate_index:BUILD.wasm-bindgen-macro-support-0.2.122.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__wasm-bindgen-shared-0.2.122\",\n sha256 = \"9a929b2c61f11ba3e9bc35b50c1f25cb38e0e892c0c231ae2b8cf78d5dad4437\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-bindgen-shared/0.2.122/download\"],\n strip_prefix = \"wasm-bindgen-shared-0.2.122\",\n build_file = Label(\"@crate_index//crate_index:BUILD.wasm-bindgen-shared-0.2.122.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__wasm-encoder-0.244.0\",\n sha256 = \"990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-encoder/0.244.0/download\"],\n strip_prefix = \"wasm-encoder-0.244.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.wasm-encoder-0.244.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__wasm-metadata-0.244.0\",\n sha256 = \"bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasm-metadata/0.244.0/download\"],\n strip_prefix = \"wasm-metadata-0.244.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.wasm-metadata-0.244.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__wasmparser-0.244.0\",\n sha256 = \"47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wasmparser/0.244.0/download\"],\n strip_prefix = \"wasmparser-0.244.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.wasmparser-0.244.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__web-time-1.1.0\",\n sha256 = \"5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/web-time/1.1.0/download\"],\n strip_prefix = \"web-time-1.1.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.web-time-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__which-4.4.2\",\n sha256 = \"87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/which/4.4.2/download\"],\n strip_prefix = \"which-4.4.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.which-4.4.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__winapi-0.3.9\",\n sha256 = \"5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/winapi/0.3.9/download\"],\n strip_prefix = \"winapi-0.3.9\",\n build_file = Label(\"@crate_index//crate_index:BUILD.winapi-0.3.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__winapi-i686-pc-windows-gnu-0.4.0\",\n sha256 = \"ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/winapi-i686-pc-windows-gnu/0.4.0/download\"],\n strip_prefix = \"winapi-i686-pc-windows-gnu-0.4.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.winapi-i686-pc-windows-gnu-0.4.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__winapi-x86_64-pc-windows-gnu-0.4.0\",\n sha256 = \"712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/winapi-x86_64-pc-windows-gnu/0.4.0/download\"],\n strip_prefix = \"winapi-x86_64-pc-windows-gnu-0.4.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows-0.61.3\",\n sha256 = \"9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows/0.61.3/download\"],\n strip_prefix = \"windows-0.61.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows-0.61.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows-collections-0.2.0\",\n sha256 = \"3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-collections/0.2.0/download\"],\n strip_prefix = \"windows-collections-0.2.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows-collections-0.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows-core-0.61.2\",\n sha256 = \"c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-core/0.61.2/download\"],\n strip_prefix = \"windows-core-0.61.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows-core-0.61.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows-future-0.2.1\",\n sha256 = \"fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-future/0.2.1/download\"],\n strip_prefix = \"windows-future-0.2.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows-future-0.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows-implement-0.60.2\",\n sha256 = \"053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-implement/0.60.2/download\"],\n strip_prefix = \"windows-implement-0.60.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows-implement-0.60.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows-interface-0.59.3\",\n sha256 = \"3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-interface/0.59.3/download\"],\n strip_prefix = \"windows-interface-0.59.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows-interface-0.59.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows-link-0.1.3\",\n sha256 = \"5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-link/0.1.3/download\"],\n strip_prefix = \"windows-link-0.1.3\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows-link-0.1.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows-link-0.2.1\",\n sha256 = \"f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-link/0.2.1/download\"],\n strip_prefix = \"windows-link-0.2.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows-link-0.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows-numerics-0.2.0\",\n sha256 = \"9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-numerics/0.2.0/download\"],\n strip_prefix = \"windows-numerics-0.2.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows-numerics-0.2.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows-result-0.3.4\",\n sha256 = \"56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-result/0.3.4/download\"],\n strip_prefix = \"windows-result-0.3.4\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows-result-0.3.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows-strings-0.4.2\",\n sha256 = \"56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-strings/0.4.2/download\"],\n strip_prefix = \"windows-strings-0.4.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows-strings-0.4.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows-sys-0.48.0\",\n sha256 = \"677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-sys/0.48.0/download\"],\n strip_prefix = \"windows-sys-0.48.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows-sys-0.48.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows-sys-0.59.0\",\n sha256 = \"1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-sys/0.59.0/download\"],\n strip_prefix = \"windows-sys-0.59.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows-sys-0.59.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows-sys-0.61.2\",\n sha256 = \"ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-sys/0.61.2/download\"],\n strip_prefix = \"windows-sys-0.61.2\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows-sys-0.61.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows-targets-0.48.5\",\n sha256 = \"9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-targets/0.48.5/download\"],\n strip_prefix = \"windows-targets-0.48.5\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows-targets-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows-targets-0.52.6\",\n sha256 = \"9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-targets/0.52.6/download\"],\n strip_prefix = \"windows-targets-0.52.6\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows-targets-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows-threading-0.1.0\",\n sha256 = \"b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-threading/0.1.0/download\"],\n strip_prefix = \"windows-threading-0.1.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows-threading-0.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows_aarch64_gnullvm-0.48.5\",\n sha256 = \"2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_aarch64_gnullvm/0.48.5/download\"],\n strip_prefix = \"windows_aarch64_gnullvm-0.48.5\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows_aarch64_gnullvm-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows_aarch64_gnullvm-0.52.6\",\n sha256 = \"32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_aarch64_gnullvm/0.52.6/download\"],\n strip_prefix = \"windows_aarch64_gnullvm-0.52.6\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows_aarch64_gnullvm-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows_aarch64_msvc-0.48.5\",\n sha256 = \"dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_aarch64_msvc/0.48.5/download\"],\n strip_prefix = \"windows_aarch64_msvc-0.48.5\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows_aarch64_msvc-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows_aarch64_msvc-0.52.6\",\n sha256 = \"09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_aarch64_msvc/0.52.6/download\"],\n strip_prefix = \"windows_aarch64_msvc-0.52.6\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows_aarch64_msvc-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows_i686_gnu-0.48.5\",\n sha256 = \"a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_gnu/0.48.5/download\"],\n strip_prefix = \"windows_i686_gnu-0.48.5\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows_i686_gnu-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows_i686_gnu-0.52.6\",\n sha256 = \"8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_gnu/0.52.6/download\"],\n strip_prefix = \"windows_i686_gnu-0.52.6\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows_i686_gnu-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows_i686_gnullvm-0.52.6\",\n sha256 = \"0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_gnullvm/0.52.6/download\"],\n strip_prefix = \"windows_i686_gnullvm-0.52.6\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows_i686_gnullvm-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows_i686_msvc-0.48.5\",\n sha256 = \"8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_msvc/0.48.5/download\"],\n strip_prefix = \"windows_i686_msvc-0.48.5\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows_i686_msvc-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows_i686_msvc-0.52.6\",\n sha256 = \"240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_i686_msvc/0.52.6/download\"],\n strip_prefix = \"windows_i686_msvc-0.52.6\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows_i686_msvc-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows_x86_64_gnu-0.48.5\",\n sha256 = \"53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_gnu/0.48.5/download\"],\n strip_prefix = \"windows_x86_64_gnu-0.48.5\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows_x86_64_gnu-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows_x86_64_gnu-0.52.6\",\n sha256 = \"147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_gnu/0.52.6/download\"],\n strip_prefix = \"windows_x86_64_gnu-0.52.6\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows_x86_64_gnu-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows_x86_64_gnullvm-0.48.5\",\n sha256 = \"0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_gnullvm/0.48.5/download\"],\n strip_prefix = \"windows_x86_64_gnullvm-0.48.5\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows_x86_64_gnullvm-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows_x86_64_gnullvm-0.52.6\",\n sha256 = \"24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_gnullvm/0.52.6/download\"],\n strip_prefix = \"windows_x86_64_gnullvm-0.52.6\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows_x86_64_gnullvm-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows_x86_64_msvc-0.48.5\",\n sha256 = \"ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_msvc/0.48.5/download\"],\n strip_prefix = \"windows_x86_64_msvc-0.48.5\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows_x86_64_msvc-0.48.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__windows_x86_64_msvc-0.52.6\",\n sha256 = \"589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows_x86_64_msvc/0.52.6/download\"],\n strip_prefix = \"windows_x86_64_msvc-0.52.6\",\n build_file = Label(\"@crate_index//crate_index:BUILD.windows_x86_64_msvc-0.52.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__winnow-0.7.15\",\n sha256 = \"df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/winnow/0.7.15/download\"],\n strip_prefix = \"winnow-0.7.15\",\n build_file = Label(\"@crate_index//crate_index:BUILD.winnow-0.7.15.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__wit-bindgen-0.51.0\",\n sha256 = \"d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wit-bindgen/0.51.0/download\"],\n strip_prefix = \"wit-bindgen-0.51.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.wit-bindgen-0.51.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__wit-bindgen-0.57.1\",\n sha256 = \"1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wit-bindgen/0.57.1/download\"],\n strip_prefix = \"wit-bindgen-0.57.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.wit-bindgen-0.57.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__wit-bindgen-core-0.51.0\",\n sha256 = \"ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wit-bindgen-core/0.51.0/download\"],\n strip_prefix = \"wit-bindgen-core-0.51.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.wit-bindgen-core-0.51.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__wit-bindgen-rust-0.51.0\",\n sha256 = \"b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wit-bindgen-rust/0.51.0/download\"],\n strip_prefix = \"wit-bindgen-rust-0.51.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.wit-bindgen-rust-0.51.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__wit-bindgen-rust-macro-0.51.0\",\n sha256 = \"0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wit-bindgen-rust-macro/0.51.0/download\"],\n strip_prefix = \"wit-bindgen-rust-macro-0.51.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.wit-bindgen-rust-macro-0.51.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__wit-component-0.244.0\",\n sha256 = \"9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wit-component/0.244.0/download\"],\n strip_prefix = \"wit-component-0.244.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.wit-component-0.244.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__wit-parser-0.244.0\",\n sha256 = \"ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/wit-parser/0.244.0/download\"],\n strip_prefix = \"wit-parser-0.244.0\",\n build_file = Label(\"@crate_index//crate_index:BUILD.wit-parser-0.244.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__yansi-1.0.1\",\n sha256 = \"cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/yansi/1.0.1/download\"],\n strip_prefix = \"yansi-1.0.1\",\n build_file = Label(\"@crate_index//crate_index:BUILD.yansi-1.0.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__zerocopy-0.8.50\",\n sha256 = \"3b065d4f0e55f82fae73202e189638116a87c55ab6b8e6c2721e13dd9d854ad1\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerocopy/0.8.50/download\"],\n strip_prefix = \"zerocopy-0.8.50\",\n build_file = Label(\"@crate_index//crate_index:BUILD.zerocopy-0.8.50.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__zerocopy-derive-0.8.50\",\n sha256 = \"0b631b19d36a892ab55420c92dbc83ccd79274f25be714855d3074aa71cab639\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zerocopy-derive/0.8.50/download\"],\n strip_prefix = \"zerocopy-derive-0.8.50\",\n build_file = Label(\"@crate_index//crate_index:BUILD.zerocopy-derive-0.8.50.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crate_index__zmij-1.0.21\",\n sha256 = \"b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zmij/1.0.21/download\"],\n strip_prefix = \"zmij-1.0.21\",\n build_file = Label(\"@crate_index//crate_index:BUILD.zmij-1.0.21.bazel\"),\n )\n\n return [\n struct(repo=\"crate_index__adler32-1.2.0\", is_dev_dep = False),\n struct(repo=\"crate_index__anyhow-1.0.102\", is_dev_dep = False),\n struct(repo=\"crate_index__argh-0.1.19\", is_dev_dep = False),\n struct(repo=\"crate_index__arrayvec-0.7.6\", is_dev_dep = False),\n struct(repo=\"crate_index__async-stream-0.3.6\", is_dev_dep = False),\n struct(repo=\"crate_index__bytes-1.11.1\", is_dev_dep = False),\n struct(repo=\"crate_index__cc-1.2.63\", is_dev_dep = False),\n struct(repo=\"crate_index__clap-4.6.1\", is_dev_dep = False),\n struct(repo=\"crate_index__console-0.16.3\", is_dev_dep = False),\n struct(repo=\"crate_index__ctrlc-3.5.2\", is_dev_dep = False),\n struct(repo=\"crate_index__env_logger-0.11.10\", is_dev_dep = False),\n struct(repo=\"crate_index__futures-0.3.32\", is_dev_dep = False),\n struct(repo=\"crate_index__human_bytes-0.4.3\", is_dev_dep = False),\n struct(repo=\"crate_index__iceoryx2-0.5.0\", is_dev_dep = False),\n struct(repo=\"crate_index__iceoryx2-bb-container-qnx8-0.7.0\", is_dev_dep = False),\n struct(repo=\"crate_index__iceoryx2-bb-derive-macros-qnx8-0.7.0\", is_dev_dep = False),\n struct(repo=\"crate_index__iceoryx2-bb-elementary-qnx8-0.7.0\", is_dev_dep = False),\n struct(repo=\"crate_index__iceoryx2-bb-elementary-traits-qnx8-0.7.0\", is_dev_dep = False),\n struct(repo=\"crate_index__iceoryx2-bb-lock-free-qnx8-0.7.0\", is_dev_dep = False),\n struct(repo=\"crate_index__iceoryx2-bb-memory-qnx8-0.7.0\", is_dev_dep = False),\n struct(repo=\"crate_index__iceoryx2-bb-posix-qnx8-0.7.0\", is_dev_dep = False),\n struct(repo=\"crate_index__iceoryx2-bb-system-types-qnx8-0.7.0\", is_dev_dep = False),\n struct(repo=\"crate_index__iceoryx2-bb-testing-qnx8-0.7.0\", is_dev_dep = False),\n struct(repo=\"crate_index__iceoryx2-bb-threadsafe-qnx8-0.7.0\", is_dev_dep = False),\n struct(repo=\"crate_index__iceoryx2-cal-qnx8-0.7.0\", is_dev_dep = False),\n struct(repo=\"crate_index__iceoryx2-pal-concurrency-sync-qnx8-0.7.0\", is_dev_dep = False),\n struct(repo=\"crate_index__iceoryx2-qnx8-0.7.0\", is_dev_dep = False),\n struct(repo=\"crate_index__indicatif-0.18.4\", is_dev_dep = False),\n struct(repo=\"crate_index__indicatif-log-bridge-0.2.3\", is_dev_dep = False),\n struct(repo=\"crate_index__ipc-channel-0.20.2\", is_dev_dep = False),\n struct(repo=\"crate_index__libc-0.2.186\", is_dev_dep = False),\n struct(repo=\"crate_index__log-0.4.32\", is_dev_dep = False),\n struct(repo=\"crate_index__mio-1.2.1\", is_dev_dep = False),\n struct(repo=\"crate_index__nix-0.30.1\", is_dev_dep = False),\n struct(repo=\"crate_index__paste-1.0.15\", is_dev_dep = False),\n struct(repo=\"crate_index__pico-args-0.5.0\", is_dev_dep = False),\n struct(repo=\"crate_index__postcard-1.1.3\", is_dev_dep = False),\n struct(repo=\"crate_index__proc-macro2-1.0.106\", is_dev_dep = False),\n struct(repo=\"crate_index__prost-0.14.3\", is_dev_dep = False),\n struct(repo=\"crate_index__prost-build-0.14.3\", is_dev_dep = False),\n struct(repo=\"crate_index__prost-types-0.14.3\", is_dev_dep = False),\n struct(repo=\"crate_index__protoc-gen-prost-0.4.0\", is_dev_dep = False),\n struct(repo=\"crate_index__protoc-gen-tonic-0.4.1\", is_dev_dep = False),\n struct(repo=\"crate_index__quote-1.0.45\", is_dev_dep = False),\n struct(repo=\"crate_index__rand-0.9.4\", is_dev_dep = False),\n struct(repo=\"crate_index__serde-1.0.228\", is_dev_dep = False),\n struct(repo=\"crate_index__serde_json-1.0.150\", is_dev_dep = False),\n struct(repo=\"crate_index__signal-hook-0.3.18\", is_dev_dep = False),\n struct(repo=\"crate_index__socket2-0.6.4\", is_dev_dep = False),\n struct(repo=\"crate_index__syn-2.0.117\", is_dev_dep = False),\n struct(repo=\"crate_index__tempfile-3.27.0\", is_dev_dep = False),\n struct(repo=\"crate_index__time-0.3.47\", is_dev_dep = False),\n struct(repo=\"crate_index__tinyjson-2.5.1\", is_dev_dep = False),\n struct(repo=\"crate_index__tokio-1.52.3\", is_dev_dep = False),\n struct(repo=\"crate_index__tokio-seqpacket-0.8.2\", is_dev_dep = False),\n struct(repo=\"crate_index__tokio-util-0.7.18\", is_dev_dep = False),\n struct(repo=\"crate_index__tonic-0.14.6\", is_dev_dep = False),\n struct(repo=\"crate_index__tracing-0.1.44\", is_dev_dep = False),\n struct(repo=\"crate_index__tracing-subscriber-0.3.23\", is_dev_dep = False),\n ]\n" + } + } + }, + "crate_index__adler32-1.2.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/adler32/1.2.0/download" + ], + "strip_prefix": "adler32-1.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"adler32\",\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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=adler32\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.2.0\",\n)\n" + } + }, + "crate_index__aho-corasick-1.1.4": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/aho-corasick/1.1.4/download" + ], + "strip_prefix": "aho-corasick-1.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"aho_corasick\",\n deps = [\n \"@crate_index__memchr-2.8.1//: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 \"perf-literal\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=aho-corasick\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.1.4\",\n)\n" + } + }, + "crate_index__aliasable-0.1.3": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/aliasable/0.1.3/download" + ], + "strip_prefix": "aliasable-0.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"aliasable\",\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 ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=aliasable\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.3\",\n)\n" + } + }, + "crate_index__anstream-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": "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/anstream/1.0.0/download" + ], + "strip_prefix": "anstream-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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"anstream\",\n deps = [\n \"@crate_index__anstyle-1.0.14//:anstyle\",\n \"@crate_index__anstyle-parse-1.0.0//:anstyle_parse\",\n \"@crate_index__anstyle-query-1.1.5//:anstyle_query\",\n \"@crate_index__colorchoice-1.0.5//:colorchoice\",\n \"@crate_index__is_terminal_polyfill-1.70.2//:is_terminal_polyfill\",\n \"@crate_index__utf8parse-0.2.2//:utf8parse\",\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 \"auto\",\n \"default\",\n \"wincon\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=anstream\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.0\",\n)\n" + } + }, + "crate_index__anstyle-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": "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/anstyle/1.0.14/download" + ], + "strip_prefix": "anstyle-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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"anstyle\",\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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=anstyle\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.14\",\n)\n" + } + }, + "crate_index__anstyle-parse-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": "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/anstyle-parse/1.0.0/download" + ], + "strip_prefix": "anstyle-parse-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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"anstyle_parse\",\n deps = [\n \"@crate_index__utf8parse-0.2.2//:utf8parse\",\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 \"utf8\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=anstyle-parse\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.0\",\n)\n" + } + }, + "crate_index__anstyle-query-1.1.5": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/anstyle-query/1.1.5/download" + ], + "strip_prefix": "anstyle-query-1.1.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"anstyle_query\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=anstyle-query\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.1.5\",\n)\n" + } + }, + "crate_index__anstyle-wincon-3.0.11": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/anstyle-wincon/3.0.11/download" + ], + "strip_prefix": "anstyle-wincon-3.0.11", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"anstyle_wincon\",\n deps = [\n \"@crate_index__anstyle-1.0.14//:anstyle\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=anstyle-wincon\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"3.0.11\",\n)\n" + } + }, + "crate_index__anyhow-1.0.102": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/anyhow/1.0.102/download" + ], + "strip_prefix": "anyhow-1.0.102", + "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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"anyhow\",\n deps = [\n \"@crate_index__anyhow-1.0.102//: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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=anyhow\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.102\",\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 = \"anyhow\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=anyhow\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"1.0.102\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__argh-0.1.19": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "211818e820cda9ca6f167a64a5c808837366a6dfd807157c64c1304c486cd033", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/argh/0.1.19/download" + ], + "strip_prefix": "argh-0.1.19", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"argh\",\n deps = [\n \"@crate_index__argh_shared-0.1.19//:argh_shared\",\n ],\n proc_macro_deps = [\n \"@crate_index__argh_derive-0.1.19//:argh_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 \"help\",\n \"serde\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=argh\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.19\",\n)\n" + } + }, + "crate_index__argh_derive-0.1.19": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "c442a9d18cef5dde467405d27d461d080d68972d6d0dfd0408265b6749ec427d", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/argh_derive/0.1.19/download" + ], + "strip_prefix": "argh_derive-0.1.19", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_proc_macro\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_proc_macro(\n name = \"argh_derive\",\n deps = [\n \"@crate_index__argh_shared-0.1.19//:argh_shared\",\n \"@crate_index__proc-macro2-1.0.106//:proc_macro2\",\n \"@crate_index__quote-1.0.45//:quote\",\n \"@crate_index__syn-2.0.117//: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 \"help\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=argh_derive\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.19\",\n)\n" + } + }, + "crate_index__argh_shared-0.1.19": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "e5ade012bac4db278517a0132c8c10c6427025868dca16c801087c28d5a411f1", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/argh_shared/0.1.19/download" + ], + "strip_prefix": "argh_shared-0.1.19", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"argh_shared\",\n deps = [\n \"@crate_index__serde-1.0.228//:serde\",\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 \"serde\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=argh_shared\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.19\",\n)\n" + } + }, + "crate_index__arrayvec-0.7.6": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/arrayvec/0.7.6/download" + ], + "strip_prefix": "arrayvec-0.7.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"arrayvec\",\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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=arrayvec\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.7.6\",\n)\n" + } + }, + "crate_index__async-stream-0.3.6": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/async-stream/0.3.6/download" + ], + "strip_prefix": "async-stream-0.3.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"async_stream\",\n deps = [\n \"@crate_index__futures-core-0.3.32//:futures_core\",\n \"@crate_index__pin-project-lite-0.2.17//:pin_project_lite\",\n ],\n proc_macro_deps = [\n \"@crate_index__async-stream-impl-0.3.6//:async_stream_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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=async-stream\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.3.6\",\n)\n" + } + }, + "crate_index__async-stream-impl-0.3.6": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/async-stream-impl/0.3.6/download" + ], + "strip_prefix": "async-stream-impl-0.3.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_proc_macro\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_proc_macro(\n name = \"async_stream_impl\",\n deps = [\n \"@crate_index__proc-macro2-1.0.106//:proc_macro2\",\n \"@crate_index__quote-1.0.45//:quote\",\n \"@crate_index__syn-2.0.117//: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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=async-stream-impl\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.3.6\",\n)\n" + } + }, + "crate_index__async-trait-0.1.89": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/async-trait/0.1.89/download" + ], + "strip_prefix": "async-trait-0.1.89", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_proc_macro\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_proc_macro(\n name = \"async_trait\",\n deps = [\n \"@crate_index__proc-macro2-1.0.106//:proc_macro2\",\n \"@crate_index__quote-1.0.45//:quote\",\n \"@crate_index__syn-2.0.117//: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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=async-trait\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.89\",\n)\n" + } + }, + "crate_index__atomic-polyfill-1.0.3": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "8cf2bce30dfe09ef0bfaef228b9d414faaf7e563035494d7fe092dba54b300f4", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/atomic-polyfill/1.0.3/download" + ], + "strip_prefix": "atomic-polyfill-1.0.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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"atomic_polyfill\",\n deps = [\n \"@crate_index__atomic-polyfill-1.0.3//:build_script_build\",\n \"@crate_index__critical-section-1.2.0//:critical_section\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=atomic-polyfill\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.3\",\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 = \"atomic-polyfill\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=atomic-polyfill\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"1.0.3\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__atomic-waker-1.1.2": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/atomic-waker/1.1.2/download" + ], + "strip_prefix": "atomic-waker-1.1.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"atomic_waker\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=atomic-waker\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.1.2\",\n)\n" + } + }, + "crate_index__axum-0.8.9": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "31b698c5f9a010f6573133b09e0de5408834d0c82f8d7475a89fc1867a71cd90", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/axum/0.8.9/download" + ], + "strip_prefix": "axum-0.8.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"axum\",\n deps = [\n \"@crate_index__axum-core-0.5.6//:axum_core\",\n \"@crate_index__bytes-1.11.1//:bytes\",\n \"@crate_index__futures-util-0.3.32//:futures_util\",\n \"@crate_index__http-1.4.1//:http\",\n \"@crate_index__http-body-1.0.1//:http_body\",\n \"@crate_index__http-body-util-0.1.3//:http_body_util\",\n \"@crate_index__itoa-1.0.18//:itoa\",\n \"@crate_index__matchit-0.8.4//:matchit\",\n \"@crate_index__memchr-2.8.1//:memchr\",\n \"@crate_index__mime-0.3.17//:mime\",\n \"@crate_index__percent-encoding-2.3.2//:percent_encoding\",\n \"@crate_index__pin-project-lite-0.2.17//:pin_project_lite\",\n \"@crate_index__serde_core-1.0.228//:serde_core\",\n \"@crate_index__sync_wrapper-1.0.2//:sync_wrapper\",\n \"@crate_index__tower-0.5.3//:tower\",\n \"@crate_index__tower-layer-0.3.3//:tower_layer\",\n \"@crate_index__tower-service-0.3.3//:tower_service\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=axum\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.8.9\",\n)\n" + } + }, + "crate_index__axum-core-0.5.6": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "08c78f31d7b1291f7ee735c1c6780ccde7785daae9a9206026862dab7d8792d1", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/axum-core/0.5.6/download" + ], + "strip_prefix": "axum-core-0.5.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"axum_core\",\n deps = [\n \"@crate_index__bytes-1.11.1//:bytes\",\n \"@crate_index__futures-core-0.3.32//:futures_core\",\n \"@crate_index__http-1.4.1//:http\",\n \"@crate_index__http-body-1.0.1//:http_body\",\n \"@crate_index__http-body-util-0.1.3//:http_body_util\",\n \"@crate_index__mime-0.3.17//:mime\",\n \"@crate_index__pin-project-lite-0.2.17//:pin_project_lite\",\n \"@crate_index__sync_wrapper-1.0.2//:sync_wrapper\",\n \"@crate_index__tower-layer-0.3.3//:tower_layer\",\n \"@crate_index__tower-service-0.3.3//:tower_service\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=axum-core\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.5.6\",\n)\n" + } + }, + "crate_index__base64-0.22.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/base64/0.22.1/download" + ], + "strip_prefix": "base64-0.22.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"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 \"alloc\",\n \"default\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=base64\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.22.1\",\n)\n" + } + }, + "crate_index__bincode-1.3.3": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/bincode/1.3.3/download" + ], + "strip_prefix": "bincode-1.3.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"bincode\",\n deps = [\n \"@crate_index__serde-1.0.228//:serde\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2015\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=bincode\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.3.3\",\n)\n" + } + }, + "crate_index__bindgen-0.69.5": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/bindgen/0.69.5/download" + ], + "strip_prefix": "bindgen-0.69.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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"bindgen\",\n deps = [\n \"@crate_index__bindgen-0.69.5//:build_script_build\",\n \"@crate_index__bitflags-2.12.1//:bitflags\",\n \"@crate_index__cexpr-0.6.0//:cexpr\",\n \"@crate_index__clang-sys-1.8.1//:clang_sys\",\n \"@crate_index__itertools-0.12.1//:itertools\",\n \"@crate_index__lazy_static-1.5.0//:lazy_static\",\n \"@crate_index__lazycell-1.3.0//:lazycell\",\n \"@crate_index__log-0.4.32//:log\",\n \"@crate_index__prettyplease-0.2.37//:prettyplease\",\n \"@crate_index__proc-macro2-1.0.106//:proc_macro2\",\n \"@crate_index__quote-1.0.45//:quote\",\n \"@crate_index__regex-1.12.3//:regex\",\n \"@crate_index__rustc-hash-1.1.0//:rustc_hash\",\n \"@crate_index__shlex-1.3.0//:shlex\",\n \"@crate_index__syn-2.0.117//:syn\",\n \"@crate_index__which-4.4.2//:which\",\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 \"logging\",\n \"prettyplease\",\n \"runtime\",\n \"which-rustfmt\",\n ],\n crate_root = \"lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=bindgen\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.69.5\",\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 \"logging\",\n \"prettyplease\",\n \"runtime\",\n \"which-rustfmt\",\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 link_deps = [\n \"@crate_index__clang-sys-1.8.1//:clang_sys\",\n \"@crate_index__prettyplease-0.2.37//:prettyplease\",\n ],\n edition = \"2018\",\n pkg_name = \"bindgen\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=bindgen\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.69.5\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__bindgen-0.72.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/bindgen/0.72.1/download" + ], + "strip_prefix": "bindgen-0.72.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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"bindgen\",\n deps = [\n \"@crate_index__bindgen-0.72.1//:build_script_build\",\n \"@crate_index__bitflags-2.12.1//:bitflags\",\n \"@crate_index__cexpr-0.6.0//:cexpr\",\n \"@crate_index__clang-sys-1.8.1//:clang_sys\",\n \"@crate_index__itertools-0.13.0//:itertools\",\n \"@crate_index__log-0.4.32//:log\",\n \"@crate_index__prettyplease-0.2.37//:prettyplease\",\n \"@crate_index__proc-macro2-1.0.106//:proc_macro2\",\n \"@crate_index__quote-1.0.45//:quote\",\n \"@crate_index__regex-1.12.3//:regex\",\n \"@crate_index__rustc-hash-2.1.2//:rustc_hash\",\n \"@crate_index__shlex-1.3.0//:shlex\",\n \"@crate_index__syn-2.0.117//: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 \"logging\",\n \"prettyplease\",\n \"runtime\",\n ],\n crate_root = \"lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=bindgen\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.72.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_features = [\n \"default\",\n \"logging\",\n \"prettyplease\",\n \"runtime\",\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 link_deps = [\n \"@crate_index__clang-sys-1.8.1//:clang_sys\",\n \"@crate_index__prettyplease-0.2.37//:prettyplease\",\n ],\n edition = \"2021\",\n pkg_name = \"bindgen\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=bindgen\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.72.1\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__bitflags-2.12.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "84d7ced0ae9557296835c32bf1b1e02b44c746701f898460fb000d7eaa84f00a", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/bitflags/2.12.1/download" + ], + "strip_prefix": "bitflags-2.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"bitflags\",\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 = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [\n \"std\", # aarch64-unknown-nto-qnx710\n ],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [\n \"std\", # x86_64-unknown-linux-gnu\n ],\n \"//conditions:default\": [],\n }),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=bitflags\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"2.12.1\",\n)\n" + } + }, + "crate_index__block2-0.6.2": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/block2/0.6.2/download" + ], + "strip_prefix": "block2-0.6.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"block2\",\n deps = [\n \"@crate_index__objc2-0.6.4//:objc2\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=block2\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.6.2\",\n)\n" + } + }, + "crate_index__bumpalo-3.20.3": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/bumpalo/3.20.3/download" + ], + "strip_prefix": "bumpalo-3.20.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=bumpalo\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"3.20.3\",\n)\n" + } + }, + "crate_index__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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"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_features = [\n \"default\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=byteorder\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.5.0\",\n)\n" + } + }, + "crate_index__bytes-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": "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/bytes/1.11.1/download" + ], + "strip_prefix": "bytes-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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"bytes\",\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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=bytes\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.11.1\",\n)\n" + } + }, + "crate_index__cc-1.2.63": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/cc/1.2.63/download" + ], + "strip_prefix": "cc-1.2.63", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"cc\",\n deps = [\n \"@crate_index__find-msvc-tools-0.1.9//:find_msvc_tools\",\n \"@crate_index__shlex-2.0.1//:shlex\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=cc\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.2.63\",\n)\n" + } + }, + "crate_index__cdr-0.2.4": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "9617422bf43fde9280707a7e90f8f7494389c182f5c70b0f67592d0f06d41dfa", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/cdr/0.2.4/download" + ], + "strip_prefix": "cdr-0.2.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"cdr\",\n deps = [\n \"@crate_index__byteorder-1.5.0//:byteorder\",\n \"@crate_index__serde-1.0.228//:serde\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=cdr\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.4\",\n)\n" + } + }, + "crate_index__cexpr-0.6.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/cexpr/0.6.0/download" + ], + "strip_prefix": "cexpr-0.6.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"cexpr\",\n deps = [\n \"@crate_index__nom-7.1.3//:nom\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=cexpr\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.6.0\",\n)\n" + } + }, + "crate_index__cfg-if-1.0.4": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/cfg-if/1.0.4/download" + ], + "strip_prefix": "cfg-if-1.0.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=cfg-if\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.4\",\n)\n" + } + }, + "crate_index__cfg_aliases-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": "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/cfg_aliases/0.2.1/download" + ], + "strip_prefix": "cfg_aliases-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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"cfg_aliases\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=cfg_aliases\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.1\",\n)\n" + } + }, + "crate_index__clang-sys-1.8.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/clang-sys/1.8.1/download" + ], + "strip_prefix": "clang-sys-1.8.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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"clang_sys\",\n deps = [\n \"@crate_index__clang-sys-1.8.1//:build_script_build\",\n \"@crate_index__glob-0.3.3//:glob\",\n \"@crate_index__libc-0.2.186//:libc\",\n \"@crate_index__libloading-0.8.9//:libloading\",\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 \"clang_10_0\",\n \"clang_11_0\",\n \"clang_3_5\",\n \"clang_3_6\",\n \"clang_3_7\",\n \"clang_3_8\",\n \"clang_3_9\",\n \"clang_4_0\",\n \"clang_5_0\",\n \"clang_6_0\",\n \"clang_7_0\",\n \"clang_8_0\",\n \"clang_9_0\",\n \"libloading\",\n \"runtime\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=clang-sys\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.8.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_features = [\n \"clang_10_0\",\n \"clang_11_0\",\n \"clang_3_5\",\n \"clang_3_6\",\n \"clang_3_7\",\n \"clang_3_8\",\n \"clang_3_9\",\n \"clang_4_0\",\n \"clang_5_0\",\n \"clang_6_0\",\n \"clang_7_0\",\n \"clang_8_0\",\n \"clang_9_0\",\n \"libloading\",\n \"runtime\",\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 deps = [\n \"@crate_index__glob-0.3.3//:glob\",\n ],\n edition = \"2021\",\n links = \"clang\",\n pkg_name = \"clang-sys\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=clang-sys\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"1.8.1\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__clap-4.6.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/clap/4.6.1/download" + ], + "strip_prefix": "clap-4.6.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"clap\",\n deps = [\n \"@crate_index__clap_builder-4.6.0//:clap_builder\",\n ],\n proc_macro_deps = [\n \"@crate_index__clap_derive-4.6.1//:clap_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 \"color\",\n \"default\",\n \"derive\",\n \"error-context\",\n \"help\",\n \"std\",\n \"suggestions\",\n \"usage\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2024\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=clap\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"4.6.1\",\n)\n" + } + }, + "crate_index__clap_builder-4.6.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/clap_builder/4.6.0/download" + ], + "strip_prefix": "clap_builder-4.6.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"clap_builder\",\n deps = [\n \"@crate_index__anstream-1.0.0//:anstream\",\n \"@crate_index__anstyle-1.0.14//:anstyle\",\n \"@crate_index__clap_lex-1.1.0//:clap_lex\",\n \"@crate_index__strsim-0.11.1//:strsim\",\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 \"color\",\n \"error-context\",\n \"help\",\n \"std\",\n \"suggestions\",\n \"usage\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2024\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=clap_builder\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"4.6.0\",\n)\n" + } + }, + "crate_index__clap_derive-4.6.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/clap_derive/4.6.1/download" + ], + "strip_prefix": "clap_derive-4.6.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_proc_macro\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_proc_macro(\n name = \"clap_derive\",\n deps = [\n \"@crate_index__heck-0.5.0//:heck\",\n \"@crate_index__proc-macro2-1.0.106//:proc_macro2\",\n \"@crate_index__quote-1.0.45//:quote\",\n \"@crate_index__syn-2.0.117//: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 = \"2024\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=clap_derive\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"4.6.1\",\n)\n" + } + }, + "crate_index__clap_lex-1.1.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/clap_lex/1.1.0/download" + ], + "strip_prefix": "clap_lex-1.1.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"clap_lex\",\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 = \"2024\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=clap_lex\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.1.0\",\n)\n" + } + }, + "crate_index__cobs-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": "0fa961b519f0b462e3a3b4a34b64d119eeaca1d59af726fe450bbba07a9fc0a1", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/cobs/0.3.0/download" + ], + "strip_prefix": "cobs-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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"cobs\",\n deps = [\n \"@crate_index__thiserror-2.0.18//:thiserror\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=cobs\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.3.0\",\n)\n" + } + }, + "crate_index__colorchoice-1.0.5": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/colorchoice/1.0.5/download" + ], + "strip_prefix": "colorchoice-1.0.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"colorchoice\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=colorchoice\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.5\",\n)\n" + } + }, + "crate_index__console-0.16.3": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "d64e8af5551369d19cf50138de61f1c42074ab970f74e99be916646777f8fc87", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/console/0.16.3/download" + ], + "strip_prefix": "console-0.16.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"console\",\n deps = [\n \"@crate_index__libc-0.2.186//:libc\",\n \"@crate_index__unicode-width-0.2.2//:unicode_width\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"alloc\",\n \"ansi-parsing\",\n \"default\",\n \"std\",\n \"unicode-width\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=console\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.16.3\",\n)\n" + } + }, + "crate_index__critical-section-1.2.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/critical-section/1.2.0/download" + ], + "strip_prefix": "critical-section-1.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"critical_section\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=critical-section\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.2.0\",\n)\n" + } + }, + "crate_index__crossbeam-channel-0.5.15": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/crossbeam-channel/0.5.15/download" + ], + "strip_prefix": "crossbeam-channel-0.5.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"crossbeam_channel\",\n deps = [\n \"@crate_index__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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=crossbeam-channel\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.5.15\",\n)\n" + } + }, + "crate_index__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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"crossbeam_utils\",\n deps = [\n \"@crate_index__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 \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=crossbeam-utils\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\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 \"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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=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" + } + }, + "crate_index__ctrlc-3.5.2": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "e0b1fab2ae45819af2d0731d60f2afe17227ebb1a1538a236da84c93e9a60162", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/ctrlc/3.5.2/download" + ], + "strip_prefix": "ctrlc-3.5.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"ctrlc\",\n deps = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [\n \"@crate_index__nix-0.31.3//:nix\", # cfg(unix)\n ],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [\n \"@crate_index__nix-0.31.3//:nix\", # 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 \"termination\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=ctrlc\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"3.5.2\",\n)\n" + } + }, + "crate_index__deranged-0.5.8": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/deranged/0.5.8/download" + ], + "strip_prefix": "deranged-0.5.8", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"deranged\",\n deps = [\n \"@crate_index__powerfmt-0.2.0//:powerfmt\",\n \"@crate_index__serde_core-1.0.228//:serde_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 \"default\",\n \"powerfmt\",\n \"serde\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=deranged\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.5.8\",\n)\n" + } + }, + "crate_index__dispatch2-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": "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/dispatch2/0.3.1/download" + ], + "strip_prefix": "dispatch2-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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"dispatch2\",\n deps = [\n \"@crate_index__bitflags-2.12.1//:bitflags\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=dispatch2\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.3.1\",\n)\n" + } + }, + "crate_index__either-1.16.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/either/1.16.0/download" + ], + "strip_prefix": "either-1.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"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 = select({\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [\n \"default\", # x86_64-unknown-linux-gnu\n \"std\", # x86_64-unknown-linux-gnu\n \"use_std\", # x86_64-unknown-linux-gnu\n ],\n \"//conditions:default\": [],\n }),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=either\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.16.0\",\n)\n" + } + }, + "crate_index__embedded-io-0.4.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/embedded-io/0.4.0/download" + ], + "strip_prefix": "embedded-io-0.4.0", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"embedded_io\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=embedded-io\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.4.0\",\n)\n" + } + }, + "crate_index__embedded-io-0.6.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/embedded-io/0.6.1/download" + ], + "strip_prefix": "embedded-io-0.6.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"embedded_io\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=embedded-io\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.6.1\",\n)\n" + } + }, + "crate_index__encode_unicode-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": "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/encode_unicode/1.0.0/download" + ], + "strip_prefix": "encode_unicode-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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"encode_unicode\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=encode_unicode\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.0\",\n)\n" + } + }, + "crate_index__enum-iterator-2.3.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "a4549325971814bda7a44061bf3fe7e487d447cba01e4220a4b454d630d7a016", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/enum-iterator/2.3.0/download" + ], + "strip_prefix": "enum-iterator-2.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"enum_iterator\",\n proc_macro_deps = [\n \"@crate_index__enum-iterator-derive-1.5.0//:enum_iterator_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_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=enum-iterator\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"2.3.0\",\n)\n" + } + }, + "crate_index__enum-iterator-derive-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": "685adfa4d6f3d765a26bc5dbc936577de9abf756c1feeb3089b01dd395034842", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/enum-iterator-derive/1.5.0/download" + ], + "strip_prefix": "enum-iterator-derive-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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_proc_macro\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_proc_macro(\n name = \"enum_iterator_derive\",\n deps = [\n \"@crate_index__proc-macro2-1.0.106//:proc_macro2\",\n \"@crate_index__quote-1.0.45//:quote\",\n \"@crate_index__syn-2.0.117//: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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=enum-iterator-derive\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.5.0\",\n)\n" + } + }, + "crate_index__env_filter-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": "32e90c2accc4b07a8456ea0debdc2e7587bdd890680d71173a15d4ae604f6eef", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/env_filter/1.0.1/download" + ], + "strip_prefix": "env_filter-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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"env_filter\",\n deps = [\n \"@crate_index__log-0.4.32//:log\",\n \"@crate_index__regex-1.12.3//:regex\",\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 \"regex\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=env_filter\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.1\",\n)\n" + } + }, + "crate_index__env_logger-0.11.10": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "0621c04f2196ac3f488dd583365b9c09be011a4ab8b9f37248ffcc8f6198b56a", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/env_logger/0.11.10/download" + ], + "strip_prefix": "env_logger-0.11.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"env_logger\",\n deps = [\n \"@crate_index__anstream-1.0.0//:anstream\",\n \"@crate_index__anstyle-1.0.14//:anstyle\",\n \"@crate_index__env_filter-1.0.1//:env_filter\",\n \"@crate_index__jiff-0.2.28//:jiff\",\n \"@crate_index__log-0.4.32//:log\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"auto-color\",\n \"color\",\n \"default\",\n \"humantime\",\n \"regex\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=env_logger\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.11.10\",\n)\n" + } + }, + "crate_index__equivalent-1.0.2": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/equivalent/1.0.2/download" + ], + "strip_prefix": "equivalent-1.0.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"equivalent\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2015\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=equivalent\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.2\",\n)\n" + } + }, + "crate_index__errno-0.3.14": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/errno/0.3.14/download" + ], + "strip_prefix": "errno-0.3.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"errno\",\n deps = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [\n \"@crate_index__libc-0.2.186//:libc\", # cfg(unix)\n ],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [\n \"@crate_index__libc-0.2.186//: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 \"default\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=errno\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.3.14\",\n)\n" + } + }, + "crate_index__fastrand-2.4.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/fastrand/2.4.1/download" + ], + "strip_prefix": "fastrand-2.4.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"fastrand\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"alloc\",\n \"default\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=fastrand\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"2.4.1\",\n)\n" + } + }, + "crate_index__filedesc-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": "c4960c866d9cf4c48f64f11ef0020c98900d0cb32e9b019c000ed838470daa1d", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/filedesc/0.6.3/download" + ], + "strip_prefix": "filedesc-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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"filedesc\",\n deps = [\n \"@crate_index__libc-0.2.186//:libc\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=filedesc\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.6.3\",\n)\n" + } + }, + "crate_index__find-msvc-tools-0.1.9": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/find-msvc-tools/0.1.9/download" + ], + "strip_prefix": "find-msvc-tools-0.1.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"find_msvc_tools\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=find-msvc-tools\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.9\",\n)\n" + } + }, + "crate_index__fixedbitset-0.5.7": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/fixedbitset/0.5.7/download" + ], + "strip_prefix": "fixedbitset-0.5.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"fixedbitset\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=fixedbitset\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.5.7\",\n)\n" + } + }, + "crate_index__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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=fnv\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.7\",\n)\n" + } + }, + "crate_index__foldhash-0.1.5": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/foldhash/0.1.5/download" + ], + "strip_prefix": "foldhash-0.1.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"foldhash\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=foldhash\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.5\",\n)\n" + } + }, + "crate_index__futures-0.3.32": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/futures/0.3.32/download" + ], + "strip_prefix": "futures-0.3.32", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"futures\",\n deps = [\n \"@crate_index__futures-channel-0.3.32//:futures_channel\",\n \"@crate_index__futures-core-0.3.32//:futures_core\",\n \"@crate_index__futures-executor-0.3.32//:futures_executor\",\n \"@crate_index__futures-io-0.3.32//:futures_io\",\n \"@crate_index__futures-sink-0.3.32//:futures_sink\",\n \"@crate_index__futures-task-0.3.32//:futures_task\",\n \"@crate_index__futures-util-0.3.32//:futures_util\",\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 \"async-await\",\n \"default\",\n \"executor\",\n \"futures-executor\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=futures\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.3.32\",\n)\n" + } + }, + "crate_index__futures-channel-0.3.32": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/futures-channel/0.3.32/download" + ], + "strip_prefix": "futures-channel-0.3.32", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"futures_channel\",\n deps = [\n \"@crate_index__futures-core-0.3.32//:futures_core\",\n \"@crate_index__futures-sink-0.3.32//:futures_sink\",\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 \"futures-sink\",\n \"sink\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=futures-channel\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.3.32\",\n)\n" + } + }, + "crate_index__futures-core-0.3.32": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/futures-core/0.3.32/download" + ], + "strip_prefix": "futures-core-0.3.32", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"futures_core\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"alloc\",\n \"default\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=futures-core\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.3.32\",\n)\n" + } + }, + "crate_index__futures-executor-0.3.32": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/futures-executor/0.3.32/download" + ], + "strip_prefix": "futures-executor-0.3.32", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"futures_executor\",\n deps = [\n \"@crate_index__futures-core-0.3.32//:futures_core\",\n \"@crate_index__futures-task-0.3.32//:futures_task\",\n \"@crate_index__futures-util-0.3.32//:futures_util\",\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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=futures-executor\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.3.32\",\n)\n" + } + }, + "crate_index__futures-io-0.3.32": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/futures-io/0.3.32/download" + ], + "strip_prefix": "futures-io-0.3.32", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"futures_io\",\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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=futures-io\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.3.32\",\n)\n" + } + }, + "crate_index__futures-macro-0.3.32": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/futures-macro/0.3.32/download" + ], + "strip_prefix": "futures-macro-0.3.32", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_proc_macro\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_proc_macro(\n name = \"futures_macro\",\n deps = [\n \"@crate_index__proc-macro2-1.0.106//:proc_macro2\",\n \"@crate_index__quote-1.0.45//:quote\",\n \"@crate_index__syn-2.0.117//:syn\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=futures-macro\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.3.32\",\n)\n" + } + }, + "crate_index__futures-sink-0.3.32": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/futures-sink/0.3.32/download" + ], + "strip_prefix": "futures-sink-0.3.32", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"futures_sink\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"alloc\",\n \"default\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=futures-sink\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.3.32\",\n)\n" + } + }, + "crate_index__futures-task-0.3.32": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/futures-task/0.3.32/download" + ], + "strip_prefix": "futures-task-0.3.32", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"futures_task\",\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 = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=futures-task\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.3.32\",\n)\n" + } + }, + "crate_index__futures-util-0.3.32": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/futures-util/0.3.32/download" + ], + "strip_prefix": "futures-util-0.3.32", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"futures_util\",\n deps = [\n \"@crate_index__futures-channel-0.3.32//:futures_channel\",\n \"@crate_index__futures-core-0.3.32//:futures_core\",\n \"@crate_index__futures-io-0.3.32//:futures_io\",\n \"@crate_index__futures-sink-0.3.32//:futures_sink\",\n \"@crate_index__futures-task-0.3.32//:futures_task\",\n \"@crate_index__memchr-2.8.1//:memchr\",\n \"@crate_index__pin-project-lite-0.2.17//:pin_project_lite\",\n \"@crate_index__slab-0.4.12//:slab\",\n ],\n proc_macro_deps = [\n \"@crate_index__futures-macro-0.3.32//:futures_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 \"alloc\",\n \"async-await\",\n \"async-await-macro\",\n \"channel\",\n \"futures-channel\",\n \"futures-io\",\n \"futures-macro\",\n \"futures-sink\",\n \"io\",\n \"memchr\",\n \"sink\",\n \"slab\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=futures-util\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.3.32\",\n)\n" + } + }, + "crate_index__getrandom-0.3.4": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/getrandom/0.3.4/download" + ], + "strip_prefix": "getrandom-0.3.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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"getrandom\",\n deps = [\n \"@crate_index__cfg-if-1.0.4//:cfg_if\",\n \"@crate_index__getrandom-0.3.4//:build_script_build\",\n ] + select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [\n \"@crate_index__libc-0.2.186//:libc\", # cfg(any(target_os = \"haiku\", target_os = \"redox\", target_os = \"nto\", target_os = \"aix\"))\n ],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [\n \"@crate_index__libc-0.2.186//:libc\", # cfg(all(any(target_os = \"linux\", target_os = \"android\"), not(any(all(target_os = \"linux\", target_env = \"\"), getrandom_backend = \"custom\", getrandom_backend = \"linux_raw\", getrandom_backend = \"rdrand\", getrandom_backend = \"rndr\"))))\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 \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=getrandom\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.3.4\",\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 \"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 = \"getrandom\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=getrandom\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.3.4\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__getrandom-0.4.2": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/getrandom/0.4.2/download" + ], + "strip_prefix": "getrandom-0.4.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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"getrandom\",\n deps = [\n \"@crate_index__cfg-if-1.0.4//:cfg_if\",\n \"@crate_index__getrandom-0.4.2//:build_script_build\",\n ] + select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [\n \"@crate_index__libc-0.2.186//:libc\", # cfg(any(target_os = \"haiku\", target_os = \"redox\", target_os = \"nto\", target_os = \"aix\"))\n ],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [\n \"@crate_index__libc-0.2.186//:libc\", # cfg(all(any(target_os = \"linux\", target_os = \"android\"), not(any(all(target_os = \"linux\", target_env = \"\"), getrandom_backend = \"custom\", getrandom_backend = \"linux_raw\", getrandom_backend = \"rdrand\", getrandom_backend = \"rndr\"))))\n ],\n \"//conditions:default\": [],\n }),\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2024\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=getrandom\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.4.2\",\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 = \"2024\",\n pkg_name = \"getrandom\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=getrandom\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.4.2\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__glob-0.3.3": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/glob/0.3.3/download" + ], + "strip_prefix": "glob-0.3.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"glob\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2015\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=glob\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.3.3\",\n)\n" + } + }, + "crate_index__h2-0.4.14": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "171fefbc92fe4a4de27e0698d6a5b392d6a0e333506bc49133760b3bcf948733", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/h2/0.4.14/download" + ], + "strip_prefix": "h2-0.4.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"h2\",\n deps = [\n \"@crate_index__atomic-waker-1.1.2//:atomic_waker\",\n \"@crate_index__bytes-1.11.1//:bytes\",\n \"@crate_index__fnv-1.0.7//:fnv\",\n \"@crate_index__futures-core-0.3.32//:futures_core\",\n \"@crate_index__futures-sink-0.3.32//:futures_sink\",\n \"@crate_index__http-1.4.1//:http\",\n \"@crate_index__indexmap-2.14.0//:indexmap\",\n \"@crate_index__slab-0.4.12//:slab\",\n \"@crate_index__tokio-1.52.3//:tokio\",\n \"@crate_index__tokio-util-0.7.18//:tokio_util\",\n \"@crate_index__tracing-0.1.44//:tracing\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=h2\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.4.14\",\n)\n" + } + }, + "crate_index__hash32-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": "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/hash32/0.2.1/download" + ], + "strip_prefix": "hash32-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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"hash32\",\n deps = [\n \"@crate_index__byteorder-1.5.0//:byteorder\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2015\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=hash32\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.1\",\n)\n" + } + }, + "crate_index__hashbrown-0.15.5": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/hashbrown/0.15.5/download" + ], + "strip_prefix": "hashbrown-0.15.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"hashbrown\",\n deps = [\n \"@crate_index__foldhash-0.1.5//:foldhash\",\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-hasher\",\n \"inline-more\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=hashbrown\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.15.5\",\n)\n" + } + }, + "crate_index__hashbrown-0.17.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/hashbrown/0.17.1/download" + ], + "strip_prefix": "hashbrown-0.17.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"hashbrown\",\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 = \"2024\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=hashbrown\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.17.1\",\n)\n" + } + }, + "crate_index__heapless-0.7.17": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "cdc6457c0eb62c71aac4bc17216026d8410337c4126773b9c5daba343f17964f", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/heapless/0.7.17/download" + ], + "strip_prefix": "heapless-0.7.17", + "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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"heapless\",\n deps = [\n \"@crate_index__hash32-0.2.1//:hash32\",\n \"@crate_index__heapless-0.7.17//:build_script_build\",\n \"@crate_index__serde-1.0.228//:serde\",\n \"@crate_index__stable_deref_trait-1.2.1//:stable_deref_trait\",\n ] + select({\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [\n \"@crate_index__spin-0.9.8//:spin\", # cfg(target_arch = \"x86_64\")\n ],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [\n \"@crate_index__spin-0.9.8//:spin\", # cfg(target_arch = \"x86_64\")\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 \"atomic-polyfill\",\n \"cas\",\n \"serde\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=heapless\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.7.17\",\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 \"atomic-polyfill\",\n \"cas\",\n \"serde\",\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 deps = [\n \"@crate_index__rustc_version-0.4.1//:rustc_version\",\n ],\n edition = \"2018\",\n pkg_name = \"heapless\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=heapless\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.7.17\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__heck-0.4.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/heck/0.4.1/download" + ], + "strip_prefix": "heck-0.4.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"heck\",\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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=heck\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.4.1\",\n)\n" + } + }, + "crate_index__heck-0.5.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/heck/0.5.0/download" + ], + "strip_prefix": "heck-0.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"heck\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=heck\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.5.0\",\n)\n" + } + }, + "crate_index__home-0.5.12": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/home/0.5.12/download" + ], + "strip_prefix": "home-0.5.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"home\",\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 = \"2024\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=home\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.5.12\",\n)\n" + } + }, + "crate_index__http-1.4.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "8be7462df143984c4598a256ef469b251d7d7f9e271135073e78fc535414f3d0", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/http/1.4.1/download" + ], + "strip_prefix": "http-1.4.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"http\",\n deps = [\n \"@crate_index__bytes-1.11.1//:bytes\",\n \"@crate_index__itoa-1.0.18//:itoa\",\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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=http\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.4.1\",\n)\n" + } + }, + "crate_index__http-body-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": "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/http-body/1.0.1/download" + ], + "strip_prefix": "http-body-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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"http_body\",\n deps = [\n \"@crate_index__bytes-1.11.1//:bytes\",\n \"@crate_index__http-1.4.1//:http\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=http-body\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.1\",\n)\n" + } + }, + "crate_index__http-body-util-0.1.3": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/http-body-util/0.1.3/download" + ], + "strip_prefix": "http-body-util-0.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"http_body_util\",\n deps = [\n \"@crate_index__bytes-1.11.1//:bytes\",\n \"@crate_index__futures-core-0.3.32//:futures_core\",\n \"@crate_index__http-1.4.1//:http\",\n \"@crate_index__http-body-1.0.1//:http_body\",\n \"@crate_index__pin-project-lite-0.2.17//:pin_project_lite\",\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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=http-body-util\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.3\",\n)\n" + } + }, + "crate_index__httparse-1.10.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/httparse/1.10.1/download" + ], + "strip_prefix": "httparse-1.10.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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"httparse\",\n deps = [\n \"@crate_index__httparse-1.10.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_features = [\n \"default\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=httparse\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.10.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_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 = \"2018\",\n pkg_name = \"httparse\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=httparse\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"1.10.1\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__httpdate-1.0.3": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/httpdate/1.0.3/download" + ], + "strip_prefix": "httpdate-1.0.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"httpdate\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=httpdate\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.3\",\n)\n" + } + }, + "crate_index__human_bytes-0.4.3": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "91f255a4535024abf7640cb288260811fc14794f62b063652ed349f9a6c2348e", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/human_bytes/0.4.3/download" + ], + "strip_prefix": "human_bytes-0.4.3", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"human_bytes\",\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 \"si-units\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=human_bytes\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.4.3\",\n)\n" + } + }, + "crate_index__hyper-1.10.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "55281c53a1894c864990125767da440a4e630446785086f52523b20033b74498", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/hyper/1.10.1/download" + ], + "strip_prefix": "hyper-1.10.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"hyper\",\n deps = [\n \"@crate_index__atomic-waker-1.1.2//:atomic_waker\",\n \"@crate_index__bytes-1.11.1//:bytes\",\n \"@crate_index__futures-channel-0.3.32//:futures_channel\",\n \"@crate_index__futures-core-0.3.32//:futures_core\",\n \"@crate_index__h2-0.4.14//:h2\",\n \"@crate_index__http-1.4.1//:http\",\n \"@crate_index__http-body-1.0.1//:http_body\",\n \"@crate_index__httparse-1.10.1//:httparse\",\n \"@crate_index__httpdate-1.0.3//:httpdate\",\n \"@crate_index__itoa-1.0.18//:itoa\",\n \"@crate_index__pin-project-lite-0.2.17//:pin_project_lite\",\n \"@crate_index__smallvec-1.15.1//:smallvec\",\n \"@crate_index__tokio-1.52.3//:tokio\",\n \"@crate_index__want-0.3.1//:want\",\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 \"client\",\n \"default\",\n \"http1\",\n \"http2\",\n \"server\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=hyper\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.10.1\",\n)\n" + } + }, + "crate_index__hyper-timeout-0.5.2": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/hyper-timeout/0.5.2/download" + ], + "strip_prefix": "hyper-timeout-0.5.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"hyper_timeout\",\n deps = [\n \"@crate_index__hyper-1.10.1//:hyper\",\n \"@crate_index__hyper-util-0.1.20//:hyper_util\",\n \"@crate_index__pin-project-lite-0.2.17//:pin_project_lite\",\n \"@crate_index__tokio-1.52.3//:tokio\",\n \"@crate_index__tower-service-0.3.3//:tower_service\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=hyper-timeout\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.5.2\",\n)\n" + } + }, + "crate_index__hyper-util-0.1.20": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/hyper-util/0.1.20/download" + ], + "strip_prefix": "hyper-util-0.1.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"hyper_util\",\n deps = [\n \"@crate_index__bytes-1.11.1//:bytes\",\n \"@crate_index__futures-channel-0.3.32//:futures_channel\",\n \"@crate_index__futures-util-0.3.32//:futures_util\",\n \"@crate_index__http-1.4.1//:http\",\n \"@crate_index__http-body-1.0.1//:http_body\",\n \"@crate_index__hyper-1.10.1//:hyper\",\n \"@crate_index__libc-0.2.186//:libc\",\n \"@crate_index__pin-project-lite-0.2.17//:pin_project_lite\",\n \"@crate_index__socket2-0.6.4//:socket2\",\n \"@crate_index__tokio-1.52.3//:tokio\",\n \"@crate_index__tower-service-0.3.3//:tower_service\",\n \"@crate_index__tracing-0.1.44//:tracing\",\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 \"client\",\n \"client-legacy\",\n \"default\",\n \"http1\",\n \"http2\",\n \"server\",\n \"server-auto\",\n \"service\",\n \"tokio\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=hyper-util\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.20\",\n)\n" + } + }, + "crate_index__iceoryx2-0.5.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "12c091b5786a230240f8f2691b9d29508ed0a02c025c254abaed8bc788a66bb3", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/iceoryx2/0.5.0/download" + ], + "strip_prefix": "iceoryx2-0.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"iceoryx2\",\n deps = [\n \"@crate_index__cdr-0.2.4//:cdr\",\n \"@crate_index__iceoryx2-bb-container-0.5.0//:iceoryx2_bb_container\",\n \"@crate_index__iceoryx2-bb-elementary-0.5.0//:iceoryx2_bb_elementary\",\n \"@crate_index__iceoryx2-bb-lock-free-0.5.0//:iceoryx2_bb_lock_free\",\n \"@crate_index__iceoryx2-bb-log-0.5.0//:iceoryx2_bb_log\",\n \"@crate_index__iceoryx2-bb-memory-0.5.0//:iceoryx2_bb_memory\",\n \"@crate_index__iceoryx2-bb-posix-0.5.0//:iceoryx2_bb_posix\",\n \"@crate_index__iceoryx2-bb-system-types-0.5.0//:iceoryx2_bb_system_types\",\n \"@crate_index__iceoryx2-cal-0.5.0//:iceoryx2_cal\",\n \"@crate_index__iceoryx2-pal-concurrency-sync-0.5.0//:iceoryx2_pal_concurrency_sync\",\n \"@crate_index__lazy_static-1.5.0//:lazy_static\",\n \"@crate_index__serde-1.0.228//:serde\",\n \"@crate_index__sha1_smol-1.0.1//:sha1_smol\",\n \"@crate_index__tiny-fn-0.1.9//:tiny_fn\",\n \"@crate_index__toml-0.8.23//:toml\",\n ],\n proc_macro_deps = [\n \"@crate_index__iceoryx2-bb-derive-macros-0.5.0//:iceoryx2_bb_derive_macros\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=iceoryx2\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.5.0\",\n)\n" + } + }, + "crate_index__iceoryx2-bb-container-0.5.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "fff9d75921f8ccd3e19261d72082b52ccc4704dcdd6930efe6c17b15693ab519", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/iceoryx2-bb-container/0.5.0/download" + ], + "strip_prefix": "iceoryx2-bb-container-0.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"iceoryx2_bb_container\",\n deps = [\n \"@crate_index__iceoryx2-bb-elementary-0.5.0//:iceoryx2_bb_elementary\",\n \"@crate_index__iceoryx2-bb-log-0.5.0//:iceoryx2_bb_log\",\n \"@crate_index__iceoryx2-pal-concurrency-sync-0.5.0//:iceoryx2_pal_concurrency_sync\",\n \"@crate_index__serde-1.0.228//:serde\",\n ],\n proc_macro_deps = [\n \"@crate_index__iceoryx2-bb-derive-macros-0.5.0//:iceoryx2_bb_derive_macros\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=iceoryx2-bb-container\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.5.0\",\n)\n" + } + }, + "crate_index__iceoryx2-bb-container-qnx8-0.7.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:git.bzl%git_repository", + "attributes": { + "init_submodules": true, + "patch_args": [], + "patch_tool": "", + "patches": [], + "shallow_since": "", + "remote": "https://github.com/qorix-group/iceoryx2.git", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"iceoryx2_bb_container_qnx8\",\n deps = [\n \"@crate_index__iceoryx2-bb-elementary-qnx8-0.7.0//:iceoryx2_bb_elementary_qnx8\",\n \"@crate_index__iceoryx2-bb-elementary-traits-qnx8-0.7.0//:iceoryx2_bb_elementary_traits_qnx8\",\n \"@crate_index__iceoryx2-bb-log-qnx8-0.7.0//:iceoryx2_bb_log_qnx8\",\n \"@crate_index__iceoryx2-pal-concurrency-sync-qnx8-0.7.0//:iceoryx2_pal_concurrency_sync_qnx8\",\n \"@crate_index__serde-1.0.228//:serde\",\n ],\n proc_macro_deps = [\n \"@crate_index__iceoryx2-bb-derive-macros-qnx8-0.7.0//:iceoryx2_bb_derive_macros_qnx8\",\n ],\n aliases = {\n \"@crate_index__iceoryx2-bb-derive-macros-qnx8-0.7.0//:iceoryx2_bb_derive_macros_qnx8\": \"iceoryx2_bb_derive_macros\",\n \"@crate_index__iceoryx2-bb-elementary-qnx8-0.7.0//:iceoryx2_bb_elementary_qnx8\": \"iceoryx2_bb_elementary\",\n \"@crate_index__iceoryx2-bb-elementary-traits-qnx8-0.7.0//:iceoryx2_bb_elementary_traits_qnx8\": \"iceoryx2_bb_elementary_traits\",\n \"@crate_index__iceoryx2-bb-log-qnx8-0.7.0//:iceoryx2_bb_log_qnx8\": \"iceoryx2_bb_log\",\n \"@crate_index__iceoryx2-pal-concurrency-sync-qnx8-0.7.0//:iceoryx2_pal_concurrency_sync_qnx8\": \"iceoryx2_pal_concurrency_sync\",\n },\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=iceoryx2-bb-container-qnx8\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.7.0\",\n)\n", + "strip_prefix": "iceoryx2-bb/container", + "commit": "bd16da32190d53d69c3e5504aab47df52ca8b5f8" + } + }, + "crate_index__iceoryx2-bb-derive-macros-0.5.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "9257482fb822946bb3028225b6807350e3f815068961ff5bf683735ce01d59a4", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/iceoryx2-bb-derive-macros/0.5.0/download" + ], + "strip_prefix": "iceoryx2-bb-derive-macros-0.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_proc_macro\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_proc_macro(\n name = \"iceoryx2_bb_derive_macros\",\n deps = [\n \"@crate_index__iceoryx2-bb-elementary-0.5.0//:iceoryx2_bb_elementary\",\n \"@crate_index__proc-macro2-1.0.106//:proc_macro2\",\n \"@crate_index__quote-1.0.45//:quote\",\n \"@crate_index__syn-2.0.117//: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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=iceoryx2-bb-derive-macros\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.5.0\",\n)\n" + } + }, + "crate_index__iceoryx2-bb-derive-macros-qnx8-0.7.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:git.bzl%git_repository", + "attributes": { + "init_submodules": true, + "patch_args": [], + "patch_tool": "", + "patches": [ + "@@score_crates+//patches:iceoryx2_bb_derive_macros_readme.patch" + ], + "shallow_since": "", + "remote": "https://github.com/qorix-group/iceoryx2.git", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_proc_macro\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_proc_macro(\n name = \"iceoryx2_bb_derive_macros_qnx8\",\n deps = [\n \"@crate_index__iceoryx2-bb-elementary-qnx8-0.7.0//:iceoryx2_bb_elementary_qnx8\",\n \"@crate_index__iceoryx2-bb-elementary-traits-qnx8-0.7.0//:iceoryx2_bb_elementary_traits_qnx8\",\n \"@crate_index__proc-macro2-1.0.106//:proc_macro2\",\n \"@crate_index__quote-1.0.45//:quote\",\n \"@crate_index__syn-2.0.117//:syn\",\n ],\n aliases = {\n \"@crate_index__iceoryx2-bb-elementary-qnx8-0.7.0//:iceoryx2_bb_elementary_qnx8\": \"iceoryx2_bb_elementary\",\n \"@crate_index__iceoryx2-bb-elementary-traits-qnx8-0.7.0//:iceoryx2_bb_elementary_traits_qnx8\": \"iceoryx2_bb_elementary_traits\",\n },\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=iceoryx2-bb-derive-macros-qnx8\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.7.0\",\n)\n", + "strip_prefix": "iceoryx2-bb/derive-macros", + "commit": "bd16da32190d53d69c3e5504aab47df52ca8b5f8" + } + }, + "crate_index__iceoryx2-bb-elementary-0.5.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "38aae0237ff1575a7d9672c0202e5d313e7f674a635f6aaf619d2090fb7a12c2", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/iceoryx2-bb-elementary/0.5.0/download" + ], + "strip_prefix": "iceoryx2-bb-elementary-0.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"iceoryx2_bb_elementary\",\n deps = [\n \"@crate_index__iceoryx2-pal-concurrency-sync-0.5.0//:iceoryx2_pal_concurrency_sync\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=iceoryx2-bb-elementary\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.5.0\",\n)\n" + } + }, + "crate_index__iceoryx2-bb-elementary-qnx8-0.7.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:git.bzl%git_repository", + "attributes": { + "init_submodules": true, + "patch_args": [], + "patch_tool": "", + "patches": [], + "shallow_since": "", + "remote": "https://github.com/qorix-group/iceoryx2.git", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"iceoryx2_bb_elementary_qnx8\",\n deps = [\n \"@crate_index__iceoryx2-bb-elementary-traits-qnx8-0.7.0//:iceoryx2_bb_elementary_traits_qnx8\",\n \"@crate_index__iceoryx2-pal-concurrency-sync-qnx8-0.7.0//:iceoryx2_pal_concurrency_sync_qnx8\",\n ],\n aliases = {\n \"@crate_index__iceoryx2-bb-elementary-traits-qnx8-0.7.0//:iceoryx2_bb_elementary_traits_qnx8\": \"iceoryx2_bb_elementary_traits\",\n \"@crate_index__iceoryx2-pal-concurrency-sync-qnx8-0.7.0//:iceoryx2_pal_concurrency_sync_qnx8\": \"iceoryx2_pal_concurrency_sync\",\n },\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=iceoryx2-bb-elementary-qnx8\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.7.0\",\n)\n", + "strip_prefix": "iceoryx2-bb/elementary", + "commit": "bd16da32190d53d69c3e5504aab47df52ca8b5f8" + } + }, + "crate_index__iceoryx2-bb-elementary-traits-qnx8-0.7.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:git.bzl%git_repository", + "attributes": { + "init_submodules": true, + "patch_args": [], + "patch_tool": "", + "patches": [], + "shallow_since": "", + "remote": "https://github.com/qorix-group/iceoryx2.git", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"iceoryx2_bb_elementary_traits_qnx8\",\n deps = [\n \"@crate_index__iceoryx2-pal-concurrency-sync-qnx8-0.7.0//:iceoryx2_pal_concurrency_sync_qnx8\",\n ],\n aliases = {\n \"@crate_index__iceoryx2-pal-concurrency-sync-qnx8-0.7.0//:iceoryx2_pal_concurrency_sync_qnx8\": \"iceoryx2_pal_concurrency_sync\",\n },\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=iceoryx2-bb-elementary-traits-qnx8\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.7.0\",\n)\n", + "strip_prefix": "iceoryx2-bb/elementary-traits", + "commit": "bd16da32190d53d69c3e5504aab47df52ca8b5f8" + } + }, + "crate_index__iceoryx2-bb-linux-qnx8-0.7.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:git.bzl%git_repository", + "attributes": { + "init_submodules": true, + "patch_args": [], + "patch_tool": "", + "patches": [], + "shallow_since": "", + "remote": "https://github.com/qorix-group/iceoryx2.git", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"iceoryx2_bb_linux_qnx8\",\n deps = [\n \"@crate_index__iceoryx2-bb-container-qnx8-0.7.0//:iceoryx2_bb_container_qnx8\",\n \"@crate_index__iceoryx2-bb-log-qnx8-0.7.0//:iceoryx2_bb_log_qnx8\",\n \"@crate_index__iceoryx2-bb-posix-qnx8-0.7.0//:iceoryx2_bb_posix_qnx8\",\n \"@crate_index__iceoryx2-bb-system-types-qnx8-0.7.0//:iceoryx2_bb_system_types_qnx8\",\n \"@crate_index__iceoryx2-pal-concurrency-sync-qnx8-0.7.0//:iceoryx2_pal_concurrency_sync_qnx8\",\n \"@crate_index__iceoryx2-pal-os-api-qnx8-0.7.0//:iceoryx2_pal_os_api_qnx8\",\n \"@crate_index__iceoryx2-pal-posix-qnx8-0.7.0//:iceoryx2_pal_posix_qnx8\",\n ],\n aliases = {\n \"@crate_index__iceoryx2-bb-container-qnx8-0.7.0//:iceoryx2_bb_container_qnx8\": \"iceoryx2_bb_container\",\n \"@crate_index__iceoryx2-bb-log-qnx8-0.7.0//:iceoryx2_bb_log_qnx8\": \"iceoryx2_bb_log\",\n \"@crate_index__iceoryx2-bb-posix-qnx8-0.7.0//:iceoryx2_bb_posix_qnx8\": \"iceoryx2_bb_posix\",\n \"@crate_index__iceoryx2-bb-system-types-qnx8-0.7.0//:iceoryx2_bb_system_types_qnx8\": \"iceoryx2_bb_system_types\",\n \"@crate_index__iceoryx2-pal-concurrency-sync-qnx8-0.7.0//:iceoryx2_pal_concurrency_sync_qnx8\": \"iceoryx2_pal_concurrency_sync\",\n \"@crate_index__iceoryx2-pal-os-api-qnx8-0.7.0//:iceoryx2_pal_os_api_qnx8\": \"iceoryx2_pal_os_api\",\n \"@crate_index__iceoryx2-pal-posix-qnx8-0.7.0//:iceoryx2_pal_posix_qnx8\": \"iceoryx2_pal_posix\",\n },\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=iceoryx2-bb-linux-qnx8\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.7.0\",\n)\n", + "strip_prefix": "iceoryx2-bb/linux", + "commit": "bd16da32190d53d69c3e5504aab47df52ca8b5f8" + } + }, + "crate_index__iceoryx2-bb-lock-free-0.5.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "3ec3227a0c8b1d9e1ea4c61fa6a773e7c3b721fa3e2fd4363324f302b35ac85b", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/iceoryx2-bb-lock-free/0.5.0/download" + ], + "strip_prefix": "iceoryx2-bb-lock-free-0.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"iceoryx2_bb_lock_free\",\n deps = [\n \"@crate_index__iceoryx2-bb-elementary-0.5.0//:iceoryx2_bb_elementary\",\n \"@crate_index__iceoryx2-bb-log-0.5.0//:iceoryx2_bb_log\",\n \"@crate_index__iceoryx2-pal-concurrency-sync-0.5.0//:iceoryx2_pal_concurrency_sync\",\n \"@crate_index__tiny-fn-0.1.9//:tiny_fn\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=iceoryx2-bb-lock-free\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.5.0\",\n)\n" + } + }, + "crate_index__iceoryx2-bb-lock-free-qnx8-0.7.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:git.bzl%git_repository", + "attributes": { + "init_submodules": true, + "patch_args": [], + "patch_tool": "", + "patches": [], + "shallow_since": "", + "remote": "https://github.com/qorix-group/iceoryx2.git", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"iceoryx2_bb_lock_free_qnx8\",\n deps = [\n \"@crate_index__iceoryx2-bb-elementary-qnx8-0.7.0//:iceoryx2_bb_elementary_qnx8\",\n \"@crate_index__iceoryx2-bb-elementary-traits-qnx8-0.7.0//:iceoryx2_bb_elementary_traits_qnx8\",\n \"@crate_index__iceoryx2-bb-log-qnx8-0.7.0//:iceoryx2_bb_log_qnx8\",\n \"@crate_index__iceoryx2-pal-concurrency-sync-qnx8-0.7.0//:iceoryx2_pal_concurrency_sync_qnx8\",\n ],\n aliases = {\n \"@crate_index__iceoryx2-bb-elementary-qnx8-0.7.0//:iceoryx2_bb_elementary_qnx8\": \"iceoryx2_bb_elementary\",\n \"@crate_index__iceoryx2-bb-elementary-traits-qnx8-0.7.0//:iceoryx2_bb_elementary_traits_qnx8\": \"iceoryx2_bb_elementary_traits\",\n \"@crate_index__iceoryx2-bb-log-qnx8-0.7.0//:iceoryx2_bb_log_qnx8\": \"iceoryx2_bb_log\",\n \"@crate_index__iceoryx2-pal-concurrency-sync-qnx8-0.7.0//:iceoryx2_pal_concurrency_sync_qnx8\": \"iceoryx2_pal_concurrency_sync\",\n },\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=iceoryx2-bb-lock-free-qnx8\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.7.0\",\n)\n", + "strip_prefix": "iceoryx2-bb/lock-free", + "commit": "bd16da32190d53d69c3e5504aab47df52ca8b5f8" + } + }, + "crate_index__iceoryx2-bb-log-0.5.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "07df5e6ff06cc2ffb0a86b67c7cd4be86b11264d5e83c02a52b384e2d5e6363a", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/iceoryx2-bb-log/0.5.0/download" + ], + "strip_prefix": "iceoryx2-bb-log-0.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"iceoryx2_bb_log\",\n deps = [\n \"@crate_index__iceoryx2-pal-concurrency-sync-0.5.0//:iceoryx2_pal_concurrency_sync\",\n \"@crate_index__termsize-0.1.9//:termsize\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=iceoryx2-bb-log\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.5.0\",\n)\n" + } + }, + "crate_index__iceoryx2-bb-log-qnx8-0.7.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:git.bzl%git_repository", + "attributes": { + "init_submodules": true, + "patch_args": [], + "patch_tool": "", + "patches": [], + "shallow_since": "", + "remote": "https://github.com/qorix-group/iceoryx2.git", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"iceoryx2_bb_log_qnx8\",\n deps = [\n \"@crate_index__iceoryx2-pal-concurrency-sync-qnx8-0.7.0//:iceoryx2_pal_concurrency_sync_qnx8\",\n ],\n aliases = {\n \"@crate_index__iceoryx2-pal-concurrency-sync-qnx8-0.7.0//:iceoryx2_pal_concurrency_sync_qnx8\": \"iceoryx2_pal_concurrency_sync\",\n },\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=iceoryx2-bb-log-qnx8\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.7.0\",\n)\n", + "strip_prefix": "iceoryx2-bb/log", + "commit": "bd16da32190d53d69c3e5504aab47df52ca8b5f8" + } + }, + "crate_index__iceoryx2-bb-memory-0.5.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "55a4ae8856404b6e7eca567004673ca39109fc70fcf387b96ca6d6d27c61f31b", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/iceoryx2-bb-memory/0.5.0/download" + ], + "strip_prefix": "iceoryx2-bb-memory-0.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"iceoryx2_bb_memory\",\n deps = [\n \"@crate_index__iceoryx2-bb-elementary-0.5.0//:iceoryx2_bb_elementary\",\n \"@crate_index__iceoryx2-bb-lock-free-0.5.0//:iceoryx2_bb_lock_free\",\n \"@crate_index__iceoryx2-bb-log-0.5.0//:iceoryx2_bb_log\",\n \"@crate_index__iceoryx2-bb-posix-0.5.0//:iceoryx2_bb_posix\",\n \"@crate_index__iceoryx2-pal-concurrency-sync-0.5.0//:iceoryx2_pal_concurrency_sync\",\n \"@crate_index__lazy_static-1.5.0//:lazy_static\",\n \"@crate_index__tiny-fn-0.1.9//:tiny_fn\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=iceoryx2-bb-memory\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.5.0\",\n)\n" + } + }, + "crate_index__iceoryx2-bb-memory-qnx8-0.7.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:git.bzl%git_repository", + "attributes": { + "init_submodules": true, + "patch_args": [], + "patch_tool": "", + "patches": [], + "shallow_since": "", + "remote": "https://github.com/qorix-group/iceoryx2.git", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"iceoryx2_bb_memory_qnx8\",\n deps = [\n \"@crate_index__iceoryx2-bb-elementary-qnx8-0.7.0//:iceoryx2_bb_elementary_qnx8\",\n \"@crate_index__iceoryx2-bb-elementary-traits-qnx8-0.7.0//:iceoryx2_bb_elementary_traits_qnx8\",\n \"@crate_index__iceoryx2-bb-lock-free-qnx8-0.7.0//:iceoryx2_bb_lock_free_qnx8\",\n \"@crate_index__iceoryx2-bb-log-qnx8-0.7.0//:iceoryx2_bb_log_qnx8\",\n \"@crate_index__iceoryx2-bb-posix-qnx8-0.7.0//:iceoryx2_bb_posix_qnx8\",\n \"@crate_index__iceoryx2-pal-concurrency-sync-qnx8-0.7.0//:iceoryx2_pal_concurrency_sync_qnx8\",\n ],\n aliases = {\n \"@crate_index__iceoryx2-bb-elementary-qnx8-0.7.0//:iceoryx2_bb_elementary_qnx8\": \"iceoryx2_bb_elementary\",\n \"@crate_index__iceoryx2-bb-elementary-traits-qnx8-0.7.0//:iceoryx2_bb_elementary_traits_qnx8\": \"iceoryx2_bb_elementary_traits\",\n \"@crate_index__iceoryx2-bb-lock-free-qnx8-0.7.0//:iceoryx2_bb_lock_free_qnx8\": \"iceoryx2_bb_lock_free\",\n \"@crate_index__iceoryx2-bb-log-qnx8-0.7.0//:iceoryx2_bb_log_qnx8\": \"iceoryx2_bb_log\",\n \"@crate_index__iceoryx2-bb-posix-qnx8-0.7.0//:iceoryx2_bb_posix_qnx8\": \"iceoryx2_bb_posix\",\n \"@crate_index__iceoryx2-pal-concurrency-sync-qnx8-0.7.0//:iceoryx2_pal_concurrency_sync_qnx8\": \"iceoryx2_pal_concurrency_sync\",\n },\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=iceoryx2-bb-memory-qnx8\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.7.0\",\n)\n", + "strip_prefix": "iceoryx2-bb/memory", + "commit": "bd16da32190d53d69c3e5504aab47df52ca8b5f8" + } + }, + "crate_index__iceoryx2-bb-posix-0.5.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "122ff88c452a3045a9de6db73d0429da736578f76eab75779dd0d3681de75d57", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/iceoryx2-bb-posix/0.5.0/download" + ], + "strip_prefix": "iceoryx2-bb-posix-0.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"iceoryx2_bb_posix\",\n deps = [\n \"@crate_index__bitflags-2.12.1//:bitflags\",\n \"@crate_index__enum-iterator-2.3.0//:enum_iterator\",\n \"@crate_index__iceoryx2-bb-container-0.5.0//:iceoryx2_bb_container\",\n \"@crate_index__iceoryx2-bb-elementary-0.5.0//:iceoryx2_bb_elementary\",\n \"@crate_index__iceoryx2-bb-log-0.5.0//:iceoryx2_bb_log\",\n \"@crate_index__iceoryx2-bb-system-types-0.5.0//:iceoryx2_bb_system_types\",\n \"@crate_index__iceoryx2-pal-concurrency-sync-0.5.0//:iceoryx2_pal_concurrency_sync\",\n \"@crate_index__iceoryx2-pal-configuration-0.5.0//:iceoryx2_pal_configuration\",\n \"@crate_index__iceoryx2-pal-posix-0.5.0//:iceoryx2_pal_posix\",\n \"@crate_index__lazy_static-1.5.0//:lazy_static\",\n \"@crate_index__serde-1.0.228//:serde\",\n \"@crate_index__tiny-fn-0.1.9//:tiny_fn\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=iceoryx2-bb-posix\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.5.0\",\n)\n" + } + }, + "crate_index__iceoryx2-bb-posix-qnx8-0.7.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:git.bzl%git_repository", + "attributes": { + "init_submodules": true, + "patch_args": [], + "patch_tool": "", + "patches": [], + "shallow_since": "", + "remote": "https://github.com/qorix-group/iceoryx2.git", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"iceoryx2_bb_posix_qnx8\",\n deps = [\n \"@crate_index__enum-iterator-2.3.0//:enum_iterator\",\n \"@crate_index__iceoryx2-bb-container-qnx8-0.7.0//:iceoryx2_bb_container_qnx8\",\n \"@crate_index__iceoryx2-bb-elementary-qnx8-0.7.0//:iceoryx2_bb_elementary_qnx8\",\n \"@crate_index__iceoryx2-bb-elementary-traits-qnx8-0.7.0//:iceoryx2_bb_elementary_traits_qnx8\",\n \"@crate_index__iceoryx2-bb-log-qnx8-0.7.0//:iceoryx2_bb_log_qnx8\",\n \"@crate_index__iceoryx2-bb-system-types-qnx8-0.7.0//:iceoryx2_bb_system_types_qnx8\",\n \"@crate_index__iceoryx2-pal-concurrency-sync-qnx8-0.7.0//:iceoryx2_pal_concurrency_sync_qnx8\",\n \"@crate_index__iceoryx2-pal-configuration-qnx8-0.7.0//:iceoryx2_pal_configuration_qnx8\",\n \"@crate_index__iceoryx2-pal-posix-qnx8-0.7.0//:iceoryx2_pal_posix_qnx8\",\n \"@crate_index__lazy_static-1.5.0//:lazy_static\",\n \"@crate_index__serde-1.0.228//:serde\",\n \"@crate_index__tiny-fn-0.1.9//:tiny_fn\",\n ],\n proc_macro_deps = [\n \"@crate_index__iceoryx2-bb-derive-macros-qnx8-0.7.0//:iceoryx2_bb_derive_macros_qnx8\",\n ],\n aliases = {\n \"@crate_index__iceoryx2-bb-container-qnx8-0.7.0//:iceoryx2_bb_container_qnx8\": \"iceoryx2_bb_container\",\n \"@crate_index__iceoryx2-bb-derive-macros-qnx8-0.7.0//:iceoryx2_bb_derive_macros_qnx8\": \"iceoryx2_bb_derive_macros\",\n \"@crate_index__iceoryx2-bb-elementary-qnx8-0.7.0//:iceoryx2_bb_elementary_qnx8\": \"iceoryx2_bb_elementary\",\n \"@crate_index__iceoryx2-bb-elementary-traits-qnx8-0.7.0//:iceoryx2_bb_elementary_traits_qnx8\": \"iceoryx2_bb_elementary_traits\",\n \"@crate_index__iceoryx2-bb-log-qnx8-0.7.0//:iceoryx2_bb_log_qnx8\": \"iceoryx2_bb_log\",\n \"@crate_index__iceoryx2-bb-system-types-qnx8-0.7.0//:iceoryx2_bb_system_types_qnx8\": \"iceoryx2_bb_system_types\",\n \"@crate_index__iceoryx2-pal-concurrency-sync-qnx8-0.7.0//:iceoryx2_pal_concurrency_sync_qnx8\": \"iceoryx2_pal_concurrency_sync\",\n \"@crate_index__iceoryx2-pal-configuration-qnx8-0.7.0//:iceoryx2_pal_configuration_qnx8\": \"iceoryx2_pal_configuration\",\n \"@crate_index__iceoryx2-pal-posix-qnx8-0.7.0//:iceoryx2_pal_posix_qnx8\": \"iceoryx2_pal_posix\",\n },\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=iceoryx2-bb-posix-qnx8\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.7.0\",\n)\n", + "strip_prefix": "iceoryx2-bb/posix", + "commit": "bd16da32190d53d69c3e5504aab47df52ca8b5f8" + } + }, + "crate_index__iceoryx2-bb-system-types-0.5.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "ac2fb11a94823c3b9117a5e14edf16fd467794cf5391738eb2d8b7fc8e9b04fd", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/iceoryx2-bb-system-types/0.5.0/download" + ], + "strip_prefix": "iceoryx2-bb-system-types-0.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"iceoryx2_bb_system_types\",\n deps = [\n \"@crate_index__iceoryx2-bb-container-0.5.0//:iceoryx2_bb_container\",\n \"@crate_index__iceoryx2-bb-elementary-0.5.0//:iceoryx2_bb_elementary\",\n \"@crate_index__iceoryx2-bb-log-0.5.0//:iceoryx2_bb_log\",\n \"@crate_index__iceoryx2-pal-configuration-0.5.0//:iceoryx2_pal_configuration\",\n \"@crate_index__serde-1.0.228//:serde\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=iceoryx2-bb-system-types\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.5.0\",\n)\n" + } + }, + "crate_index__iceoryx2-bb-system-types-qnx8-0.7.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:git.bzl%git_repository", + "attributes": { + "init_submodules": true, + "patch_args": [], + "patch_tool": "", + "patches": [], + "shallow_since": "", + "remote": "https://github.com/qorix-group/iceoryx2.git", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"iceoryx2_bb_system_types_qnx8\",\n deps = [\n \"@crate_index__iceoryx2-bb-container-qnx8-0.7.0//:iceoryx2_bb_container_qnx8\",\n \"@crate_index__iceoryx2-bb-elementary-qnx8-0.7.0//:iceoryx2_bb_elementary_qnx8\",\n \"@crate_index__iceoryx2-bb-elementary-traits-qnx8-0.7.0//:iceoryx2_bb_elementary_traits_qnx8\",\n \"@crate_index__iceoryx2-bb-log-qnx8-0.7.0//:iceoryx2_bb_log_qnx8\",\n \"@crate_index__iceoryx2-pal-configuration-qnx8-0.7.0//:iceoryx2_pal_configuration_qnx8\",\n \"@crate_index__iceoryx2-pal-posix-qnx8-0.7.0//:iceoryx2_pal_posix_qnx8\",\n \"@crate_index__serde-1.0.228//:serde\",\n ],\n proc_macro_deps = [\n \"@crate_index__iceoryx2-bb-derive-macros-qnx8-0.7.0//:iceoryx2_bb_derive_macros_qnx8\",\n ],\n aliases = {\n \"@crate_index__iceoryx2-bb-container-qnx8-0.7.0//:iceoryx2_bb_container_qnx8\": \"iceoryx2_bb_container\",\n \"@crate_index__iceoryx2-bb-derive-macros-qnx8-0.7.0//:iceoryx2_bb_derive_macros_qnx8\": \"iceoryx2_bb_derive_macros\",\n \"@crate_index__iceoryx2-bb-elementary-qnx8-0.7.0//:iceoryx2_bb_elementary_qnx8\": \"iceoryx2_bb_elementary\",\n \"@crate_index__iceoryx2-bb-elementary-traits-qnx8-0.7.0//:iceoryx2_bb_elementary_traits_qnx8\": \"iceoryx2_bb_elementary_traits\",\n \"@crate_index__iceoryx2-bb-log-qnx8-0.7.0//:iceoryx2_bb_log_qnx8\": \"iceoryx2_bb_log\",\n \"@crate_index__iceoryx2-pal-configuration-qnx8-0.7.0//:iceoryx2_pal_configuration_qnx8\": \"iceoryx2_pal_configuration\",\n \"@crate_index__iceoryx2-pal-posix-qnx8-0.7.0//:iceoryx2_pal_posix_qnx8\": \"iceoryx2_pal_posix\",\n },\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=iceoryx2-bb-system-types-qnx8\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.7.0\",\n)\n", + "strip_prefix": "iceoryx2-bb/system-types", + "commit": "bd16da32190d53d69c3e5504aab47df52ca8b5f8" + } + }, + "crate_index__iceoryx2-bb-testing-qnx8-0.7.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:git.bzl%git_repository", + "attributes": { + "init_submodules": true, + "patch_args": [], + "patch_tool": "", + "patches": [], + "shallow_since": "", + "remote": "https://github.com/qorix-group/iceoryx2.git", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"iceoryx2_bb_testing_qnx8\",\n deps = [\n \"@crate_index__iceoryx2-bb-elementary-traits-qnx8-0.7.0//:iceoryx2_bb_elementary_traits_qnx8\",\n \"@crate_index__iceoryx2-pal-configuration-qnx8-0.7.0//:iceoryx2_pal_configuration_qnx8\",\n \"@crate_index__iceoryx2-pal-testing-qnx8-0.7.0//:iceoryx2_pal_testing_qnx8\",\n ],\n aliases = {\n \"@crate_index__iceoryx2-bb-elementary-traits-qnx8-0.7.0//:iceoryx2_bb_elementary_traits_qnx8\": \"iceoryx2_bb_elementary_traits\",\n \"@crate_index__iceoryx2-pal-configuration-qnx8-0.7.0//:iceoryx2_pal_configuration_qnx8\": \"iceoryx2_pal_configuration\",\n \"@crate_index__iceoryx2-pal-testing-qnx8-0.7.0//:iceoryx2_pal_testing_qnx8\": \"iceoryx2_pal_testing\",\n },\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=iceoryx2-bb-testing-qnx8\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.7.0\",\n)\n", + "strip_prefix": "iceoryx2-bb/testing", + "commit": "bd16da32190d53d69c3e5504aab47df52ca8b5f8" + } + }, + "crate_index__iceoryx2-bb-threadsafe-qnx8-0.7.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:git.bzl%git_repository", + "attributes": { + "init_submodules": true, + "patch_args": [], + "patch_tool": "", + "patches": [], + "shallow_since": "", + "remote": "https://github.com/qorix-group/iceoryx2.git", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"iceoryx2_bb_threadsafe_qnx8\",\n deps = [\n \"@crate_index__iceoryx2-bb-container-qnx8-0.7.0//:iceoryx2_bb_container_qnx8\",\n \"@crate_index__iceoryx2-bb-elementary-qnx8-0.7.0//:iceoryx2_bb_elementary_qnx8\",\n \"@crate_index__iceoryx2-bb-elementary-traits-qnx8-0.7.0//:iceoryx2_bb_elementary_traits_qnx8\",\n \"@crate_index__iceoryx2-bb-log-qnx8-0.7.0//:iceoryx2_bb_log_qnx8\",\n \"@crate_index__iceoryx2-bb-posix-qnx8-0.7.0//:iceoryx2_bb_posix_qnx8\",\n ],\n aliases = {\n \"@crate_index__iceoryx2-bb-container-qnx8-0.7.0//:iceoryx2_bb_container_qnx8\": \"iceoryx2_bb_container\",\n \"@crate_index__iceoryx2-bb-elementary-qnx8-0.7.0//:iceoryx2_bb_elementary_qnx8\": \"iceoryx2_bb_elementary\",\n \"@crate_index__iceoryx2-bb-elementary-traits-qnx8-0.7.0//:iceoryx2_bb_elementary_traits_qnx8\": \"iceoryx2_bb_elementary_traits\",\n \"@crate_index__iceoryx2-bb-log-qnx8-0.7.0//:iceoryx2_bb_log_qnx8\": \"iceoryx2_bb_log\",\n \"@crate_index__iceoryx2-bb-posix-qnx8-0.7.0//:iceoryx2_bb_posix_qnx8\": \"iceoryx2_bb_posix\",\n },\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=iceoryx2-bb-threadsafe-qnx8\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.7.0\",\n)\n", + "strip_prefix": "iceoryx2-bb/threadsafe", + "commit": "bd16da32190d53d69c3e5504aab47df52ca8b5f8" + } + }, + "crate_index__iceoryx2-cal-0.5.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "6c64b8eee1d57c4336d7df7d521671d8b76c72cac16af0db651e40f8c45f0946", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/iceoryx2-cal/0.5.0/download" + ], + "strip_prefix": "iceoryx2-cal-0.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"iceoryx2_cal\",\n deps = [\n \"@crate_index__cdr-0.2.4//:cdr\",\n \"@crate_index__iceoryx2-bb-container-0.5.0//:iceoryx2_bb_container\",\n \"@crate_index__iceoryx2-bb-elementary-0.5.0//:iceoryx2_bb_elementary\",\n \"@crate_index__iceoryx2-bb-lock-free-0.5.0//:iceoryx2_bb_lock_free\",\n \"@crate_index__iceoryx2-bb-log-0.5.0//:iceoryx2_bb_log\",\n \"@crate_index__iceoryx2-bb-memory-0.5.0//:iceoryx2_bb_memory\",\n \"@crate_index__iceoryx2-bb-posix-0.5.0//:iceoryx2_bb_posix\",\n \"@crate_index__iceoryx2-bb-system-types-0.5.0//:iceoryx2_bb_system_types\",\n \"@crate_index__iceoryx2-pal-concurrency-sync-0.5.0//:iceoryx2_pal_concurrency_sync\",\n \"@crate_index__lazy_static-1.5.0//:lazy_static\",\n \"@crate_index__once_cell-1.21.4//:once_cell\",\n \"@crate_index__ouroboros-0.18.5//:ouroboros\",\n \"@crate_index__serde-1.0.228//:serde\",\n \"@crate_index__sha1_smol-1.0.1//:sha1_smol\",\n \"@crate_index__tiny-fn-0.1.9//:tiny_fn\",\n \"@crate_index__toml-0.8.23//:toml\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=iceoryx2-cal\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.5.0\",\n)\n" + } + }, + "crate_index__iceoryx2-cal-qnx8-0.7.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:git.bzl%git_repository", + "attributes": { + "init_submodules": true, + "patch_args": [], + "patch_tool": "", + "patches": [], + "shallow_since": "", + "remote": "https://github.com/qorix-group/iceoryx2.git", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"iceoryx2_cal_qnx8\",\n deps = [\n \"@crate_index__cdr-0.2.4//:cdr\",\n \"@crate_index__iceoryx2-bb-container-qnx8-0.7.0//:iceoryx2_bb_container_qnx8\",\n \"@crate_index__iceoryx2-bb-elementary-qnx8-0.7.0//:iceoryx2_bb_elementary_qnx8\",\n \"@crate_index__iceoryx2-bb-elementary-traits-qnx8-0.7.0//:iceoryx2_bb_elementary_traits_qnx8\",\n \"@crate_index__iceoryx2-bb-linux-qnx8-0.7.0//:iceoryx2_bb_linux_qnx8\",\n \"@crate_index__iceoryx2-bb-lock-free-qnx8-0.7.0//:iceoryx2_bb_lock_free_qnx8\",\n \"@crate_index__iceoryx2-bb-log-qnx8-0.7.0//:iceoryx2_bb_log_qnx8\",\n \"@crate_index__iceoryx2-bb-memory-qnx8-0.7.0//:iceoryx2_bb_memory_qnx8\",\n \"@crate_index__iceoryx2-bb-posix-qnx8-0.7.0//:iceoryx2_bb_posix_qnx8\",\n \"@crate_index__iceoryx2-bb-system-types-qnx8-0.7.0//:iceoryx2_bb_system_types_qnx8\",\n \"@crate_index__iceoryx2-pal-concurrency-sync-qnx8-0.7.0//:iceoryx2_pal_concurrency_sync_qnx8\",\n \"@crate_index__once_cell-1.21.4//:once_cell\",\n \"@crate_index__postcard-1.1.3//:postcard\",\n \"@crate_index__serde-1.0.228//:serde\",\n \"@crate_index__sha1_smol-1.0.1//:sha1_smol\",\n \"@crate_index__tiny-fn-0.1.9//:tiny_fn\",\n \"@crate_index__toml-0.8.23//:toml\",\n ],\n proc_macro_deps = [\n \"@crate_index__iceoryx2-bb-derive-macros-qnx8-0.7.0//:iceoryx2_bb_derive_macros_qnx8\",\n ],\n aliases = {\n \"@crate_index__iceoryx2-bb-container-qnx8-0.7.0//:iceoryx2_bb_container_qnx8\": \"iceoryx2_bb_container\",\n \"@crate_index__iceoryx2-bb-derive-macros-qnx8-0.7.0//:iceoryx2_bb_derive_macros_qnx8\": \"iceoryx2_bb_derive_macros\",\n \"@crate_index__iceoryx2-bb-elementary-qnx8-0.7.0//:iceoryx2_bb_elementary_qnx8\": \"iceoryx2_bb_elementary\",\n \"@crate_index__iceoryx2-bb-elementary-traits-qnx8-0.7.0//:iceoryx2_bb_elementary_traits_qnx8\": \"iceoryx2_bb_elementary_traits\",\n \"@crate_index__iceoryx2-bb-linux-qnx8-0.7.0//:iceoryx2_bb_linux_qnx8\": \"iceoryx2_bb_linux\",\n \"@crate_index__iceoryx2-bb-lock-free-qnx8-0.7.0//:iceoryx2_bb_lock_free_qnx8\": \"iceoryx2_bb_lock_free\",\n \"@crate_index__iceoryx2-bb-log-qnx8-0.7.0//:iceoryx2_bb_log_qnx8\": \"iceoryx2_bb_log\",\n \"@crate_index__iceoryx2-bb-memory-qnx8-0.7.0//:iceoryx2_bb_memory_qnx8\": \"iceoryx2_bb_memory\",\n \"@crate_index__iceoryx2-bb-posix-qnx8-0.7.0//:iceoryx2_bb_posix_qnx8\": \"iceoryx2_bb_posix\",\n \"@crate_index__iceoryx2-bb-system-types-qnx8-0.7.0//:iceoryx2_bb_system_types_qnx8\": \"iceoryx2_bb_system_types\",\n \"@crate_index__iceoryx2-pal-concurrency-sync-qnx8-0.7.0//:iceoryx2_pal_concurrency_sync_qnx8\": \"iceoryx2_pal_concurrency_sync\",\n },\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=iceoryx2-cal-qnx8\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.7.0\",\n)\n", + "strip_prefix": "iceoryx2-cal", + "commit": "bd16da32190d53d69c3e5504aab47df52ca8b5f8" + } + }, + "crate_index__iceoryx2-pal-concurrency-sync-0.5.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "92dc4ec7c023819c41b5a14c9ca58e8dbb86476053321decda73ac440996f35f", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/iceoryx2-pal-concurrency-sync/0.5.0/download" + ], + "strip_prefix": "iceoryx2-pal-concurrency-sync-0.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"iceoryx2_pal_concurrency_sync\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=iceoryx2-pal-concurrency-sync\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.5.0\",\n)\n" + } + }, + "crate_index__iceoryx2-pal-concurrency-sync-qnx8-0.7.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:git.bzl%git_repository", + "attributes": { + "init_submodules": true, + "patch_args": [], + "patch_tool": "", + "patches": [], + "shallow_since": "", + "remote": "https://github.com/qorix-group/iceoryx2.git", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"iceoryx2_pal_concurrency_sync_qnx8\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=iceoryx2-pal-concurrency-sync-qnx8\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.7.0\",\n)\n", + "strip_prefix": "iceoryx2-pal/concurrency-sync", + "commit": "bd16da32190d53d69c3e5504aab47df52ca8b5f8" + } + }, + "crate_index__iceoryx2-pal-configuration-0.5.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "d900aa8f9c5b661a9c5ddfbdc28eb87ac8c32be5375ca9b055b087d1c89c984d", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/iceoryx2-pal-configuration/0.5.0/download" + ], + "strip_prefix": "iceoryx2-pal-configuration-0.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"iceoryx2_pal_configuration\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=iceoryx2-pal-configuration\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.5.0\",\n)\n" + } + }, + "crate_index__iceoryx2-pal-configuration-qnx8-0.7.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:git.bzl%git_repository", + "attributes": { + "init_submodules": true, + "patch_args": [], + "patch_tool": "", + "patches": [], + "shallow_since": "", + "remote": "https://github.com/qorix-group/iceoryx2.git", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"iceoryx2_pal_configuration_qnx8\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=iceoryx2-pal-configuration-qnx8\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.7.0\",\n)\n", + "strip_prefix": "iceoryx2-pal/configuration", + "commit": "bd16da32190d53d69c3e5504aab47df52ca8b5f8" + } + }, + "crate_index__iceoryx2-pal-os-api-qnx8-0.7.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:git.bzl%git_repository", + "attributes": { + "init_submodules": true, + "patch_args": [], + "patch_tool": "", + "patches": [], + "shallow_since": "", + "remote": "https://github.com/qorix-group/iceoryx2.git", + "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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"iceoryx2_pal_os_api_qnx8\",\n deps = [\n \"@crate_index__iceoryx2-pal-os-api-qnx8-0.7.0//:build_script_build\",\n \"@crate_index__iceoryx2-pal-posix-qnx8-0.7.0//:iceoryx2_pal_posix_qnx8\",\n ],\n aliases = {\n \"@crate_index__iceoryx2-pal-posix-qnx8-0.7.0//:iceoryx2_pal_posix_qnx8\": \"iceoryx2_pal_posix\",\n },\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=iceoryx2-pal-os-api-qnx8\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.7.0\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n deps = [\n \"@crate_index__bindgen-0.72.1//:bindgen\",\n \"@crate_index__cc-1.2.63//:cc\",\n ],\n edition = \"2021\",\n pkg_name = \"iceoryx2-pal-os-api-qnx8\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=iceoryx2-pal-os-api-qnx8\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.7.0\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n", + "strip_prefix": "iceoryx2-pal/os-api", + "commit": "bd16da32190d53d69c3e5504aab47df52ca8b5f8" + } + }, + "crate_index__iceoryx2-pal-posix-0.5.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "5789169791a6274b492561b95543e1c635285cb454d547f78e53cbc1acd9b3f5", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/iceoryx2-pal-posix/0.5.0/download" + ], + "strip_prefix": "iceoryx2-pal-posix-0.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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"iceoryx2_pal_posix\",\n deps = [\n \"@crate_index__iceoryx2-pal-concurrency-sync-0.5.0//:iceoryx2_pal_concurrency_sync\",\n \"@crate_index__iceoryx2-pal-configuration-0.5.0//:iceoryx2_pal_configuration\",\n \"@crate_index__iceoryx2-pal-posix-0.5.0//:build_script_build\",\n \"@crate_index__lazy_static-1.5.0//:lazy_static\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=iceoryx2-pal-posix\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.5.0\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n deps = [\n \"@crate_index__bindgen-0.69.5//:bindgen\",\n \"@crate_index__cc-1.2.63//:cc\",\n ],\n edition = \"2021\",\n pkg_name = \"iceoryx2-pal-posix\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=iceoryx2-pal-posix\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.5.0\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__iceoryx2-pal-posix-qnx8-0.7.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:git.bzl%git_repository", + "attributes": { + "init_submodules": true, + "patch_args": [], + "patch_tool": "", + "patches": [ + "@@score_crates+//patches:qnx8_iceoryx2.patch" + ], + "shallow_since": "", + "remote": "https://github.com/qorix-group/iceoryx2.git", + "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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"iceoryx2_pal_posix_qnx8\",\n deps = [\n \"@crate_index__iceoryx2-pal-concurrency-sync-qnx8-0.7.0//:iceoryx2_pal_concurrency_sync_qnx8\",\n \"@crate_index__iceoryx2-pal-configuration-qnx8-0.7.0//:iceoryx2_pal_configuration_qnx8\",\n \"@crate_index__iceoryx2-pal-posix-qnx8-0.7.0//:build_script_build\",\n \"@crate_index__lazy_static-1.5.0//:lazy_static\",\n ],\n aliases = {\n \"@crate_index__iceoryx2-pal-concurrency-sync-qnx8-0.7.0//:iceoryx2_pal_concurrency_sync_qnx8\": \"iceoryx2_pal_concurrency_sync\",\n \"@crate_index__iceoryx2-pal-configuration-qnx8-0.7.0//:iceoryx2_pal_configuration_qnx8\": \"iceoryx2_pal_configuration\",\n },\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=iceoryx2-pal-posix-qnx8\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.7.0\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n deps = [\n \"@crate_index__bindgen-0.72.1//:bindgen\",\n \"@crate_index__cc-1.2.63//:cc\",\n ],\n edition = \"2021\",\n pkg_name = \"iceoryx2-pal-posix-qnx8\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=iceoryx2-pal-posix-qnx8\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.7.0\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n", + "strip_prefix": "iceoryx2-pal/posix", + "commit": "bd16da32190d53d69c3e5504aab47df52ca8b5f8" + } + }, + "crate_index__iceoryx2-pal-testing-qnx8-0.7.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:git.bzl%git_repository", + "attributes": { + "init_submodules": true, + "patch_args": [], + "patch_tool": "", + "patches": [], + "shallow_since": "", + "remote": "https://github.com/qorix-group/iceoryx2.git", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"iceoryx2_pal_testing_qnx8\",\n deps = [\n \"@crate_index__iceoryx2-pal-configuration-qnx8-0.7.0//:iceoryx2_pal_configuration_qnx8\",\n ],\n aliases = {\n \"@crate_index__iceoryx2-pal-configuration-qnx8-0.7.0//:iceoryx2_pal_configuration_qnx8\": \"iceoryx2_pal_configuration\",\n },\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=iceoryx2-pal-testing-qnx8\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.7.0\",\n)\n", + "strip_prefix": "iceoryx2-pal/testing", + "commit": "bd16da32190d53d69c3e5504aab47df52ca8b5f8" + } + }, + "crate_index__iceoryx2-qnx8-0.7.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:git.bzl%git_repository", + "attributes": { + "init_submodules": true, + "patch_args": [], + "patch_tool": "", + "patches": [], + "shallow_since": "", + "remote": "https://github.com/qorix-group/iceoryx2.git", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"iceoryx2_qnx8\",\n deps = [\n \"@crate_index__iceoryx2-bb-container-qnx8-0.7.0//:iceoryx2_bb_container_qnx8\",\n \"@crate_index__iceoryx2-bb-elementary-qnx8-0.7.0//:iceoryx2_bb_elementary_qnx8\",\n \"@crate_index__iceoryx2-bb-elementary-traits-qnx8-0.7.0//:iceoryx2_bb_elementary_traits_qnx8\",\n \"@crate_index__iceoryx2-bb-lock-free-qnx8-0.7.0//:iceoryx2_bb_lock_free_qnx8\",\n \"@crate_index__iceoryx2-bb-log-qnx8-0.7.0//:iceoryx2_bb_log_qnx8\",\n \"@crate_index__iceoryx2-bb-memory-qnx8-0.7.0//:iceoryx2_bb_memory_qnx8\",\n \"@crate_index__iceoryx2-bb-posix-qnx8-0.7.0//:iceoryx2_bb_posix_qnx8\",\n \"@crate_index__iceoryx2-bb-system-types-qnx8-0.7.0//:iceoryx2_bb_system_types_qnx8\",\n \"@crate_index__iceoryx2-cal-qnx8-0.7.0//:iceoryx2_cal_qnx8\",\n \"@crate_index__iceoryx2-pal-concurrency-sync-qnx8-0.7.0//:iceoryx2_pal_concurrency_sync_qnx8\",\n \"@crate_index__iceoryx2-pal-configuration-qnx8-0.7.0//:iceoryx2_pal_configuration_qnx8\",\n \"@crate_index__serde-1.0.228//:serde\",\n \"@crate_index__tiny-fn-0.1.9//:tiny_fn\",\n \"@crate_index__toml-0.8.23//:toml\",\n ],\n proc_macro_deps = [\n \"@crate_index__iceoryx2-bb-derive-macros-qnx8-0.7.0//:iceoryx2_bb_derive_macros_qnx8\",\n ],\n aliases = {\n \"@crate_index__iceoryx2-bb-container-qnx8-0.7.0//:iceoryx2_bb_container_qnx8\": \"iceoryx2_bb_container\",\n \"@crate_index__iceoryx2-bb-derive-macros-qnx8-0.7.0//:iceoryx2_bb_derive_macros_qnx8\": \"iceoryx2_bb_derive_macros\",\n \"@crate_index__iceoryx2-bb-elementary-qnx8-0.7.0//:iceoryx2_bb_elementary_qnx8\": \"iceoryx2_bb_elementary\",\n \"@crate_index__iceoryx2-bb-elementary-traits-qnx8-0.7.0//:iceoryx2_bb_elementary_traits_qnx8\": \"iceoryx2_bb_elementary_traits\",\n \"@crate_index__iceoryx2-bb-lock-free-qnx8-0.7.0//:iceoryx2_bb_lock_free_qnx8\": \"iceoryx2_bb_lock_free\",\n \"@crate_index__iceoryx2-bb-log-qnx8-0.7.0//:iceoryx2_bb_log_qnx8\": \"iceoryx2_bb_log\",\n \"@crate_index__iceoryx2-bb-memory-qnx8-0.7.0//:iceoryx2_bb_memory_qnx8\": \"iceoryx2_bb_memory\",\n \"@crate_index__iceoryx2-bb-posix-qnx8-0.7.0//:iceoryx2_bb_posix_qnx8\": \"iceoryx2_bb_posix\",\n \"@crate_index__iceoryx2-bb-system-types-qnx8-0.7.0//:iceoryx2_bb_system_types_qnx8\": \"iceoryx2_bb_system_types\",\n \"@crate_index__iceoryx2-cal-qnx8-0.7.0//:iceoryx2_cal_qnx8\": \"iceoryx2_cal\",\n \"@crate_index__iceoryx2-pal-concurrency-sync-qnx8-0.7.0//:iceoryx2_pal_concurrency_sync_qnx8\": \"iceoryx2_pal_concurrency_sync\",\n \"@crate_index__iceoryx2-pal-configuration-qnx8-0.7.0//:iceoryx2_pal_configuration_qnx8\": \"iceoryx2_pal_configuration\",\n },\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=iceoryx2-qnx8\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.7.0\",\n)\n", + "strip_prefix": "iceoryx2", + "commit": "bd16da32190d53d69c3e5504aab47df52ca8b5f8" + } + }, + "crate_index__id-arena-2.3.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/id-arena/2.3.0/download" + ], + "strip_prefix": "id-arena-2.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"id_arena\",\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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=id-arena\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"2.3.0\",\n)\n" + } + }, + "crate_index__indexmap-2.14.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/indexmap/2.14.0/download" + ], + "strip_prefix": "indexmap-2.14.0", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"indexmap\",\n deps = [\n \"@crate_index__equivalent-1.0.2//:equivalent\",\n \"@crate_index__hashbrown-0.17.1//:hashbrown\",\n ] + select({\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [\n \"@crate_index__serde_core-1.0.228//:serde_core\", # x86_64-unknown-linux-gnu\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 \"default\",\n \"std\",\n ] + select({\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [\n \"serde\", # x86_64-unknown-linux-gnu\n ],\n \"//conditions:default\": [],\n }),\n crate_root = \"src/lib.rs\",\n edition = \"2024\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=indexmap\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"2.14.0\",\n)\n" + } + }, + "crate_index__indicatif-0.18.4": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "25470f23803092da7d239834776d653104d551bc4d7eacaf31e6837854b8e9eb", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/indicatif/0.18.4/download" + ], + "strip_prefix": "indicatif-0.18.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"indicatif\",\n deps = [\n \"@crate_index__console-0.16.3//:console\",\n \"@crate_index__portable-atomic-1.13.1//:portable_atomic\",\n \"@crate_index__unicode-width-0.2.2//:unicode_width\",\n \"@crate_index__unit-prefix-0.5.2//:unit_prefix\",\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 \"unicode-width\",\n \"wasmbind\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=indicatif\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.18.4\",\n)\n" + } + }, + "crate_index__indicatif-log-bridge-0.2.3": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "63703cf9069b85dbe6fe26e1c5230d013dee99d3559cd3d02ba39e099ef7ab02", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/indicatif-log-bridge/0.2.3/download" + ], + "strip_prefix": "indicatif-log-bridge-0.2.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"indicatif_log_bridge\",\n deps = [\n \"@crate_index__indicatif-0.18.4//:indicatif\",\n \"@crate_index__log-0.4.32//:log\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=indicatif-log-bridge\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.3\",\n)\n" + } + }, + "crate_index__ipc-channel-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": "f93600b5616c2d075f8af8dbd23c1d69278c5d24e4913d220cbc60b14c95c180", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/ipc-channel/0.20.2/download" + ], + "strip_prefix": "ipc-channel-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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"ipc_channel\",\n deps = [\n \"@crate_index__bincode-1.3.3//:bincode\",\n \"@crate_index__crossbeam-channel-0.5.15//:crossbeam_channel\",\n \"@crate_index__fnv-1.0.7//:fnv\",\n \"@crate_index__libc-0.2.186//:libc\",\n \"@crate_index__serde-1.0.228//:serde\",\n \"@crate_index__uuid-1.23.2//:uuid\",\n ] + select({\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [\n \"@crate_index__mio-1.2.1//:mio\", # cfg(any(target_os = \"linux\", target_os = \"openbsd\", target_os = \"freebsd\", target_os = \"illumos\"))\n \"@crate_index__tempfile-3.27.0//:tempfile\", # cfg(any(target_os = \"linux\", target_os = \"openbsd\", target_os = \"freebsd\", target_os = \"illumos\"))\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 \"default\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=ipc-channel\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.20.2\",\n)\n" + } + }, + "crate_index__is_terminal_polyfill-1.70.2": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/is_terminal_polyfill/1.70.2/download" + ], + "strip_prefix": "is_terminal_polyfill-1.70.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"is_terminal_polyfill\",\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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=is_terminal_polyfill\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.70.2\",\n)\n" + } + }, + "crate_index__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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"itertools\",\n deps = [\n \"@crate_index__either-1.16.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_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=itertools\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.12.1\",\n)\n" + } + }, + "crate_index__itertools-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": "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/itertools/0.13.0/download" + ], + "strip_prefix": "itertools-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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"itertools\",\n deps = [\n \"@crate_index__either-1.16.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_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=itertools\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.13.0\",\n)\n" + } + }, + "crate_index__itertools-0.14.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/itertools/0.14.0/download" + ], + "strip_prefix": "itertools-0.14.0", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"itertools\",\n deps = [\n \"@crate_index__either-1.16.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 \"use_alloc\",\n ] + select({\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [\n \"default\", # x86_64-unknown-linux-gnu\n \"use_std\", # x86_64-unknown-linux-gnu\n ],\n \"//conditions:default\": [],\n }),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=itertools\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.14.0\",\n)\n" + } + }, + "crate_index__itoa-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": "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/itoa/1.0.18/download" + ], + "strip_prefix": "itoa-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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"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 = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=itoa\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.18\",\n)\n" + } + }, + "crate_index__jiff-0.2.28": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "4603d3033e49e2b0e31229fcab20a5d40089c607d975cd9c80551dc69eed9102", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/jiff/0.2.28/download" + ], + "strip_prefix": "jiff-0.2.28", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"jiff\",\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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=jiff\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.28\",\n)\n" + } + }, + "crate_index__jiff-static-0.2.28": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "782d32378dddf207193ac91cefb848ad41abb58195c95168e1291227a0832b47", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/jiff-static/0.2.28/download" + ], + "strip_prefix": "jiff-static-0.2.28", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_proc_macro\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_proc_macro(\n name = \"jiff_static\",\n deps = [\n \"@crate_index__proc-macro2-1.0.106//:proc_macro2\",\n \"@crate_index__quote-1.0.45//:quote\",\n \"@crate_index__syn-2.0.117//: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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=jiff-static\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.28\",\n)\n" + } + }, + "crate_index__js-sys-0.3.99": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "142bc4740e452c1e57ade0cbc129f139c9093e354346f0872ef985f4f5cf5f11", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/js-sys/0.3.99/download" + ], + "strip_prefix": "js-sys-0.3.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"js_sys\",\n deps = [\n \"@crate_index__cfg-if-1.0.4//:cfg_if\",\n \"@crate_index__once_cell-1.21.4//:once_cell\",\n \"@crate_index__wasm-bindgen-0.2.122//: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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=js-sys\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.3.99\",\n)\n" + } + }, + "crate_index__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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=lazy_static\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.5.0\",\n)\n" + } + }, + "crate_index__lazycell-1.3.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/lazycell/1.3.0/download" + ], + "strip_prefix": "lazycell-1.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"lazycell\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2015\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=lazycell\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.3.0\",\n)\n" + } + }, + "crate_index__leb128fmt-0.1.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/leb128fmt/0.1.0/download" + ], + "strip_prefix": "leb128fmt-0.1.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"leb128fmt\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=leb128fmt\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.0\",\n)\n" + } + }, + "crate_index__libc-0.2.186": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/libc/0.2.186/download" + ], + "strip_prefix": "libc-0.2.186", + "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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"libc\",\n deps = [\n \"@crate_index__libc-0.2.186//: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 \"extra_traits\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=libc\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.186\",\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 \"extra_traits\",\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 = \"libc\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=libc\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.2.186\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__libloading-0.8.9": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/libloading/0.8.9/download" + ], + "strip_prefix": "libloading-0.8.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"libloading\",\n deps = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [\n \"@crate_index__cfg-if-1.0.4//:cfg_if\", # cfg(unix)\n ],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [\n \"@crate_index__cfg-if-1.0.4//:cfg_if\", # cfg(unix)\n ],\n \"//conditions:default\": [],\n }),\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2015\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=libloading\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.8.9\",\n)\n" + } + }, + "crate_index__linux-raw-sys-0.4.15": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/linux-raw-sys/0.4.15/download" + ], + "strip_prefix": "linux-raw-sys-0.4.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"linux_raw_sys\",\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 \"elf\",\n \"errno\",\n \"general\",\n \"ioctl\",\n \"no_std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=linux-raw-sys\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.4.15\",\n)\n" + } + }, + "crate_index__linux-raw-sys-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": "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/linux-raw-sys/0.12.1/download" + ], + "strip_prefix": "linux-raw-sys-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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"linux_raw_sys\",\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 \"auxvec\",\n \"elf\",\n \"errno\",\n \"general\",\n \"ioctl\",\n \"no_std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=linux-raw-sys\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.12.1\",\n)\n" + } + }, + "crate_index__lock_api-0.4.14": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/lock_api/0.4.14/download" + ], + "strip_prefix": "lock_api-0.4.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"lock_api\",\n deps = [\n \"@crate_index__scopeguard-1.2.0//:scopeguard\",\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 \"atomic_usize\",\n \"default\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=lock_api\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.4.14\",\n)\n" + } + }, + "crate_index__log-0.4.32": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "953f07c43838f8e6f9758cab68bf5bed85465e7587ebe0b823f1bcd81978ad3a", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/log/0.4.32/download" + ], + "strip_prefix": "log-0.4.32", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"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_features = [\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=log\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.4.32\",\n)\n" + } + }, + "crate_index__matchit-0.8.4": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/matchit/0.8.4/download" + ], + "strip_prefix": "matchit-0.8.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"matchit\",\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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=matchit\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.8.4\",\n)\n" + } + }, + "crate_index__memchr-2.8.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/memchr/2.8.1/download" + ], + "strip_prefix": "memchr-2.8.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"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 \"default\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=memchr\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"2.8.1\",\n)\n" + } + }, + "crate_index__mime-0.3.17": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/mime/0.3.17/download" + ], + "strip_prefix": "mime-0.3.17", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"mime\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2015\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=mime\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.3.17\",\n)\n" + } + }, + "crate_index__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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=minimal-lexical\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.1\",\n)\n" + } + }, + "crate_index__mio-1.2.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/mio/1.2.1/download" + ], + "strip_prefix": "mio-1.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"mio\",\n deps = [\n \"@crate_index__log-0.4.32//:log\",\n ] + select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [\n \"@crate_index__libc-0.2.186//:libc\", # cfg(any(unix, target_os = \"hermit\", target_os = \"wasi\"))\n ],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [\n \"@crate_index__libc-0.2.186//:libc\", # cfg(any(unix, target_os = \"hermit\", target_os = \"wasi\"))\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 \"default\",\n \"log\",\n \"net\",\n \"os-ext\",\n \"os-poll\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=mio\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.2.1\",\n)\n" + } + }, + "crate_index__multimap-0.10.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "1d87ecb2933e8aeadb3e3a02b828fed80a7528047e68b4f424523a0981a3a084", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/multimap/0.10.1/download" + ], + "strip_prefix": "multimap-0.10.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"multimap\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2015\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=multimap\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.10.1\",\n)\n" + } + }, + "crate_index__nix-0.30.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/nix/0.30.1/download" + ], + "strip_prefix": "nix-0.30.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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"nix\",\n deps = [\n \"@crate_index__bitflags-2.12.1//:bitflags\",\n \"@crate_index__cfg-if-1.0.4//:cfg_if\",\n \"@crate_index__libc-0.2.186//:libc\",\n \"@crate_index__nix-0.30.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_features = [\n \"default\",\n \"fs\",\n \"mman\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=nix\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.30.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_features = [\n \"default\",\n \"fs\",\n \"mman\",\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 deps = [\n \"@crate_index__cfg_aliases-0.2.1//:cfg_aliases\",\n ],\n edition = \"2021\",\n pkg_name = \"nix\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=nix\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.30.1\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__nix-0.31.3": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "cf20d2fde8ff38632c426f1165ed7436270b44f199fc55284c38276f9db47c3d", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/nix/0.31.3/download" + ], + "strip_prefix": "nix-0.31.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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"nix\",\n deps = [\n \"@crate_index__bitflags-2.12.1//:bitflags\",\n \"@crate_index__cfg-if-1.0.4//:cfg_if\",\n \"@crate_index__libc-0.2.186//:libc\",\n \"@crate_index__nix-0.31.3//: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 \"process\",\n \"signal\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=nix\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.31.3\",\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 \"process\",\n \"signal\",\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 deps = [\n \"@crate_index__cfg_aliases-0.2.1//:cfg_aliases\",\n ],\n edition = \"2021\",\n pkg_name = \"nix\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=nix\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.31.3\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"nom\",\n deps = [\n \"@crate_index__memchr-2.8.1//:memchr\",\n \"@crate_index__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 \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=nom\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"7.1.3\",\n)\n" + } + }, + "crate_index__nu-ansi-term-0.50.3": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/nu-ansi-term/0.50.3/download" + ], + "strip_prefix": "nu-ansi-term-0.50.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"nu_ansi_term\",\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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=nu-ansi-term\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.50.3\",\n)\n" + } + }, + "crate_index__num-conv-0.2.2": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/num-conv/0.2.2/download" + ], + "strip_prefix": "num-conv-0.2.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"num_conv\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=num-conv\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.2\",\n)\n" + } + }, + "crate_index__objc2-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": "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/objc2/0.6.4/download" + ], + "strip_prefix": "objc2-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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"objc2\",\n deps = [\n \"@crate_index__objc2-0.6.4//:build_script_build\",\n \"@crate_index__objc2-encode-4.1.0//:objc2_encode\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=objc2\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.6.4\",\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 = \"objc2\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=objc2\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.6.4\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__objc2-encode-4.1.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/objc2-encode/4.1.0/download" + ], + "strip_prefix": "objc2-encode-4.1.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"objc2_encode\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=objc2-encode\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"4.1.0\",\n)\n" + } + }, + "crate_index__once_cell-1.21.4": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/once_cell/1.21.4/download" + ], + "strip_prefix": "once_cell-1.21.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"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_features = [\n \"alloc\",\n \"default\",\n \"race\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=once_cell\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.21.4\",\n)\n" + } + }, + "crate_index__once_cell_polyfill-1.70.2": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/once_cell_polyfill/1.70.2/download" + ], + "strip_prefix": "once_cell_polyfill-1.70.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"once_cell_polyfill\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=once_cell_polyfill\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.70.2\",\n)\n" + } + }, + "crate_index__ouroboros-0.18.5": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "1e0f050db9c44b97a94723127e6be766ac5c340c48f2c4bb3ffa11713744be59", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/ouroboros/0.18.5/download" + ], + "strip_prefix": "ouroboros-0.18.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"ouroboros\",\n deps = [\n \"@crate_index__aliasable-0.1.3//:aliasable\",\n \"@crate_index__static_assertions-1.1.0//:static_assertions\",\n ],\n proc_macro_deps = [\n \"@crate_index__ouroboros_macro-0.18.5//:ouroboros_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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=ouroboros\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.18.5\",\n)\n" + } + }, + "crate_index__ouroboros_macro-0.18.5": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "3c7028bdd3d43083f6d8d4d5187680d0d3560d54df4cc9d752005268b41e64d0", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/ouroboros_macro/0.18.5/download" + ], + "strip_prefix": "ouroboros_macro-0.18.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_proc_macro\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_proc_macro(\n name = \"ouroboros_macro\",\n deps = [\n \"@crate_index__heck-0.4.1//:heck\",\n \"@crate_index__proc-macro2-1.0.106//:proc_macro2\",\n \"@crate_index__proc-macro2-diagnostics-0.10.1//:proc_macro2_diagnostics\",\n \"@crate_index__quote-1.0.45//:quote\",\n \"@crate_index__syn-2.0.117//: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 \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=ouroboros_macro\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.18.5\",\n)\n" + } + }, + "crate_index__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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_proc_macro\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_proc_macro(\n name = \"paste\",\n deps = [\n \"@crate_index__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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=paste\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=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" + } + }, + "crate_index__percent-encoding-2.3.2": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/percent-encoding/2.3.2/download" + ], + "strip_prefix": "percent-encoding-2.3.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"percent_encoding\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"alloc\",\n \"default\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=percent-encoding\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"2.3.2\",\n)\n" + } + }, + "crate_index__petgraph-0.7.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/petgraph/0.7.1/download" + ], + "strip_prefix": "petgraph-0.7.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"petgraph\",\n deps = [\n \"@crate_index__fixedbitset-0.5.7//:fixedbitset\",\n \"@crate_index__indexmap-2.14.0//:indexmap\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=petgraph\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.7.1\",\n)\n" + } + }, + "crate_index__petgraph-0.8.3": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "8701b58ea97060d5e5b155d383a69952a60943f0e6dfe30b04c287beb0b27455", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/petgraph/0.8.3/download" + ], + "strip_prefix": "petgraph-0.8.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"petgraph\",\n deps = [\n \"@crate_index__fixedbitset-0.5.7//:fixedbitset\",\n \"@crate_index__hashbrown-0.15.5//:hashbrown\",\n \"@crate_index__indexmap-2.14.0//:indexmap\",\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 = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=petgraph\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.8.3\",\n)\n" + } + }, + "crate_index__pico-args-0.5.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/pico-args/0.5.0/download" + ], + "strip_prefix": "pico-args-0.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"pico_args\",\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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=pico-args\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.5.0\",\n)\n" + } + }, + "crate_index__pin-project-1.1.13": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "2466b2336ed02bcdca6b294417127b90ec92038d1d5c4fbeac971a922e0e0924", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/pin-project/1.1.13/download" + ], + "strip_prefix": "pin-project-1.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"pin_project\",\n proc_macro_deps = [\n \"@crate_index__pin-project-internal-1.1.13//:pin_project_internal\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=pin-project\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.1.13\",\n)\n" + } + }, + "crate_index__pin-project-internal-1.1.13": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "c96395f0a926bc13b1c17622aaddda1ecb55d49c8f1bf9777e4d877800a43f8b", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/pin-project-internal/1.1.13/download" + ], + "strip_prefix": "pin-project-internal-1.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_proc_macro\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_proc_macro(\n name = \"pin_project_internal\",\n deps = [\n \"@crate_index__proc-macro2-1.0.106//:proc_macro2\",\n \"@crate_index__quote-1.0.45//:quote\",\n \"@crate_index__syn-2.0.117//: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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=pin-project-internal\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.1.13\",\n)\n" + } + }, + "crate_index__pin-project-lite-0.2.17": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/pin-project-lite/0.2.17/download" + ], + "strip_prefix": "pin-project-lite-0.2.17", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"pin_project_lite\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=pin-project-lite\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.17\",\n)\n" + } + }, + "crate_index__portable-atomic-1.13.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/portable-atomic/1.13.1/download" + ], + "strip_prefix": "portable-atomic-1.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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"portable_atomic\",\n deps = [\n \"@crate_index__portable-atomic-1.13.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_features = [\n \"default\",\n \"fallback\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=portable-atomic\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.13.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_features = [\n \"default\",\n \"fallback\",\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 = \"portable-atomic\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=portable-atomic\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"1.13.1\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__portable-atomic-util-0.2.7": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "c2a106d1259c23fac8e543272398ae0e3c0b8d33c88ed73d0cc71b0f1d902618", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/portable-atomic-util/0.2.7/download" + ], + "strip_prefix": "portable-atomic-util-0.2.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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"portable_atomic_util\",\n deps = [\n \"@crate_index__portable-atomic-1.13.1//:portable_atomic\",\n \"@crate_index__portable-atomic-util-0.2.7//: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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=portable-atomic-util\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.7\",\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 = \"portable-atomic-util\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=portable-atomic-util\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.2.7\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__postcard-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": "6764c3b5dd454e283a30e6dfe78e9b31096d9e32036b5d1eaac7a6119ccb9a24", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/postcard/1.1.3/download" + ], + "strip_prefix": "postcard-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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"postcard\",\n deps = [\n \"@crate_index__cobs-0.3.0//:cobs\",\n \"@crate_index__heapless-0.7.17//:heapless\",\n \"@crate_index__serde-1.0.228//:serde\",\n ],\n proc_macro_deps = [\n \"@crate_index__postcard-derive-0.2.2//:postcard_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 \"alloc\",\n \"default\",\n \"experimental-derive\",\n \"heapless\",\n \"heapless-cas\",\n \"postcard-derive\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=postcard\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.1.3\",\n)\n" + } + }, + "crate_index__postcard-derive-0.2.2": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "e0232bd009a197ceec9cc881ba46f727fcd8060a2d8d6a9dde7a69030a6fe2bb", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/postcard-derive/0.2.2/download" + ], + "strip_prefix": "postcard-derive-0.2.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_proc_macro\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_proc_macro(\n name = \"postcard_derive\",\n deps = [\n \"@crate_index__proc-macro2-1.0.106//:proc_macro2\",\n \"@crate_index__quote-1.0.45//:quote\",\n \"@crate_index__syn-2.0.117//: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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=postcard-derive\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.2\",\n)\n" + } + }, + "crate_index__powerfmt-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": "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/powerfmt/0.2.0/download" + ], + "strip_prefix": "powerfmt-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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"powerfmt\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=powerfmt\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.0\",\n)\n" + } + }, + "crate_index__ppv-lite86-0.2.21": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/ppv-lite86/0.2.21/download" + ], + "strip_prefix": "ppv-lite86-0.2.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"ppv_lite86\",\n deps = [\n \"@crate_index__zerocopy-0.8.50//: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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=ppv-lite86\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.21\",\n)\n" + } + }, + "crate_index__prettyplease-0.2.37": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/prettyplease/0.2.37/download" + ], + "strip_prefix": "prettyplease-0.2.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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"prettyplease\",\n deps = [\n \"@crate_index__prettyplease-0.2.37//:build_script_build\",\n \"@crate_index__proc-macro2-1.0.106//:proc_macro2\",\n \"@crate_index__syn-2.0.117//: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 = select({\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [\n \"verbatim\", # x86_64-unknown-linux-gnu\n ],\n \"//conditions:default\": [],\n }),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=prettyplease\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.37\",\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 = select({\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [\n \"verbatim\", # x86_64-unknown-linux-gnu\n ],\n \"//conditions:default\": [],\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 = \"prettyplease02\",\n pkg_name = \"prettyplease\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=prettyplease\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.2.37\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__proc-macro2-1.0.106": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/proc-macro2/1.0.106/download" + ], + "strip_prefix": "proc-macro2-1.0.106", + "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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"proc_macro2\",\n deps = [\n \"@crate_index__proc-macro2-1.0.106//:build_script_build\",\n \"@crate_index__unicode-ident-1.0.24//: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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=proc-macro2\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.106\",\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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=proc-macro2\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"1.0.106\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__proc-macro2-diagnostics-0.10.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/proc-macro2-diagnostics/0.10.1/download" + ], + "strip_prefix": "proc-macro2-diagnostics-0.10.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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"proc_macro2_diagnostics\",\n deps = [\n \"@crate_index__proc-macro2-1.0.106//:proc_macro2\",\n \"@crate_index__proc-macro2-diagnostics-0.10.1//:build_script_build\",\n \"@crate_index__quote-1.0.45//:quote\",\n \"@crate_index__syn-2.0.117//:syn\",\n \"@crate_index__yansi-1.0.1//:yansi\",\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 \"colors\",\n \"default\",\n \"yansi\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=proc-macro2-diagnostics\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.10.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_features = [\n \"colors\",\n \"default\",\n \"yansi\",\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 deps = [\n \"@crate_index__version_check-0.9.5//:version_check\",\n ],\n edition = \"2018\",\n pkg_name = \"proc-macro2-diagnostics\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=proc-macro2-diagnostics\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.10.1\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__prost-0.13.5": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/prost/0.13.5/download" + ], + "strip_prefix": "prost-0.13.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"prost\",\n deps = [\n \"@crate_index__bytes-1.11.1//:bytes\",\n ],\n proc_macro_deps = [\n \"@crate_index__prost-derive-0.13.5//:prost_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 \"derive\",\n \"prost-derive\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=prost\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.13.5\",\n)\n" + } + }, + "crate_index__prost-0.14.3": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "d2ea70524a2f82d518bce41317d0fae74151505651af45faf1ffbd6fd33f0568", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/prost/0.14.3/download" + ], + "strip_prefix": "prost-0.14.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"prost\",\n deps = [\n \"@crate_index__bytes-1.11.1//:bytes\",\n ],\n proc_macro_deps = [\n \"@crate_index__prost-derive-0.14.3//:prost_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 \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=prost\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.14.3\",\n)\n" + } + }, + "crate_index__prost-build-0.13.5": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "be769465445e8c1474e9c5dac2018218498557af32d9ed057325ec9a41ae81bf", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/prost-build/0.13.5/download" + ], + "strip_prefix": "prost-build-0.13.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"prost_build\",\n deps = [\n \"@crate_index__heck-0.5.0//:heck\",\n \"@crate_index__itertools-0.14.0//:itertools\",\n \"@crate_index__log-0.4.32//:log\",\n \"@crate_index__multimap-0.10.1//:multimap\",\n \"@crate_index__once_cell-1.21.4//:once_cell\",\n \"@crate_index__petgraph-0.7.1//:petgraph\",\n \"@crate_index__prettyplease-0.2.37//:prettyplease\",\n \"@crate_index__prost-0.13.5//:prost\",\n \"@crate_index__prost-types-0.13.5//:prost_types\",\n \"@crate_index__regex-1.12.3//:regex\",\n \"@crate_index__syn-2.0.117//:syn\",\n \"@crate_index__tempfile-3.27.0//:tempfile\",\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 \"format\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=prost-build\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.13.5\",\n)\n" + } + }, + "crate_index__prost-build-0.14.3": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "343d3bd7056eda839b03204e68deff7d1b13aba7af2b2fd16890697274262ee7", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/prost-build/0.14.3/download" + ], + "strip_prefix": "prost-build-0.14.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"prost_build\",\n deps = [\n \"@crate_index__heck-0.5.0//:heck\",\n \"@crate_index__itertools-0.14.0//:itertools\",\n \"@crate_index__log-0.4.32//:log\",\n \"@crate_index__multimap-0.10.1//:multimap\",\n \"@crate_index__petgraph-0.8.3//:petgraph\",\n \"@crate_index__prettyplease-0.2.37//:prettyplease\",\n \"@crate_index__prost-0.14.3//:prost\",\n \"@crate_index__prost-types-0.14.3//:prost_types\",\n \"@crate_index__regex-1.12.3//:regex\",\n \"@crate_index__syn-2.0.117//:syn\",\n \"@crate_index__tempfile-3.27.0//:tempfile\",\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 \"format\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=prost-build\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.14.3\",\n)\n" + } + }, + "crate_index__prost-derive-0.13.5": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/prost-derive/0.13.5/download" + ], + "strip_prefix": "prost-derive-0.13.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_proc_macro\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_proc_macro(\n name = \"prost_derive\",\n deps = [\n \"@crate_index__anyhow-1.0.102//:anyhow\",\n \"@crate_index__itertools-0.14.0//:itertools\",\n \"@crate_index__proc-macro2-1.0.106//:proc_macro2\",\n \"@crate_index__quote-1.0.45//:quote\",\n \"@crate_index__syn-2.0.117//: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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=prost-derive\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.13.5\",\n)\n" + } + }, + "crate_index__prost-derive-0.14.3": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "27c6023962132f4b30eb4c172c91ce92d933da334c59c23cddee82358ddafb0b", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/prost-derive/0.14.3/download" + ], + "strip_prefix": "prost-derive-0.14.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_proc_macro\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_proc_macro(\n name = \"prost_derive\",\n deps = [\n \"@crate_index__anyhow-1.0.102//:anyhow\",\n \"@crate_index__itertools-0.14.0//:itertools\",\n \"@crate_index__proc-macro2-1.0.106//:proc_macro2\",\n \"@crate_index__quote-1.0.45//:quote\",\n \"@crate_index__syn-2.0.117//: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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=prost-derive\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.14.3\",\n)\n" + } + }, + "crate_index__prost-types-0.13.5": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "52c2c1bf36ddb1a1c396b3601a3cec27c2462e45f07c386894ec3ccf5332bd16", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/prost-types/0.13.5/download" + ], + "strip_prefix": "prost-types-0.13.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"prost_types\",\n deps = [\n \"@crate_index__prost-0.13.5//:prost\",\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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=prost-types\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.13.5\",\n)\n" + } + }, + "crate_index__prost-types-0.14.3": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "8991c4cbdb8bc5b11f0b074ffe286c30e523de90fee5ba8132f1399f23cb3dd7", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/prost-types/0.14.3/download" + ], + "strip_prefix": "prost-types-0.14.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"prost_types\",\n deps = [\n \"@crate_index__prost-0.14.3//:prost\",\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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=prost-types\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.14.3\",\n)\n" + } + }, + "crate_index__protoc-gen-prost-0.4.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "77eb17a7657a703f30cb9b7ba4d981e4037b8af2d819ab0077514b0bef537406", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/protoc-gen-prost/0.4.0/download" + ], + "strip_prefix": "protoc-gen-prost-0.4.0", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\n \"@rules_rust//rust:defs.bzl\",\n \"rust_binary\",\n \"rust_library\",\n)\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"protoc_gen_prost\",\n deps = [\n \"@crate_index__once_cell-1.21.4//:once_cell\",\n \"@crate_index__prost-0.13.5//:prost\",\n \"@crate_index__prost-build-0.13.5//:prost_build\",\n \"@crate_index__prost-types-0.13.5//:prost_types\",\n \"@crate_index__regex-1.12.3//:regex\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=protoc-gen-prost\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.4.0\",\n)\n\nrust_binary(\n name = \"protoc-gen-prost__bin\",\n deps = [\n \":protoc_gen_prost\",\n \"@crate_index__once_cell-1.21.4//:once_cell\",\n \"@crate_index__prost-0.13.5//:prost\",\n \"@crate_index__prost-build-0.13.5//:prost_build\",\n \"@crate_index__prost-types-0.13.5//:prost_types\",\n \"@crate_index__regex-1.12.3//:regex\",\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/main.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=protoc-gen-prost\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.4.0\",\n)\n" + } + }, + "crate_index__protoc-gen-tonic-0.4.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "6ab6a0d73a0914752ed8fd7cc51afe169e28da87be3efef292de5676cc527634", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/protoc-gen-tonic/0.4.1/download" + ], + "strip_prefix": "protoc-gen-tonic-0.4.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\n \"@rules_rust//rust:defs.bzl\",\n \"rust_binary\",\n \"rust_library\",\n)\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"protoc_gen_tonic\",\n deps = [\n \"@crate_index__heck-0.5.0//:heck\",\n \"@crate_index__prettyplease-0.2.37//:prettyplease\",\n \"@crate_index__proc-macro2-1.0.106//:proc_macro2\",\n \"@crate_index__prost-0.13.5//:prost\",\n \"@crate_index__prost-build-0.13.5//:prost_build\",\n \"@crate_index__prost-types-0.13.5//:prost_types\",\n \"@crate_index__protoc-gen-prost-0.4.0//:protoc_gen_prost\",\n \"@crate_index__quote-1.0.45//:quote\",\n \"@crate_index__regex-1.12.3//:regex\",\n \"@crate_index__syn-2.0.117//:syn\",\n \"@crate_index__tonic-build-0.12.3//:tonic_build\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=protoc-gen-tonic\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.4.1\",\n)\n\nrust_binary(\n name = \"protoc-gen-tonic__bin\",\n deps = [\n \":protoc_gen_tonic\",\n \"@crate_index__heck-0.5.0//:heck\",\n \"@crate_index__prettyplease-0.2.37//:prettyplease\",\n \"@crate_index__proc-macro2-1.0.106//:proc_macro2\",\n \"@crate_index__prost-0.13.5//:prost\",\n \"@crate_index__prost-build-0.13.5//:prost_build\",\n \"@crate_index__prost-types-0.13.5//:prost_types\",\n \"@crate_index__protoc-gen-prost-0.4.0//:protoc_gen_prost\",\n \"@crate_index__quote-1.0.45//:quote\",\n \"@crate_index__regex-1.12.3//:regex\",\n \"@crate_index__syn-2.0.117//:syn\",\n \"@crate_index__tonic-build-0.12.3//:tonic_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/main.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=protoc-gen-tonic\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.4.1\",\n)\n" + } + }, + "crate_index__quote-1.0.45": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/quote/1.0.45/download" + ], + "strip_prefix": "quote-1.0.45", + "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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"quote\",\n deps = [\n \"@crate_index__proc-macro2-1.0.106//:proc_macro2\",\n \"@crate_index__quote-1.0.45//: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 \"proc-macro\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=quote\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.45\",\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 = \"quote\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=quote\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"1.0.45\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__r-efi-5.3.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/r-efi/5.3.0/download" + ], + "strip_prefix": "r-efi-5.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"r_efi\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=r-efi\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"5.3.0\",\n)\n" + } + }, + "crate_index__r-efi-6.0.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/r-efi/6.0.0/download" + ], + "strip_prefix": "r-efi-6.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"r_efi\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=r-efi\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"6.0.0\",\n)\n" + } + }, + "crate_index__rand-0.9.4": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/rand/0.9.4/download" + ], + "strip_prefix": "rand-0.9.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"rand\",\n deps = [\n \"@crate_index__rand_chacha-0.9.0//:rand_chacha\",\n \"@crate_index__rand_core-0.9.5//: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 \"os_rng\",\n \"small_rng\",\n \"std\",\n \"std_rng\",\n \"thread_rng\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=rand\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.9.4\",\n)\n" + } + }, + "crate_index__rand_chacha-0.9.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/rand_chacha/0.9.0/download" + ], + "strip_prefix": "rand_chacha-0.9.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"rand_chacha\",\n deps = [\n \"@crate_index__ppv-lite86-0.2.21//:ppv_lite86\",\n \"@crate_index__rand_core-0.9.5//: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 = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=rand_chacha\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.9.0\",\n)\n" + } + }, + "crate_index__rand_core-0.9.5": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/rand_core/0.9.5/download" + ], + "strip_prefix": "rand_core-0.9.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"rand_core\",\n deps = [\n \"@crate_index__getrandom-0.3.4//: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 \"os_rng\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=rand_core\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.9.5\",\n)\n" + } + }, + "crate_index__regex-1.12.3": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/regex/1.12.3/download" + ], + "strip_prefix": "regex-1.12.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"regex\",\n deps = [\n \"@crate_index__aho-corasick-1.1.4//:aho_corasick\",\n \"@crate_index__memchr-2.8.1//:memchr\",\n \"@crate_index__regex-automata-0.4.14//:regex_automata\",\n \"@crate_index__regex-syntax-0.8.10//: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 \"perf\",\n \"perf-backtrack\",\n \"perf-cache\",\n \"perf-dfa\",\n \"perf-inline\",\n \"perf-literal\",\n \"perf-onepass\",\n \"std\",\n \"unicode-bool\",\n ] + select({\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [\n \"unicode-perl\", # x86_64-unknown-linux-gnu\n ],\n \"//conditions:default\": [],\n }),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=regex\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.12.3\",\n)\n" + } + }, + "crate_index__regex-automata-0.4.14": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/regex-automata/0.4.14/download" + ], + "strip_prefix": "regex-automata-0.4.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"regex_automata\",\n deps = [\n \"@crate_index__aho-corasick-1.1.4//:aho_corasick\",\n \"@crate_index__memchr-2.8.1//:memchr\",\n \"@crate_index__regex-syntax-0.8.10//: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-onepass\",\n \"hybrid\",\n \"meta\",\n \"nfa-backtrack\",\n \"nfa-pikevm\",\n \"nfa-thompson\",\n \"perf-inline\",\n \"perf-literal\",\n \"perf-literal-multisubstring\",\n \"perf-literal-substring\",\n \"std\",\n \"syntax\",\n \"unicode-bool\",\n ] + select({\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [\n \"unicode-perl\", # x86_64-unknown-linux-gnu\n \"unicode-word-boundary\", # x86_64-unknown-linux-gnu\n ],\n \"//conditions:default\": [],\n }),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=regex-automata\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.4.14\",\n)\n" + } + }, + "crate_index__regex-syntax-0.8.10": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/regex-syntax/0.8.10/download" + ], + "strip_prefix": "regex-syntax-0.8.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"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 \"std\",\n \"unicode-bool\",\n ] + select({\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [\n \"unicode-perl\", # x86_64-unknown-linux-gnu\n ],\n \"//conditions:default\": [],\n }),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=regex-syntax\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.8.10\",\n)\n" + } + }, + "crate_index__rustc-hash-1.1.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/rustc-hash/1.1.0/download" + ], + "strip_prefix": "rustc-hash-1.1.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"rustc_hash\",\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 = \"2015\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=rustc-hash\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.1.0\",\n)\n" + } + }, + "crate_index__rustc-hash-2.1.2": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/rustc-hash/2.1.2/download" + ], + "strip_prefix": "rustc-hash-2.1.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"rustc_hash\",\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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=rustc-hash\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"2.1.2\",\n)\n" + } + }, + "crate_index__rustc_version-0.4.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/rustc_version/0.4.1/download" + ], + "strip_prefix": "rustc_version-0.4.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"rustc_version\",\n deps = [\n \"@crate_index__semver-1.0.28//:semver\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=rustc_version\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.4.1\",\n)\n" + } + }, + "crate_index__rustix-0.38.44": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/rustix/0.38.44/download" + ], + "strip_prefix": "rustix-0.38.44", + "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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"rustix\",\n deps = [\n \"@crate_index__bitflags-2.12.1//:bitflags\",\n \"@crate_index__rustix-0.38.44//:build_script_build\",\n ] + select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [\n \"@crate_index__errno-0.3.14//:errno\", # cfg(all(not(windows), any(rustix_use_libc, miri, not(all(target_os = \"linux\", any(target_endian = \"little\", target_arch = \"s390x\"), any(target_arch = \"arm\", all(target_arch = \"aarch64\", target_pointer_width = \"64\"), target_arch = \"riscv64\", all(rustix_use_experimental_asm, target_arch = \"powerpc64\"), all(rustix_use_experimental_asm, target_arch = \"s390x\"), all(rustix_use_experimental_asm, target_arch = \"mips\"), all(rustix_use_experimental_asm, target_arch = \"mips32r6\"), all(rustix_use_experimental_asm, target_arch = \"mips64\"), all(rustix_use_experimental_asm, target_arch = \"mips64r6\"), target_arch = \"x86\", all(target_arch = \"x86_64\", target_pointer_width = \"64\")))))))\n \"@crate_index__libc-0.2.186//:libc\", # cfg(all(not(windows), any(rustix_use_libc, miri, not(all(target_os = \"linux\", any(target_endian = \"little\", target_arch = \"s390x\"), any(target_arch = \"arm\", all(target_arch = \"aarch64\", target_pointer_width = \"64\"), target_arch = \"riscv64\", all(rustix_use_experimental_asm, target_arch = \"powerpc64\"), all(rustix_use_experimental_asm, target_arch = \"s390x\"), all(rustix_use_experimental_asm, target_arch = \"mips\"), all(rustix_use_experimental_asm, target_arch = \"mips32r6\"), all(rustix_use_experimental_asm, target_arch = \"mips64\"), all(rustix_use_experimental_asm, target_arch = \"mips64r6\"), target_arch = \"x86\", all(target_arch = \"x86_64\", target_pointer_width = \"64\")))))))\n ],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [\n \"@crate_index__linux-raw-sys-0.4.15//:linux_raw_sys\", # cfg(all(not(rustix_use_libc), not(miri), target_os = \"linux\", any(target_endian = \"little\", target_arch = \"s390x\"), any(target_arch = \"arm\", all(target_arch = \"aarch64\", target_pointer_width = \"64\"), target_arch = \"riscv64\", all(rustix_use_experimental_asm, target_arch = \"powerpc64\"), all(rustix_use_experimental_asm, target_arch = \"s390x\"), all(rustix_use_experimental_asm, target_arch = \"mips\"), all(rustix_use_experimental_asm, target_arch = \"mips32r6\"), all(rustix_use_experimental_asm, target_arch = \"mips64\"), all(rustix_use_experimental_asm, target_arch = \"mips64r6\"), target_arch = \"x86\", all(target_arch = \"x86_64\", target_pointer_width = \"64\"))))\n ],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [\n \"@crate_index__errno-0.3.14//:errno\", # cfg(all(not(windows), any(rustix_use_libc, miri, not(all(target_os = \"linux\", any(target_endian = \"little\", target_arch = \"s390x\"), any(target_arch = \"arm\", all(target_arch = \"aarch64\", target_pointer_width = \"64\"), target_arch = \"riscv64\", all(rustix_use_experimental_asm, target_arch = \"powerpc64\"), all(rustix_use_experimental_asm, target_arch = \"s390x\"), all(rustix_use_experimental_asm, target_arch = \"mips\"), all(rustix_use_experimental_asm, target_arch = \"mips32r6\"), all(rustix_use_experimental_asm, target_arch = \"mips64\"), all(rustix_use_experimental_asm, target_arch = \"mips64r6\"), target_arch = \"x86\", all(target_arch = \"x86_64\", target_pointer_width = \"64\")))))))\n \"@crate_index__libc-0.2.186//:libc\", # cfg(all(not(windows), any(rustix_use_libc, miri, not(all(target_os = \"linux\", any(target_endian = \"little\", target_arch = \"s390x\"), any(target_arch = \"arm\", all(target_arch = \"aarch64\", target_pointer_width = \"64\"), target_arch = \"riscv64\", all(rustix_use_experimental_asm, target_arch = \"powerpc64\"), all(rustix_use_experimental_asm, target_arch = \"s390x\"), all(rustix_use_experimental_asm, target_arch = \"mips\"), all(rustix_use_experimental_asm, target_arch = \"mips32r6\"), all(rustix_use_experimental_asm, target_arch = \"mips64\"), all(rustix_use_experimental_asm, target_arch = \"mips64r6\"), target_arch = \"x86\", all(target_arch = \"x86_64\", target_pointer_width = \"64\")))))))\n ],\n \"//conditions:default\": [],\n }),\n aliases = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": {\n \"@crate_index__errno-0.3.14//:errno\": \"libc_errno\", # cfg(all(not(windows), any(rustix_use_libc, miri, not(all(target_os = \"linux\", any(target_endian = \"little\", target_arch = \"s390x\"), any(target_arch = \"arm\", all(target_arch = \"aarch64\", target_pointer_width = \"64\"), target_arch = \"riscv64\", all(rustix_use_experimental_asm, target_arch = \"powerpc64\"), all(rustix_use_experimental_asm, target_arch = \"s390x\"), all(rustix_use_experimental_asm, target_arch = \"mips\"), all(rustix_use_experimental_asm, target_arch = \"mips32r6\"), all(rustix_use_experimental_asm, target_arch = \"mips64\"), all(rustix_use_experimental_asm, target_arch = \"mips64r6\"), target_arch = \"x86\", all(target_arch = \"x86_64\", target_pointer_width = \"64\")))))))\n },\n \"@rules_rust//rust/platform:x86_64-unknown-none\": {\n \"@crate_index__errno-0.3.14//:errno\": \"libc_errno\", # cfg(all(not(windows), any(rustix_use_libc, miri, not(all(target_os = \"linux\", any(target_endian = \"little\", target_arch = \"s390x\"), any(target_arch = \"arm\", all(target_arch = \"aarch64\", target_pointer_width = \"64\"), target_arch = \"riscv64\", all(rustix_use_experimental_asm, target_arch = \"powerpc64\"), all(rustix_use_experimental_asm, target_arch = \"s390x\"), all(rustix_use_experimental_asm, target_arch = \"mips\"), all(rustix_use_experimental_asm, target_arch = \"mips32r6\"), all(rustix_use_experimental_asm, target_arch = \"mips64\"), all(rustix_use_experimental_asm, target_arch = \"mips64r6\"), target_arch = \"x86\", all(target_arch = \"x86_64\", target_pointer_width = \"64\")))))))\n },\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 \"alloc\",\n \"fs\",\n \"libc-extra-traits\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=rustix\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.38.44\",\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 \"alloc\",\n \"fs\",\n \"libc-extra-traits\",\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 = \"rustix\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=rustix\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.38.44\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__rustix-1.1.4": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/rustix/1.1.4/download" + ], + "strip_prefix": "rustix-1.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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"rustix\",\n deps = [\n \"@crate_index__bitflags-2.12.1//:bitflags\",\n \"@crate_index__rustix-1.1.4//:build_script_build\",\n ] + select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [\n \"@crate_index__errno-0.3.14//:errno\", # aarch64-unknown-nto-qnx710, cfg(all(not(windows), any(rustix_use_libc, miri, not(all(target_os = \"linux\", any(target_endian = \"little\", any(target_arch = \"s390x\", target_arch = \"powerpc\")), any(target_arch = \"arm\", all(target_arch = \"aarch64\", target_pointer_width = \"64\"), target_arch = \"riscv64\", all(rustix_use_experimental_asm, target_arch = \"powerpc\"), all(rustix_use_experimental_asm, target_arch = \"powerpc64\"), all(rustix_use_experimental_asm, target_arch = \"s390x\"), all(rustix_use_experimental_asm, target_arch = \"mips\"), all(rustix_use_experimental_asm, target_arch = \"mips32r6\"), all(rustix_use_experimental_asm, target_arch = \"mips64\"), all(rustix_use_experimental_asm, target_arch = \"mips64r6\"), target_arch = \"x86\", all(target_arch = \"x86_64\", target_pointer_width = \"64\")))))))\n \"@crate_index__libc-0.2.186//:libc\", # aarch64-unknown-nto-qnx710, cfg(all(not(windows), any(rustix_use_libc, miri, not(all(target_os = \"linux\", any(target_endian = \"little\", any(target_arch = \"s390x\", target_arch = \"powerpc\")), any(target_arch = \"arm\", all(target_arch = \"aarch64\", target_pointer_width = \"64\"), target_arch = \"riscv64\", all(rustix_use_experimental_asm, target_arch = \"powerpc\"), all(rustix_use_experimental_asm, target_arch = \"powerpc64\"), all(rustix_use_experimental_asm, target_arch = \"s390x\"), all(rustix_use_experimental_asm, target_arch = \"mips\"), all(rustix_use_experimental_asm, target_arch = \"mips32r6\"), all(rustix_use_experimental_asm, target_arch = \"mips64\"), all(rustix_use_experimental_asm, target_arch = \"mips64r6\"), target_arch = \"x86\", all(target_arch = \"x86_64\", target_pointer_width = \"64\")))))))\n ],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [\n \"@crate_index__linux-raw-sys-0.12.1//:linux_raw_sys\", # cfg(all(not(rustix_use_libc), not(miri), target_os = \"linux\", any(target_endian = \"little\", any(target_arch = \"s390x\", target_arch = \"powerpc\")), any(target_arch = \"arm\", all(target_arch = \"aarch64\", target_pointer_width = \"64\"), target_arch = \"riscv64\", all(rustix_use_experimental_asm, target_arch = \"powerpc\"), all(rustix_use_experimental_asm, target_arch = \"powerpc64\"), all(rustix_use_experimental_asm, target_arch = \"s390x\"), all(rustix_use_experimental_asm, target_arch = \"mips\"), all(rustix_use_experimental_asm, target_arch = \"mips32r6\"), all(rustix_use_experimental_asm, target_arch = \"mips64\"), all(rustix_use_experimental_asm, target_arch = \"mips64r6\"), target_arch = \"x86\", all(target_arch = \"x86_64\", target_pointer_width = \"64\"))))\n ],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [\n \"@crate_index__errno-0.3.14//:errno\", # cfg(all(not(windows), any(rustix_use_libc, miri, not(all(target_os = \"linux\", any(target_endian = \"little\", any(target_arch = \"s390x\", target_arch = \"powerpc\")), any(target_arch = \"arm\", all(target_arch = \"aarch64\", target_pointer_width = \"64\"), target_arch = \"riscv64\", all(rustix_use_experimental_asm, target_arch = \"powerpc\"), all(rustix_use_experimental_asm, target_arch = \"powerpc64\"), all(rustix_use_experimental_asm, target_arch = \"s390x\"), all(rustix_use_experimental_asm, target_arch = \"mips\"), all(rustix_use_experimental_asm, target_arch = \"mips32r6\"), all(rustix_use_experimental_asm, target_arch = \"mips64\"), all(rustix_use_experimental_asm, target_arch = \"mips64r6\"), target_arch = \"x86\", all(target_arch = \"x86_64\", target_pointer_width = \"64\")))))))\n \"@crate_index__libc-0.2.186//:libc\", # cfg(all(not(windows), any(rustix_use_libc, miri, not(all(target_os = \"linux\", any(target_endian = \"little\", any(target_arch = \"s390x\", target_arch = \"powerpc\")), any(target_arch = \"arm\", all(target_arch = \"aarch64\", target_pointer_width = \"64\"), target_arch = \"riscv64\", all(rustix_use_experimental_asm, target_arch = \"powerpc\"), all(rustix_use_experimental_asm, target_arch = \"powerpc64\"), all(rustix_use_experimental_asm, target_arch = \"s390x\"), all(rustix_use_experimental_asm, target_arch = \"mips\"), all(rustix_use_experimental_asm, target_arch = \"mips32r6\"), all(rustix_use_experimental_asm, target_arch = \"mips64\"), all(rustix_use_experimental_asm, target_arch = \"mips64r6\"), target_arch = \"x86\", all(target_arch = \"x86_64\", target_pointer_width = \"64\")))))))\n ],\n \"//conditions:default\": [],\n }),\n aliases = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": {\n \"@crate_index__errno-0.3.14//:errno\": \"libc_errno\", # aarch64-unknown-nto-qnx710, cfg(all(not(windows), any(rustix_use_libc, miri, not(all(target_os = \"linux\", any(target_endian = \"little\", any(target_arch = \"s390x\", target_arch = \"powerpc\")), any(target_arch = \"arm\", all(target_arch = \"aarch64\", target_pointer_width = \"64\"), target_arch = \"riscv64\", all(rustix_use_experimental_asm, target_arch = \"powerpc\"), all(rustix_use_experimental_asm, target_arch = \"powerpc64\"), all(rustix_use_experimental_asm, target_arch = \"s390x\"), all(rustix_use_experimental_asm, target_arch = \"mips\"), all(rustix_use_experimental_asm, target_arch = \"mips32r6\"), all(rustix_use_experimental_asm, target_arch = \"mips64\"), all(rustix_use_experimental_asm, target_arch = \"mips64r6\"), target_arch = \"x86\", all(target_arch = \"x86_64\", target_pointer_width = \"64\")))))))\n },\n \"@rules_rust//rust/platform:x86_64-unknown-none\": {\n \"@crate_index__errno-0.3.14//:errno\": \"libc_errno\", # cfg(all(not(windows), any(rustix_use_libc, miri, not(all(target_os = \"linux\", any(target_endian = \"little\", any(target_arch = \"s390x\", target_arch = \"powerpc\")), any(target_arch = \"arm\", all(target_arch = \"aarch64\", target_pointer_width = \"64\"), target_arch = \"riscv64\", all(rustix_use_experimental_asm, target_arch = \"powerpc\"), all(rustix_use_experimental_asm, target_arch = \"powerpc64\"), all(rustix_use_experimental_asm, target_arch = \"s390x\"), all(rustix_use_experimental_asm, target_arch = \"mips\"), all(rustix_use_experimental_asm, target_arch = \"mips32r6\"), all(rustix_use_experimental_asm, target_arch = \"mips64\"), all(rustix_use_experimental_asm, target_arch = \"mips64r6\"), target_arch = \"x86\", all(target_arch = \"x86_64\", target_pointer_width = \"64\")))))))\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 \"alloc\",\n \"default\",\n \"fs\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=rustix\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.1.4\",\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 \"alloc\",\n \"default\",\n \"fs\",\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 = \"rustix\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=rustix\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"1.1.4\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__rustversion-1.0.22": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/rustversion/1.0.22/download" + ], + "strip_prefix": "rustversion-1.0.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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_proc_macro\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_proc_macro(\n name = \"rustversion\",\n deps = [\n \"@crate_index__rustversion-1.0.22//: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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=rustversion\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.22\",\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/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 = \"rustversion\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=rustversion\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"1.0.22\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__scopeguard-1.2.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/scopeguard/1.2.0/download" + ], + "strip_prefix": "scopeguard-1.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"scopeguard\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2015\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=scopeguard\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.2.0\",\n)\n" + } + }, + "crate_index__semver-1.0.28": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/semver/1.0.28/download" + ], + "strip_prefix": "semver-1.0.28", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"semver\",\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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=semver\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.28\",\n)\n" + } + }, + "crate_index__serde-1.0.228": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/serde/1.0.228/download" + ], + "strip_prefix": "serde-1.0.228", + "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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"serde\",\n deps = [\n \"@crate_index__serde-1.0.228//:build_script_build\",\n \"@crate_index__serde_core-1.0.228//:serde_core\",\n ],\n proc_macro_deps = [\n \"@crate_index__serde_derive-1.0.228//:serde_derive\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"alloc\",\n \"default\",\n \"derive\",\n \"rc\",\n \"serde_derive\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=serde\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.228\",\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 \"alloc\",\n \"default\",\n \"derive\",\n \"rc\",\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 = \"2021\",\n pkg_name = \"serde\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=serde\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"1.0.228\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__serde_core-1.0.228": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/serde_core/1.0.228/download" + ], + "strip_prefix": "serde_core-1.0.228", + "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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"serde_core\",\n deps = [\n \"@crate_index__serde_core-1.0.228//: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 \"alloc\",\n \"default\",\n \"rc\",\n \"result\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=serde_core\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.228\",\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 \"alloc\",\n \"default\",\n \"rc\",\n \"result\",\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_core\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=serde_core\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"1.0.228\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__serde_derive-1.0.228": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/serde_derive/1.0.228/download" + ], + "strip_prefix": "serde_derive-1.0.228", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_proc_macro\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_proc_macro(\n name = \"serde_derive\",\n deps = [\n \"@crate_index__proc-macro2-1.0.106//:proc_macro2\",\n \"@crate_index__quote-1.0.45//:quote\",\n \"@crate_index__syn-2.0.117//: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 = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=serde_derive\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.228\",\n)\n" + } + }, + "crate_index__serde_json-1.0.150": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/serde_json/1.0.150/download" + ], + "strip_prefix": "serde_json-1.0.150", + "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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"serde_json\",\n deps = [\n \"@crate_index__itoa-1.0.18//:itoa\",\n \"@crate_index__memchr-2.8.1//:memchr\",\n \"@crate_index__serde_core-1.0.228//:serde_core\",\n \"@crate_index__serde_json-1.0.150//:build_script_build\",\n \"@crate_index__zmij-1.0.21//:zmij\",\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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=serde_json\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.150\",\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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=serde_json\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"1.0.150\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__serde_spanned-0.6.9": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/serde_spanned/0.6.9/download" + ], + "strip_prefix": "serde_spanned-0.6.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"serde_spanned\",\n deps = [\n \"@crate_index__serde-1.0.228//:serde\",\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 \"serde\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=serde_spanned\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.6.9\",\n)\n" + } + }, + "crate_index__sha1_smol-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": "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/sha1_smol/1.0.1/download" + ], + "strip_prefix": "sha1_smol-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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"sha1_smol\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=sha1_smol\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.1\",\n)\n" + } + }, + "crate_index__sharded-slab-0.1.7": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/sharded-slab/0.1.7/download" + ], + "strip_prefix": "sharded-slab-0.1.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"sharded_slab\",\n deps = [\n \"@crate_index__lazy_static-1.5.0//:lazy_static\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=sharded-slab\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.7\",\n)\n" + } + }, + "crate_index__shlex-1.3.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/shlex/1.3.0/download" + ], + "strip_prefix": "shlex-1.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"shlex\",\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 = \"2015\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=shlex\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.3.0\",\n)\n" + } + }, + "crate_index__shlex-2.0.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/shlex/2.0.1/download" + ], + "strip_prefix": "shlex-2.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"shlex\",\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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=shlex\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"2.0.1\",\n)\n" + } + }, + "crate_index__signal-hook-0.3.18": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/signal-hook/0.3.18/download" + ], + "strip_prefix": "signal-hook-0.3.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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"signal_hook\",\n deps = [\n \"@crate_index__libc-0.2.186//:libc\",\n \"@crate_index__signal-hook-0.3.18//:build_script_build\",\n \"@crate_index__signal-hook-registry-1.4.8//:signal_hook_registry\",\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 \"channel\",\n \"default\",\n \"iterator\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=signal-hook\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.3.18\",\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 \"channel\",\n \"default\",\n \"iterator\",\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 = \"signal-hook\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=signal-hook\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.3.18\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__signal-hook-registry-1.4.8": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/signal-hook-registry/1.4.8/download" + ], + "strip_prefix": "signal-hook-registry-1.4.8", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"signal_hook_registry\",\n deps = [\n \"@crate_index__errno-0.3.14//:errno\",\n \"@crate_index__libc-0.2.186//:libc\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2015\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=signal-hook-registry\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.4.8\",\n)\n" + } + }, + "crate_index__slab-0.4.12": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/slab/0.4.12/download" + ], + "strip_prefix": "slab-0.4.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"slab\",\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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=slab\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.4.12\",\n)\n" + } + }, + "crate_index__smallvec-1.15.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/smallvec/1.15.1/download" + ], + "strip_prefix": "smallvec-1.15.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"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_features = [\n \"const_generics\",\n \"const_new\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=smallvec\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.15.1\",\n)\n" + } + }, + "crate_index__socket2-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": "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/socket2/0.6.4/download" + ], + "strip_prefix": "socket2-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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"socket2\",\n deps = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [\n \"@crate_index__libc-0.2.186//:libc\", # cfg(any(unix, target_os = \"wasi\"))\n ],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [\n \"@crate_index__libc-0.2.186//:libc\", # cfg(any(unix, target_os = \"wasi\"))\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 \"all\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=socket2\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.6.4\",\n)\n" + } + }, + "crate_index__spin-0.9.8": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/spin/0.9.8/download" + ], + "strip_prefix": "spin-0.9.8", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"spin\",\n deps = [\n \"@crate_index__lock_api-0.4.14//:lock_api\",\n ],\n aliases = {\n \"@crate_index__lock_api-0.4.14//:lock_api\": \"lock_api_crate\",\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 \"barrier\",\n \"default\",\n \"lazy\",\n \"lock_api\",\n \"lock_api_crate\",\n \"mutex\",\n \"once\",\n \"rwlock\",\n \"spin_mutex\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2015\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=spin\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.9.8\",\n)\n" + } + }, + "crate_index__stable_deref_trait-1.2.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/stable_deref_trait/1.2.1/download" + ], + "strip_prefix": "stable_deref_trait-1.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"stable_deref_trait\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2015\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=stable_deref_trait\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.2.1\",\n)\n" + } + }, + "crate_index__static_assertions-1.1.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/static_assertions/1.1.0/download" + ], + "strip_prefix": "static_assertions-1.1.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"static_assertions\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2015\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=static_assertions\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.1.0\",\n)\n" + } + }, + "crate_index__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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=strsim\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.11.1\",\n)\n" + } + }, + "crate_index__syn-2.0.117": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/syn/2.0.117/download" + ], + "strip_prefix": "syn-2.0.117", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"syn\",\n deps = [\n \"@crate_index__proc-macro2-1.0.106//:proc_macro2\",\n \"@crate_index__quote-1.0.45//:quote\",\n \"@crate_index__unicode-ident-1.0.24//: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 \"full\",\n \"parsing\",\n \"printing\",\n \"proc-macro\",\n ] + select({\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [\n \"extra-traits\", # x86_64-unknown-linux-gnu\n \"visit\", # x86_64-unknown-linux-gnu\n \"visit-mut\", # x86_64-unknown-linux-gnu\n ],\n \"//conditions:default\": [],\n }),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=syn\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"2.0.117\",\n)\n" + } + }, + "crate_index__sync_wrapper-1.0.2": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/sync_wrapper/1.0.2/download" + ], + "strip_prefix": "sync_wrapper-1.0.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"sync_wrapper\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=sync_wrapper\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.2\",\n)\n" + } + }, + "crate_index__tempfile-3.27.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/tempfile/3.27.0/download" + ], + "strip_prefix": "tempfile-3.27.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"tempfile\",\n deps = [\n \"@crate_index__fastrand-2.4.1//:fastrand\",\n \"@crate_index__once_cell-1.21.4//:once_cell\",\n ] + select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [\n \"@crate_index__getrandom-0.4.2//:getrandom\", # aarch64-unknown-nto-qnx710\n \"@crate_index__rustix-1.1.4//:rustix\", # cfg(any(unix, target_os = \"wasi\"))\n ],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [\n \"@crate_index__getrandom-0.4.2//:getrandom\", # x86_64-unknown-linux-gnu\n \"@crate_index__rustix-1.1.4//:rustix\", # cfg(any(unix, target_os = \"wasi\"))\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 \"default\",\n \"getrandom\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=tempfile\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"3.27.0\",\n)\n" + } + }, + "crate_index__termsize-0.1.9": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "6f11ff5c25c172608d5b85e2fb43ee9a6d683a7f4ab7f96ae07b3d8b590368fd", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/termsize/0.1.9/download" + ], + "strip_prefix": "termsize-0.1.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"termsize\",\n deps = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [\n \"@crate_index__libc-0.2.186//:libc\", # cfg(unix)\n ],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [\n \"@crate_index__libc-0.2.186//:libc\", # cfg(unix)\n ],\n \"//conditions:default\": [],\n }),\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=termsize\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.9\",\n)\n" + } + }, + "crate_index__thiserror-2.0.18": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/thiserror/2.0.18/download" + ], + "strip_prefix": "thiserror-2.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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"thiserror\",\n deps = [\n \"@crate_index__thiserror-2.0.18//:build_script_build\",\n ],\n proc_macro_deps = [\n \"@crate_index__thiserror-impl-2.0.18//: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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=thiserror\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"2.0.18\",\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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=thiserror\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"2.0.18\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__thiserror-impl-2.0.18": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/thiserror-impl/2.0.18/download" + ], + "strip_prefix": "thiserror-impl-2.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_proc_macro\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_proc_macro(\n name = \"thiserror_impl\",\n deps = [\n \"@crate_index__proc-macro2-1.0.106//:proc_macro2\",\n \"@crate_index__quote-1.0.45//:quote\",\n \"@crate_index__syn-2.0.117//: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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=thiserror-impl\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"2.0.18\",\n)\n" + } + }, + "crate_index__thread_local-1.1.9": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/thread_local/1.1.9/download" + ], + "strip_prefix": "thread_local-1.1.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"thread_local\",\n deps = [\n \"@crate_index__cfg-if-1.0.4//:cfg_if\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=thread_local\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.1.9\",\n)\n" + } + }, + "crate_index__time-0.3.47": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/time/0.3.47/download" + ], + "strip_prefix": "time-0.3.47", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"time\",\n deps = [\n \"@crate_index__deranged-0.5.8//:deranged\",\n \"@crate_index__itoa-1.0.18//:itoa\",\n \"@crate_index__num-conv-0.2.2//:num_conv\",\n \"@crate_index__powerfmt-0.2.0//:powerfmt\",\n \"@crate_index__serde_core-1.0.228//:serde_core\",\n \"@crate_index__time-core-0.1.8//:time_core\",\n ],\n proc_macro_deps = [\n \"@crate_index__time-macros-0.2.27//:time_macros\",\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 \"formatting\",\n \"macros\",\n \"serde\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2024\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=time\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.3.47\",\n)\n" + } + }, + "crate_index__time-core-0.1.8": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/time-core/0.1.8/download" + ], + "strip_prefix": "time-core-0.1.8", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"time_core\",\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 = \"2024\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=time-core\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.8\",\n)\n" + } + }, + "crate_index__time-macros-0.2.27": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/time-macros/0.2.27/download" + ], + "strip_prefix": "time-macros-0.2.27", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_proc_macro\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_proc_macro(\n name = \"time_macros\",\n deps = [\n \"@crate_index__num-conv-0.2.2//:num_conv\",\n \"@crate_index__time-core-0.1.8//:time_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 \"formatting\",\n \"serde\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2024\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=time-macros\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.27\",\n)\n" + } + }, + "crate_index__tiny-fn-0.1.9": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "9659b108631d1e1cf3e8e489f894bee40bc9d68fd6cc67ec4d4ce9b72d565228", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/tiny-fn/0.1.9/download" + ], + "strip_prefix": "tiny-fn-0.1.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"tiny_fn\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=tiny-fn\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.9\",\n)\n" + } + }, + "crate_index__tinyjson-2.5.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "9ab95735ea2c8fd51154d01e39cf13912a78071c2d89abc49a7ef102a7dd725a", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/tinyjson/2.5.1/download" + ], + "strip_prefix": "tinyjson-2.5.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"tinyjson\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=tinyjson\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"2.5.1\",\n)\n" + } + }, + "crate_index__tokio-1.52.3": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/tokio/1.52.3/download" + ], + "strip_prefix": "tokio-1.52.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"tokio\",\n deps = [\n \"@crate_index__bytes-1.11.1//:bytes\",\n \"@crate_index__mio-1.2.1//:mio\",\n \"@crate_index__pin-project-lite-0.2.17//:pin_project_lite\",\n \"@crate_index__socket2-0.6.4//:socket2\",\n ] + select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [\n \"@crate_index__libc-0.2.186//:libc\", # aarch64-unknown-nto-qnx710\n \"@crate_index__signal-hook-registry-1.4.8//:signal_hook_registry\", # aarch64-unknown-nto-qnx710\n ],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [\n \"@crate_index__libc-0.2.186//:libc\", # x86_64-unknown-linux-gnu\n \"@crate_index__signal-hook-registry-1.4.8//:signal_hook_registry\", # x86_64-unknown-linux-gnu\n ],\n \"//conditions:default\": [],\n }),\n proc_macro_deps = [\n \"@crate_index__tokio-macros-2.7.0//:tokio_macros\",\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 \"bytes\",\n \"default\",\n \"io-util\",\n \"libc\",\n \"macros\",\n \"mio\",\n \"net\",\n \"rt\",\n \"rt-multi-thread\",\n \"signal\",\n \"signal-hook-registry\",\n \"socket2\",\n \"sync\",\n \"time\",\n \"tokio-macros\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=tokio\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.52.3\",\n)\n" + } + }, + "crate_index__tokio-macros-2.7.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/tokio-macros/2.7.0/download" + ], + "strip_prefix": "tokio-macros-2.7.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_proc_macro\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_proc_macro(\n name = \"tokio_macros\",\n deps = [\n \"@crate_index__proc-macro2-1.0.106//:proc_macro2\",\n \"@crate_index__quote-1.0.45//:quote\",\n \"@crate_index__syn-2.0.117//: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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=tokio-macros\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"2.7.0\",\n)\n" + } + }, + "crate_index__tokio-seqpacket-0.8.2": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "24d1294c36e418ee280e57ba514cc260c0c80c69571abf44109eef2823a1c1c6", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/tokio-seqpacket/0.8.2/download" + ], + "strip_prefix": "tokio-seqpacket-0.8.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"tokio_seqpacket\",\n deps = [\n \"@crate_index__filedesc-0.6.3//:filedesc\",\n \"@crate_index__libc-0.2.186//:libc\",\n \"@crate_index__tokio-1.52.3//:tokio\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=tokio-seqpacket\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.8.2\",\n)\n" + } + }, + "crate_index__tokio-stream-0.1.18": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "32da49809aab5c3bc678af03902d4ccddea2a87d028d86392a4b1560c6906c70", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/tokio-stream/0.1.18/download" + ], + "strip_prefix": "tokio-stream-0.1.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"tokio_stream\",\n deps = [\n \"@crate_index__futures-core-0.3.32//:futures_core\",\n \"@crate_index__pin-project-lite-0.2.17//:pin_project_lite\",\n \"@crate_index__tokio-1.52.3//:tokio\",\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 \"net\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=tokio-stream\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.18\",\n)\n" + } + }, + "crate_index__tokio-util-0.7.18": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/tokio-util/0.7.18/download" + ], + "strip_prefix": "tokio-util-0.7.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"tokio_util\",\n deps = [\n \"@crate_index__bytes-1.11.1//:bytes\",\n \"@crate_index__futures-core-0.3.32//:futures_core\",\n \"@crate_index__futures-sink-0.3.32//:futures_sink\",\n \"@crate_index__pin-project-lite-0.2.17//:pin_project_lite\",\n \"@crate_index__tokio-1.52.3//:tokio\",\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 \"codec\",\n \"default\",\n \"io\",\n \"net\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=tokio-util\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.7.18\",\n)\n" + } + }, + "crate_index__toml-0.8.23": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/toml/0.8.23/download" + ], + "strip_prefix": "toml-0.8.23", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"toml\",\n deps = [\n \"@crate_index__serde-1.0.228//:serde\",\n \"@crate_index__serde_spanned-0.6.9//:serde_spanned\",\n \"@crate_index__toml_datetime-0.6.11//:toml_datetime\",\n \"@crate_index__toml_edit-0.22.27//:toml_edit\",\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 \"display\",\n \"parse\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=toml\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.8.23\",\n)\n" + } + }, + "crate_index__toml_datetime-0.6.11": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/toml_datetime/0.6.11/download" + ], + "strip_prefix": "toml_datetime-0.6.11", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"toml_datetime\",\n deps = [\n \"@crate_index__serde-1.0.228//:serde\",\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 \"serde\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=toml_datetime\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.6.11\",\n)\n" + } + }, + "crate_index__toml_edit-0.22.27": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/toml_edit/0.22.27/download" + ], + "strip_prefix": "toml_edit-0.22.27", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"toml_edit\",\n deps = [\n \"@crate_index__indexmap-2.14.0//:indexmap\",\n \"@crate_index__serde-1.0.228//:serde\",\n \"@crate_index__serde_spanned-0.6.9//:serde_spanned\",\n \"@crate_index__toml_datetime-0.6.11//:toml_datetime\",\n \"@crate_index__toml_write-0.1.2//:toml_write\",\n \"@crate_index__winnow-0.7.15//:winnow\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"display\",\n \"parse\",\n \"serde\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=toml_edit\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.22.27\",\n)\n" + } + }, + "crate_index__toml_write-0.1.2": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/toml_write/0.1.2/download" + ], + "strip_prefix": "toml_write-0.1.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"toml_write\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"alloc\",\n \"default\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=toml_write\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.2\",\n)\n" + } + }, + "crate_index__tonic-0.14.6": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "ac2a5518c70fa84342385732db33fb3f44bc4cc748936eb5833d2df34d6445ef", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/tonic/0.14.6/download" + ], + "strip_prefix": "tonic-0.14.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"tonic\",\n deps = [\n \"@crate_index__axum-0.8.9//:axum\",\n \"@crate_index__base64-0.22.1//:base64\",\n \"@crate_index__bytes-1.11.1//:bytes\",\n \"@crate_index__h2-0.4.14//:h2\",\n \"@crate_index__http-1.4.1//:http\",\n \"@crate_index__http-body-1.0.1//:http_body\",\n \"@crate_index__http-body-util-0.1.3//:http_body_util\",\n \"@crate_index__hyper-1.10.1//:hyper\",\n \"@crate_index__hyper-timeout-0.5.2//:hyper_timeout\",\n \"@crate_index__hyper-util-0.1.20//:hyper_util\",\n \"@crate_index__percent-encoding-2.3.2//:percent_encoding\",\n \"@crate_index__pin-project-1.1.13//:pin_project\",\n \"@crate_index__socket2-0.6.4//:socket2\",\n \"@crate_index__sync_wrapper-1.0.2//:sync_wrapper\",\n \"@crate_index__tokio-1.52.3//:tokio\",\n \"@crate_index__tokio-stream-0.1.18//:tokio_stream\",\n \"@crate_index__tower-0.5.3//:tower\",\n \"@crate_index__tower-layer-0.3.3//:tower_layer\",\n \"@crate_index__tower-service-0.3.3//:tower_service\",\n \"@crate_index__tracing-0.1.44//:tracing\",\n ],\n proc_macro_deps = [\n \"@crate_index__async-trait-0.1.89//:async_trait\",\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 \"channel\",\n \"codegen\",\n \"default\",\n \"router\",\n \"server\",\n \"transport\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2024\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=tonic\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.14.6\",\n)\n" + } + }, + "crate_index__tonic-build-0.12.3": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "9557ce109ea773b399c9b9e5dca39294110b74f1f342cb347a80d1fce8c26a11", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/tonic-build/0.12.3/download" + ], + "strip_prefix": "tonic-build-0.12.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"tonic_build\",\n deps = [\n \"@crate_index__prettyplease-0.2.37//:prettyplease\",\n \"@crate_index__proc-macro2-1.0.106//:proc_macro2\",\n \"@crate_index__prost-build-0.13.5//:prost_build\",\n \"@crate_index__prost-types-0.13.5//:prost_types\",\n \"@crate_index__quote-1.0.45//:quote\",\n \"@crate_index__syn-2.0.117//: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 \"prost\",\n \"prost-build\",\n \"transport\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=tonic-build\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.12.3\",\n)\n" + } + }, + "crate_index__tower-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": "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/tower/0.5.3/download" + ], + "strip_prefix": "tower-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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"tower\",\n deps = [\n \"@crate_index__futures-core-0.3.32//:futures_core\",\n \"@crate_index__futures-util-0.3.32//:futures_util\",\n \"@crate_index__indexmap-2.14.0//:indexmap\",\n \"@crate_index__pin-project-lite-0.2.17//:pin_project_lite\",\n \"@crate_index__slab-0.4.12//:slab\",\n \"@crate_index__sync_wrapper-1.0.2//:sync_wrapper\",\n \"@crate_index__tokio-1.52.3//:tokio\",\n \"@crate_index__tokio-util-0.7.18//:tokio_util\",\n \"@crate_index__tower-layer-0.3.3//:tower_layer\",\n \"@crate_index__tower-service-0.3.3//:tower_service\",\n \"@crate_index__tracing-0.1.44//:tracing\",\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 \"balance\",\n \"buffer\",\n \"discover\",\n \"futures-core\",\n \"futures-util\",\n \"indexmap\",\n \"limit\",\n \"load\",\n \"load-shed\",\n \"make\",\n \"pin-project-lite\",\n \"ready-cache\",\n \"slab\",\n \"sync_wrapper\",\n \"tokio\",\n \"tokio-util\",\n \"tracing\",\n \"util\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=tower\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.5.3\",\n)\n" + } + }, + "crate_index__tower-layer-0.3.3": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/tower-layer/0.3.3/download" + ], + "strip_prefix": "tower-layer-0.3.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"tower_layer\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=tower-layer\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.3.3\",\n)\n" + } + }, + "crate_index__tower-service-0.3.3": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/tower-service/0.3.3/download" + ], + "strip_prefix": "tower-service-0.3.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"tower_service\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=tower-service\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.3.3\",\n)\n" + } + }, + "crate_index__tracing-0.1.44": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/tracing/0.1.44/download" + ], + "strip_prefix": "tracing-0.1.44", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"tracing\",\n deps = [\n \"@crate_index__pin-project-lite-0.2.17//:pin_project_lite\",\n \"@crate_index__tracing-core-0.1.36//:tracing_core\",\n ],\n proc_macro_deps = [\n \"@crate_index__tracing-attributes-0.1.31//:tracing_attributes\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"attributes\",\n \"default\",\n \"std\",\n \"tracing-attributes\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=tracing\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.44\",\n)\n" + } + }, + "crate_index__tracing-attributes-0.1.31": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/tracing-attributes/0.1.31/download" + ], + "strip_prefix": "tracing-attributes-0.1.31", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_proc_macro\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_proc_macro(\n name = \"tracing_attributes\",\n deps = [\n \"@crate_index__proc-macro2-1.0.106//:proc_macro2\",\n \"@crate_index__quote-1.0.45//:quote\",\n \"@crate_index__syn-2.0.117//:syn\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=tracing-attributes\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.31\",\n)\n" + } + }, + "crate_index__tracing-core-0.1.36": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/tracing-core/0.1.36/download" + ], + "strip_prefix": "tracing-core-0.1.36", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"tracing_core\",\n deps = [\n \"@crate_index__once_cell-1.21.4//:once_cell\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"default\",\n \"once_cell\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=tracing-core\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.36\",\n)\n" + } + }, + "crate_index__tracing-log-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": "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/tracing-log/0.2.0/download" + ], + "strip_prefix": "tracing-log-0.2.0", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"tracing_log\",\n deps = [\n \"@crate_index__log-0.4.32//:log\",\n \"@crate_index__once_cell-1.21.4//:once_cell\",\n \"@crate_index__tracing-core-0.1.36//:tracing_core\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"log-tracer\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=tracing-log\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.0\",\n)\n" + } + }, + "crate_index__tracing-serde-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": "704b1aeb7be0d0a84fc9828cae51dab5970fee5088f83d1dd7ee6f6246fc6ff1", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/tracing-serde/0.2.0/download" + ], + "strip_prefix": "tracing-serde-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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"tracing_serde\",\n deps = [\n \"@crate_index__serde-1.0.228//:serde\",\n \"@crate_index__tracing-core-0.1.36//:tracing_core\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=tracing-serde\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.0\",\n)\n" + } + }, + "crate_index__tracing-subscriber-0.3.23": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/tracing-subscriber/0.3.23/download" + ], + "strip_prefix": "tracing-subscriber-0.3.23", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"tracing_subscriber\",\n deps = [\n \"@crate_index__nu-ansi-term-0.50.3//:nu_ansi_term\",\n \"@crate_index__serde-1.0.228//:serde\",\n \"@crate_index__serde_json-1.0.150//:serde_json\",\n \"@crate_index__sharded-slab-0.1.7//:sharded_slab\",\n \"@crate_index__smallvec-1.15.1//:smallvec\",\n \"@crate_index__thread_local-1.1.9//:thread_local\",\n \"@crate_index__tracing-core-0.1.36//:tracing_core\",\n \"@crate_index__tracing-log-0.2.0//:tracing_log\",\n \"@crate_index__tracing-serde-0.2.0//:tracing_serde\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"alloc\",\n \"ansi\",\n \"fmt\",\n \"json\",\n \"nu-ansi-term\",\n \"registry\",\n \"serde\",\n \"serde_json\",\n \"sharded-slab\",\n \"smallvec\",\n \"std\",\n \"thread_local\",\n \"tracing-log\",\n \"tracing-serde\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=tracing-subscriber\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.3.23\",\n)\n" + } + }, + "crate_index__try-lock-0.2.5": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/try-lock/0.2.5/download" + ], + "strip_prefix": "try-lock-0.2.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"try_lock\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2015\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=try-lock\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.5\",\n)\n" + } + }, + "crate_index__unicode-ident-1.0.24": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/unicode-ident/1.0.24/download" + ], + "strip_prefix": "unicode-ident-1.0.24", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"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 = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=unicode-ident\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.24\",\n)\n" + } + }, + "crate_index__unicode-width-0.2.2": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/unicode-width/0.2.2/download" + ], + "strip_prefix": "unicode-width-0.2.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"unicode_width\",\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 \"cjk\",\n \"default\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=unicode-width\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.2\",\n)\n" + } + }, + "crate_index__unicode-xid-0.2.6": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/unicode-xid/0.2.6/download" + ], + "strip_prefix": "unicode-xid-0.2.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"unicode_xid\",\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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=unicode-xid\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.6\",\n)\n" + } + }, + "crate_index__unit-prefix-0.5.2": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "81e544489bf3d8ef66c953931f56617f423cd4b5494be343d9b9d3dda037b9a3", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/unit-prefix/0.5.2/download" + ], + "strip_prefix": "unit-prefix-0.5.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"unit_prefix\",\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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=unit-prefix\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.5.2\",\n)\n" + } + }, + "crate_index__utf8parse-0.2.2": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/utf8parse/0.2.2/download" + ], + "strip_prefix": "utf8parse-0.2.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"utf8parse\",\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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=utf8parse\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.2\",\n)\n" + } + }, + "crate_index__uuid-1.23.2": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "d258b83ceec21034727ecee8c382cfa6c3e133699b0742c64571814fb420c9f7", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/uuid/1.23.2/download" + ], + "strip_prefix": "uuid-1.23.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"uuid\",\n deps = [\n \"@crate_index__getrandom-0.4.2//: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 \"default\",\n \"rng\",\n \"std\",\n \"v4\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=uuid\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.23.2\",\n)\n" + } + }, + "crate_index__valuable-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": "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/valuable/0.1.1/download" + ], + "strip_prefix": "valuable-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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"valuable\",\n deps = [\n \"@crate_index__valuable-0.1.1//:build_script_build\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=valuable\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.1\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n edition = \"2021\",\n pkg_name = \"valuable\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=valuable\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.1.1\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__version_check-0.9.5": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/version_check/0.9.5/download" + ], + "strip_prefix": "version_check-0.9.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"version_check\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2015\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=version_check\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.9.5\",\n)\n" + } + }, + "crate_index__want-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": "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/want/0.3.1/download" + ], + "strip_prefix": "want-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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"want\",\n deps = [\n \"@crate_index__try-lock-0.2.5//:try_lock\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=want\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.3.1\",\n)\n" + } + }, + "crate_index__wasi-0.11.1-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": "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/wasi/0.11.1+wasi-snapshot-preview1/download" + ], + "strip_prefix": "wasi-0.11.1+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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=wasi\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.11.1+wasi-snapshot-preview1\",\n)\n" + } + }, + "crate_index__wasip2-1.0.3-wasi-0.2.9": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/wasip2/1.0.3+wasi-0.2.9/download" + ], + "strip_prefix": "wasip2-1.0.3+wasi-0.2.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"wasip2\",\n deps = [\n \"@crate_index__wit-bindgen-0.57.1//:wit_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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=wasip2\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.3+wasi-0.2.9\",\n)\n" + } + }, + "crate_index__wasip3-0.4.0-wasi-0.3.0-rc-2026-01-06": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/wasip3/0.4.0+wasi-0.3.0-rc-2026-01-06/download" + ], + "strip_prefix": "wasip3-0.4.0+wasi-0.3.0-rc-2026-01-06", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"wasip3\",\n deps = [\n \"@crate_index__wit-bindgen-0.51.0//:wit_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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=wasip3\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.4.0+wasi-0.3.0-rc-2026-01-06\",\n)\n" + } + }, + "crate_index__wasm-bindgen-0.2.122": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "3ed04576f974d2b2fba0f38c51dbc5518011e38c36bf1143164be765528fd409", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/wasm-bindgen/0.2.122/download" + ], + "strip_prefix": "wasm-bindgen-0.2.122", + "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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"wasm_bindgen\",\n deps = [\n \"@crate_index__cfg-if-1.0.4//:cfg_if\",\n \"@crate_index__once_cell-1.21.4//:once_cell\",\n \"@crate_index__wasm-bindgen-0.2.122//:build_script_build\",\n \"@crate_index__wasm-bindgen-shared-0.2.122//:wasm_bindgen_shared\",\n ],\n proc_macro_deps = [\n \"@crate_index__wasm-bindgen-macro-0.2.122//: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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=wasm-bindgen\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.122\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n aliases = {\n \"@crate_index__rustversion-1.0.22//:rustversion\": \"rustversion_compat\",\n },\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 link_deps = [\n \"@crate_index__wasm-bindgen-shared-0.2.122//:wasm_bindgen_shared\",\n ],\n edition = \"2021\",\n pkg_name = \"wasm-bindgen\",\n proc_macro_deps = [\n \"@crate_index__rustversion-1.0.22//:rustversion\",\n ],\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=wasm-bindgen\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.2.122\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__wasm-bindgen-macro-0.2.122": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "916151b09da36bd82f6615cbf3a419e2f0ba23a03c6160e8e92eb6bd4aa1dec6", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/wasm-bindgen-macro/0.2.122/download" + ], + "strip_prefix": "wasm-bindgen-macro-0.2.122", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_proc_macro\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_proc_macro(\n name = \"wasm_bindgen_macro\",\n deps = [\n \"@crate_index__quote-1.0.45//:quote\",\n \"@crate_index__wasm-bindgen-macro-support-0.2.122//: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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=wasm-bindgen-macro\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.122\",\n)\n" + } + }, + "crate_index__wasm-bindgen-macro-support-0.2.122": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "299047362ccbfce148b67ab7e73349f77748e00c8296f9542adfad2ad82c5c5e", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/wasm-bindgen-macro-support/0.2.122/download" + ], + "strip_prefix": "wasm-bindgen-macro-support-0.2.122", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"wasm_bindgen_macro_support\",\n deps = [\n \"@crate_index__bumpalo-3.20.3//:bumpalo\",\n \"@crate_index__proc-macro2-1.0.106//:proc_macro2\",\n \"@crate_index__quote-1.0.45//:quote\",\n \"@crate_index__syn-2.0.117//:syn\",\n \"@crate_index__wasm-bindgen-shared-0.2.122//: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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=wasm-bindgen-macro-support\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.122\",\n)\n" + } + }, + "crate_index__wasm-bindgen-shared-0.2.122": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "9a929b2c61f11ba3e9bc35b50c1f25cb38e0e892c0c231ae2b8cf78d5dad4437", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/wasm-bindgen-shared/0.2.122/download" + ], + "strip_prefix": "wasm-bindgen-shared-0.2.122", + "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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"wasm_bindgen_shared\",\n deps = [\n \"@crate_index__unicode-ident-1.0.24//:unicode_ident\",\n \"@crate_index__wasm-bindgen-shared-0.2.122//:build_script_build\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=wasm-bindgen-shared\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.122\",\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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=wasm-bindgen-shared\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.2.122\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__wasm-encoder-0.244.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/wasm-encoder/0.244.0/download" + ], + "strip_prefix": "wasm-encoder-0.244.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"wasm_encoder\",\n deps = [\n \"@crate_index__leb128fmt-0.1.0//:leb128fmt\",\n \"@crate_index__wasmparser-0.244.0//:wasmparser\",\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 \"component-model\",\n \"std\",\n \"wasmparser\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=wasm-encoder\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.244.0\",\n)\n" + } + }, + "crate_index__wasm-metadata-0.244.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/wasm-metadata/0.244.0/download" + ], + "strip_prefix": "wasm-metadata-0.244.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"wasm_metadata\",\n deps = [\n \"@crate_index__anyhow-1.0.102//:anyhow\",\n \"@crate_index__indexmap-2.14.0//:indexmap\",\n \"@crate_index__wasm-encoder-0.244.0//:wasm_encoder\",\n \"@crate_index__wasmparser-0.244.0//:wasmparser\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=wasm-metadata\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.244.0\",\n)\n" + } + }, + "crate_index__wasmparser-0.244.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/wasmparser/0.244.0/download" + ], + "strip_prefix": "wasmparser-0.244.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"wasmparser\",\n deps = [\n \"@crate_index__bitflags-2.12.1//:bitflags\",\n \"@crate_index__hashbrown-0.15.5//:hashbrown\",\n \"@crate_index__indexmap-2.14.0//:indexmap\",\n \"@crate_index__semver-1.0.28//:semver\",\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 \"component-model\",\n \"features\",\n \"hash-collections\",\n \"simd\",\n \"std\",\n \"validate\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=wasmparser\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.244.0\",\n)\n" + } + }, + "crate_index__web-time-1.1.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/web-time/1.1.0/download" + ], + "strip_prefix": "web-time-1.1.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"web_time\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=web-time\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.1.0\",\n)\n" + } + }, + "crate_index__which-4.4.2": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/which/4.4.2/download" + ], + "strip_prefix": "which-4.4.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"which\",\n deps = [\n \"@crate_index__either-1.16.0//:either\",\n \"@crate_index__rustix-0.38.44//:rustix\",\n ] + select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [\n \"@crate_index__home-0.5.12//:home\", # cfg(any(windows, unix, target_os = \"redox\"))\n ],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [\n \"@crate_index__home-0.5.12//:home\", # cfg(any(windows, unix, target_os = \"redox\"))\n ],\n \"//conditions:default\": [],\n }),\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=which\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"4.4.2\",\n)\n" + } + }, + "crate_index__winapi-0.3.9": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/winapi/0.3.9/download" + ], + "strip_prefix": "winapi-0.3.9", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"winapi\",\n deps = [\n \"@crate_index__winapi-0.3.9//:build_script_build\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2015\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=winapi\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.3.9\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n edition = \"2015\",\n pkg_name = \"winapi\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=winapi\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.3.9\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__winapi-i686-pc-windows-gnu-0.4.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/winapi-i686-pc-windows-gnu/0.4.0/download" + ], + "strip_prefix": "winapi-i686-pc-windows-gnu-0.4.0", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"winapi_i686_pc_windows_gnu\",\n deps = [\n \"@crate_index__winapi-i686-pc-windows-gnu-0.4.0//:build_script_build\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2015\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=winapi-i686-pc-windows-gnu\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.4.0\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n edition = \"2015\",\n pkg_name = \"winapi-i686-pc-windows-gnu\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=winapi-i686-pc-windows-gnu\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.4.0\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__winapi-x86_64-pc-windows-gnu-0.4.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/winapi-x86_64-pc-windows-gnu/0.4.0/download" + ], + "strip_prefix": "winapi-x86_64-pc-windows-gnu-0.4.0", + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"winapi_x86_64_pc_windows_gnu\",\n deps = [\n \"@crate_index__winapi-x86_64-pc-windows-gnu-0.4.0//:build_script_build\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2015\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=winapi-x86_64-pc-windows-gnu\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.4.0\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n edition = \"2015\",\n pkg_name = \"winapi-x86_64-pc-windows-gnu\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=winapi-x86_64-pc-windows-gnu\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.4.0\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__windows-0.61.3": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows/0.61.3/download" + ], + "strip_prefix": "windows-0.61.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows\",\n deps = [\n \"@crate_index__windows-collections-0.2.0//:windows_collections\",\n \"@crate_index__windows-core-0.61.2//:windows_core\",\n \"@crate_index__windows-future-0.2.1//:windows_future\",\n \"@crate_index__windows-link-0.1.3//:windows_link\",\n \"@crate_index__windows-numerics-0.2.0//:windows_numerics\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.61.3\",\n)\n" + } + }, + "crate_index__windows-collections-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": "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows-collections/0.2.0/download" + ], + "strip_prefix": "windows-collections-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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_collections\",\n deps = [\n \"@crate_index__windows-core-0.61.2//:windows_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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows-collections\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.0\",\n)\n" + } + }, + "crate_index__windows-core-0.61.2": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows-core/0.61.2/download" + ], + "strip_prefix": "windows-core-0.61.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_core\",\n deps = [\n \"@crate_index__windows-link-0.1.3//:windows_link\",\n \"@crate_index__windows-result-0.3.4//:windows_result\",\n \"@crate_index__windows-strings-0.4.2//:windows_strings\",\n ],\n proc_macro_deps = [\n \"@crate_index__windows-implement-0.60.2//:windows_implement\",\n \"@crate_index__windows-interface-0.59.3//:windows_interface\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows-core\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.61.2\",\n)\n" + } + }, + "crate_index__windows-future-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": "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows-future/0.2.1/download" + ], + "strip_prefix": "windows-future-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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_future\",\n deps = [\n \"@crate_index__windows-core-0.61.2//:windows_core\",\n \"@crate_index__windows-link-0.1.3//:windows_link\",\n \"@crate_index__windows-threading-0.1.0//:windows_threading\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows-future\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.1\",\n)\n" + } + }, + "crate_index__windows-implement-0.60.2": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows-implement/0.60.2/download" + ], + "strip_prefix": "windows-implement-0.60.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_proc_macro\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_proc_macro(\n name = \"windows_implement\",\n deps = [\n \"@crate_index__proc-macro2-1.0.106//:proc_macro2\",\n \"@crate_index__quote-1.0.45//:quote\",\n \"@crate_index__syn-2.0.117//: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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows-implement\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.60.2\",\n)\n" + } + }, + "crate_index__windows-interface-0.59.3": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows-interface/0.59.3/download" + ], + "strip_prefix": "windows-interface-0.59.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_proc_macro\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_proc_macro(\n name = \"windows_interface\",\n deps = [\n \"@crate_index__proc-macro2-1.0.106//:proc_macro2\",\n \"@crate_index__quote-1.0.45//:quote\",\n \"@crate_index__syn-2.0.117//: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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows-interface\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.59.3\",\n)\n" + } + }, + "crate_index__windows-link-0.1.3": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows-link/0.1.3/download" + ], + "strip_prefix": "windows-link-0.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_link\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows-link\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.3\",\n)\n" + } + }, + "crate_index__windows-link-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": "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows-link/0.2.1/download" + ], + "strip_prefix": "windows-link-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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_link\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows-link\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.1\",\n)\n" + } + }, + "crate_index__windows-numerics-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": "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows-numerics/0.2.0/download" + ], + "strip_prefix": "windows-numerics-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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_numerics\",\n deps = [\n \"@crate_index__windows-core-0.61.2//:windows_core\",\n \"@crate_index__windows-link-0.1.3//:windows_link\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows-numerics\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.0\",\n)\n" + } + }, + "crate_index__windows-result-0.3.4": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows-result/0.3.4/download" + ], + "strip_prefix": "windows-result-0.3.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_result\",\n deps = [\n \"@crate_index__windows-link-0.1.3//:windows_link\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows-result\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.3.4\",\n)\n" + } + }, + "crate_index__windows-strings-0.4.2": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows-strings/0.4.2/download" + ], + "strip_prefix": "windows-strings-0.4.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_strings\",\n deps = [\n \"@crate_index__windows-link-0.1.3//:windows_link\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows-strings\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.4.2\",\n)\n" + } + }, + "crate_index__windows-sys-0.48.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows-sys/0.48.0/download" + ], + "strip_prefix": "windows-sys-0.48.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_sys\",\n deps = [\n \"@crate_index__windows-targets-0.48.5//:windows_targets\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows-sys\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.48.0\",\n)\n" + } + }, + "crate_index__windows-sys-0.59.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows-sys/0.59.0/download" + ], + "strip_prefix": "windows-sys-0.59.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_sys\",\n deps = [\n \"@crate_index__windows-targets-0.52.6//:windows_targets\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows-sys\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.59.0\",\n)\n" + } + }, + "crate_index__windows-sys-0.61.2": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows-sys/0.61.2/download" + ], + "strip_prefix": "windows-sys-0.61.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_sys\",\n deps = [\n \"@crate_index__windows-link-0.2.1//:windows_link\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows-sys\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.61.2\",\n)\n" + } + }, + "crate_index__windows-targets-0.48.5": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows-targets/0.48.5/download" + ], + "strip_prefix": "windows-targets-0.48.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_targets\",\n deps = select({\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [\n \"@crate_index__windows_x86_64_gnu-0.48.5//:windows_x86_64_gnu\", # cfg(all(target_arch = \"x86_64\", target_env = \"gnu\", not(target_abi = \"llvm\"), not(windows_raw_dylib)))\n ],\n \"//conditions:default\": [],\n }),\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows-targets\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.48.5\",\n)\n" + } + }, + "crate_index__windows-targets-0.52.6": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows-targets/0.52.6/download" + ], + "strip_prefix": "windows-targets-0.52.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_targets\",\n deps = select({\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [\n \"@crate_index__windows_x86_64_gnu-0.52.6//:windows_x86_64_gnu\", # cfg(all(target_arch = \"x86_64\", target_env = \"gnu\", not(target_abi = \"llvm\"), not(windows_raw_dylib)))\n ],\n \"//conditions:default\": [],\n }),\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows-targets\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.52.6\",\n)\n" + } + }, + "crate_index__windows-threading-0.1.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows-threading/0.1.0/download" + ], + "strip_prefix": "windows-threading-0.1.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_threading\",\n deps = [\n \"@crate_index__windows-link-0.1.3//:windows_link\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows-threading\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.0\",\n)\n" + } + }, + "crate_index__windows_aarch64_gnullvm-0.48.5": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows_aarch64_gnullvm/0.48.5/download" + ], + "strip_prefix": "windows_aarch64_gnullvm-0.48.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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_aarch64_gnullvm\",\n deps = [\n \"@crate_index__windows_aarch64_gnullvm-0.48.5//: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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_aarch64_gnullvm\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.48.5\",\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 = \"windows_aarch64_gnullvm\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_aarch64_gnullvm\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.48.5\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__windows_aarch64_gnullvm-0.52.6": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows_aarch64_gnullvm/0.52.6/download" + ], + "strip_prefix": "windows_aarch64_gnullvm-0.52.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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_aarch64_gnullvm\",\n deps = [\n \"@crate_index__windows_aarch64_gnullvm-0.52.6//:build_script_build\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_aarch64_gnullvm\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.52.6\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n edition = \"2021\",\n pkg_name = \"windows_aarch64_gnullvm\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_aarch64_gnullvm\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.52.6\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__windows_aarch64_msvc-0.48.5": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows_aarch64_msvc/0.48.5/download" + ], + "strip_prefix": "windows_aarch64_msvc-0.48.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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_aarch64_msvc\",\n deps = [\n \"@crate_index__windows_aarch64_msvc-0.48.5//: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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_aarch64_msvc\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.48.5\",\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 = \"windows_aarch64_msvc\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_aarch64_msvc\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.48.5\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__windows_aarch64_msvc-0.52.6": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows_aarch64_msvc/0.52.6/download" + ], + "strip_prefix": "windows_aarch64_msvc-0.52.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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_aarch64_msvc\",\n deps = [\n \"@crate_index__windows_aarch64_msvc-0.52.6//:build_script_build\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_aarch64_msvc\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.52.6\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n edition = \"2021\",\n pkg_name = \"windows_aarch64_msvc\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_aarch64_msvc\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.52.6\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__windows_i686_gnu-0.48.5": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows_i686_gnu/0.48.5/download" + ], + "strip_prefix": "windows_i686_gnu-0.48.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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_i686_gnu\",\n deps = [\n \"@crate_index__windows_i686_gnu-0.48.5//: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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_i686_gnu\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.48.5\",\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 = \"windows_i686_gnu\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_i686_gnu\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.48.5\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__windows_i686_gnu-0.52.6": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows_i686_gnu/0.52.6/download" + ], + "strip_prefix": "windows_i686_gnu-0.52.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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_i686_gnu\",\n deps = [\n \"@crate_index__windows_i686_gnu-0.52.6//:build_script_build\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_i686_gnu\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.52.6\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n edition = \"2021\",\n pkg_name = \"windows_i686_gnu\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_i686_gnu\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.52.6\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__windows_i686_gnullvm-0.52.6": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows_i686_gnullvm/0.52.6/download" + ], + "strip_prefix": "windows_i686_gnullvm-0.52.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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_i686_gnullvm\",\n deps = [\n \"@crate_index__windows_i686_gnullvm-0.52.6//:build_script_build\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_i686_gnullvm\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.52.6\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n edition = \"2021\",\n pkg_name = \"windows_i686_gnullvm\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_i686_gnullvm\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.52.6\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__windows_i686_msvc-0.48.5": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows_i686_msvc/0.48.5/download" + ], + "strip_prefix": "windows_i686_msvc-0.48.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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_i686_msvc\",\n deps = [\n \"@crate_index__windows_i686_msvc-0.48.5//: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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_i686_msvc\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.48.5\",\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 = \"windows_i686_msvc\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_i686_msvc\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.48.5\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__windows_i686_msvc-0.52.6": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows_i686_msvc/0.52.6/download" + ], + "strip_prefix": "windows_i686_msvc-0.52.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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_i686_msvc\",\n deps = [\n \"@crate_index__windows_i686_msvc-0.52.6//:build_script_build\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_i686_msvc\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.52.6\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n edition = \"2021\",\n pkg_name = \"windows_i686_msvc\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_i686_msvc\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.52.6\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__windows_x86_64_gnu-0.48.5": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows_x86_64_gnu/0.48.5/download" + ], + "strip_prefix": "windows_x86_64_gnu-0.48.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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_x86_64_gnu\",\n deps = [\n \"@crate_index__windows_x86_64_gnu-0.48.5//: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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_x86_64_gnu\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.48.5\",\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 = \"windows_x86_64_gnu\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_x86_64_gnu\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.48.5\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__windows_x86_64_gnu-0.52.6": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows_x86_64_gnu/0.52.6/download" + ], + "strip_prefix": "windows_x86_64_gnu-0.52.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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_x86_64_gnu\",\n deps = [\n \"@crate_index__windows_x86_64_gnu-0.52.6//:build_script_build\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_x86_64_gnu\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.52.6\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n edition = \"2021\",\n pkg_name = \"windows_x86_64_gnu\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_x86_64_gnu\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.52.6\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__windows_x86_64_gnullvm-0.48.5": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows_x86_64_gnullvm/0.48.5/download" + ], + "strip_prefix": "windows_x86_64_gnullvm-0.48.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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_x86_64_gnullvm\",\n deps = [\n \"@crate_index__windows_x86_64_gnullvm-0.48.5//: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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_x86_64_gnullvm\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.48.5\",\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 = \"windows_x86_64_gnullvm\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_x86_64_gnullvm\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.48.5\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__windows_x86_64_gnullvm-0.52.6": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows_x86_64_gnullvm/0.52.6/download" + ], + "strip_prefix": "windows_x86_64_gnullvm-0.52.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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_x86_64_gnullvm\",\n deps = [\n \"@crate_index__windows_x86_64_gnullvm-0.52.6//:build_script_build\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_x86_64_gnullvm\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.52.6\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n edition = \"2021\",\n pkg_name = \"windows_x86_64_gnullvm\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_x86_64_gnullvm\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.52.6\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__windows_x86_64_msvc-0.48.5": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows_x86_64_msvc/0.48.5/download" + ], + "strip_prefix": "windows_x86_64_msvc-0.48.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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_x86_64_msvc\",\n deps = [\n \"@crate_index__windows_x86_64_msvc-0.48.5//: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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_x86_64_msvc\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.48.5\",\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 = \"windows_x86_64_msvc\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_x86_64_msvc\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.48.5\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__windows_x86_64_msvc-0.52.6": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/windows_x86_64_msvc/0.52.6/download" + ], + "strip_prefix": "windows_x86_64_msvc-0.52.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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"windows_x86_64_msvc\",\n deps = [\n \"@crate_index__windows_x86_64_msvc-0.52.6//:build_script_build\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_x86_64_msvc\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.52.6\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n edition = \"2021\",\n pkg_name = \"windows_x86_64_msvc\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=windows_x86_64_msvc\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.52.6\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__winnow-0.7.15": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/winnow/0.7.15/download" + ], + "strip_prefix": "winnow-0.7.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"winnow\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"alloc\",\n \"default\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=winnow\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.7.15\",\n)\n" + } + }, + "crate_index__wit-bindgen-0.51.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/wit-bindgen/0.51.0/download" + ], + "strip_prefix": "wit-bindgen-0.51.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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"wit_bindgen\",\n deps = [\n \"@crate_index__wit-bindgen-0.51.0//:build_script_build\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2024\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=wit-bindgen\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.51.0\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n edition = \"2024\",\n pkg_name = \"wit-bindgen\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=wit-bindgen\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.51.0\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__wit-bindgen-0.57.1": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/wit-bindgen/0.57.1/download" + ], + "strip_prefix": "wit-bindgen-0.57.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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"wit_bindgen\",\n deps = [\n \"@crate_index__wit-bindgen-0.57.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 = \"2024\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=wit-bindgen\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.57.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 = \"2024\",\n pkg_name = \"wit-bindgen\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=wit-bindgen\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.57.1\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__wit-bindgen-core-0.51.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/wit-bindgen-core/0.51.0/download" + ], + "strip_prefix": "wit-bindgen-core-0.51.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"wit_bindgen_core\",\n deps = [\n \"@crate_index__anyhow-1.0.102//:anyhow\",\n \"@crate_index__heck-0.5.0//:heck\",\n \"@crate_index__wit-parser-0.244.0//:wit_parser\",\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 = \"2024\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=wit-bindgen-core\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.51.0\",\n)\n" + } + }, + "crate_index__wit-bindgen-rust-0.51.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/wit-bindgen-rust/0.51.0/download" + ], + "strip_prefix": "wit-bindgen-rust-0.51.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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"wit_bindgen_rust\",\n deps = [\n \"@crate_index__anyhow-1.0.102//:anyhow\",\n \"@crate_index__heck-0.5.0//:heck\",\n \"@crate_index__indexmap-2.14.0//:indexmap\",\n \"@crate_index__prettyplease-0.2.37//:prettyplease\",\n \"@crate_index__syn-2.0.117//:syn\",\n \"@crate_index__wasm-metadata-0.244.0//:wasm_metadata\",\n \"@crate_index__wit-bindgen-core-0.51.0//:wit_bindgen_core\",\n \"@crate_index__wit-bindgen-rust-0.51.0//:build_script_build\",\n \"@crate_index__wit-component-0.244.0//:wit_component\",\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 = \"2024\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=wit-bindgen-rust\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.51.0\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n link_deps = [\n \"@crate_index__prettyplease-0.2.37//:prettyplease\",\n ],\n edition = \"2024\",\n pkg_name = \"wit-bindgen-rust\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=wit-bindgen-rust\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.51.0\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__wit-bindgen-rust-macro-0.51.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/wit-bindgen-rust-macro/0.51.0/download" + ], + "strip_prefix": "wit-bindgen-rust-macro-0.51.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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_proc_macro\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_proc_macro(\n name = \"wit_bindgen_rust_macro\",\n deps = [\n \"@crate_index__anyhow-1.0.102//:anyhow\",\n \"@crate_index__prettyplease-0.2.37//:prettyplease\",\n \"@crate_index__proc-macro2-1.0.106//:proc_macro2\",\n \"@crate_index__quote-1.0.45//:quote\",\n \"@crate_index__syn-2.0.117//:syn\",\n \"@crate_index__wit-bindgen-core-0.51.0//:wit_bindgen_core\",\n \"@crate_index__wit-bindgen-rust-0.51.0//:wit_bindgen_rust\",\n \"@crate_index__wit-bindgen-rust-macro-0.51.0//:build_script_build\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2024\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=wit-bindgen-rust-macro\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.51.0\",\n)\n\ncargo_build_script(\n name = \"_bs\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \"**/*.rs\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_name = \"build_script_build\",\n crate_root = \"build.rs\",\n data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n link_deps = [\n \"@crate_index__prettyplease-0.2.37//:prettyplease\",\n ],\n edition = \"2024\",\n pkg_name = \"wit-bindgen-rust-macro\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=wit-bindgen-rust-macro\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.51.0\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__wit-component-0.244.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/wit-component/0.244.0/download" + ], + "strip_prefix": "wit-component-0.244.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"wit_component\",\n deps = [\n \"@crate_index__anyhow-1.0.102//:anyhow\",\n \"@crate_index__bitflags-2.12.1//:bitflags\",\n \"@crate_index__indexmap-2.14.0//:indexmap\",\n \"@crate_index__log-0.4.32//:log\",\n \"@crate_index__serde-1.0.228//:serde\",\n \"@crate_index__serde_json-1.0.150//:serde_json\",\n \"@crate_index__wasm-encoder-0.244.0//:wasm_encoder\",\n \"@crate_index__wasm-metadata-0.244.0//:wasm_metadata\",\n \"@crate_index__wasmparser-0.244.0//:wasmparser\",\n \"@crate_index__wit-parser-0.244.0//:wit_parser\",\n ],\n proc_macro_deps = [\n \"@crate_index__serde_derive-1.0.228//:serde_derive\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=wit-component\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.244.0\",\n)\n" + } + }, + "crate_index__wit-parser-0.244.0": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/wit-parser/0.244.0/download" + ], + "strip_prefix": "wit-parser-0.244.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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"wit_parser\",\n deps = [\n \"@crate_index__anyhow-1.0.102//:anyhow\",\n \"@crate_index__id-arena-2.3.0//:id_arena\",\n \"@crate_index__indexmap-2.14.0//:indexmap\",\n \"@crate_index__log-0.4.32//:log\",\n \"@crate_index__semver-1.0.28//:semver\",\n \"@crate_index__serde-1.0.228//:serde\",\n \"@crate_index__serde_json-1.0.150//:serde_json\",\n \"@crate_index__unicode-xid-0.2.6//:unicode_xid\",\n \"@crate_index__wasmparser-0.244.0//:wasmparser\",\n ],\n proc_macro_deps = [\n \"@crate_index__serde_derive-1.0.228//:serde_derive\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"decoding\",\n \"default\",\n \"serde\",\n \"serde_json\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=wit-parser\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.244.0\",\n)\n" + } + }, + "crate_index__yansi-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": "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/yansi/1.0.1/download" + ], + "strip_prefix": "yansi-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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"yansi\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_features = [\n \"alloc\",\n \"default\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=yansi\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.1\",\n)\n" + } + }, + "crate_index__zerocopy-0.8.50": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "3b065d4f0e55f82fae73202e189638116a87c55ab6b8e6c2721e13dd9d854ad1", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/zerocopy/0.8.50/download" + ], + "strip_prefix": "zerocopy-0.8.50", + "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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"zerocopy\",\n deps = [\n \"@crate_index__zerocopy-0.8.50//: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 \"simd\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=zerocopy\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.8.50\",\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 \"simd\",\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 = \"zerocopy\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=zerocopy\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.8.50\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, + "crate_index__zerocopy-derive-0.8.50": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "0b631b19d36a892ab55420c92dbc83ccd79274f25be714855d3074aa71cab639", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/zerocopy-derive/0.8.50/download" + ], + "strip_prefix": "zerocopy-derive-0.8.50", + "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 'score_crates'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_proc_macro\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_proc_macro(\n name = \"zerocopy_derive\",\n deps = [\n \"@crate_index__proc-macro2-1.0.106//:proc_macro2\",\n \"@crate_index__quote-1.0.45//:quote\",\n \"@crate_index__syn-2.0.117//: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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=zerocopy-derive\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.8.50\",\n)\n" + } + }, + "crate_index__zmij-1.0.21": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "patch_args": [], + "patch_tool": "", + "patches": [], + "remote_patch_strip": 1, + "sha256": "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa", + "type": "tar.gz", + "urls": [ + "https://static.crates.io/crates/zmij/1.0.21/download" + ], + "strip_prefix": "zmij-1.0.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 'score_crates'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"zmij\",\n deps = [\n \"@crate_index__zmij-1.0.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_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=zmij\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-none\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.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_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 = \"zmij\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=zmij\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"1.0.21\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + } + }, "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 'score_tooling'\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 = \"clap-4.6.1\",\n actual = \"@crates__clap-4.6.1//:clap\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"clap\",\n actual = \"@crates__clap-4.6.1//:clap\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"env_logger-0.10.2\",\n actual = \"@crates__env_logger-0.10.2//:env_logger\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"env_logger\",\n actual = \"@crates__env_logger-0.10.2//:env_logger\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"flatbuffers-25.12.19\",\n actual = \"@crates__flatbuffers-25.12.19//:flatbuffers\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"flatbuffers\",\n actual = \"@crates__flatbuffers-25.12.19//:flatbuffers\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"log-0.4.29\",\n actual = \"@crates__log-0.4.29//:log\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"log\",\n actual = \"@crates__log-0.4.29//:log\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"once_cell-1.21.4\",\n actual = \"@crates__once_cell-1.21.4//:once_cell\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"once_cell\",\n actual = \"@crates__once_cell-1.21.4//:once_cell\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"pest-2.8.6\",\n actual = \"@crates__pest-2.8.6//:pest\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"pest\",\n actual = \"@crates__pest-2.8.6//:pest\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"pest_derive-2.8.6\",\n actual = \"@crates__pest_derive-2.8.6//:pest_derive\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"pest_derive\",\n actual = \"@crates__pest_derive-2.8.6//:pest_derive\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde-1.0.228\",\n actual = \"@crates__serde-1.0.228//:serde\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde\",\n actual = \"@crates__serde-1.0.228//:serde\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde_json-1.0.149\",\n actual = \"@crates__serde_json-1.0.149//:serde_json\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde_json\",\n actual = \"@crates__serde_json-1.0.149//:serde_json\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde_yaml-0.9.34+deprecated\",\n actual = \"@crates__serde_yaml-0.9.34-deprecated//:serde_yaml\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde_yaml\",\n actual = \"@crates__serde_yaml-0.9.34-deprecated//:serde_yaml\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"thiserror-1.0.69\",\n actual = \"@crates__thiserror-1.0.69//:thiserror\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"thiserror\",\n actual = \"@crates__thiserror-1.0.69//:thiserror\",\n tags = [\"manual\"],\n)\n", + "BUILD.bazel": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'score_tooling'\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 = \"clap-4.6.1\",\n actual = \"@crates__clap-4.6.1//:clap\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"clap\",\n actual = \"@crates__clap-4.6.1//:clap\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"env_logger-0.10.2\",\n actual = \"@crates__env_logger-0.10.2//:env_logger\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"env_logger\",\n actual = \"@crates__env_logger-0.10.2//:env_logger\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"flatbuffers-25.12.19\",\n actual = \"@crates__flatbuffers-25.12.19//:flatbuffers\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"flatbuffers\",\n actual = \"@crates__flatbuffers-25.12.19//:flatbuffers\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"log-0.4.32\",\n actual = \"@crates__log-0.4.32//:log\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"log\",\n actual = \"@crates__log-0.4.32//:log\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"once_cell-1.21.4\",\n actual = \"@crates__once_cell-1.21.4//:once_cell\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"once_cell\",\n actual = \"@crates__once_cell-1.21.4//:once_cell\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"pest-2.8.6\",\n actual = \"@crates__pest-2.8.6//:pest\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"pest\",\n actual = \"@crates__pest-2.8.6//:pest\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"pest_derive-2.8.6\",\n actual = \"@crates__pest_derive-2.8.6//:pest_derive\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"pest_derive\",\n actual = \"@crates__pest_derive-2.8.6//:pest_derive\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde-1.0.228\",\n actual = \"@crates__serde-1.0.228//:serde\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde\",\n actual = \"@crates__serde-1.0.228//:serde\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde_json-1.0.150\",\n actual = \"@crates__serde_json-1.0.150//:serde_json\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde_json\",\n actual = \"@crates__serde_json-1.0.150//:serde_json\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde_yaml-0.9.34+deprecated\",\n actual = \"@crates__serde_yaml-0.9.34-deprecated//:serde_yaml\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"serde_yaml\",\n actual = \"@crates__serde_yaml-0.9.34-deprecated//:serde_yaml\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"thiserror-1.0.69\",\n actual = \"@crates__thiserror-1.0.69//:thiserror\",\n tags = [\"manual\"],\n)\n\nalias(\n name = \"thiserror\",\n actual = \"@crates__thiserror-1.0.69//:thiserror\",\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 'score_tooling'\n###############################################################################\n\"\"\"\n# `crates_repository` API\n\n- [aliases](#aliases)\n- [crate_deps](#crate_deps)\n- [all_crate_deps](#all_crate_deps)\n- [crate_repositories](#crate_repositories)\n\n\"\"\"\n\nload(\"@bazel_tools//tools/build_defs/repo:git.bzl\", \"new_git_repository\")\nload(\"@bazel_tools//tools/build_defs/repo:http.bzl\", \"http_archive\")\nload(\"@bazel_tools//tools/build_defs/repo:utils.bzl\", \"maybe\")\nload(\"@bazel_skylib//lib:selects.bzl\", \"selects\")\nload(\"@rules_rust//crate_universe/private:local_crate_mirror.bzl\", \"local_crate_mirror\")\n\n###############################################################################\n# MACROS API\n###############################################################################\n\n# An identifier that represent common dependencies (unconditional).\n_COMMON_CONDITION = \"\"\n\ndef _flatten_dependency_maps(all_dependency_maps):\n \"\"\"Flatten a list of dependency maps into one dictionary.\n\n Dependency maps have the following structure:\n\n ```python\n DEPENDENCIES_MAP = {\n # The first key in the map is a Bazel package\n # name of the workspace this file is defined in.\n \"workspace_member_package\": {\n\n # Not all dependencies are supported for all platforms.\n # the condition key is the condition required to be true\n # on the host platform.\n \"condition\": {\n\n # An alias to a crate target. # The label of the crate target the\n # Aliases are only crate names. # package name refers to.\n \"package_name\": \"@full//:label\",\n }\n }\n }\n ```\n\n Args:\n all_dependency_maps (list): A list of dicts as described above\n\n Returns:\n dict: A dictionary as described above\n \"\"\"\n dependencies = {}\n\n for workspace_deps_map in all_dependency_maps:\n for pkg_name, conditional_deps_map in workspace_deps_map.items():\n if pkg_name not in dependencies:\n non_frozen_map = dict()\n for key, values in conditional_deps_map.items():\n non_frozen_map.update({key: dict(values.items())})\n dependencies.setdefault(pkg_name, non_frozen_map)\n continue\n\n for condition, deps_map in conditional_deps_map.items():\n # If the condition has not been recorded, do so and continue\n if condition not in dependencies[pkg_name]:\n dependencies[pkg_name].setdefault(condition, dict(deps_map.items()))\n continue\n\n # Alert on any miss-matched dependencies\n inconsistent_entries = []\n for crate_name, crate_label in deps_map.items():\n existing = dependencies[pkg_name][condition].get(crate_name)\n if existing and existing != crate_label:\n inconsistent_entries.append((crate_name, existing, crate_label))\n dependencies[pkg_name][condition].update({crate_name: crate_label})\n\n return dependencies\n\ndef crate_deps(deps, package_name = None):\n \"\"\"Finds the fully qualified label of the requested crates for the package where this macro is called.\n\n Args:\n deps (list): The desired list of crate targets.\n package_name (str, optional): The package name of the set of dependencies to look up.\n Defaults to `native.package_name()`.\n\n Returns:\n list: A list of labels to generated rust targets (str)\n \"\"\"\n\n if not deps:\n return []\n\n if package_name == None:\n package_name = native.package_name()\n\n # Join both sets of dependencies\n dependencies = _flatten_dependency_maps([\n _NORMAL_DEPENDENCIES,\n _NORMAL_DEV_DEPENDENCIES,\n _PROC_MACRO_DEPENDENCIES,\n _PROC_MACRO_DEV_DEPENDENCIES,\n _BUILD_DEPENDENCIES,\n _BUILD_PROC_MACRO_DEPENDENCIES,\n ]).pop(package_name, {})\n\n # Combine all conditional packages so we can easily index over a flat list\n # TODO: Perhaps this should actually return select statements and maintain\n # the conditionals of the dependencies\n flat_deps = {}\n for deps_set in dependencies.values():\n for crate_name, crate_label in deps_set.items():\n flat_deps.update({crate_name: crate_label})\n\n missing_crates = []\n crate_targets = []\n for crate_target in deps:\n if crate_target not in flat_deps:\n missing_crates.append(crate_target)\n else:\n crate_targets.append(flat_deps[crate_target])\n\n if missing_crates:\n fail(\"Could not find crates `{}` among dependencies of `{}`. Available dependencies were `{}`\".format(\n missing_crates,\n package_name,\n dependencies,\n ))\n\n return crate_targets\n\ndef all_crate_deps(\n normal = False, \n normal_dev = False, \n proc_macro = False, \n proc_macro_dev = False,\n build = False,\n build_proc_macro = False,\n package_name = None):\n \"\"\"Finds the fully qualified label of all requested direct crate dependencies \\\n for the package where this macro is called.\n\n If no parameters are set, all normal dependencies are returned. Setting any one flag will\n otherwise impact the contents of the returned list.\n\n Args:\n normal (bool, optional): If True, normal dependencies are included in the\n output list.\n normal_dev (bool, optional): If True, normal dev dependencies will be\n included in the output list..\n proc_macro (bool, optional): If True, proc_macro dependencies are included\n in the output list.\n proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are\n included in the output list.\n build (bool, optional): If True, build dependencies are included\n in the output list.\n build_proc_macro (bool, optional): If True, build proc_macro dependencies are\n included in the output list.\n package_name (str, optional): The package name of the set of dependencies to look up.\n Defaults to `native.package_name()` when unset.\n\n Returns:\n list: A list of labels to generated rust targets (str)\n \"\"\"\n\n if package_name == None:\n package_name = native.package_name()\n\n # Determine the relevant maps to use\n all_dependency_maps = []\n if normal:\n all_dependency_maps.append(_NORMAL_DEPENDENCIES)\n if normal_dev:\n all_dependency_maps.append(_NORMAL_DEV_DEPENDENCIES)\n if proc_macro:\n all_dependency_maps.append(_PROC_MACRO_DEPENDENCIES)\n if proc_macro_dev:\n all_dependency_maps.append(_PROC_MACRO_DEV_DEPENDENCIES)\n if build:\n all_dependency_maps.append(_BUILD_DEPENDENCIES)\n if build_proc_macro:\n all_dependency_maps.append(_BUILD_PROC_MACRO_DEPENDENCIES)\n\n # Default to always using normal dependencies\n if not all_dependency_maps:\n all_dependency_maps.append(_NORMAL_DEPENDENCIES)\n\n dependencies = _flatten_dependency_maps(all_dependency_maps).pop(package_name, None)\n\n if not dependencies:\n if dependencies == None:\n fail(\"Tried to get all_crate_deps for package \" + package_name + \" but that package had no Cargo.toml file\")\n else:\n return []\n\n crate_deps = list(dependencies.pop(_COMMON_CONDITION, {}).values())\n for condition, deps in dependencies.items():\n crate_deps += selects.with_or({\n tuple(_CONDITIONS[condition]): deps.values(),\n \"//conditions:default\": [],\n })\n\n return crate_deps\n\ndef aliases(\n normal = False,\n normal_dev = False,\n proc_macro = False,\n proc_macro_dev = False,\n build = False,\n build_proc_macro = False,\n package_name = None):\n \"\"\"Produces a map of Crate alias names to their original label\n\n If no dependency kinds are specified, `normal` and `proc_macro` are used by default.\n Setting any one flag will otherwise determine the contents of the returned dict.\n\n Args:\n normal (bool, optional): If True, normal dependencies are included in the\n output list.\n normal_dev (bool, optional): If True, normal dev dependencies will be\n included in the output list..\n proc_macro (bool, optional): If True, proc_macro dependencies are included\n in the output list.\n proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are\n included in the output list.\n build (bool, optional): If True, build dependencies are included\n in the output list.\n build_proc_macro (bool, optional): If True, build proc_macro dependencies are\n included in the output list.\n package_name (str, optional): The package name of the set of dependencies to look up.\n Defaults to `native.package_name()` when unset.\n\n Returns:\n dict: The aliases of all associated packages\n \"\"\"\n if package_name == None:\n package_name = native.package_name()\n\n # Determine the relevant maps to use\n all_aliases_maps = []\n if normal:\n all_aliases_maps.append(_NORMAL_ALIASES)\n if normal_dev:\n all_aliases_maps.append(_NORMAL_DEV_ALIASES)\n if proc_macro:\n all_aliases_maps.append(_PROC_MACRO_ALIASES)\n if proc_macro_dev:\n all_aliases_maps.append(_PROC_MACRO_DEV_ALIASES)\n if build:\n all_aliases_maps.append(_BUILD_ALIASES)\n if build_proc_macro:\n all_aliases_maps.append(_BUILD_PROC_MACRO_ALIASES)\n\n # Default to always using normal aliases\n if not all_aliases_maps:\n all_aliases_maps.append(_NORMAL_ALIASES)\n all_aliases_maps.append(_PROC_MACRO_ALIASES)\n\n aliases = _flatten_dependency_maps(all_aliases_maps).pop(package_name, None)\n\n if not aliases:\n return dict()\n\n common_items = aliases.pop(_COMMON_CONDITION, {}).items()\n\n # If there are only common items in the dictionary, immediately return them\n if not len(aliases.keys()) == 1:\n return dict(common_items)\n\n # Build a single select statement where each conditional has accounted for the\n # common set of aliases.\n crate_aliases = {\"//conditions:default\": dict(common_items)}\n for condition, deps in aliases.items():\n condition_triples = _CONDITIONS[condition]\n for triple in condition_triples:\n if triple in crate_aliases:\n crate_aliases[triple].update(deps)\n else:\n crate_aliases.update({triple: dict(deps.items() + common_items)})\n\n return select(crate_aliases)\n\n###############################################################################\n# WORKSPACE MEMBER DEPS AND ALIASES\n###############################################################################\n\n_NORMAL_DEPENDENCIES = {\n \"\": {\n _COMMON_CONDITION: {\n \"clap\": Label(\"@crates//:clap-4.6.1\"),\n \"env_logger\": Label(\"@crates//:env_logger-0.10.2\"),\n \"flatbuffers\": Label(\"@crates//:flatbuffers-25.12.19\"),\n \"log\": Label(\"@crates//:log-0.4.29\"),\n \"once_cell\": Label(\"@crates//:once_cell-1.21.4\"),\n \"pest\": Label(\"@crates//:pest-2.8.6\"),\n \"serde\": Label(\"@crates//:serde-1.0.228\"),\n \"serde_json\": Label(\"@crates//:serde_json-1.0.149\"),\n \"serde_yaml\": Label(\"@crates//:serde_yaml-0.9.34+deprecated\"),\n \"thiserror\": Label(\"@crates//:thiserror-1.0.69\"),\n },\n },\n}\n\n\n_NORMAL_ALIASES = {\n \"\": {\n _COMMON_CONDITION: {\n },\n },\n}\n\n\n_NORMAL_DEV_DEPENDENCIES = {\n \"\": {\n },\n}\n\n\n_NORMAL_DEV_ALIASES = {\n \"\": {\n },\n}\n\n\n_PROC_MACRO_DEPENDENCIES = {\n \"\": {\n _COMMON_CONDITION: {\n \"pest_derive\": Label(\"@crates//:pest_derive-2.8.6\"),\n },\n },\n}\n\n\n_PROC_MACRO_ALIASES = {\n \"\": {\n },\n}\n\n\n_PROC_MACRO_DEV_DEPENDENCIES = {\n \"\": {\n },\n}\n\n\n_PROC_MACRO_DEV_ALIASES = {\n \"\": {\n },\n}\n\n\n_BUILD_DEPENDENCIES = {\n \"\": {\n },\n}\n\n\n_BUILD_ALIASES = {\n \"\": {\n },\n}\n\n\n_BUILD_PROC_MACRO_DEPENDENCIES = {\n \"\": {\n },\n}\n\n\n_BUILD_PROC_MACRO_ALIASES = {\n \"\": {\n },\n}\n\n\n_CONDITIONS = {\n \"aarch64-apple-darwin\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n \"aarch64-linux-android\": [],\n \"aarch64-unknown-linux-gnu\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\"],\n \"cfg(all(target_arch = \\\"aarch64\\\", target_os = \\\"linux\\\"))\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\"],\n \"cfg(all(target_arch = \\\"aarch64\\\", target_vendor = \\\"apple\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n \"cfg(all(target_arch = \\\"loongarch64\\\", target_os = \\\"linux\\\"))\": [],\n \"cfg(any())\": [],\n \"cfg(any(target_arch = \\\"aarch64\\\", target_arch = \\\"x86_64\\\", target_arch = \\\"x86\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-pc-windows-msvc\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\"],\n \"cfg(any(unix, target_os = \\\"wasi\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:wasm32-wasip1\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\"],\n \"cfg(target_os = \\\"hermit\\\")\": [],\n \"cfg(windows)\": [\"@rules_rust//rust/platform:x86_64-pc-windows-msvc\"],\n \"wasm32-unknown-unknown\": [\"@rules_rust//rust/platform:wasm32-unknown-unknown\"],\n \"wasm32-wasip1\": [\"@rules_rust//rust/platform:wasm32-wasip1\"],\n \"x86_64-pc-windows-msvc\": [\"@rules_rust//rust/platform:x86_64-pc-windows-msvc\"],\n \"x86_64-unknown-linux-gnu\": [\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"x86_64-unknown-nixos-gnu\": [\"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\"],\n}\n\n###############################################################################\n\ndef crate_repositories():\n \"\"\"A macro for defining repositories for all generated crates.\n\n Returns:\n A list of repos visible to the module through the module extension.\n \"\"\"\n maybe(\n http_archive,\n name = \"crates__aho-corasick-1.1.4\",\n sha256 = \"ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/aho-corasick/1.1.4/download\"],\n strip_prefix = \"aho-corasick-1.1.4\",\n build_file = Label(\"@crates//crates:BUILD.aho-corasick-1.1.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__anstream-1.0.0\",\n sha256 = \"824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstream/1.0.0/download\"],\n strip_prefix = \"anstream-1.0.0\",\n build_file = Label(\"@crates//crates:BUILD.anstream-1.0.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__anstyle-1.0.14\",\n sha256 = \"940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstyle/1.0.14/download\"],\n strip_prefix = \"anstyle-1.0.14\",\n build_file = Label(\"@crates//crates:BUILD.anstyle-1.0.14.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__anstyle-parse-1.0.0\",\n sha256 = \"52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstyle-parse/1.0.0/download\"],\n strip_prefix = \"anstyle-parse-1.0.0\",\n build_file = Label(\"@crates//crates:BUILD.anstyle-parse-1.0.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__anstyle-query-1.1.5\",\n sha256 = \"40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstyle-query/1.1.5/download\"],\n strip_prefix = \"anstyle-query-1.1.5\",\n build_file = Label(\"@crates//crates:BUILD.anstyle-query-1.1.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__anstyle-wincon-3.0.11\",\n sha256 = \"291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstyle-wincon/3.0.11/download\"],\n strip_prefix = \"anstyle-wincon-3.0.11\",\n build_file = Label(\"@crates//crates:BUILD.anstyle-wincon-3.0.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__bitflags-2.11.1\",\n sha256 = \"c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bitflags/2.11.1/download\"],\n strip_prefix = \"bitflags-2.11.1\",\n build_file = Label(\"@crates//crates:BUILD.bitflags-2.11.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__block-buffer-0.10.4\",\n sha256 = \"3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/block-buffer/0.10.4/download\"],\n strip_prefix = \"block-buffer-0.10.4\",\n build_file = Label(\"@crates//crates:BUILD.block-buffer-0.10.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__cfg-if-1.0.4\",\n sha256 = \"9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cfg-if/1.0.4/download\"],\n strip_prefix = \"cfg-if-1.0.4\",\n build_file = Label(\"@crates//crates:BUILD.cfg-if-1.0.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__clap-4.6.1\",\n sha256 = \"1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap/4.6.1/download\"],\n strip_prefix = \"clap-4.6.1\",\n build_file = Label(\"@crates//crates:BUILD.clap-4.6.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__clap_builder-4.6.0\",\n sha256 = \"714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap_builder/4.6.0/download\"],\n strip_prefix = \"clap_builder-4.6.0\",\n build_file = Label(\"@crates//crates:BUILD.clap_builder-4.6.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__clap_derive-4.6.1\",\n sha256 = \"f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap_derive/4.6.1/download\"],\n strip_prefix = \"clap_derive-4.6.1\",\n build_file = Label(\"@crates//crates:BUILD.clap_derive-4.6.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__clap_lex-1.1.0\",\n sha256 = \"c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap_lex/1.1.0/download\"],\n strip_prefix = \"clap_lex-1.1.0\",\n build_file = Label(\"@crates//crates:BUILD.clap_lex-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__colorchoice-1.0.5\",\n sha256 = \"1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/colorchoice/1.0.5/download\"],\n strip_prefix = \"colorchoice-1.0.5\",\n build_file = Label(\"@crates//crates:BUILD.colorchoice-1.0.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__cpufeatures-0.2.17\",\n sha256 = \"59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cpufeatures/0.2.17/download\"],\n strip_prefix = \"cpufeatures-0.2.17\",\n build_file = Label(\"@crates//crates:BUILD.cpufeatures-0.2.17.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__crypto-common-0.1.7\",\n sha256 = \"78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/crypto-common/0.1.7/download\"],\n strip_prefix = \"crypto-common-0.1.7\",\n build_file = Label(\"@crates//crates:BUILD.crypto-common-0.1.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__digest-0.10.7\",\n sha256 = \"9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/digest/0.10.7/download\"],\n strip_prefix = \"digest-0.10.7\",\n build_file = Label(\"@crates//crates:BUILD.digest-0.10.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__env_logger-0.10.2\",\n sha256 = \"4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/env_logger/0.10.2/download\"],\n strip_prefix = \"env_logger-0.10.2\",\n build_file = Label(\"@crates//crates:BUILD.env_logger-0.10.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__equivalent-1.0.2\",\n sha256 = \"877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/equivalent/1.0.2/download\"],\n strip_prefix = \"equivalent-1.0.2\",\n build_file = Label(\"@crates//crates:BUILD.equivalent-1.0.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__flatbuffers-25.12.19\",\n sha256 = \"35f6839d7b3b98adde531effaf34f0c2badc6f4735d26fe74709d8e513a96ef3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/flatbuffers/25.12.19/download\"],\n strip_prefix = \"flatbuffers-25.12.19\",\n build_file = Label(\"@crates//crates:BUILD.flatbuffers-25.12.19.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__generic-array-0.14.7\",\n sha256 = \"85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/generic-array/0.14.7/download\"],\n strip_prefix = \"generic-array-0.14.7\",\n build_file = Label(\"@crates//crates:BUILD.generic-array-0.14.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__hashbrown-0.17.0\",\n sha256 = \"4f467dd6dccf739c208452f8014c75c18bb8301b050ad1cfb27153803edb0f51\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hashbrown/0.17.0/download\"],\n strip_prefix = \"hashbrown-0.17.0\",\n build_file = Label(\"@crates//crates:BUILD.hashbrown-0.17.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__heck-0.5.0\",\n sha256 = \"2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/heck/0.5.0/download\"],\n strip_prefix = \"heck-0.5.0\",\n build_file = Label(\"@crates//crates:BUILD.heck-0.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__hermit-abi-0.5.2\",\n sha256 = \"fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hermit-abi/0.5.2/download\"],\n strip_prefix = \"hermit-abi-0.5.2\",\n build_file = Label(\"@crates//crates:BUILD.hermit-abi-0.5.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__humantime-2.3.0\",\n sha256 = \"135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/humantime/2.3.0/download\"],\n strip_prefix = \"humantime-2.3.0\",\n build_file = Label(\"@crates//crates:BUILD.humantime-2.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__indexmap-2.14.0\",\n sha256 = \"d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/indexmap/2.14.0/download\"],\n strip_prefix = \"indexmap-2.14.0\",\n build_file = Label(\"@crates//crates:BUILD.indexmap-2.14.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__is-terminal-0.4.17\",\n sha256 = \"3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/is-terminal/0.4.17/download\"],\n strip_prefix = \"is-terminal-0.4.17\",\n build_file = Label(\"@crates//crates:BUILD.is-terminal-0.4.17.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__is_terminal_polyfill-1.70.2\",\n sha256 = \"a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/is_terminal_polyfill/1.70.2/download\"],\n strip_prefix = \"is_terminal_polyfill-1.70.2\",\n build_file = Label(\"@crates//crates:BUILD.is_terminal_polyfill-1.70.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__itoa-1.0.18\",\n sha256 = \"8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/itoa/1.0.18/download\"],\n strip_prefix = \"itoa-1.0.18\",\n build_file = Label(\"@crates//crates:BUILD.itoa-1.0.18.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__libc-0.2.186\",\n sha256 = \"68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/libc/0.2.186/download\"],\n strip_prefix = \"libc-0.2.186\",\n build_file = Label(\"@crates//crates:BUILD.libc-0.2.186.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__log-0.4.29\",\n sha256 = \"5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/log/0.4.29/download\"],\n strip_prefix = \"log-0.4.29\",\n build_file = Label(\"@crates//crates:BUILD.log-0.4.29.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__memchr-2.8.0\",\n sha256 = \"f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/memchr/2.8.0/download\"],\n strip_prefix = \"memchr-2.8.0\",\n build_file = Label(\"@crates//crates:BUILD.memchr-2.8.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__once_cell-1.21.4\",\n sha256 = \"9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/once_cell/1.21.4/download\"],\n strip_prefix = \"once_cell-1.21.4\",\n build_file = Label(\"@crates//crates:BUILD.once_cell-1.21.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__once_cell_polyfill-1.70.2\",\n sha256 = \"384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/once_cell_polyfill/1.70.2/download\"],\n strip_prefix = \"once_cell_polyfill-1.70.2\",\n build_file = Label(\"@crates//crates:BUILD.once_cell_polyfill-1.70.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__pest-2.8.6\",\n sha256 = \"e0848c601009d37dfa3430c4666e147e49cdcf1b92ecd3e63657d8a5f19da662\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pest/2.8.6/download\"],\n strip_prefix = \"pest-2.8.6\",\n build_file = Label(\"@crates//crates:BUILD.pest-2.8.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__pest_derive-2.8.6\",\n sha256 = \"11f486f1ea21e6c10ed15d5a7c77165d0ee443402f0780849d1768e7d9d6fe77\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pest_derive/2.8.6/download\"],\n strip_prefix = \"pest_derive-2.8.6\",\n build_file = Label(\"@crates//crates:BUILD.pest_derive-2.8.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__pest_generator-2.8.6\",\n sha256 = \"8040c4647b13b210a963c1ed407c1ff4fdfa01c31d6d2a098218702e6664f94f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pest_generator/2.8.6/download\"],\n strip_prefix = \"pest_generator-2.8.6\",\n build_file = Label(\"@crates//crates:BUILD.pest_generator-2.8.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__pest_meta-2.8.6\",\n sha256 = \"89815c69d36021a140146f26659a81d6c2afa33d216d736dd4be5381a7362220\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pest_meta/2.8.6/download\"],\n strip_prefix = \"pest_meta-2.8.6\",\n build_file = Label(\"@crates//crates:BUILD.pest_meta-2.8.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__proc-macro2-1.0.106\",\n sha256 = \"8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/proc-macro2/1.0.106/download\"],\n strip_prefix = \"proc-macro2-1.0.106\",\n build_file = Label(\"@crates//crates:BUILD.proc-macro2-1.0.106.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__quote-1.0.45\",\n sha256 = \"41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/quote/1.0.45/download\"],\n strip_prefix = \"quote-1.0.45\",\n build_file = Label(\"@crates//crates:BUILD.quote-1.0.45.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__regex-1.12.3\",\n sha256 = \"e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/regex/1.12.3/download\"],\n strip_prefix = \"regex-1.12.3\",\n build_file = Label(\"@crates//crates:BUILD.regex-1.12.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__regex-automata-0.4.14\",\n sha256 = \"6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/regex-automata/0.4.14/download\"],\n strip_prefix = \"regex-automata-0.4.14\",\n build_file = Label(\"@crates//crates:BUILD.regex-automata-0.4.14.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__regex-syntax-0.8.10\",\n sha256 = \"dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/regex-syntax/0.8.10/download\"],\n strip_prefix = \"regex-syntax-0.8.10\",\n build_file = Label(\"@crates//crates:BUILD.regex-syntax-0.8.10.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rustc_version-0.4.1\",\n sha256 = \"cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustc_version/0.4.1/download\"],\n strip_prefix = \"rustc_version-0.4.1\",\n build_file = Label(\"@crates//crates:BUILD.rustc_version-0.4.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ryu-1.0.23\",\n sha256 = \"9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ryu/1.0.23/download\"],\n strip_prefix = \"ryu-1.0.23\",\n build_file = Label(\"@crates//crates:BUILD.ryu-1.0.23.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__semver-1.0.28\",\n sha256 = \"8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/semver/1.0.28/download\"],\n strip_prefix = \"semver-1.0.28\",\n build_file = Label(\"@crates//crates:BUILD.semver-1.0.28.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde-1.0.228\",\n sha256 = \"9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde/1.0.228/download\"],\n strip_prefix = \"serde-1.0.228\",\n build_file = Label(\"@crates//crates:BUILD.serde-1.0.228.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_core-1.0.228\",\n sha256 = \"41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_core/1.0.228/download\"],\n strip_prefix = \"serde_core-1.0.228\",\n build_file = Label(\"@crates//crates:BUILD.serde_core-1.0.228.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_derive-1.0.228\",\n sha256 = \"d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_derive/1.0.228/download\"],\n strip_prefix = \"serde_derive-1.0.228\",\n build_file = Label(\"@crates//crates:BUILD.serde_derive-1.0.228.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_json-1.0.149\",\n sha256 = \"83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_json/1.0.149/download\"],\n strip_prefix = \"serde_json-1.0.149\",\n build_file = Label(\"@crates//crates:BUILD.serde_json-1.0.149.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_yaml-0.9.34-deprecated\",\n sha256 = \"6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_yaml/0.9.34+deprecated/download\"],\n strip_prefix = \"serde_yaml-0.9.34+deprecated\",\n build_file = Label(\"@crates//crates:BUILD.serde_yaml-0.9.34+deprecated.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__sha2-0.10.9\",\n sha256 = \"a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/sha2/0.10.9/download\"],\n strip_prefix = \"sha2-0.10.9\",\n build_file = Label(\"@crates//crates:BUILD.sha2-0.10.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__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.117\",\n sha256 = \"e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/syn/2.0.117/download\"],\n strip_prefix = \"syn-2.0.117\",\n build_file = Label(\"@crates//crates:BUILD.syn-2.0.117.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__termcolor-1.4.1\",\n sha256 = \"06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/termcolor/1.4.1/download\"],\n strip_prefix = \"termcolor-1.4.1\",\n build_file = Label(\"@crates//crates:BUILD.termcolor-1.4.1.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__typenum-1.20.0\",\n sha256 = \"40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/typenum/1.20.0/download\"],\n strip_prefix = \"typenum-1.20.0\",\n build_file = Label(\"@crates//crates:BUILD.typenum-1.20.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ucd-trie-0.1.7\",\n sha256 = \"2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ucd-trie/0.1.7/download\"],\n strip_prefix = \"ucd-trie-0.1.7\",\n build_file = Label(\"@crates//crates:BUILD.ucd-trie-0.1.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__unicode-ident-1.0.24\",\n sha256 = \"e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unicode-ident/1.0.24/download\"],\n strip_prefix = \"unicode-ident-1.0.24\",\n build_file = Label(\"@crates//crates:BUILD.unicode-ident-1.0.24.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__unsafe-libyaml-0.2.11\",\n sha256 = \"673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unsafe-libyaml/0.2.11/download\"],\n strip_prefix = \"unsafe-libyaml-0.2.11\",\n build_file = Label(\"@crates//crates:BUILD.unsafe-libyaml-0.2.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__utf8parse-0.2.2\",\n sha256 = \"06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/utf8parse/0.2.2/download\"],\n strip_prefix = \"utf8parse-0.2.2\",\n build_file = Label(\"@crates//crates:BUILD.utf8parse-0.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__version_check-0.9.5\",\n sha256 = \"0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/version_check/0.9.5/download\"],\n strip_prefix = \"version_check-0.9.5\",\n build_file = Label(\"@crates//crates:BUILD.version_check-0.9.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__winapi-util-0.1.11\",\n sha256 = \"c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/winapi-util/0.1.11/download\"],\n strip_prefix = \"winapi-util-0.1.11\",\n build_file = Label(\"@crates//crates:BUILD.winapi-util-0.1.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-link-0.2.1\",\n sha256 = \"f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-link/0.2.1/download\"],\n strip_prefix = \"windows-link-0.2.1\",\n build_file = Label(\"@crates//crates:BUILD.windows-link-0.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-sys-0.61.2\",\n sha256 = \"ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-sys/0.61.2/download\"],\n strip_prefix = \"windows-sys-0.61.2\",\n build_file = Label(\"@crates//crates:BUILD.windows-sys-0.61.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zmij-1.0.21\",\n sha256 = \"b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zmij/1.0.21/download\"],\n strip_prefix = \"zmij-1.0.21\",\n build_file = Label(\"@crates//crates:BUILD.zmij-1.0.21.bazel\"),\n )\n\n return [\n struct(repo=\"crates__clap-4.6.1\", is_dev_dep = False),\n struct(repo=\"crates__env_logger-0.10.2\", is_dev_dep = False),\n struct(repo=\"crates__flatbuffers-25.12.19\", is_dev_dep = False),\n struct(repo=\"crates__log-0.4.29\", is_dev_dep = False),\n struct(repo=\"crates__once_cell-1.21.4\", is_dev_dep = False),\n struct(repo=\"crates__pest-2.8.6\", is_dev_dep = False),\n struct(repo=\"crates__pest_derive-2.8.6\", is_dev_dep = False),\n struct(repo=\"crates__serde-1.0.228\", is_dev_dep = False),\n struct(repo=\"crates__serde_json-1.0.149\", is_dev_dep = False),\n struct(repo=\"crates__serde_yaml-0.9.34-deprecated\", is_dev_dep = False),\n struct(repo=\"crates__thiserror-1.0.69\", is_dev_dep = False),\n ]\n" + "defs.bzl": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'score_tooling'\n###############################################################################\n\"\"\"\n# `crates_repository` API\n\n- [aliases](#aliases)\n- [crate_deps](#crate_deps)\n- [all_crate_deps](#all_crate_deps)\n- [crate_repositories](#crate_repositories)\n\n\"\"\"\n\nload(\"@bazel_tools//tools/build_defs/repo:git.bzl\", \"new_git_repository\")\nload(\"@bazel_tools//tools/build_defs/repo:http.bzl\", \"http_archive\")\nload(\"@bazel_tools//tools/build_defs/repo:utils.bzl\", \"maybe\")\nload(\"@bazel_skylib//lib:selects.bzl\", \"selects\")\nload(\"@rules_rust//crate_universe/private:local_crate_mirror.bzl\", \"local_crate_mirror\")\n\n###############################################################################\n# MACROS API\n###############################################################################\n\n# An identifier that represent common dependencies (unconditional).\n_COMMON_CONDITION = \"\"\n\ndef _flatten_dependency_maps(all_dependency_maps):\n \"\"\"Flatten a list of dependency maps into one dictionary.\n\n Dependency maps have the following structure:\n\n ```python\n DEPENDENCIES_MAP = {\n # The first key in the map is a Bazel package\n # name of the workspace this file is defined in.\n \"workspace_member_package\": {\n\n # Not all dependencies are supported for all platforms.\n # the condition key is the condition required to be true\n # on the host platform.\n \"condition\": {\n\n # An alias to a crate target. # The label of the crate target the\n # Aliases are only crate names. # package name refers to.\n \"package_name\": \"@full//:label\",\n }\n }\n }\n ```\n\n Args:\n all_dependency_maps (list): A list of dicts as described above\n\n Returns:\n dict: A dictionary as described above\n \"\"\"\n dependencies = {}\n\n for workspace_deps_map in all_dependency_maps:\n for pkg_name, conditional_deps_map in workspace_deps_map.items():\n if pkg_name not in dependencies:\n non_frozen_map = dict()\n for key, values in conditional_deps_map.items():\n non_frozen_map.update({key: dict(values.items())})\n dependencies.setdefault(pkg_name, non_frozen_map)\n continue\n\n for condition, deps_map in conditional_deps_map.items():\n # If the condition has not been recorded, do so and continue\n if condition not in dependencies[pkg_name]:\n dependencies[pkg_name].setdefault(condition, dict(deps_map.items()))\n continue\n\n # Alert on any miss-matched dependencies\n inconsistent_entries = []\n for crate_name, crate_label in deps_map.items():\n existing = dependencies[pkg_name][condition].get(crate_name)\n if existing and existing != crate_label:\n inconsistent_entries.append((crate_name, existing, crate_label))\n dependencies[pkg_name][condition].update({crate_name: crate_label})\n\n return dependencies\n\ndef crate_deps(deps, package_name = None):\n \"\"\"Finds the fully qualified label of the requested crates for the package where this macro is called.\n\n Args:\n deps (list): The desired list of crate targets.\n package_name (str, optional): The package name of the set of dependencies to look up.\n Defaults to `native.package_name()`.\n\n Returns:\n list: A list of labels to generated rust targets (str)\n \"\"\"\n\n if not deps:\n return []\n\n if package_name == None:\n package_name = native.package_name()\n\n # Join both sets of dependencies\n dependencies = _flatten_dependency_maps([\n _NORMAL_DEPENDENCIES,\n _NORMAL_DEV_DEPENDENCIES,\n _PROC_MACRO_DEPENDENCIES,\n _PROC_MACRO_DEV_DEPENDENCIES,\n _BUILD_DEPENDENCIES,\n _BUILD_PROC_MACRO_DEPENDENCIES,\n ]).pop(package_name, {})\n\n # Combine all conditional packages so we can easily index over a flat list\n # TODO: Perhaps this should actually return select statements and maintain\n # the conditionals of the dependencies\n flat_deps = {}\n for deps_set in dependencies.values():\n for crate_name, crate_label in deps_set.items():\n flat_deps.update({crate_name: crate_label})\n\n missing_crates = []\n crate_targets = []\n for crate_target in deps:\n if crate_target not in flat_deps:\n missing_crates.append(crate_target)\n else:\n crate_targets.append(flat_deps[crate_target])\n\n if missing_crates:\n fail(\"Could not find crates `{}` among dependencies of `{}`. Available dependencies were `{}`\".format(\n missing_crates,\n package_name,\n dependencies,\n ))\n\n return crate_targets\n\ndef all_crate_deps(\n normal = False, \n normal_dev = False, \n proc_macro = False, \n proc_macro_dev = False,\n build = False,\n build_proc_macro = False,\n package_name = None):\n \"\"\"Finds the fully qualified label of all requested direct crate dependencies \\\n for the package where this macro is called.\n\n If no parameters are set, all normal dependencies are returned. Setting any one flag will\n otherwise impact the contents of the returned list.\n\n Args:\n normal (bool, optional): If True, normal dependencies are included in the\n output list.\n normal_dev (bool, optional): If True, normal dev dependencies will be\n included in the output list.\n proc_macro (bool, optional): If True, proc_macro dependencies are included\n in the output list.\n proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are\n included in the output list.\n build (bool, optional): If True, build dependencies are included\n in the output list.\n build_proc_macro (bool, optional): If True, build proc_macro dependencies are\n included in the output list.\n package_name (str, optional): The package name of the set of dependencies to look up.\n Defaults to `native.package_name()` when unset.\n\n Returns:\n list: A list of labels to generated rust targets (str)\n \"\"\"\n\n if package_name == None:\n package_name = native.package_name()\n\n # Determine the relevant maps to use\n all_dependency_maps = []\n if normal:\n all_dependency_maps.append(_NORMAL_DEPENDENCIES)\n if normal_dev:\n all_dependency_maps.append(_NORMAL_DEV_DEPENDENCIES)\n if proc_macro:\n all_dependency_maps.append(_PROC_MACRO_DEPENDENCIES)\n if proc_macro_dev:\n all_dependency_maps.append(_PROC_MACRO_DEV_DEPENDENCIES)\n if build:\n all_dependency_maps.append(_BUILD_DEPENDENCIES)\n if build_proc_macro:\n all_dependency_maps.append(_BUILD_PROC_MACRO_DEPENDENCIES)\n\n # Default to always using normal dependencies\n if not all_dependency_maps:\n all_dependency_maps.append(_NORMAL_DEPENDENCIES)\n\n dependencies = _flatten_dependency_maps(all_dependency_maps).pop(package_name, None)\n\n if not dependencies:\n if dependencies == None:\n fail(\"Tried to get all_crate_deps for package \" + package_name + \" but that package had no Cargo.toml file\")\n else:\n return []\n\n crate_deps = list(dependencies.pop(_COMMON_CONDITION, {}).values())\n for condition, deps in dependencies.items():\n crate_deps += selects.with_or({\n tuple(_CONDITIONS[condition]): deps.values(),\n \"//conditions:default\": [],\n })\n\n return crate_deps\n\ndef aliases(\n normal = False,\n normal_dev = False,\n proc_macro = False,\n proc_macro_dev = False,\n build = False,\n build_proc_macro = False,\n package_name = None):\n \"\"\"Produces a map of Crate alias names to their original label\n\n If no dependency kinds are specified, `normal` and `proc_macro` are used by default.\n Setting any one flag will otherwise determine the contents of the returned dict.\n\n Args:\n normal (bool, optional): If True, normal dependencies are included in the\n output list.\n normal_dev (bool, optional): If True, normal dev dependencies will be\n included in the output list..\n proc_macro (bool, optional): If True, proc_macro dependencies are included\n in the output list.\n proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are\n included in the output list.\n build (bool, optional): If True, build dependencies are included\n in the output list.\n build_proc_macro (bool, optional): If True, build proc_macro dependencies are\n included in the output list.\n package_name (str, optional): The package name of the set of dependencies to look up.\n Defaults to `native.package_name()` when unset.\n\n Returns:\n dict: The aliases of all associated packages\n \"\"\"\n if package_name == None:\n package_name = native.package_name()\n\n # Determine the relevant maps to use\n all_aliases_maps = []\n if normal:\n all_aliases_maps.append(_NORMAL_ALIASES)\n if normal_dev:\n all_aliases_maps.append(_NORMAL_DEV_ALIASES)\n if proc_macro:\n all_aliases_maps.append(_PROC_MACRO_ALIASES)\n if proc_macro_dev:\n all_aliases_maps.append(_PROC_MACRO_DEV_ALIASES)\n if build:\n all_aliases_maps.append(_BUILD_ALIASES)\n if build_proc_macro:\n all_aliases_maps.append(_BUILD_PROC_MACRO_ALIASES)\n\n # Default to always using normal aliases\n if not all_aliases_maps:\n all_aliases_maps.append(_NORMAL_ALIASES)\n all_aliases_maps.append(_PROC_MACRO_ALIASES)\n\n aliases = _flatten_dependency_maps(all_aliases_maps).pop(package_name, None)\n\n if not aliases:\n return dict()\n\n common_items = aliases.pop(_COMMON_CONDITION, {}).items()\n\n # If there are only common items in the dictionary, immediately return them\n if not len(aliases.keys()) == 1:\n return dict(common_items)\n\n # Build a single select statement where each conditional has accounted for the\n # common set of aliases.\n crate_aliases = {\"//conditions:default\": dict(common_items)}\n for condition, deps in aliases.items():\n condition_triples = _CONDITIONS[condition]\n for triple in condition_triples:\n if triple in crate_aliases:\n crate_aliases[triple].update(deps)\n else:\n crate_aliases.update({triple: dict(deps.items() + common_items)})\n\n return select(crate_aliases)\n\n###############################################################################\n# WORKSPACE MEMBER DEPS AND ALIASES\n###############################################################################\n\n_NORMAL_DEPENDENCIES = {\n \"\": {\n _COMMON_CONDITION: {\n \"clap\": Label(\"@crates//:clap-4.6.1\"),\n \"env_logger\": Label(\"@crates//:env_logger-0.10.2\"),\n \"flatbuffers\": Label(\"@crates//:flatbuffers-25.12.19\"),\n \"log\": Label(\"@crates//:log-0.4.32\"),\n \"once_cell\": Label(\"@crates//:once_cell-1.21.4\"),\n \"pest\": Label(\"@crates//:pest-2.8.6\"),\n \"serde\": Label(\"@crates//:serde-1.0.228\"),\n \"serde_json\": Label(\"@crates//:serde_json-1.0.150\"),\n \"serde_yaml\": Label(\"@crates//:serde_yaml-0.9.34+deprecated\"),\n \"thiserror\": Label(\"@crates//:thiserror-1.0.69\"),\n },\n },\n}\n\n\n_NORMAL_ALIASES = {\n \"\": {\n _COMMON_CONDITION: {\n },\n },\n}\n\n\n_NORMAL_DEV_DEPENDENCIES = {\n \"\": {\n },\n}\n\n\n_NORMAL_DEV_ALIASES = {\n \"\": {\n },\n}\n\n\n_PROC_MACRO_DEPENDENCIES = {\n \"\": {\n _COMMON_CONDITION: {\n \"pest_derive\": Label(\"@crates//:pest_derive-2.8.6\"),\n },\n },\n}\n\n\n_PROC_MACRO_ALIASES = {\n \"\": {\n },\n}\n\n\n_PROC_MACRO_DEV_DEPENDENCIES = {\n \"\": {\n },\n}\n\n\n_PROC_MACRO_DEV_ALIASES = {\n \"\": {\n },\n}\n\n\n_BUILD_DEPENDENCIES = {\n \"\": {\n },\n}\n\n\n_BUILD_ALIASES = {\n \"\": {\n },\n}\n\n\n_BUILD_PROC_MACRO_DEPENDENCIES = {\n \"\": {\n },\n}\n\n\n_BUILD_PROC_MACRO_ALIASES = {\n \"\": {\n },\n}\n\n\n_CONDITIONS = {\n \"aarch64-apple-darwin\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n \"aarch64-linux-android\": [],\n \"aarch64-unknown-linux-gnu\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\"],\n \"cfg(all(target_arch = \\\"aarch64\\\", target_os = \\\"linux\\\"))\": [\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\"],\n \"cfg(all(target_arch = \\\"aarch64\\\", target_vendor = \\\"apple\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\"],\n \"cfg(all(target_arch = \\\"loongarch64\\\", target_os = \\\"linux\\\"))\": [],\n \"cfg(any())\": [],\n \"cfg(any(target_arch = \\\"aarch64\\\", target_arch = \\\"x86_64\\\", target_arch = \\\"x86\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-pc-windows-msvc\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\"],\n \"cfg(any(unix, target_os = \\\"wasi\\\"))\": [\"@rules_rust//rust/platform:aarch64-apple-darwin\",\"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\",\"@rules_rust//rust/platform:wasm32-wasip1\",\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\",\"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\"],\n \"cfg(target_os = \\\"hermit\\\")\": [],\n \"cfg(windows)\": [\"@rules_rust//rust/platform:x86_64-pc-windows-msvc\"],\n \"wasm32-unknown-unknown\": [\"@rules_rust//rust/platform:wasm32-unknown-unknown\"],\n \"wasm32-wasip1\": [\"@rules_rust//rust/platform:wasm32-wasip1\"],\n \"x86_64-pc-windows-msvc\": [\"@rules_rust//rust/platform:x86_64-pc-windows-msvc\"],\n \"x86_64-unknown-linux-gnu\": [\"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\"],\n \"x86_64-unknown-nixos-gnu\": [\"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\"],\n}\n\n###############################################################################\n\ndef crate_repositories():\n \"\"\"A macro for defining repositories for all generated crates.\n\n Returns:\n A list of repos visible to the module through the module extension.\n \"\"\"\n maybe(\n http_archive,\n name = \"crates__aho-corasick-1.1.4\",\n sha256 = \"ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/aho-corasick/1.1.4/download\"],\n strip_prefix = \"aho-corasick-1.1.4\",\n build_file = Label(\"@crates//crates:BUILD.aho-corasick-1.1.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__anstream-1.0.0\",\n sha256 = \"824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstream/1.0.0/download\"],\n strip_prefix = \"anstream-1.0.0\",\n build_file = Label(\"@crates//crates:BUILD.anstream-1.0.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__anstyle-1.0.14\",\n sha256 = \"940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstyle/1.0.14/download\"],\n strip_prefix = \"anstyle-1.0.14\",\n build_file = Label(\"@crates//crates:BUILD.anstyle-1.0.14.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__anstyle-parse-1.0.0\",\n sha256 = \"52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstyle-parse/1.0.0/download\"],\n strip_prefix = \"anstyle-parse-1.0.0\",\n build_file = Label(\"@crates//crates:BUILD.anstyle-parse-1.0.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__anstyle-query-1.1.5\",\n sha256 = \"40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstyle-query/1.1.5/download\"],\n strip_prefix = \"anstyle-query-1.1.5\",\n build_file = Label(\"@crates//crates:BUILD.anstyle-query-1.1.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__anstyle-wincon-3.0.11\",\n sha256 = \"291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/anstyle-wincon/3.0.11/download\"],\n strip_prefix = \"anstyle-wincon-3.0.11\",\n build_file = Label(\"@crates//crates:BUILD.anstyle-wincon-3.0.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__bitflags-2.12.1\",\n sha256 = \"84d7ced0ae9557296835c32bf1b1e02b44c746701f898460fb000d7eaa84f00a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/bitflags/2.12.1/download\"],\n strip_prefix = \"bitflags-2.12.1\",\n build_file = Label(\"@crates//crates:BUILD.bitflags-2.12.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__block-buffer-0.10.4\",\n sha256 = \"3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/block-buffer/0.10.4/download\"],\n strip_prefix = \"block-buffer-0.10.4\",\n build_file = Label(\"@crates//crates:BUILD.block-buffer-0.10.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__cfg-if-1.0.4\",\n sha256 = \"9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cfg-if/1.0.4/download\"],\n strip_prefix = \"cfg-if-1.0.4\",\n build_file = Label(\"@crates//crates:BUILD.cfg-if-1.0.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__clap-4.6.1\",\n sha256 = \"1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap/4.6.1/download\"],\n strip_prefix = \"clap-4.6.1\",\n build_file = Label(\"@crates//crates:BUILD.clap-4.6.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__clap_builder-4.6.0\",\n sha256 = \"714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap_builder/4.6.0/download\"],\n strip_prefix = \"clap_builder-4.6.0\",\n build_file = Label(\"@crates//crates:BUILD.clap_builder-4.6.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__clap_derive-4.6.1\",\n sha256 = \"f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap_derive/4.6.1/download\"],\n strip_prefix = \"clap_derive-4.6.1\",\n build_file = Label(\"@crates//crates:BUILD.clap_derive-4.6.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__clap_lex-1.1.0\",\n sha256 = \"c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/clap_lex/1.1.0/download\"],\n strip_prefix = \"clap_lex-1.1.0\",\n build_file = Label(\"@crates//crates:BUILD.clap_lex-1.1.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__colorchoice-1.0.5\",\n sha256 = \"1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/colorchoice/1.0.5/download\"],\n strip_prefix = \"colorchoice-1.0.5\",\n build_file = Label(\"@crates//crates:BUILD.colorchoice-1.0.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__cpufeatures-0.2.17\",\n sha256 = \"59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/cpufeatures/0.2.17/download\"],\n strip_prefix = \"cpufeatures-0.2.17\",\n build_file = Label(\"@crates//crates:BUILD.cpufeatures-0.2.17.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__crypto-common-0.1.7\",\n sha256 = \"78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/crypto-common/0.1.7/download\"],\n strip_prefix = \"crypto-common-0.1.7\",\n build_file = Label(\"@crates//crates:BUILD.crypto-common-0.1.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__digest-0.10.7\",\n sha256 = \"9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/digest/0.10.7/download\"],\n strip_prefix = \"digest-0.10.7\",\n build_file = Label(\"@crates//crates:BUILD.digest-0.10.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__env_logger-0.10.2\",\n sha256 = \"4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/env_logger/0.10.2/download\"],\n strip_prefix = \"env_logger-0.10.2\",\n build_file = Label(\"@crates//crates:BUILD.env_logger-0.10.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__equivalent-1.0.2\",\n sha256 = \"877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/equivalent/1.0.2/download\"],\n strip_prefix = \"equivalent-1.0.2\",\n build_file = Label(\"@crates//crates:BUILD.equivalent-1.0.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__flatbuffers-25.12.19\",\n sha256 = \"35f6839d7b3b98adde531effaf34f0c2badc6f4735d26fe74709d8e513a96ef3\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/flatbuffers/25.12.19/download\"],\n strip_prefix = \"flatbuffers-25.12.19\",\n build_file = Label(\"@crates//crates:BUILD.flatbuffers-25.12.19.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__generic-array-0.14.7\",\n sha256 = \"85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/generic-array/0.14.7/download\"],\n strip_prefix = \"generic-array-0.14.7\",\n build_file = Label(\"@crates//crates:BUILD.generic-array-0.14.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__hashbrown-0.17.1\",\n sha256 = \"ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hashbrown/0.17.1/download\"],\n strip_prefix = \"hashbrown-0.17.1\",\n build_file = Label(\"@crates//crates:BUILD.hashbrown-0.17.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__heck-0.5.0\",\n sha256 = \"2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/heck/0.5.0/download\"],\n strip_prefix = \"heck-0.5.0\",\n build_file = Label(\"@crates//crates:BUILD.heck-0.5.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__hermit-abi-0.5.2\",\n sha256 = \"fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/hermit-abi/0.5.2/download\"],\n strip_prefix = \"hermit-abi-0.5.2\",\n build_file = Label(\"@crates//crates:BUILD.hermit-abi-0.5.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__humantime-2.3.0\",\n sha256 = \"135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/humantime/2.3.0/download\"],\n strip_prefix = \"humantime-2.3.0\",\n build_file = Label(\"@crates//crates:BUILD.humantime-2.3.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__indexmap-2.14.0\",\n sha256 = \"d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/indexmap/2.14.0/download\"],\n strip_prefix = \"indexmap-2.14.0\",\n build_file = Label(\"@crates//crates:BUILD.indexmap-2.14.0.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__is-terminal-0.4.17\",\n sha256 = \"3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/is-terminal/0.4.17/download\"],\n strip_prefix = \"is-terminal-0.4.17\",\n build_file = Label(\"@crates//crates:BUILD.is-terminal-0.4.17.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__is_terminal_polyfill-1.70.2\",\n sha256 = \"a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/is_terminal_polyfill/1.70.2/download\"],\n strip_prefix = \"is_terminal_polyfill-1.70.2\",\n build_file = Label(\"@crates//crates:BUILD.is_terminal_polyfill-1.70.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__itoa-1.0.18\",\n sha256 = \"8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/itoa/1.0.18/download\"],\n strip_prefix = \"itoa-1.0.18\",\n build_file = Label(\"@crates//crates:BUILD.itoa-1.0.18.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__libc-0.2.186\",\n sha256 = \"68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/libc/0.2.186/download\"],\n strip_prefix = \"libc-0.2.186\",\n build_file = Label(\"@crates//crates:BUILD.libc-0.2.186.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__log-0.4.32\",\n sha256 = \"953f07c43838f8e6f9758cab68bf5bed85465e7587ebe0b823f1bcd81978ad3a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/log/0.4.32/download\"],\n strip_prefix = \"log-0.4.32\",\n build_file = Label(\"@crates//crates:BUILD.log-0.4.32.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__memchr-2.8.1\",\n sha256 = \"6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/memchr/2.8.1/download\"],\n strip_prefix = \"memchr-2.8.1\",\n build_file = Label(\"@crates//crates:BUILD.memchr-2.8.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__once_cell-1.21.4\",\n sha256 = \"9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/once_cell/1.21.4/download\"],\n strip_prefix = \"once_cell-1.21.4\",\n build_file = Label(\"@crates//crates:BUILD.once_cell-1.21.4.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__once_cell_polyfill-1.70.2\",\n sha256 = \"384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/once_cell_polyfill/1.70.2/download\"],\n strip_prefix = \"once_cell_polyfill-1.70.2\",\n build_file = Label(\"@crates//crates:BUILD.once_cell_polyfill-1.70.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__pest-2.8.6\",\n sha256 = \"e0848c601009d37dfa3430c4666e147e49cdcf1b92ecd3e63657d8a5f19da662\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pest/2.8.6/download\"],\n strip_prefix = \"pest-2.8.6\",\n build_file = Label(\"@crates//crates:BUILD.pest-2.8.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__pest_derive-2.8.6\",\n sha256 = \"11f486f1ea21e6c10ed15d5a7c77165d0ee443402f0780849d1768e7d9d6fe77\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pest_derive/2.8.6/download\"],\n strip_prefix = \"pest_derive-2.8.6\",\n build_file = Label(\"@crates//crates:BUILD.pest_derive-2.8.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__pest_generator-2.8.6\",\n sha256 = \"8040c4647b13b210a963c1ed407c1ff4fdfa01c31d6d2a098218702e6664f94f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pest_generator/2.8.6/download\"],\n strip_prefix = \"pest_generator-2.8.6\",\n build_file = Label(\"@crates//crates:BUILD.pest_generator-2.8.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__pest_meta-2.8.6\",\n sha256 = \"89815c69d36021a140146f26659a81d6c2afa33d216d736dd4be5381a7362220\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/pest_meta/2.8.6/download\"],\n strip_prefix = \"pest_meta-2.8.6\",\n build_file = Label(\"@crates//crates:BUILD.pest_meta-2.8.6.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__proc-macro2-1.0.106\",\n sha256 = \"8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/proc-macro2/1.0.106/download\"],\n strip_prefix = \"proc-macro2-1.0.106\",\n build_file = Label(\"@crates//crates:BUILD.proc-macro2-1.0.106.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__quote-1.0.45\",\n sha256 = \"41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/quote/1.0.45/download\"],\n strip_prefix = \"quote-1.0.45\",\n build_file = Label(\"@crates//crates:BUILD.quote-1.0.45.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__regex-1.12.3\",\n sha256 = \"e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/regex/1.12.3/download\"],\n strip_prefix = \"regex-1.12.3\",\n build_file = Label(\"@crates//crates:BUILD.regex-1.12.3.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__regex-automata-0.4.14\",\n sha256 = \"6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/regex-automata/0.4.14/download\"],\n strip_prefix = \"regex-automata-0.4.14\",\n build_file = Label(\"@crates//crates:BUILD.regex-automata-0.4.14.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__regex-syntax-0.8.10\",\n sha256 = \"dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/regex-syntax/0.8.10/download\"],\n strip_prefix = \"regex-syntax-0.8.10\",\n build_file = Label(\"@crates//crates:BUILD.regex-syntax-0.8.10.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__rustc_version-0.4.1\",\n sha256 = \"cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/rustc_version/0.4.1/download\"],\n strip_prefix = \"rustc_version-0.4.1\",\n build_file = Label(\"@crates//crates:BUILD.rustc_version-0.4.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ryu-1.0.23\",\n sha256 = \"9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ryu/1.0.23/download\"],\n strip_prefix = \"ryu-1.0.23\",\n build_file = Label(\"@crates//crates:BUILD.ryu-1.0.23.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__semver-1.0.28\",\n sha256 = \"8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/semver/1.0.28/download\"],\n strip_prefix = \"semver-1.0.28\",\n build_file = Label(\"@crates//crates:BUILD.semver-1.0.28.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde-1.0.228\",\n sha256 = \"9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde/1.0.228/download\"],\n strip_prefix = \"serde-1.0.228\",\n build_file = Label(\"@crates//crates:BUILD.serde-1.0.228.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_core-1.0.228\",\n sha256 = \"41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_core/1.0.228/download\"],\n strip_prefix = \"serde_core-1.0.228\",\n build_file = Label(\"@crates//crates:BUILD.serde_core-1.0.228.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_derive-1.0.228\",\n sha256 = \"d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_derive/1.0.228/download\"],\n strip_prefix = \"serde_derive-1.0.228\",\n build_file = Label(\"@crates//crates:BUILD.serde_derive-1.0.228.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_json-1.0.150\",\n sha256 = \"e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_json/1.0.150/download\"],\n strip_prefix = \"serde_json-1.0.150\",\n build_file = Label(\"@crates//crates:BUILD.serde_json-1.0.150.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__serde_yaml-0.9.34-deprecated\",\n sha256 = \"6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/serde_yaml/0.9.34+deprecated/download\"],\n strip_prefix = \"serde_yaml-0.9.34+deprecated\",\n build_file = Label(\"@crates//crates:BUILD.serde_yaml-0.9.34+deprecated.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__sha2-0.10.9\",\n sha256 = \"a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/sha2/0.10.9/download\"],\n strip_prefix = \"sha2-0.10.9\",\n build_file = Label(\"@crates//crates:BUILD.sha2-0.10.9.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__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.117\",\n sha256 = \"e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/syn/2.0.117/download\"],\n strip_prefix = \"syn-2.0.117\",\n build_file = Label(\"@crates//crates:BUILD.syn-2.0.117.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__termcolor-1.4.1\",\n sha256 = \"06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/termcolor/1.4.1/download\"],\n strip_prefix = \"termcolor-1.4.1\",\n build_file = Label(\"@crates//crates:BUILD.termcolor-1.4.1.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__typenum-1.20.1\",\n sha256 = \"b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/typenum/1.20.1/download\"],\n strip_prefix = \"typenum-1.20.1\",\n build_file = Label(\"@crates//crates:BUILD.typenum-1.20.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__ucd-trie-0.1.7\",\n sha256 = \"2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/ucd-trie/0.1.7/download\"],\n strip_prefix = \"ucd-trie-0.1.7\",\n build_file = Label(\"@crates//crates:BUILD.ucd-trie-0.1.7.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__unicode-ident-1.0.24\",\n sha256 = \"e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unicode-ident/1.0.24/download\"],\n strip_prefix = \"unicode-ident-1.0.24\",\n build_file = Label(\"@crates//crates:BUILD.unicode-ident-1.0.24.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__unsafe-libyaml-0.2.11\",\n sha256 = \"673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/unsafe-libyaml/0.2.11/download\"],\n strip_prefix = \"unsafe-libyaml-0.2.11\",\n build_file = Label(\"@crates//crates:BUILD.unsafe-libyaml-0.2.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__utf8parse-0.2.2\",\n sha256 = \"06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/utf8parse/0.2.2/download\"],\n strip_prefix = \"utf8parse-0.2.2\",\n build_file = Label(\"@crates//crates:BUILD.utf8parse-0.2.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__version_check-0.9.5\",\n sha256 = \"0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/version_check/0.9.5/download\"],\n strip_prefix = \"version_check-0.9.5\",\n build_file = Label(\"@crates//crates:BUILD.version_check-0.9.5.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__winapi-util-0.1.11\",\n sha256 = \"c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/winapi-util/0.1.11/download\"],\n strip_prefix = \"winapi-util-0.1.11\",\n build_file = Label(\"@crates//crates:BUILD.winapi-util-0.1.11.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-link-0.2.1\",\n sha256 = \"f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-link/0.2.1/download\"],\n strip_prefix = \"windows-link-0.2.1\",\n build_file = Label(\"@crates//crates:BUILD.windows-link-0.2.1.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__windows-sys-0.61.2\",\n sha256 = \"ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/windows-sys/0.61.2/download\"],\n strip_prefix = \"windows-sys-0.61.2\",\n build_file = Label(\"@crates//crates:BUILD.windows-sys-0.61.2.bazel\"),\n )\n\n maybe(\n http_archive,\n name = \"crates__zmij-1.0.21\",\n sha256 = \"b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa\",\n type = \"tar.gz\",\n urls = [\"https://static.crates.io/crates/zmij/1.0.21/download\"],\n strip_prefix = \"zmij-1.0.21\",\n build_file = Label(\"@crates//crates:BUILD.zmij-1.0.21.bazel\"),\n )\n\n return [\n struct(repo=\"crates__clap-4.6.1\", is_dev_dep = False),\n struct(repo=\"crates__env_logger-0.10.2\", is_dev_dep = False),\n struct(repo=\"crates__flatbuffers-25.12.19\", is_dev_dep = False),\n struct(repo=\"crates__log-0.4.32\", is_dev_dep = False),\n struct(repo=\"crates__once_cell-1.21.4\", is_dev_dep = False),\n struct(repo=\"crates__pest-2.8.6\", is_dev_dep = False),\n struct(repo=\"crates__pest_derive-2.8.6\", is_dev_dep = False),\n struct(repo=\"crates__serde-1.0.228\", is_dev_dep = False),\n struct(repo=\"crates__serde_json-1.0.150\", is_dev_dep = False),\n struct(repo=\"crates__serde_yaml-0.9.34-deprecated\", is_dev_dep = False),\n struct(repo=\"crates__thiserror-1.0.69\", is_dev_dep = False),\n ]\n" } } }, @@ -2653,7 +7874,7 @@ "https://static.crates.io/crates/aho-corasick/1.1.4/download" ], "strip_prefix": "aho-corasick-1.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 'score_tooling'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"aho_corasick\",\n deps = [\n \"@crates__memchr-2.8.0//: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 \"perf-literal\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=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:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.1.4\",\n)\n" + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'score_tooling'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"aho_corasick\",\n deps = [\n \"@crates__memchr-2.8.1//: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 \"perf-literal\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=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:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.1.4\",\n)\n" } }, "crates__anstream-1.0.0": { @@ -2736,20 +7957,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 'score_tooling'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"anstyle_wincon\",\n deps = [\n \"@crates__anstyle-1.0.14//:anstyle\",\n ] + select({\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [\n \"@crates__once_cell_polyfill-1.70.2//:once_cell_polyfill\", # cfg(windows)\n \"@crates__windows-sys-0.61.2//:windows_sys\", # cfg(windows)\n ],\n \"//conditions:default\": [],\n }),\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=anstyle-wincon\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"3.0.11\",\n)\n" } }, - "crates__bitflags-2.11.1": { + "crates__bitflags-2.12.1": { "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", "attributes": { "patch_args": [], "patch_tool": "", "patches": [], "remote_patch_strip": 1, - "sha256": "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3", + "sha256": "84d7ced0ae9557296835c32bf1b1e02b44c746701f898460fb000d7eaa84f00a", "type": "tar.gz", "urls": [ - "https://static.crates.io/crates/bitflags/2.11.1/download" + "https://static.crates.io/crates/bitflags/2.12.1/download" ], - "strip_prefix": "bitflags-2.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 'score_tooling'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"bitflags\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=bitflags\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"2.11.1\",\n)\n" + "strip_prefix": "bitflags-2.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 'score_tooling'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"bitflags\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=bitflags\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"2.12.1\",\n)\n" } }, "crates__block-buffer-0.10.4": { @@ -2893,7 +8114,7 @@ "https://static.crates.io/crates/crypto-common/0.1.7/download" ], "strip_prefix": "crypto-common-0.1.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 'score_tooling'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"crypto_common\",\n deps = [\n \"@crates__generic-array-0.14.7//:generic_array\",\n \"@crates__typenum-1.20.0//:typenum\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=crypto-common\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.7\",\n)\n" + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'score_tooling'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"crypto_common\",\n deps = [\n \"@crates__generic-array-0.14.7//:generic_array\",\n \"@crates__typenum-1.20.1//:typenum\",\n ],\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=crypto-common\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.1.7\",\n)\n" } }, "crates__digest-0.10.7": { @@ -2925,7 +8146,7 @@ "https://static.crates.io/crates/env_logger/0.10.2/download" ], "strip_prefix": "env_logger-0.10.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 'score_tooling'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"env_logger\",\n deps = [\n \"@crates__humantime-2.3.0//:humantime\",\n \"@crates__is-terminal-0.4.17//:is_terminal\",\n \"@crates__log-0.4.29//:log\",\n \"@crates__regex-1.12.3//:regex\",\n \"@crates__termcolor-1.4.1//:termcolor\",\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 \"auto-color\",\n \"color\",\n \"default\",\n \"humantime\",\n \"regex\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=env_logger\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.10.2\",\n)\n" + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'score_tooling'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"env_logger\",\n deps = [\n \"@crates__humantime-2.3.0//:humantime\",\n \"@crates__is-terminal-0.4.17//:is_terminal\",\n \"@crates__log-0.4.32//:log\",\n \"@crates__regex-1.12.3//:regex\",\n \"@crates__termcolor-1.4.1//:termcolor\",\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 \"auto-color\",\n \"color\",\n \"default\",\n \"humantime\",\n \"regex\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=env_logger\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.10.2\",\n)\n" } }, "crates__equivalent-1.0.2": { @@ -2957,7 +8178,7 @@ "https://static.crates.io/crates/flatbuffers/25.12.19/download" ], "strip_prefix": "flatbuffers-25.12.19", - "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 'score_tooling'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"flatbuffers\",\n deps = [\n \"@crates__bitflags-2.11.1//:bitflags\",\n \"@crates__flatbuffers-25.12.19//: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 = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=flatbuffers\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"25.12.19\",\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 deps = [\n \"@crates__rustc_version-0.4.1//:rustc_version\",\n ],\n edition = \"2018\",\n pkg_name = \"flatbuffers\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=flatbuffers\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"25.12.19\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'score_tooling'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"flatbuffers\",\n deps = [\n \"@crates__bitflags-2.12.1//:bitflags\",\n \"@crates__flatbuffers-25.12.19//: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 = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=flatbuffers\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"25.12.19\",\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 deps = [\n \"@crates__rustc_version-0.4.1//:rustc_version\",\n ],\n edition = \"2018\",\n pkg_name = \"flatbuffers\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=flatbuffers\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"25.12.19\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" } }, "crates__generic-array-0.14.7": { @@ -2973,23 +8194,23 @@ "https://static.crates.io/crates/generic-array/0.14.7/download" ], "strip_prefix": "generic-array-0.14.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 'score_tooling'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"generic_array\",\n deps = [\n \"@crates__generic-array-0.14.7//:build_script_build\",\n \"@crates__typenum-1.20.0//:typenum\",\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 \"more_lengths\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2015\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=generic-array\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.14.7\",\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 \"more_lengths\",\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 deps = [\n \"@crates__version_check-0.9.5//:version_check\",\n ],\n edition = \"2015\",\n pkg_name = \"generic-array\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=generic-array\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.14.7\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'score_tooling'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"generic_array\",\n deps = [\n \"@crates__generic-array-0.14.7//:build_script_build\",\n \"@crates__typenum-1.20.1//:typenum\",\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 \"more_lengths\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2015\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=generic-array\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.14.7\",\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 \"more_lengths\",\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 deps = [\n \"@crates__version_check-0.9.5//:version_check\",\n ],\n edition = \"2015\",\n pkg_name = \"generic-array\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=generic-array\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.14.7\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" } }, - "crates__hashbrown-0.17.0": { + "crates__hashbrown-0.17.1": { "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", "attributes": { "patch_args": [], "patch_tool": "", "patches": [], "remote_patch_strip": 1, - "sha256": "4f467dd6dccf739c208452f8014c75c18bb8301b050ad1cfb27153803edb0f51", + "sha256": "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a", "type": "tar.gz", "urls": [ - "https://static.crates.io/crates/hashbrown/0.17.0/download" + "https://static.crates.io/crates/hashbrown/0.17.1/download" ], - "strip_prefix": "hashbrown-0.17.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 'score_tooling'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"hashbrown\",\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 = \"2024\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=hashbrown\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.17.0\",\n)\n" + "strip_prefix": "hashbrown-0.17.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 'score_tooling'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"hashbrown\",\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 = \"2024\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=hashbrown\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.17.1\",\n)\n" } }, "crates__heck-0.5.0": { @@ -3053,7 +8274,7 @@ "https://static.crates.io/crates/indexmap/2.14.0/download" ], "strip_prefix": "indexmap-2.14.0", - "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'score_tooling'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"indexmap\",\n deps = [\n \"@crates__equivalent-1.0.2//:equivalent\",\n \"@crates__hashbrown-0.17.0//:hashbrown\",\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 = \"2024\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=indexmap\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"2.14.0\",\n)\n" + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'score_tooling'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"indexmap\",\n deps = [\n \"@crates__equivalent-1.0.2//:equivalent\",\n \"@crates__hashbrown-0.17.1//:hashbrown\",\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 = \"2024\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=indexmap\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"2.14.0\",\n)\n" } }, "crates__is-terminal-0.4.17": { @@ -3120,36 +8341,36 @@ "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 'score_tooling'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"libc\",\n deps = [\n \"@crates__libc-0.2.186//: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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=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:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.2.186\",\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 = \"libc\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=libc\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"0.2.186\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" } }, - "crates__log-0.4.29": { + "crates__log-0.4.32": { "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", "attributes": { "patch_args": [], "patch_tool": "", "patches": [], "remote_patch_strip": 1, - "sha256": "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897", + "sha256": "953f07c43838f8e6f9758cab68bf5bed85465e7587ebe0b823f1bcd81978ad3a", "type": "tar.gz", "urls": [ - "https://static.crates.io/crates/log/0.4.29/download" + "https://static.crates.io/crates/log/0.4.32/download" ], - "strip_prefix": "log-0.4.29", - "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 'score_tooling'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"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_features = [\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=log\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.4.29\",\n)\n" + "strip_prefix": "log-0.4.32", + "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 'score_tooling'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"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_features = [\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=log\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.4.32\",\n)\n" } }, - "crates__memchr-2.8.0": { + "crates__memchr-2.8.1": { "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", "attributes": { "patch_args": [], "patch_tool": "", "patches": [], "remote_patch_strip": 1, - "sha256": "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79", + "sha256": "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8", "type": "tar.gz", "urls": [ - "https://static.crates.io/crates/memchr/2.8.0/download" + "https://static.crates.io/crates/memchr/2.8.1/download" ], - "strip_prefix": "memchr-2.8.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 'score_tooling'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"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 \"default\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=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:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"2.8.0\",\n)\n" + "strip_prefix": "memchr-2.8.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 'score_tooling'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"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 \"default\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=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:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"2.8.1\",\n)\n" } }, "crates__once_cell-1.21.4": { @@ -3197,7 +8418,7 @@ "https://static.crates.io/crates/pest/2.8.6/download" ], "strip_prefix": "pest-2.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 'score_tooling'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"pest\",\n deps = [\n \"@crates__memchr-2.8.0//:memchr\",\n \"@crates__ucd-trie-0.1.7//:ucd_trie\",\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 \"memchr\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=pest\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"2.8.6\",\n)\n" + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'score_tooling'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"pest\",\n deps = [\n \"@crates__memchr-2.8.1//:memchr\",\n \"@crates__ucd-trie-0.1.7//:ucd_trie\",\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 \"memchr\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=pest\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"2.8.6\",\n)\n" } }, "crates__pest_derive-2.8.6": { @@ -3293,7 +8514,7 @@ "https://static.crates.io/crates/regex/1.12.3/download" ], "strip_prefix": "regex-1.12.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 'score_tooling'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"regex\",\n deps = [\n \"@crates__aho-corasick-1.1.4//:aho_corasick\",\n \"@crates__memchr-2.8.0//:memchr\",\n \"@crates__regex-automata-0.4.14//:regex_automata\",\n \"@crates__regex-syntax-0.8.10//: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 \"perf\",\n \"perf-backtrack\",\n \"perf-cache\",\n \"perf-dfa\",\n \"perf-inline\",\n \"perf-literal\",\n \"perf-onepass\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=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:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.12.3\",\n)\n" + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'score_tooling'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"regex\",\n deps = [\n \"@crates__aho-corasick-1.1.4//:aho_corasick\",\n \"@crates__memchr-2.8.1//:memchr\",\n \"@crates__regex-automata-0.4.14//:regex_automata\",\n \"@crates__regex-syntax-0.8.10//: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 \"perf\",\n \"perf-backtrack\",\n \"perf-cache\",\n \"perf-dfa\",\n \"perf-inline\",\n \"perf-literal\",\n \"perf-onepass\",\n \"std\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=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:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.12.3\",\n)\n" } }, "crates__regex-automata-0.4.14": { @@ -3309,7 +8530,7 @@ "https://static.crates.io/crates/regex-automata/0.4.14/download" ], "strip_prefix": "regex-automata-0.4.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 'score_tooling'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"regex_automata\",\n deps = [\n \"@crates__aho-corasick-1.1.4//:aho_corasick\",\n \"@crates__memchr-2.8.0//:memchr\",\n \"@crates__regex-syntax-0.8.10//: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-onepass\",\n \"hybrid\",\n \"meta\",\n \"nfa-backtrack\",\n \"nfa-pikevm\",\n \"nfa-thompson\",\n \"perf-inline\",\n \"perf-literal\",\n \"perf-literal-multisubstring\",\n \"perf-literal-substring\",\n \"std\",\n \"syntax\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=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:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.4.14\",\n)\n" + "build_file_content": "###############################################################################\n# @generated\n# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To \n# regenerate this file, run the following:\n#\n# bazel mod show_repo 'score_tooling'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"regex_automata\",\n deps = [\n \"@crates__aho-corasick-1.1.4//:aho_corasick\",\n \"@crates__memchr-2.8.1//:memchr\",\n \"@crates__regex-syntax-0.8.10//: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-onepass\",\n \"hybrid\",\n \"meta\",\n \"nfa-backtrack\",\n \"nfa-pikevm\",\n \"nfa-thompson\",\n \"perf-inline\",\n \"perf-literal\",\n \"perf-literal-multisubstring\",\n \"perf-literal-substring\",\n \"std\",\n \"syntax\",\n ],\n crate_root = \"src/lib.rs\",\n edition = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=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:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"0.4.14\",\n)\n" } }, "crates__regex-syntax-0.8.10": { @@ -3424,20 +8645,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 'score_tooling'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_proc_macro\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_proc_macro(\n name = \"serde_derive\",\n deps = [\n \"@crates__proc-macro2-1.0.106//:proc_macro2\",\n \"@crates__quote-1.0.45//:quote\",\n \"@crates__syn-2.0.117//: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 = \"2021\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=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:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.228\",\n)\n" } }, - "crates__serde_json-1.0.149": { + "crates__serde_json-1.0.150": { "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", "attributes": { "patch_args": [], "patch_tool": "", "patches": [], "remote_patch_strip": 1, - "sha256": "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86", + "sha256": "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9", "type": "tar.gz", "urls": [ - "https://static.crates.io/crates/serde_json/1.0.149/download" + "https://static.crates.io/crates/serde_json/1.0.150/download" ], - "strip_prefix": "serde_json-1.0.149", - "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 'score_tooling'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"serde_json\",\n deps = [\n \"@crates__itoa-1.0.18//:itoa\",\n \"@crates__memchr-2.8.0//:memchr\",\n \"@crates__serde_core-1.0.228//:serde_core\",\n \"@crates__serde_json-1.0.149//:build_script_build\",\n \"@crates__zmij-1.0.21//:zmij\",\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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=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:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.149\",\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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=serde_json\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"1.0.149\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" + "strip_prefix": "serde_json-1.0.150", + "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 'score_tooling'\n###############################################################################\n\nload(\n \"@rules_rust//cargo:defs.bzl\",\n \"cargo_build_script\",\n \"cargo_toml_env_vars\",\n)\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"serde_json\",\n deps = [\n \"@crates__itoa-1.0.18//:itoa\",\n \"@crates__memchr-2.8.1//:memchr\",\n \"@crates__serde_core-1.0.228//:serde_core\",\n \"@crates__serde_json-1.0.150//:build_script_build\",\n \"@crates__zmij-1.0.21//:zmij\",\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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=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:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.150\",\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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=serde_json\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n version = \"1.0.150\",\n visibility = [\"//visibility:private\"],\n)\n\nalias(\n name = \"build_script_build\",\n actual = \":_bs\",\n tags = [\"manual\"],\n)\n" } }, "crates__serde_yaml-0.9.34-deprecated": { @@ -3552,20 +8773,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 'score_tooling'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_proc_macro\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_proc_macro(\n name = \"thiserror_impl\",\n deps = [\n \"@crates__proc-macro2-1.0.106//:proc_macro2\",\n \"@crates__quote-1.0.45//:quote\",\n \"@crates__syn-2.0.117//: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_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=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:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.0.69\",\n)\n" } }, - "crates__typenum-1.20.0": { + "crates__typenum-1.20.1": { "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", "attributes": { "patch_args": [], "patch_tool": "", "patches": [], "remote_patch_strip": 1, - "sha256": "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de", + "sha256": "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20", "type": "tar.gz", "urls": [ - "https://static.crates.io/crates/typenum/1.20.0/download" + "https://static.crates.io/crates/typenum/1.20.1/download" ], - "strip_prefix": "typenum-1.20.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 'score_tooling'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"typenum\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=typenum\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.20.0\",\n)\n" + "strip_prefix": "typenum-1.20.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 'score_tooling'\n###############################################################################\n\nload(\"@rules_rust//cargo:defs.bzl\", \"cargo_toml_env_vars\")\n\nload(\"@rules_rust//rust:defs.bzl\", \"rust_library\")\n\n# buildifier: disable=bzl-visibility\nload(\"@rules_rust//crate_universe/private:selects.bzl\", \"selects\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\ncargo_toml_env_vars(\n name = \"cargo_toml_env_vars\",\n src = \"Cargo.toml\",\n)\n\nrust_library(\n name = \"typenum\",\n compile_data = glob(\n allow_empty = True,\n include = [\"**\"],\n exclude = [\n \"**/* *\",\n \".tmp_git_root/**/*\",\n \"BUILD\",\n \"BUILD.bazel\",\n \"WORKSPACE\",\n \"WORKSPACE.bazel\",\n ],\n ),\n crate_root = \"src/lib.rs\",\n edition = \"2018\",\n rustc_env_files = [\n \":cargo_toml_env_vars\",\n ],\n rustc_flags = [\n \"--cap-lints=allow\",\n ],\n srcs = glob(\n allow_empty = True,\n include = [\"**/*.rs\"],\n ),\n tags = [\n \"cargo-bazel\",\n \"crate-name=typenum\",\n \"manual\",\n \"noclippy\",\n \"norustfmt\",\n ],\n target_compatible_with = select({\n \"@rules_rust//rust/platform:aarch64-apple-darwin\": [],\n \"@rules_rust//rust/platform:aarch64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:wasm32-unknown-unknown\": [],\n \"@rules_rust//rust/platform:wasm32-wasip1\": [],\n \"@rules_rust//rust/platform:x86_64-pc-windows-msvc\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-linux-gnu\": [],\n \"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu\": [],\n \"//conditions:default\": [\"@platforms//:incompatible\"],\n }),\n version = \"1.20.1\",\n)\n" } }, "crates__ucd-trie-0.1.7": { @@ -3763,6 +8984,11 @@ "bazel_tools", "bazel_tools" ], + [ + "rules_rust+", + "cargo_bazel_bootstrap", + "rules_rust++cu_nr+cargo_bazel_bootstrap" + ], [ "rules_rust+", "rules_cc", @@ -3778,8 +9004,8 @@ }, "@@rules_rust+//crate_universe/private:internal_extensions.bzl%cu_nr": { "general": { - "bzlTransitiveDigest": "Tm04374rhma9UVALzvYvKq7d51N3TL3eeCi+dnYas9k=", - "usagesDigest": "dQ7SQZ7uSSL3vVKSMBKRxKJUm9OVrZZA+S1/QQfT570=", + "bzlTransitiveDigest": "SARfr1j/zCzNYEuzjBZS8DicQ7CZquhnr9qgpILzraY=", + "usagesDigest": "10qWRrPYM+vySc8dX7h/IfhuDlEi1kSxRX4NRxICRFY=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -3905,6 +9131,11 @@ "bazel_tools", "bazel_tools" ], + [ + "rules_rust+", + "cargo_bazel_bootstrap", + "rules_rust++cu_nr+cargo_bazel_bootstrap" + ], [ "rules_rust+", "cui", @@ -4609,6 +9840,158 @@ ] } }, + "@@score_toolchains_rust+//extensions:ferrocene_toolchain_ext.bzl%ferrocene_toolchain_ext": { + "general": { + "bzlTransitiveDigest": "XEgifqjEEdSGw80RccoJ/aUy9smsRXQJ9jO4RDOf2vk=", + "usagesDigest": "cM8NqbyiMnd6tgzFEQGOvxdBhheztZU8tJGaURBbiLI=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "ferrocene_x86_64_unknown_linux_gnu": { + "repoRuleId": "@@score_toolchains_rust+//extensions:ferrocene_toolchain_ext.bzl%ferrocene_toolchain_repo", + "attributes": { + "url": "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.0.1/ferrocene-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-unknown-linux-gnu.tar.gz", + "sha256": "4c08b41eaafd39cff66333ca4d4646a5331c780050b8b9a8447353fcd301dddc", + "strip_prefix": "", + "toolchain_name": "rust_ferrocene", + "target_triple": "x86_64-unknown-linux-gnu", + "exec_triple": "x86_64-unknown-linux-gnu", + "staticlib_ext": ".a", + "dylib_ext": ".so", + "binary_ext": "", + "default_edition": "2021", + "stdlib_linkflags": [], + "extra_rustc_flags": [ + "-Clink-arg=-Wl,--no-as-needed", + "-Clink-arg=-lstdc++", + "-Clink-arg=-lm", + "-Clink-arg=-lc" + ], + "extra_exec_rustc_flags": [], + "env": {}, + "exec_compatible_with": [ + "@platforms//cpu:x86_64", + "@platforms//os:linux" + ], + "target_compatible_with": [ + "@platforms//cpu:x86_64", + "@platforms//os:linux" + ], + "coverage_tools_url": "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.0.1/coverage-tools-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-unknown-linux-gnu.tar.gz", + "coverage_tools_sha256": "497958e925bc94833ea226d68f6d5ba38bd890f571c73e230141d2923e30dd94", + "coverage_tools_strip_prefix": "779fbed05ae9e9fe2a04137929d99cc9b3d516fd/x86_64-unknown-linux-gnu" + } + }, + "ferrocene_aarch64_unknown_linux_gnu": { + "repoRuleId": "@@score_toolchains_rust+//extensions:ferrocene_toolchain_ext.bzl%ferrocene_toolchain_repo", + "attributes": { + "url": "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.0.1/ferrocene-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-aarch64-unknown-linux-gnu.tar.gz", + "sha256": "b1f1eb1146bf595fe1f4a65d5793b7039b37d2cb6d395d1c3100fa7d0377b6c9", + "strip_prefix": "", + "toolchain_name": "rust_ferrocene", + "target_triple": "aarch64-unknown-linux-gnu", + "exec_triple": "x86_64-unknown-linux-gnu", + "staticlib_ext": ".a", + "dylib_ext": ".so", + "binary_ext": "", + "default_edition": "2021", + "stdlib_linkflags": [], + "extra_rustc_flags": [ + "-Clink-arg=-Wl,--no-as-needed", + "-Clink-arg=-lstdc++", + "-Clink-arg=-lm", + "-Clink-arg=-lc" + ], + "extra_exec_rustc_flags": [], + "env": {}, + "exec_compatible_with": [ + "@platforms//cpu:x86_64", + "@platforms//os:linux" + ], + "target_compatible_with": [ + "@platforms//cpu:aarch64", + "@platforms//os:linux" + ], + "coverage_tools_url": "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.0.1/coverage-tools-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-unknown-linux-gnu.tar.gz", + "coverage_tools_sha256": "497958e925bc94833ea226d68f6d5ba38bd890f571c73e230141d2923e30dd94", + "coverage_tools_strip_prefix": "779fbed05ae9e9fe2a04137929d99cc9b3d516fd/x86_64-unknown-linux-gnu" + } + }, + "ferrocene_x86_64_pc_nto_qnx800": { + "repoRuleId": "@@score_toolchains_rust+//extensions:ferrocene_toolchain_ext.bzl%ferrocene_toolchain_repo", + "attributes": { + "url": "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.0.1/ferrocene-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-pc-nto-qnx800.tar.gz", + "sha256": "6daabbe20c0b06551335f83c2490326ce447759628dea04cd1c90d297c3a0bd3", + "strip_prefix": "", + "toolchain_name": "rust_ferrocene", + "target_triple": "x86_64-pc-nto-qnx800", + "exec_triple": "x86_64-unknown-linux-gnu", + "staticlib_ext": ".a", + "dylib_ext": ".so", + "binary_ext": "", + "default_edition": "2021", + "stdlib_linkflags": [], + "extra_rustc_flags": [ + "-Clink-arg=-Wl,--no-as-needed", + "-Clink-arg=-lc++", + "-Clink-arg=-lm", + "-Clink-arg=-lc" + ], + "extra_exec_rustc_flags": [], + "env": {}, + "exec_compatible_with": [ + "@platforms//cpu:x86_64", + "@platforms//os:linux" + ], + "target_compatible_with": [ + "@platforms//cpu:x86_64", + "@platforms//os:qnx" + ], + "coverage_tools_url": "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.0.1/coverage-tools-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-unknown-linux-gnu.tar.gz", + "coverage_tools_sha256": "497958e925bc94833ea226d68f6d5ba38bd890f571c73e230141d2923e30dd94", + "coverage_tools_strip_prefix": "779fbed05ae9e9fe2a04137929d99cc9b3d516fd/x86_64-unknown-linux-gnu" + } + }, + "ferrocene_aarch64_unknown_nto_qnx800": { + "repoRuleId": "@@score_toolchains_rust+//extensions:ferrocene_toolchain_ext.bzl%ferrocene_toolchain_repo", + "attributes": { + "url": "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.0.1/ferrocene-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-aarch64-unknown-nto-qnx800.tar.gz", + "sha256": "563a2438324ee1c6fdcfd13fbe352bedf1cf3f0756d07bb7ba7bdca334df92bf", + "strip_prefix": "", + "toolchain_name": "rust_ferrocene", + "target_triple": "aarch64-unknown-nto-qnx800", + "exec_triple": "x86_64-unknown-linux-gnu", + "staticlib_ext": ".a", + "dylib_ext": ".so", + "binary_ext": "", + "default_edition": "2021", + "stdlib_linkflags": [], + "extra_rustc_flags": [ + "-Clink-arg=-Wl,--no-as-needed", + "-Clink-arg=-lc++", + "-Clink-arg=-lm", + "-Clink-arg=-lc" + ], + "extra_exec_rustc_flags": [], + "env": {}, + "exec_compatible_with": [ + "@platforms//cpu:x86_64", + "@platforms//os:linux" + ], + "target_compatible_with": [ + "@platforms//cpu:aarch64", + "@platforms//os:qnx" + ], + "coverage_tools_url": "https://github.com/eclipse-score/ferrocene_toolchain_builder/releases/download/1.0.1/coverage-tools-779fbed05ae9e9fe2a04137929d99cc9b3d516fd-x86_64-unknown-linux-gnu.tar.gz", + "coverage_tools_sha256": "497958e925bc94833ea226d68f6d5ba38bd890f571c73e230141d2923e30dd94", + "coverage_tools_strip_prefix": "779fbed05ae9e9fe2a04137929d99cc9b3d516fd/x86_64-unknown-linux-gnu" + } + } + }, + "recordedRepoMappingEntries": [] + } + }, "@@toolchains_llvm+//toolchain/extensions:llvm.bzl%llvm": { "general": { "bzlTransitiveDigest": "n8WR0DxEQ5FgfuREm47KayUAJKtFHcMNZLKerT+ixFY=", diff --git a/examples/integration/main.cpp b/examples/integration/main.cpp index 7509848324..e23e7f1331 100644 --- a/examples/integration/main.cpp +++ b/examples/integration/main.cpp @@ -1,15 +1,15 @@ -// ******************************************************************************* -// Copyright (c) 2026 Contributors to the Eclipse Foundation -// -// See the NOTICE file(s) distributed with this work for additional -// information regarding copyright ownership. -// -// This program and the accompanying materials are made available under the -// terms of the Apache License Version 2.0 which is available at -// https://www.apache.org/licenses/LICENSE-2.0 -// -// SPDX-License-Identifier: Apache-2.0 -// ******************************************************************************* +/******************************************************************************** + * Copyright (c) 2026 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Apache License Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + ********************************************************************************/ #include "score/result/result.h" From 1973833a1a4cfbeefac720f4ba57e2d04b5c7a43 Mon Sep 17 00:00:00 2001 From: Andrey Babanin Date: Mon, 8 Jun 2026 12:09:17 +0200 Subject: [PATCH 56/59] Update CODEOWNERS for Rust code --- .github/CODEOWNERS | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 962ffad677..8591d18513 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -6,4 +6,8 @@ # default owners * @antonkri @4og +/* @antonkri @4og @pawelrutkaq @arkjedrz +/.github @antonkri @4og @pawelrutkaq @arkjedrz /docs @antonkri @4og @aschemmel-tech +/examples @antonkri @4og @pawelrutkaq @arkjedrz +/src @antonkri @4og @pawelrutkaq @arkjedrz From e640d0f63ecf2de62177072c05560d5ccc671d68 Mon Sep 17 00:00:00 2001 From: Andrey Babanin Date: Mon, 8 Jun 2026 17:03:33 +0200 Subject: [PATCH 57/59] Remove unused setup_starpls configuration --- BUILD | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/BUILD b/BUILD index 30a253b765..0aa029a070 100644 --- a/BUILD +++ b/BUILD @@ -13,15 +13,10 @@ load("@score_bazel_tools_cc//quality:defs.bzl", "clang_format_config", "quality_clang_tidy_config") load("@score_docs_as_code//:docs.bzl", "docs") -load("@score_tooling//:defs.bzl", "copyright_checker", "dash_license_checker", "rust_coverage_report", "setup_starpls", "use_format_targets") +load("@score_tooling//:defs.bzl", "copyright_checker", "dash_license_checker", "rust_coverage_report", "use_format_targets") load("//:project_config.bzl", "PROJECT_CONFIG") load(":qemu.bzl", "qemu_aarch64") -setup_starpls( - name = "starpls_server", - visibility = ["//visibility:public"], -) - docs( data = [ "@score_platform//:needs_json", @@ -100,10 +95,6 @@ qemu_aarch64() use_format_targets() -exports_files([ - "MODULE.bazel", -]) - clang_format_config( name = "clang_format_config", config_file = "//:.clang-format", From 6e5d2131d186d551f3a2162a7dcc91866d67c2f4 Mon Sep 17 00:00:00 2001 From: Andrey Babanin Date: Mon, 8 Jun 2026 17:06:49 +0200 Subject: [PATCH 58/59] ci: consolidate Clippy checks into lint.yml and remove redundant lint_clippy.yml --- .github/workflows/lint.yml | 5 +++++ .github/workflows/lint_clippy.yml | 28 ---------------------------- 2 files changed, 5 insertions(+), 28 deletions(-) delete mode 100644 .github/workflows/lint_clippy.yml diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index f95e323034..a433bf6e49 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -41,3 +41,8 @@ jobs: - name: Bazel Build with clang-tidy run: | bazel build --config clang_tidy -- //... + lint-clippy: + uses: eclipse-score/cicd-workflows/.github/workflows/static-analysis.yml@af347722c7ae3ed85518895c11268d96ac728f62 + with: + bazel-targets: "//src/..." + bazel-config: "lint" diff --git a/.github/workflows/lint_clippy.yml b/.github/workflows/lint_clippy.yml deleted file mode 100644 index 617807833d..0000000000 --- a/.github/workflows/lint_clippy.yml +++ /dev/null @@ -1,28 +0,0 @@ -# ******************************************************************************* -# Copyright (c) 2025 Contributors to the Eclipse Foundation -# -# See the NOTICE file(s) distributed with this work for additional -# information regarding copyright ownership. -# -# This program and the accompanying materials are made available under the -# terms of the Apache License Version 2.0 which is available at -# https://www.apache.org/licenses/LICENSE-2.0 -# -# SPDX-License-Identifier: Apache-2.0 -# ******************************************************************************* -name: Bazel Clippy -on: - pull_request: - types: [opened, reopened, synchronize] - push: - branches: - - main - merge_group: - types: [checks_requested] -jobs: - lint-clippy: - uses: eclipse-score/cicd-workflows/.github/workflows/static-analysis.yml@main - with: - bazel-targets: "//src/..." - bazel-config: "lint" - bazel-args: "--lockfile_mode=error" From d92239f885677ecb3726ae5ea219ef5de82285c6 Mon Sep 17 00:00:00 2001 From: Andrey Babanin Date: Mon, 8 Jun 2026 18:01:47 +0200 Subject: [PATCH 59/59] Exclude several Rust tests on QNX as they fail This is to be investigated in #251 --- .github/workflows/build_qnx.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/build_qnx.yml b/.github/workflows/build_qnx.yml index ce6b7d2fa8..f3867e19f3 100644 --- a/.github/workflows/build_qnx.yml +++ b/.github/workflows/build_qnx.yml @@ -38,6 +38,7 @@ jobs: -//score/memory/shared:shared_memory_resource_open_test -//score/os/test:asil_qm_test -//score/os/test:grp_test + -//src/containers:tests - bazel-config: bl-aarch64-qnx bazel-test-target: >- //score/... @@ -47,6 +48,9 @@ jobs: -//score/memory/shared:shared_memory_factory_test -//score/memory/shared:shared_memory_resource_open_test -//score/os/utils/inotify:unit_test + -//src/containers:tests + -//src/pal:tests + -//src/thread:tests extra-bazel-test-flags: "--test_timeout=120,600,1800,7200" # Increase test timeout due to QEMU emulation uses: eclipse-score/cicd-workflows/.github/workflows/qnx-build.yml@af347722c7ae3ed85518895c11268d96ac728f62 permissions: