diff --git a/.bazelproject b/.bazelproject
new file mode 100644
index 00000000..2a2d9527
--- /dev/null
+++ b/.bazelproject
@@ -0,0 +1,3 @@
+import examples/android/.bazelproject
+
+android_sdk_platform: android-33
diff --git a/.bazelrc b/.bazelrc
new file mode 100644
index 00000000..774bc7e6
--- /dev/null
+++ b/.bazelrc
@@ -0,0 +1,150 @@
+common --experimental_allow_tags_propagation
+
+mobile-install --config=android
+
+build --enable_platform_specific_config
+# https://github.com/bazelbuild/bazel/issues/18958
+build --noenable_bzlmod
+build:macos --apple_crosstool_top=@local_config_apple_cc//:toolchain
+build:macos --crosstool_top=@local_config_apple_cc//:toolchain
+build:macos --host_crosstool_top=@local_config_apple_cc//:toolchain
+
+# We need access to ld in order to build libunwind on Linux
+build:libunwind --action_env=PATH=/usr/bin
+
+build --action_env=CC --host_action_env=CC
+build --action_env=CXX --host_action_env=CXX
+build --action_env=LLVM_CONFIG --host_action_env=LLVM_CONFIG
+build --action_env=PATH --host_action_env=PATH
+
+build --features=debug_prefix_map_pwd_is_dot
+build --features=oso_prefix_is_pwd
+build --features=relative_ast_path
+build --features=remap_xcode_path
+build --features=swift.cacheable_swiftmodules
+build --features=swift.coverage_prefix_map
+build --features=swift.opt_uses_osize
+build --features=swift.opt_uses_wmo
+build --features=swift.remap_xcode_path
+build --features=swift.use_global_module_cache
+
+# Gate the references to androidndk behind a flag to support building on arm linux.
+build:android --android_crosstool_top=@androidndk//:toolchain
+build:android --extra_toolchains=@androidndk//...
+build --platform_mappings=bazel/platform_mappings
+
+build --@rules_rust//:rustfmt.toml=//:rustfmt.toml
+build --@rules_rust//:clippy.toml=//:.clippy.toml
+
+build --macos_minimum_os=12.5
+build --host_macos_minimum_os=12.5
+
+build --ios_minimum_os=12.0
+build --ios_simulator_device="iPhone 13"
+build --ios_simulator_version=17.5
+build --xcode_version=15.4
+
+build:clippy --aspects=@rules_rust//rust:defs.bzl%rust_clippy_aspect
+build:clippy --output_groups=+clippy_checks
+
+build:compdb --build_tag_filters=-nocompdb,-clippy_checks,-macos_only
+build:compdb --config=noclippy
+
+build:noclippy --output_groups=-clippy_checks
+
+test --test_env=RUST_BACKTRACE=full
+
+# Shared configuration for all CI tasks.
+build:ci --config=clippy
+build:ci --swiftcopt=-warnings-as-errors
+
+# Common debug configuration for iOS/Android. Used when building examples apps.
+build:dbg-common --compilation_mode=opt
+build:dbg-common --config=abort-panic
+
+build:dbg-ios --config=dbg-common
+
+# Ensure that the output of the `ios_static_framework` rule is a zip as opposed to an unzipped
+# framework. Without this, the output of `ios_static_framework` is a zip when invoked with the use of
+# command line tool and an unzipped framework when invoked with the use of Xcode UI.
+# Ideally we should allow for an unzipped output of `ios_static_framework` so that we can avoid having
+# to zip/unzip framework when building it but for simplicity purposes, we force the output to be always
+# zipped.
+build:rules_xcodeproj --config=dbg-ios
+build:rules_xcodeproj --define=apple.experimental.tree_artifact_outputs=0
+
+# Common release configuration for iOS/Android
+# TODO(mattklein123): Should we be compiling the rust code size optimized?
+build:release-common --compilation_mode=opt
+# TODO(mattklein123): This doesn't work for whatever reason when building tests, but we should be
+# running tests with release settings.
+build:release-common --config=abort-panic
+
+# Size optimizations, codegen-units=1 go along side LTO, which accounts for
+# about 10% reduction; -z has a non-zero smaller impact (a few pp).
+build:release-common --@rules_rust//:extra_rustc_flag='-Ccodegen-units=1'
+build:release-common --@rules_rust//:extra_rustc_flag='-Clto=fat'
+build:release-common --@rules_rust//:extra_rustc_flag='-Copt-level=s'
+
+build:release-android --define android_strip_symbols=true
+build:release-android --fat_apk_cpu=x86,x86_64,armeabi-v7a,arm64-v8a
+build:release-android --config=release-common
+build:release-android --copt=-flto=thin --linkopt=-flto=thin
+build:release-android --config=android
+# TODO(snowp): Enable relr once we no longer need to support Android 8. The system linker is not
+# able to understand RELR relocations, see https://bugs.chromium.org/p/chromium/issues/detail?id=900049.
+# Enabling relr provides a small binary size decrease.
+# build:release-android --linkopt=-Wl,--pack-dyn-relocs=relr
+# build:release-android --linkopt=-Wl,--use-android-relr-tags
+
+# Custom iOS release configuration
+build:release-ios --config=release-common
+
+# Allows disabling the cache for cases where the cache might be slow, e.g. slow networks.
+build:nocache --remote_accept_cached=false
+build:nocache --noremote_upload_local_results
+build:nocache --bes_results_url=
+build:nocache --bes_backend=
+build:nocache --remote_cache=
+
+# Convenience config for disabling targets that build on macos only (e.g. iOS targets).
+build:nomacos --test_tag_filters=-macos_only --build_tag_filters=-macos_only
+
+# We run this with release-common to be as indicative of production as possible, and add in as much debug information we
+# can to allow using perf to generate flamegraphs.
+build:benchmark --config=release-common
+build:benchmark-profile --config=benchmark --@rules_rust//:extra_rustc_flag='-Cdebuginfo=2' --force_pic
+
+# Specifies that panics should automatically be treated as a panic.
+build:abort-panic --@rules_rust//:extra_rustc_flag=-C
+build:abort-panic --@rules_rust//:extra_rustc_flag=panic=abort
+
+# This attempts to match what cargo-fuzz does, but it's likely a moving target with many options.
+# Occasionally check back to see if anything has changed over there.
+# https://github.com/rust-fuzz/cargo-fuzz/blob/fa18f0d77aef036302d9f948e80aa12c6b95d57b/src/project.rs#L163
+build:fuzz --config=release-common
+build:fuzz --@rules_rust//:extra_rustc_flag=-Cpasses=sancov-module
+build:fuzz --@rules_rust//:extra_rustc_flag=-Cllvm-args=-sanitizer-coverage-level=4
+build:fuzz --@rules_rust//:extra_rustc_flag=-Cllvm-args=-sanitizer-coverage-inline-8bit-counters
+build:fuzz --@rules_rust//:extra_rustc_flag=-Cllvm-args=-sanitizer-coverage-pc-table
+build:fuzz --@rules_rust//:extra_rustc_flag=-Cllvm-args=-sanitizer-coverage-trace-compares
+build:fuzz --@rules_rust//:extra_rustc_flag=-Cllvm-args=-sanitizer-coverage-stack-depth
+build:fuzz --@rules_rust//:extra_rustc_flag=-Zsanitizer=address
+build:fuzz --@rules_rust//:extra_rustc_flag=--cfg=fuzzing
+build:fuzz --@rules_rust//rust/toolchain/channel=nightly
+
+build:fake-nightly --action_env=RUSTC_BOOTSTRAP=1
+
+# Enables TSAN for all targets. This does not currently work when targeting platforms where TSAN is not enabled in the Rust toolchain (e.g. ios-sim).
+build:tsan --config=fake-nightly
+build:tsan --features=tsan
+build:tsan --@rules_rust//:extra_rustc_flag=-Zsanitizer=thread
+
+# Enables using TSAN with iOS tests. This does not enable tsan in Rust and may therefore result in false positivies.
+build:ios-tsan --features=tsan
+
+build:asan --config=fake-nightly
+build:asan --features=address
+build:tsan --@rules_rust//:extra_rustc_flag=-Zsanitizer=address
+
+try-import %workspace%/tmp/ci-bazelrc
diff --git a/.bazelversion b/.bazelversion
new file mode 100644
index 00000000..ce7a3cab
--- /dev/null
+++ b/.bazelversion
@@ -0,0 +1 @@
+7.0.0-pre.20231018.3
diff --git a/.cargo/config.toml b/.cargo/config.toml
new file mode 100644
index 00000000..90f1bc9f
--- /dev/null
+++ b/.cargo/config.toml
@@ -0,0 +1,66 @@
+########################################
+# Optimization / Compile Configuration #
+########################################
+
+[target.'cfg(target_vendor="apple")']
+rustflags = ["-Csplit-debuginfo=unpacked"]
+
+[target.x86_64-unknown-linux-gnu]
+rustflags = ["-C", "link-arg=-fuse-ld=lld"]
+
+#####################################
+# Warnings and Linter Configuration #
+#####################################
+# This is a hack to work around the fact that neither rustc, cargo, nor clippy
+# allows globally configuring lints. To avoid having to copy a massive block of
+# allow/warn/deny statements to the top of every file, we configure them as
+# all-profile compiler flags here.
+[target.'cfg(all())']
+rustflags = [
+ "-Dwarnings",
+ "-Dfuture-incompatible",
+ "-Dnonstandard-style",
+ "-Drust-2018-compatibility",
+ "-Drust-2018-idioms",
+ "-Drust-2021-compatibility",
+ "-Dunused",
+ "-Dclippy::all",
+ "-Dclippy::correctness",
+ "-Dclippy::suspicious",
+ "-Dclippy::style",
+ "-Dclippy::complexity",
+ "-Dclippy::perf",
+ "-Dclippy::pedantic",
+ "-Dclippy::nursery",
+
+ # The following produces very annoying error lines over entire async functions when there
+ # are compile errors. Trying enabling this again later.
+ "-Arust_2021_incompatible_closure_captures",
+
+ "-Aclippy::future-not-send",
+ "-Aclippy::missing-errors-doc",
+ "-Aclippy::missing-panics-doc",
+ "-Aclippy::similar-names",
+ "-Aclippy::too-many-arguments",
+ "-Aclippy::too-many-lines",
+ "-Aclippy::unnecessary-wraps",
+ "-Aclippy::unused-async",
+
+ # Appears spurious on 1.62. Try to remove later.
+ "-Aclippy::redundant-pub-crate",
+ "-Aclippy::significant_drop_tightening",
+ "-Aclippy::significant_drop_in_scrutinee",
+
+ # ProtoHashWrapper causes this to trigger due to the mutable cached size within the message.
+ # The cache sized field is correctly handled but there doesn't seem to be a way to turn this
+ # off for a type.
+ "-Aclippy::mutable-key-type",
+]
+
+# Fetch internal repos via git
+[net]
+git-fetch-with-cli = true
+
+# Make sure we don't compile protoc
+[env]
+PROTOC_NO_VENDOR = "true"
diff --git a/.clang-format b/.clang-format
new file mode 100644
index 00000000..83c65db7
--- /dev/null
+++ b/.clang-format
@@ -0,0 +1,38 @@
+---
+Language: Cpp
+AccessModifierOffset: -2
+ColumnLimit: 100
+DerivePointerAlignment: false
+PointerAlignment: Left
+SortIncludes: false
+...
+
+---
+Language: Java
+AccessModifierOffset: -2
+ColumnLimit: 100
+DerivePointerAlignment: false
+IndentWidth: 2
+PointerAlignment: Left
+SortIncludes: false
+...
+
+---
+Language: ObjC
+AccessModifierOffset: -2
+ColumnLimit: 100
+DerivePointerAlignment: false
+IndentWidth: 2
+ObjCBlockIndentWidth: 2
+ObjCSpaceAfterProperty: true
+ObjCSpaceBeforeProtocolList: true
+PointerAlignment: Right
+SortIncludes: false
+...
+
+---
+Language: Proto
+ColumnLimit: 100
+SpacesInContainerLiterals: false
+AllowShortFunctionsOnASingleLine: false
+...
diff --git a/.clippy.toml b/.clippy.toml
new file mode 100644
index 00000000..226ee74b
--- /dev/null
+++ b/.clippy.toml
@@ -0,0 +1 @@
+doc-valid-idents = ["gRPC", ".."]
diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile
new file mode 100644
index 00000000..01085b71
--- /dev/null
+++ b/.devcontainer/Dockerfile
@@ -0,0 +1,9 @@
+# See here for image contents: https://github.com/microsoft/vscode-dev-containers/tree/v0.234.0/containers/rust/.devcontainer/base.Dockerfile
+
+# [Choice] Debian OS version (use bullseye on local arm64/Apple Silicon): buster, bullseye
+ARG VARIANT="buster"
+FROM mcr.microsoft.com/vscode/devcontainers/rust:0-${VARIANT}
+
+# [Optional] Uncomment this section to install additional packages.
+RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
+ && apt-get -y install --no-install-recommends clang
diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
new file mode 100644
index 00000000..d031e84c
--- /dev/null
+++ b/.devcontainer/devcontainer.json
@@ -0,0 +1,51 @@
+// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at:
+// https://github.com/microsoft/vscode-dev-containers/tree/v0.234.0/containers/rust
+{
+ "name": "loop-sdk-dev",
+ "build": {
+ "dockerfile": "Dockerfile",
+ "args": {
+ // Use the VARIANT arg to pick a Debian OS version: buster, bullseye
+ // Use bullseye when on local on arm64/Apple Silicon.
+ // We use buster since the tooling situation for aarch64 linux is not so great.
+ "VARIANT": "buster"
+ }
+ },
+ "runArgs": [
+ "--cap-add=SYS_PTRACE",
+ "--security-opt",
+ "seccomp=unconfined"
+ ],
+ "remoteEnv": {
+ "CC": "/usr/bin/clang",
+ "CXX": "/usr/bin/clang++"
+ },
+
+ // Set *default* container specific settings.json values on container create.
+ "settings": {
+ "lldb.executable": "/usr/bin/lldb",
+ // VS Code don't watch files under ./target
+ "files.watcherExclude": {
+ "**/target/**": true
+ },
+ "rust-analyzer.checkOnSave.command": "clippy"
+ },
+
+ // Add the IDs of extensions you want installed when the container is created.
+ "extensions": [
+ "vadimcn.vscode-lldb",
+ "mutantdino.resourcemonitor",
+ "matklad.rust-analyzer",
+ "tamasfe.even-better-toml",
+ "serayuzgur.crates"
+ ],
+
+ // Use 'forwardPorts' to make a list of ports inside the container available locally.
+ // "forwardPorts": [],
+
+ // Use 'postCreateCommand' to run commands after the container is created.
+ // "postCreateCommand": "rustc --version",
+
+ // Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root.
+ "remoteUser": "vscode"
+}
diff --git a/.drstring.toml b/.drstring.toml
new file mode 100644
index 00000000..3d54caf1
--- /dev/null
+++ b/.drstring.toml
@@ -0,0 +1,9 @@
+align-after-colon = ["throws", "returns", "parameters"]
+column-limit = 110
+empty-patterns = true
+first-letter = "lowercase"
+ignore-throws = true
+include = ["platform/swift/**.swift", "test/platform/swift/**.swift", "examples/swift/**.swift"]
+needs-separation = ["description", "parameters"]
+parameter-style = "separate"
+vertical-align = true
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 00000000..d86b80e1
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,4 @@
+Cargo.lock linguist-generated=true merge=binary
+Cargo.Bazel.lock linguist-generated=true merge=binary
+cargo-bazel-lock.json linguist-generated=true merge=binary
+
diff --git a/.github/workflows/android.yaml b/.github/workflows/android.yaml
new file mode 100644
index 00000000..27a8aafc
--- /dev/null
+++ b/.github/workflows/android.yaml
@@ -0,0 +1,187 @@
+name: android
+on:
+ push:
+ branches:
+ - main
+ pull_request:
+# Cancel in-progress CI jobs when a new commit is pushed to a PR.
+concurrency:
+ group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
+ cancel-in-progress: true
+jobs:
+ pre_check:
+ name: pre_check
+ runs-on: ubuntu-latest
+ outputs:
+ should_run: ${{ steps.check_changes.outputs.run_tests }}
+ steps:
+ # Checkout repo to Github Actions runner
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+
+ - name: check for relevant changes
+ id: check_changes
+ run: |
+ ./ci/check_bazel.sh //examples/android:android_app || ./ci/files_changed.sh .github/workflows/android.yaml || ./ci/files_changed.sh "^platform/jvm/gradle-test-app/.*\.(gradle|kts|kt|xml)$" && ./ci/run_tests.sh
+ true
+ build_apk:
+ runs-on: ubuntu-latest
+ if: needs.pre_check.outputs.should_run == 'true'
+ needs: pre_check
+ steps:
+ # Checkout repo to Github Actions runner
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+
+ - name: build apk
+ timeout-minutes: 30
+ run: ./bazelw build --config ci --config release-android --fat_apk_cpu=x86_64 //examples/android:android_app
+ - uses: actions/upload-artifact@v4
+ with:
+ name: android_app.apk
+ path: ./bazel-bin/examples/android/android_app.apk
+ gradle_tests:
+ # Requires a "larger runner", for nested virtualization support
+ runs-on: ubuntu-latest-8-cores
+ env:
+ SKIP_PROTO_GEN: 1
+ if: needs.pre_check.outputs.should_run == 'true'
+ needs: pre_check
+ steps:
+ - name: Checkout project sources
+ uses: actions/checkout@v4
+
+ # See https://github.blog/changelog/2023-02-23-hardware-accelerated-android-virtualization-on-actions-windows-and-linux-larger-hosted-runners/
+ - name: Enable KVM group perms
+ run: |
+ echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
+ sudo udevadm control --reload-rules
+ sudo udevadm trigger --name-match=kvm
+ - name: set up JDK 17
+ uses: actions/setup-java@v4
+ with:
+ distribution: 'zulu'
+ java-version: '17'
+ cache: gradle
+ - name: Setup Rust ARM target
+ run: rustup update && rustup target add aarch64-linux-android && rustup target add x86_64-linux-android
+ - name: AVD cache
+ uses: actions/cache@v4
+ id: avd-cache
+ with:
+ path: |
+ ~/.android/avd/*
+ ~/.android/adb*
+ key: ${{ runner.os }}-avd-api-21-2
+ - name: Create AVD and generate snapshot for caching
+ if: steps.avd-cache.outputs.cache-hit != 'true'
+ timeout-minutes: 30
+ uses: reactivecircus/android-emulator-runner@f0d1ed2dcad93c7479e8b2f2226c83af54494915 # pin@v2.32
+ with:
+ channel: beta
+ force-avd-creation: false
+ api-level: 21
+ target: default
+ ram-size: 2048M
+ arch: x86_64
+ disk-size: 4096M
+ profile: Nexus 6
+ disable-animations: true
+ emulator-options: -no-window -accel on -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
+ script: echo "Generated AVD snapshot for caching."
+ - name: Gradle capture-timber unit tests
+ working-directory: ./platform/jvm
+ run: ./gradlew capture-timber:testReleaseUnitTest --info
+ - name: Instrumentation Tests
+ uses: reactivecircus/android-emulator-runner@f0d1ed2dcad93c7479e8b2f2226c83af54494915 # pin@v2.32
+ with:
+ channel: beta
+ force-avd-creation: false
+ api-level: 21
+ target: default
+ ram-size: 2048M
+ arch: x86_64
+ disk-size: 4096M
+ profile: Nexus 6
+ disable-animations: true
+ emulator-options: -no-snapshot-save -no-window -accel on -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
+ script: cd platform/jvm && adb uninstall io.bitdrift.gradletestapp.test; adb uninstall io.bitdrift.gradletestapp; cd ../.. && ./tools/android_sdk_wrapper.sh platform/jvm/gradlew -p platform/jvm gradle-test-app:check gradle-test-app:connectedCheck --stacktrace
+
+ verify_android_hello_world_per_version:
+ needs: build_apk
+ runs-on: ubuntu-latest-8-cores
+ strategy:
+ matrix:
+ api-level: [21, 34]
+ steps:
+ # Checkout repo to Github Actions runner
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+
+ # See https://github.blog/changelog/2023-02-23-hardware-accelerated-android-virtualization-on-actions-windows-and-linux-larger-hosted-runners/
+ - name: Enable KVM group perms
+ run: |
+ echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
+ sudo udevadm control --reload-rules
+ sudo udevadm trigger --name-match=kvm
+ - uses: actions/download-artifact@v4
+ with:
+ name: android_app.apk
+ path: .
+ - name: AVD cache
+ uses: actions/cache@v3
+ id: avd-cache
+ with:
+ path: |
+ ~/.android/avd/*
+ ~/.android/adb*
+ key: ${{ runner.os }}-avd-api${{ matrix.api-level }}-1
+ - name: Create AVD and generate snapshot for caching
+ if: steps.avd-cache.outputs.cache-hit != 'true'
+ timeout-minutes: 30
+ uses: reactivecircus/android-emulator-runner@d94c3fbe4fe6a29e4a5ba47c12fb47677c73656b # pin@v2
+ with:
+ channel: beta
+ api-level: ${{ matrix.api-level }}
+ target: google_apis
+ ram-size: 2048M
+ arch: x86_64
+ disk-size: 4096M
+ profile: Nexus 6
+ emulator-options: -no-window -accel on -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
+ script: echo "Generated AVD snapshot for caching."
+ - name: run tests
+ uses: reactivecircus/android-emulator-runner@v2
+ timeout-minutes: 15
+ with:
+ force-avd-creation: false
+ channel: beta
+ api-level: ${{ matrix.api-level }}
+ target: google_apis
+ ram-size: 2048M
+ arch: x86_64
+ disk-size: 4096M
+ profile: Nexus 6
+ emulator-options: -no-snapshot-save -no-window -accel on -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
+ script: ./ci/verify_android.sh
+
+ # This is a noop job that completes once all the jobs spawned by the previous step completes. By blocking PR merges on this
+ # job completing, we are able to gate it on all the previous jobs without explicitly enumerating them.
+ verify_android:
+ runs-on: ubuntu-latest
+ needs: ["build_apk", "verify_android_hello_world_per_version", "gradle_tests"]
+ if: always()
+ steps:
+ # Checkout repo to Github Actions runner
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 1
+ - name: check result
+ run: ./ci/check_result.sh ${{ needs.build_apk.result }} && ./ci/check_result.sh ${{ needs.verify_android_hello_world_per_version.result }} && ./ci/check_result.sh ${{ needs.gradle_tests.result }}
diff --git a/.github/workflows/cla.yaml b/.github/workflows/cla.yaml
new file mode 100644
index 00000000..1d30e488
--- /dev/null
+++ b/.github/workflows/cla.yaml
@@ -0,0 +1,29 @@
+name: "CLA Assistant"
+on:
+ issue_comment:
+ types: [created]
+ pull_request_target:
+ types: [opened,closed,synchronize]
+
+permissions:
+ actions: write
+ contents: read
+ pull-requests: write
+ statuses: write
+
+jobs:
+ CLAAssistant:
+ runs-on: ubuntu-latest
+ steps:
+ - name: "CLA Assistant"
+ if: (github.event.comment.body == 'recheck' || github.event.comment.body == 'I have read the CLA Document and I hereby sign the CLA') || github.event_name == 'pull_request_target'
+ uses: contributor-assistant/github-action@f41946747f85d28e9a738f4f38dbcc74b69c7e0e # v2.5.1
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ PERSONAL_ACCESS_TOKEN: ${{ secrets.CLA_ACCESS_TOKEN }}
+ with:
+ path-to-signatures: 'signatures/version1/cla.json'
+ branch: 'main'
+ remote-organization-name: 'bitdriftlabs'
+ remote-repository-name: 'bitdrift-cla'
+ custom-notsigned-prcomment: '
Thank you for your submission, we really appreciate it. We require that $you sign our [Contributor License Agreement](https://github.com/bitdriftlabs/capture-sdk/blob/main/CLA.md) before we can accept your contribution. You can sign the CLA by posting a pull request comment in the below format.
'
diff --git a/.github/workflows/example_apps_android.yaml b/.github/workflows/example_apps_android.yaml
new file mode 100644
index 00000000..97bc320f
--- /dev/null
+++ b/.github/workflows/example_apps_android.yaml
@@ -0,0 +1,50 @@
+name: Build Android example apps
+on:
+ workflow_dispatch:
+ inputs:
+ sha:
+ description: '[Optional] Commit SHA1, branch or tag to build. The latest SHA1 on a given branch is used if no value is provided.'
+ required: false
+ type: string
+ workflow_call:
+ inputs:
+ sha:
+ description: '[Optional] Commit SHA1, branch or tag to build. The latest SHA1 on a given branch is used if no value is provided.'
+ required: false
+ type: string
+
+jobs:
+ print_arguments:
+ name: Print arguments
+ runs-on: ubuntu-latest
+ steps:
+ - name: Print entered "sha"
+ run: echo "$SHA"
+ env:
+ SHA: ${{ inputs.sha }}
+
+ build:
+ name: Build & upload
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout project sources
+ uses: actions/checkout@v4
+
+ - name: Install JDK 17
+ uses: actions/setup-java@v4
+ with:
+ distribution: 'zulu'
+ java-version: '17'
+ cache: gradle
+ - name: Install Rust target
+ run: rustup update && rustup target add aarch64-linux-android && rustup target add x86_64-linux-android
+ - name: Build Android example app
+ run: ./ci/prepare_example_apps_android.sh
+ env:
+ SKIP_PROTO_GEN: 1
+ - name: Upload Android example apps
+ uses: actions/upload-artifact@v4
+ with:
+ name: Android Example Apps
+ path: ./dist/example-apps.android.zip
+ if-no-files-found: error
diff --git a/.github/workflows/example_apps_ios.yaml b/.github/workflows/example_apps_ios.yaml
new file mode 100644
index 00000000..135b7f93
--- /dev/null
+++ b/.github/workflows/example_apps_ios.yaml
@@ -0,0 +1,47 @@
+name: Build iOS example apps
+on:
+ workflow_dispatch:
+ inputs:
+ sha:
+ description: '[Optional] Commit SHA1, branch or tag to build. The latest SHA1 on a given branch is used if no value is provided.'
+ required: false
+ type: string
+ workflow_call:
+ inputs:
+ sha:
+ description: '[Optional] Commit SHA1, branch or tag to build. The latest SHA1 on a given branch is used if no value is provided.'
+ required: false
+ type: string
+
+jobs:
+ print_arguments:
+ name: Print arguments
+ runs-on: ubuntu-latest
+ steps:
+ - name: Print entered "sha"
+ run: echo "$SHA"
+ env:
+ SHA: ${{ inputs.sha }}
+
+ build:
+ name: Build & upload
+ permissions:
+ contents: write
+ runs-on: macos-14
+ steps:
+ # Checkout repo to Github Actions runner
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+
+ - name: Install dependencies
+ run: ./ci/mac_ci_setup.sh
+ - name: Build iOS example apps
+ run: ./ci/prepare_example_apps_ios.sh
+ - name: Upload iOS example apps to GH
+ uses: actions/upload-artifact@v4
+ with:
+ name: iOS Example Apps
+ path: dist/example-apps.ios.zip
+ if-no-files-found: error
diff --git a/.github/workflows/format.yaml b/.github/workflows/format.yaml
new file mode 100644
index 00000000..67bbb495
--- /dev/null
+++ b/.github/workflows/format.yaml
@@ -0,0 +1,31 @@
+name: format_check
+on:
+ push:
+ branches:
+ - main
+ pull_request:
+# Cancel in-progress CI jobs when a new commit is pushed to a PR.
+concurrency:
+ group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
+ cancel-in-progress: true
+jobs:
+ format_check:
+ runs-on: ubuntu-22.04
+ steps:
+ # --- Build the project for release
+
+ # Checkout repo to Github Actions runner
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - name: install formatters
+ run: ./ci/setup_linux_format.sh
+ - name: configure bazelrc
+ run: mkdir tmp/ && echo "build --config=ci" > tmp/ci-bazelrc
+ - name: test
+ run: PATH=./bin:./bin:$PATH make format
+ - name: check diff
+ run: git --no-pager diff && git diff --quiet
+ - name: Check license headers
+ run: ci/check_license.sh
+
diff --git a/.github/workflows/integrations_android.yaml b/.github/workflows/integrations_android.yaml
new file mode 100644
index 00000000..1bf38c9c
--- /dev/null
+++ b/.github/workflows/integrations_android.yaml
@@ -0,0 +1,47 @@
+name: Build Android Integrations
+on:
+ workflow_call:
+ inputs:
+ version:
+ description: 'The new version to tag, ex: 0.9.102'
+ required: true
+ type: string
+ workflow_dispatch:
+ inputs:
+ version:
+ description: 'The new version to release, ex: 0.9.102'
+ required: true
+ type: string
+jobs:
+ build-capture-timber:
+ name: Build Capture Timber
+ runs-on: ubuntu-latest
+ defaults:
+ run:
+ working-directory: ./platform/jvm
+ steps:
+ - name: Checkout project sources
+ uses: actions/checkout@v4
+
+ - name: Install JDK 17
+ uses: actions/setup-java@v4
+ with:
+ distribution: 'zulu'
+ java-version: '17'
+ cache: gradle
+ - name: Install Rust target
+ run: rustup update && rustup target add aarch64-linux-android && rustup target add x86_64-linux-android
+ - name: Build artifacts with Gradle
+ run: ./gradlew :capture-timber:publish -PVERSION_NAME="${{ inputs.version }}" --info
+ env:
+ SKIP_PROTO_GEN: 1
+ - name: Compress artifacts
+ run: |
+ readonly dir=$(pwd)
+ (cd capture-timber/build/repos/releases/io/bitdrift/capture-timber/${{ inputs.version }} && zip -r "$dir/capture-timber.zip" ./*)
+ - name: Upload artifacts
+ uses: actions/upload-artifact@v4
+ with:
+ name: capture-timber.zip
+ path: platform/jvm/capture-timber.zip
+ if-no-files-found: error
diff --git a/.github/workflows/integrations_ios.yaml b/.github/workflows/integrations_ios.yaml
new file mode 100644
index 00000000..6321bb76
--- /dev/null
+++ b/.github/workflows/integrations_ios.yaml
@@ -0,0 +1,30 @@
+name: Build iOS Integrations
+on:
+ workflow_call:
+ inputs:
+ version:
+ description: 'The new version to tag, ex: 0.9.102'
+ required: true
+ type: string
+ workflow_dispatch:
+ inputs:
+ version:
+ description: 'The new version to release, ex: 0.9.102'
+ required: true
+ type: string
+jobs:
+ build-capture-extensions:
+ name: CaptureExtensions
+ runs-on: macos-14
+ steps:
+ - name: Checkout project sources
+ uses: actions/checkout@v4
+
+ - name: 'Install dependencies'
+ run: ./ci/mac_ci_setup.sh
+ - name: Build CaptureExtensions.xcframework
+ run: ./tools/ios_release.sh CaptureExtensions ${{ inputs.version }}
+ - uses: actions/upload-artifact@v4
+ with:
+ name: CaptureExtensions.ios
+ path: ./dist/CaptureExtensions.ios.zip
diff --git a/.github/workflows/ios.yaml b/.github/workflows/ios.yaml
new file mode 100644
index 00000000..79d4f609
--- /dev/null
+++ b/.github/workflows/ios.yaml
@@ -0,0 +1,86 @@
+name: ios
+on:
+ push:
+ branches:
+ - main
+ pull_request:
+# Cancel in-progress CI jobs when a new commit is pushed to a PR.
+concurrency:
+ group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
+ cancel-in-progress: true
+jobs:
+ pre_check:
+ name: pre_check
+ runs-on: ubuntu-latest
+ outputs:
+ should_run: ${{ steps.check_changes.outputs.run_tests }}
+ steps:
+ # Checkout repo to Github Actions runner
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+
+ - name: check for relevant changes
+ id: check_changes
+ run: |
+ ./ci/check_bazel.sh //examples/swift:ios_app //platform/swift //test/platform/swift || ./ci/files_changed.sh .github/workflows/ios.yaml && ./ci/run_tests.sh
+ true
+ swift_hello_world:
+ name: swift_hello_world
+ timeout-minutes: 40
+ needs: "pre_check"
+ if: needs.pre_check.outputs.should_run == 'true'
+ runs-on: macos-14
+ steps:
+ # Checkout repo to Github Actions runner
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - name: 'Install dependencies'
+ run: ./ci/mac_ci_setup.sh
+ - run: ./bazelw build --config ci //examples/swift/hello_world:ios_app
+ name: 'Build app'
+ # TODO(snowp): Add some kind of assertion that the app does that it's supposed to
+ - run: ./bazelw run --config ci //examples/swift/hello_world:ios_app &> /tmp/envoy.log &
+ name: 'Run app'
+ macos_asan:
+ runs-on: macos-14
+ needs: "pre_check"
+ if: needs.pre_check.outputs.should_run == 'true'
+ steps:
+ # Checkout repo to Github Actions runner
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - name: 'Install dependencies'
+ run: ./ci/mac_ci_setup.sh
+ - name: Run tests (asan)
+ run: env -u ANDROID_NDK_HOME ./bazelw test //core/... //platform/... //test/platform/swift/unit_integration/... --test_tag_filters=macos_only --test_output=errors --build_tests_only --config ci --config asan
+ macos_tsan:
+ runs-on: macos-14
+ needs: "pre_check"
+ if: needs.pre_check.outputs.should_run == 'true'
+ steps:
+ # Checkout repo to Github Actions runner
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - name: 'Install dependencies'
+ run: ./ci/mac_ci_setup.sh
+ - name: Run iOS tests (tsan)
+ run: env -u ANDROID_NDK_HOME ./bazelw test $(./bazelw query 'kind(ios_unit_test, //test/platform/swift/unit_integration:test_tsan)') --test_tag_filters=macos_only --test_output=errors --config ci --config ios-tsan
+ verify_ios:
+ runs-on: ubuntu-latest
+ needs: ["macos_tsan", "macos_asan", "swift_hello_world"]
+ if: always()
+ steps:
+ # Checkout repo to Github Actions runner
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 1
+ - run: |
+ ./ci/check_result.sh ${{ needs.macos_tsan.result }} \
+ && ./ci/check_result.sh ${{ needs.macos_asan.result }} \
+ && ./ci/check_result.sh ${{ needs.swift_hello_world.result }}
diff --git a/.github/workflows/license.yaml b/.github/workflows/license.yaml
new file mode 100644
index 00000000..e6837916
--- /dev/null
+++ b/.github/workflows/license.yaml
@@ -0,0 +1,15 @@
+name: "License check"
+on:
+ push:
+ branches:
+ - main
+ pull_request:
+jobs:
+ cargo-deny:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+
+ - uses: EmbarkStudios/cargo-deny-action@8371184bd11e21dcf8ac82ebf8c9c9f74ebf7268 #v2.0.1
+ with:
+ command: check licenses
diff --git a/.github/workflows/linux_tests.yaml b/.github/workflows/linux_tests.yaml
new file mode 100644
index 00000000..4fb21cfe
--- /dev/null
+++ b/.github/workflows/linux_tests.yaml
@@ -0,0 +1,35 @@
+name: linux_test
+on:
+ push:
+ branches:
+ - main
+ pull_request:
+# Cancel in-progress CI jobs when a new commit is pushed to a PR.
+concurrency:
+ group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
+ cancel-in-progress: true
+jobs:
+ linux_test:
+ runs-on: ubuntu-latest
+ steps:
+ # --- Build the project for release
+
+ # Checkout repo to Github Actions runner
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - name: Set cores to get stored in /cores
+ run: |
+ sudo mkdir /cores
+ sudo chmod 777 /cores
+ # Core filenames will be of the form executable.pid.timestamp:
+ sudo bash -c 'echo "/cores/%e.%p.%t" > /proc/sys/kernel/core_pattern'
+ - name: test
+ run: |
+ ulimit -c unlimited
+ CC=$(which clang) CXX=$(which clang++) ./bazelw test //core/... //platform/... //test/... --config ci --config nomacos --config libunwind --test_output=errors --test_env=RUST_LOG=debug
+ - uses: actions/upload-artifact@v4
+ if: ${{ failure() }} # Run only if something went wrong
+ with:
+ name: cores
+ path: /cores
diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml
new file mode 100644
index 00000000..468bc568
--- /dev/null
+++ b/.github/workflows/release.yaml
@@ -0,0 +1,67 @@
+name: Release
+
+on:
+ workflow_dispatch:
+ inputs:
+ version:
+ description: 'The new version to release, ex: 0.12.0'
+ required: true
+ type: string
+ sha:
+ description: '[Optional] Commit SHA1, branch or tag to build. The latest SHA1 on a given branch is used if no value is provided.'
+ required: false
+ type: string
+ emergency:
+ type: boolean
+ description: Ignore main branch requirement (SOC2 compliance)
+ required: true
+ workflow_call:
+ inputs:
+ version:
+ description: 'The new version to release, ex: 0.12.0'
+ required: true
+ type: string
+ emergency:
+ type: boolean
+ description: Ignore main branch requirement (SOC2 compliance)
+ required: true
+jobs:
+ verify-sdk-version:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ ref: ${{ inputs.sha }}
+ - name: Verify SDK version
+ run: |
+ sdk_version="$(cat platform/shared/.sdk_version)"
+ if [[ "$sdk_version" != "${{ inputs.version }}" ]]; then
+ echo "The specified SDK version (${{ inputs.version }}) doesn't match SDK version defined in 'platform/shared/.sdk_version' ($sdk_version)"
+ echo "Consider running 'Update SDK Version' CI job instead."
+ exit 1
+ fi
+ gh-release:
+ permissions:
+ contents: write
+ uses: ./.github/workflows/release_gh.yaml
+ with:
+ version: ${{ inputs.version }}
+ sha: ${{ inputs.sha }}
+ secrets: inherit
+ needs: verify-sdk-version
+ public-release:
+ permissions:
+ id-token: write # required to use OIDC authentication
+ contents: read
+ uses: ./.github/workflows/release_public.yaml
+ with:
+ version: ${{ inputs.version }}
+ emergency: ${{ inputs.emergency }}
+ secrets: inherit
+ needs: gh-release
+ capture-ios-release:
+ uses: ./.github/workflows/release_capture_ios.yaml
+ with:
+ version: ${{ inputs.version }}
+ needs: public-release
+ secrets: inherit
diff --git a/.github/workflows/release_capture_ios.yaml b/.github/workflows/release_capture_ios.yaml
new file mode 100644
index 00000000..a4d0e4d4
--- /dev/null
+++ b/.github/workflows/release_capture_ios.yaml
@@ -0,0 +1,35 @@
+name: Trigger capture-ios Release
+on:
+ workflow_call:
+ inputs:
+ version:
+ description: 'The SDK version to release to SwiftPM, ex: 0.9.102'
+ required: true
+ type: string
+ workflow_dispatch:
+ inputs:
+ version:
+ description: 'The SDK version to release to SwiftPM, ex: 0.9.102'
+ required: true
+ type: string
+jobs:
+ release-capture-ios:
+ environment: public-capture-ios
+ runs-on: ubuntu-latest
+ steps:
+ - name: org-read-write-install token
+ id: org-read-write
+ uses: getsentry/action-github-app-token@d4b5da6c5e37703f8c3b3e43abb5705b46e159cc # v3.0
+ with:
+ app_id: ${{ secrets.OPEN_CAPTURE_IOS_PRS_APP_ID }}
+ private_key: ${{ secrets.OPEN_CAPTURE_IOS_PRS_PRIVATE_KEY }}
+ - name: Trigger CI Job in capture-ios Repo
+ run: |
+ gh workflow run $WORKFLOW_ID \
+ --repo bitdriftlabs/capture-ios \
+ --raw-field version=${{ inputs.version }}
+ env:
+ GH_TOKEN: ${{ steps.org-read-write.outputs.token }}
+ # "Update SDK version" workflow id in the capture-ios repo.
+ WORKFLOW_ID: 92140498
+
diff --git a/.github/workflows/release_gh.yaml b/.github/workflows/release_gh.yaml
new file mode 100644
index 00000000..607ecde9
--- /dev/null
+++ b/.github/workflows/release_gh.yaml
@@ -0,0 +1,229 @@
+name: Release to GitHub
+on:
+ workflow_call:
+ inputs:
+ version:
+ description: 'The new version to tag, ex: 0.9.102'
+ required: true
+ type: string
+ sha:
+ description: '[Optional] Commit SHA1, branch or tag to build. The latest SHA1 on a given branch is used if no value is provided.'
+ required: false
+ type: string
+ workflow_dispatch:
+ inputs:
+ version:
+ description: 'The new version to tag, ex: 0.9.102'
+ required: true
+ type: string
+ sha:
+ description: '[Optional] Commit SHA1, branch or tag to build. The latest SHA1 on a given branch is used if no value is provided.'
+ required: false
+ type: string
+jobs:
+ verify-version:
+ name: Verify arguments
+ runs-on: ubuntu-latest
+ steps:
+ - name: Print & verify entered "version"
+ run: |
+ echo "$VERSION"
+ if [[ ! "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+(-[a-z]+(\.[0-9]+)?)?$ ]]; then exit 1; fi
+ - name: Print entered "sha"
+ run: echo "$SHA"
+ env:
+ VERSION: ${{ inputs.version }}
+ SHA: ${{ inputs.sha }}
+ # The iOS release build builds the xcframework in release mode and uploads it to the artifact store for later use.
+ ios-release-build:
+ name: Capture.xcframework with artifacts
+ needs: ["verify-version"]
+ runs-on: macos-14
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ ref: ${{ inputs.sha }}
+
+ - name: 'Install dependencies'
+ run: ./ci/mac_ci_setup.sh
+ - name: Build xcframework + artifacts
+ run: |
+ ./tools/ios_release.sh Capture "${{ inputs.version }}"
+ mv ./dist/Capture.ios.zip ./Capture.ios.zip
+ - uses: actions/upload-artifact@v4
+ with:
+ name: Capture.ios.zip
+ path: ./Capture.ios.zip
+ build-ios-example-apps:
+ needs: ["verify-version"]
+ permissions:
+ contents: write
+ uses: ./.github/workflows/example_apps_ios.yaml
+ with:
+ sha: ${{ inputs.sha }}
+ secrets: inherit
+
+ # The Android release build builds capture.aar and accompanying artifacts, like the .pom xml and the symbols corresponding to the .so.
+ android-release-build:
+ name: Capture.aar with artifacts
+ needs: ["verify-version"]
+ runs-on: ubuntu-latest
+ steps:
+ # Checkout repo to Github Actions runner
+ - uses: actions/checkout@v4
+ with:
+ ref: ${{ inputs.sha }}
+
+ - name: Install Clang
+ run: sudo apt-get install -y clang
+ - name: Build AAR + artifacts
+ run: ./tools/android_release.sh "$VERSION"
+ env:
+ VERSION: ${{ inputs.version }}
+ - uses: actions/upload-artifact@v4
+ with:
+ name: Capture.android.zip
+ path: ./dist/Capture.android.zip
+ # Builds libcapture.so targeting Linux, to support instant-android using the .aar on Linux CI machines.
+ build-android-linux-so:
+ name: Linux x86_64 libcapture.so
+ # Running on ubuntu-latest builds againt a glibc that is more modern than what
+ # instant-android uses in CI, causing a load error. Use 20.04 to link against a compatible
+ # glibc.
+ runs-on: ubuntu-20.04
+ needs: ["verify-version"]
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ ref: ${{ inputs.sha }}
+ - name: Install Clang
+ run: sudo apt-get install -y clang
+
+ - name: build
+ run: ./ci/create_linux_java_so.sh
+ - uses: actions/upload-artifact@v4
+ with:
+ name: libcapture.so
+ path: ./bazel-bin/platform/jvm/libcapture.so
+ # Builds libcapture.dylib targeting macos arm64, to support instant-android using the .aar on arm64 Macs.
+ build-android-macos-arm64:
+ name: arm64 libcapture.dylib
+ runs-on: macos-14
+ needs: ["verify-version"]
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ ref: ${{ inputs.sha }}
+
+ - name: 'Install dependencies'
+ run: ./ci/mac_ci_setup.sh
+ - name: build
+ run: ./bazelw build --announce_rc --config=ci --config=release-common --cpu=darwin_arm64 --platforms @build_bazel_apple_support//platforms:macos_arm64 //platform/jvm:capture && cp bazel-bin/platform/jvm/libcapture.dylib libcapture.dylib.arm64
+ - uses: actions/upload-artifact@v4
+ with:
+ name: libcapture.dylib.arm64
+ path: libcapture.dylib.arm64
+ # Builds libcapture.dylib targeting macos x86_64, to support instant-android using the .aar on arm64 Macs.
+ build-android-macos-x86_64:
+ name: x86_64 libcapture.dylib
+ runs-on: macos-14
+ needs: ["verify-version"]
+ steps:
+ # Checkout repo to Github Actions runner
+ - uses: actions/checkout@v4
+ with:
+ ref: ${{ inputs.sha }}
+
+ - name: 'Install dependencies'
+ run: ./ci/mac_ci_setup.sh
+ - name: build
+ run: ./bazelw build --announce_rc --config=ci --config=release-common --cpu=darwin_x86_64 //platform/jvm:capture && cp bazel-bin/platform/jvm/libcapture.dylib libcapture.dylib.x86_64
+ - uses: actions/upload-artifact@v4
+ with:
+ name: libcapture.dylib.x86_64
+ path: libcapture.dylib.x86_64
+ build-android-example-apps:
+ needs: ["verify-version"]
+ permissions:
+ contents: write
+ uses: ./.github/workflows/example_apps_android.yaml
+ with:
+ sha: ${{ inputs.sha }}
+ secrets: inherit
+ build-android-capture-timber:
+ name: Build Capture Timber
+ needs: ["verify-version"]
+ permissions:
+ contents: write
+ uses: ./.github/workflows/integrations_android.yaml
+ with:
+ version: ${{ inputs.version }}
+ secrets: inherit
+ create-release:
+ permissions:
+ contents: write
+ name: GitHub release
+ runs-on: ubuntu-latest
+ needs: [
+ "ios-release-build",
+ "build-ios-example-apps",
+ "android-release-build",
+ "build-android-linux-so",
+ "build-android-macos-x86_64",
+ "build-android-macos-arm64",
+ "build-android-example-apps",
+ "build-android-capture-timber",
+ ]
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ ref: ${{ inputs.sha }}
+
+ # Download all artifacts to current working directory
+ - uses: actions/download-artifact@v4
+ with:
+ name: Capture.android.zip
+ - uses: actions/download-artifact@v4
+ with:
+ name: libcapture.so
+ - uses: actions/download-artifact@v4
+ with:
+ name: libcapture.dylib.arm64
+ - uses: actions/download-artifact@v4
+ with:
+ name: libcapture.dylib.x86_64
+ - uses: actions/download-artifact@v4
+ with:
+ name: Android Example Apps
+ - uses: actions/download-artifact@v4
+ with:
+ name: capture-timber.zip
+ - name: Prepare Android artifacts
+ run: ./ci/gh_prepare_android_artifacts.sh "$VERSION"
+ env:
+ VERSION: ${{ inputs.version }}
+ - uses: actions/download-artifact@v4
+ with:
+ name: Capture.ios.zip
+ - uses: actions/download-artifact@v4
+ with:
+ name: iOS Example Apps
+ - name: Prepare iOS artifacts
+ run: ./ci/gh_prepare_ios_artifacts.sh "$VERSION"
+ env:
+ VERSION: ${{ inputs.version }}
+ # Upload artifacts to the newly created release.
+ # Prefix release version with "v".
+ - name: Create release
+ run: |
+ gh release create "v$VERSION" \
+ --target "$GITHUB_REF_NAME" \
+ --generate-notes \
+ "Capture-$VERSION.ios.zip" \
+ "Capture-$VERSION.android.zip" \
+ "example-apps.ios.zip" \
+ "example-apps.android.zip" \
+ "capture-timber-$VERSION.android.zip"
+ env:
+ VERSION: ${{ inputs.version }}
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/release_on_sdk_version_change.yaml b/.github/workflows/release_on_sdk_version_change.yaml
new file mode 100644
index 00000000..27e5beee
--- /dev/null
+++ b/.github/workflows/release_on_sdk_version_change.yaml
@@ -0,0 +1,35 @@
+name: Release on SDK version change
+on:
+ push:
+ branches:
+ - main
+jobs:
+ version-change:
+ name: Check for version change
+ runs-on: ubuntu-latest
+ outputs:
+ version: ${{ steps.check.outputs.version }}
+ version_changed: ${{ steps.check.outputs.version_changed }}
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ fetch-depth: 2
+ - name: Check
+ id: check
+ run: |
+ if ! git diff --exit-code HEAD~1 HEAD platform/shared/.sdk_version; then
+ echo "Detected changes..."
+ echo "version=$(cat platform/shared/.sdk_version)" >> $GITHUB_OUTPUT
+ echo "version_changed=true" >> $GITHUB_OUTPUT
+ fi
+ release:
+ permissions:
+ id-token: write # required to use OIDC authentication
+ contents: write
+ uses: ./.github/workflows/release.yaml
+ if: needs.version-change.outputs.version_changed == 'true'
+ with:
+ version: ${{ needs.version-change.outputs.version }}
+ emergency: false
+ secrets: inherit
+ needs: version-change
diff --git a/.github/workflows/release_public.yaml b/.github/workflows/release_public.yaml
new file mode 100644
index 00000000..00608d90
--- /dev/null
+++ b/.github/workflows/release_public.yaml
@@ -0,0 +1,98 @@
+name: Release to dl.bitdrift.io
+on:
+ workflow_call:
+ inputs:
+ version:
+ description: 'The GitHub release to release publicly on dl.bitdrift.io, ex: 0.9.102'
+ required: true
+ type: string
+ emergency:
+ type: boolean
+ description: Ignore main branch requirement (SOC2 compliance)
+ required: true
+ workflow_dispatch:
+ inputs:
+ version:
+ description: 'The GitHub release to release publicly on dl.bitdrift.io, ex: 0.9.102. It should *NOT* be prefixed with "v"'
+ required: true
+ type: string
+ emergency:
+ type: boolean
+ description: Ignore main branch requirement (SOC2 compliance)
+ required: true
+jobs:
+ release-ios:
+ name: Upload iOS artifacts to dl.bitdrift.io
+ environment: public
+ permissions:
+ id-token: write # required to use OIDC authentication
+ contents: read
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - name: SOC2 Compliance
+ run: |
+ if [ "${{ github.event.inputs.emergency }}" == "true" ]; then
+ echo "Using emergency override"
+ curl -X POST -H 'Content-type: application/json' \
+ --data '{"blocks": [{"type": "section", "text": {"type": "mrkdwn", "text": ":cop: :rotating_light: is trying to deploy from . Please respond on this thread with the justification and approval."}}]}' \
+ '${{ secrets.DEPLOY_SLACK_WEBHOOK_AUDIT_BOT }}'
+ exit 0
+ fi
+ if [ "${{ github.ref }}" != "refs/heads/main" ]; then
+ echo "Only main branch may be released to prod"
+ echo "Use emergency mode if you must deploy from another branch"
+ exit 1
+ fi
+ - name: Setup AWS credentials
+ uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2
+ with:
+ role-to-assume: arn:aws:iam::750483288132:role/terraform-bitdriftlabs-capture-sdk-oidc
+ aws-region: us-east-1
+ - name: Download GH Release iOS artifacts
+ run: gh release download "v$VERSION" -p 'Capture*.ios.zip'
+ env:
+ VERSION: ${{ inputs.version }}
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ - name: Upload iOS Artifacts to aws bucket
+ run: ./ci/capture_ios_release.sh "$VERSION"
+ env:
+ VERSION: ${{ inputs.version }}
+ release-android:
+ name: Upload Android artifacts to dl.bitdrift.io
+ environment: public
+ permissions:
+ id-token: write # required to use OIDC authentication (set up aws credentials)
+ contents: read
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - name: SOC2 Compliance
+ run: |
+ if [ "${{ github.event.inputs.emergency }}" == "true" ]; then
+ echo "Using emergency override"
+ curl -X POST -H 'Content-type: application/json' \
+ --data '{"blocks": [{"type": "section", "text": {"type": "mrkdwn", "text": ":cop: :rotating_light: is trying to deploy from . Please respond on this thread with the justification and approval."}}]}' \
+ '${{ secrets.DEPLOY_SLACK_WEBHOOK_AUDIT_BOT }}'
+ exit 0
+ fi
+ if [ "${{ github.ref }}" != "refs/heads/main" ]; then
+ echo "Only main branch may be released to prod"
+ echo "Use emergency mode if you must deploy from another branch"
+ exit 1
+ fi
+ - name: Setup AWS credentials
+ uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2
+ with:
+ role-to-assume: arn:aws:iam::750483288132:role/terraform-bitdriftlabs-capture-sdk-oidc
+ aws-region: us-east-1
+ - name: Download GH Release Android artifacts
+ run: |
+ gh release download "v$VERSION" -p 'Capture*.android.zip'
+ gh release download "v$VERSION" -p 'capture-timber*.android.zip'
+ env:
+ VERSION: ${{ inputs.version }}
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ - name: Upload Android Artifacts to aws bucket
+ run: ./ci/capture_android_release.sh ${{ inputs.version }} "Capture-${{ inputs.version }}.android.zip" "capture-timber-${{ inputs.version }}.android.zip"
+
diff --git a/.github/workflows/update_sdk_version.yaml b/.github/workflows/update_sdk_version.yaml
new file mode 100644
index 00000000..178818b5
--- /dev/null
+++ b/.github/workflows/update_sdk_version.yaml
@@ -0,0 +1,70 @@
+name: Update SDK Version
+
+on:
+ workflow_dispatch:
+ inputs:
+ version:
+ description: 'The new version to release, ex: 0.12.0'
+ required: true
+ type: string
+jobs:
+ verify-version:
+ name: Verify arguments
+ runs-on: ubuntu-latest
+ steps:
+ - name: Print & verify entered "version"
+ run: |
+ echo "$version"
+ if [[ ! "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+(-[a-z]+(\.[0-9]+)?)?$ ]]; then exit 1; fi
+ env:
+ version: ${{ inputs.version }}
+
+ update-sdk-version:
+ name: Update SDK version
+ needs: "verify-version"
+ permissions:
+ contents: write
+ pull-requests: write
+ runs-on: ubuntu-latest
+ steps:
+ # Checkout repo to Github Actions runner
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+
+ - name: 'Update the content of platform/shared/.sdk_version'
+ run: |
+ echo -n '${{ inputs.version }}' > $file
+ echo "Updated content of '$file' file:"
+ cat $file
+ env:
+ file: 'platform/shared/.sdk_version'
+
+ - name: 'Create Github Token'
+ id: org-pr-create-token
+ uses: getsentry/action-github-app-token@d4b5da6c5e37703f8c3b3e43abb5705b46e159cc # v3.0.0
+ with:
+ app_id: ${{ secrets.ORG_PROTO_SYNC_APP_ID }}
+ private_key: ${{ secrets.ORG_PROTO_SYNC_APP_KEY }}
+
+ - name: 'Commiting the changes'
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ run: |
+ git checkout -b "update-sdk-version-${{ inputs.version }}"
+ git \
+ -c author.name="${{ github.actor }}" \
+ -c author.email="${{ github.actor_id }}+${{ github.actor }}@users.noreply.github.com" \
+ -c user.name="GitHub Action" \
+ -c user.email="noreply@github.com" \
+ commit \
+ -am 'Update SDK version to ${{ inputs.version }}'
+ git push origin "update-sdk-version-${{ inputs.version }}"
+
+ - name: 'Create Pull Request'
+ env:
+ GITHUB_TOKEN: ${{ steps.org-pr-create-token.outputs.token }}
+ run: |
+ gh pr create --fill
+ gh pr merge --auto --squash --delete-branch
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 00000000..383261b7
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,30 @@
+# IDEA
+.aswb
+.idea
+.ijwb
+
+# Bazel
+/bazel-*
+
+compile_commands.json
+.DS_Store
+/dist
+!/dist/*.py
+!/dist/BUILD
+!/dist/file/BUILD
+!/dist/WORKSPACE
+*.egg-info/
+/external
+/tmp
+/target
+*.xcodeproj
+rust-project.json
+.cache
+
+# Profiling
+/buffers
+/config.pb
+/flame.svg
+/perf.data
+/perf.data.old
+vendor
diff --git a/.swiftlint.yml b/.swiftlint.yml
new file mode 100644
index 00000000..47bca29f
--- /dev/null
+++ b/.swiftlint.yml
@@ -0,0 +1,168 @@
+only_rules:
+ - array_init
+ - attributes
+ - block_based_kvo
+ - class_delegate_protocol
+ - closing_brace
+ - closure_end_indentation
+ - closure_parameter_position
+ - closure_spacing
+ - collection_alignment
+ - colon
+ - comma
+ - comment_spacing
+ - conditional_returns_on_newline
+ - contains_over_filter_count
+ - contains_over_filter_is_empty
+ - contains_over_first_not_nil
+ - contains_over_range_nil_comparison
+ - control_statement
+ - custom_rules
+ - cyclomatic_complexity
+ - deployment_target
+ - direct_return
+ - discarded_notification_center_observer
+ - discouraged_direct_init
+ - discouraged_object_literal
+ - duplicate_conditions
+ - duplicate_enum_cases
+ - duplicate_imports
+ - dynamic_inline
+ - empty_collection_literal
+ - empty_enum_arguments
+ - empty_parameters
+ - empty_parentheses_with_trailing_closure
+ - empty_string
+ - empty_xctest_method
+ - explicit_init
+ - fallthrough
+ - fatal_error_message
+ - file_header
+ - file_length
+ - file_name_no_space
+ - first_where
+ - flatmap_over_map_reduce
+ - for_where
+ - force_cast
+ - force_try
+ - force_unwrapping
+ - function_body_length
+ - generic_type_name
+ - identical_operands
+ - identifier_name
+ - implicit_getter
+ - inclusive_language
+ - invalid_swiftlint_command
+ - is_disjoint
+ - leading_whitespace
+ - legacy_cggeometry_functions
+ - legacy_constant
+ - legacy_constructor
+ - legacy_multiple
+ - legacy_nsgeometry_functions
+ - legacy_random
+ - line_length
+ - literal_expression_end_indentation
+ - lower_acl_than_parent
+ - mark
+ - modifier_order
+ - no_space_in_method_call
+ - nsobject_prefer_isequal
+ - operator_whitespace
+ - optional_enum_case_matching
+ - orphaned_doc_comment
+ - overridden_super_call
+ - period_spacing
+ - prefer_self_type_over_type_of_self
+ - prefixed_toplevel_constant
+ - private_outlet
+ - private_over_fileprivate
+ - private_unit_test
+ - prohibited_super_call
+ - protocol_property_accessors_order
+ - reduce_boolean
+ - redundant_discardable_let
+ - redundant_nil_coalescing
+ - redundant_objc_attribute
+ - redundant_optional_initialization
+ - redundant_set_access_control
+ - redundant_void_return
+ - return_arrow_whitespace
+ - self_binding
+ - self_in_property_initialization
+ - shorthand_operator
+ - shorthand_optional_binding
+ - single_test_class
+ - sorted_imports
+ - statement_position
+ - superfluous_disable_command
+ - switch_case_alignment
+ - switch_case_on_newline
+ - syntactic_sugar
+ - test_case_accessibility
+ - toggle_bool
+ - trailing_comma
+ - trailing_newline
+ - trailing_semicolon
+ - trailing_whitespace
+ - type_body_length
+ - unavailable_function
+ - unneeded_break_in_switch
+ - unneeded_parentheses_in_closure_argument
+ - unused_closure_parameter
+ - unused_control_flow_label
+ - unused_enumerated
+ - unused_optional_binding
+ - valid_ibinspectable
+ - vertical_parameter_alignment
+ - vertical_parameter_alignment_on_call
+ - vertical_whitespace
+ - vertical_whitespace_closing_braces
+ - vertical_whitespace_opening_braces
+ - void_return
+ - xctfail_message
+ - yoda_condition
+file_header:
+ required_pattern: |
+ \/\/ capture-sdk - bitdrift's client SDK
+ \/\/ Copyright Bitdrift, Inc. All rights reserved.
+ \/\/
+ \/\/ Use of this source code is governed by a source available license that can be found in the
+ \/\/ LICENSE file or at:
+ \/\/ https://polyformproject.org/wp-content/uploads/2020/06/PolyForm-Shield-1.0.0.txt
+trailing_comma:
+ mandatory_comma: true
+custom_rules:
+ no_background_qos:
+ name: "Don't use `background` QoS since tasks with this priority may end up not being executed for hours (see https://developer.apple.com/library/archive/documentation/Performance/Conceptual/EnergyGuide-iOS/PrioritizeWorkWithQoS.html)."
+ regex: '(qos: \.background|qualityOfService = \.background)'
+ no_notification_center_remove_observer_in_deinit:
+ name: "Don't remove self from NotificationCenter observers in deinit. This happens automatically since iOS 9."
+ regex: 'deinit\s*\{.*NotificationCenter\.default\.removeObserver\(self\).*\}'
+# Remove ambiguity around protocol access levels influencing protocol members.
+# Members of `public` protocols are `public` by default which is not consistent
+# with standard default `internal` access level for members in Swift.
+ no_public_extension:
+ name: "Don't make extensions public, make members public instead"
+ regex: '^\s*public\s+extension\s+'
+ no_void:
+ name: "Use () instead of Void()"
+ regex: '\bVoid\(\)'
+ no_xctestcase_wait:
+ name: "Use XCTWaiter.wait instead of self.wait"
+ regex: '^\s*(self\.)?wait\(for:'
+ singleline_foreach:
+ name: "Use of forEach should not exceed a single line"
+ regex: '\.forEach\s*\(?\s*\{[^\n}]*\n'
+ use_static_string_url_init:
+ name: "Use `URL(staticString:)`."
+ regex: 'URL\(string: "[/\w.:?%]+"\)!'
+trailing_whitespace:
+ ignores_comments: false
+ ignores_empty_lines: false
+line_length:
+ - 110
+function_body_length:
+ - 50
+type_body_length:
+ - 400
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 00000000..5f45120c
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,11 @@
+{
+ "evenBetterToml.formatter.alignComments": true,
+ "evenBetterToml.formatter.alignEntries": true,
+ "evenBetterToml.formatter.allowedBlankLines": 2,
+ "evenBetterToml.formatter.arrayAutoCollapse": true,
+ "evenBetterToml.formatter.arrayAutoExpand": true,
+ "evenBetterToml.formatter.arrayTrailingComma": true,
+ "evenBetterToml.formatter.columnWidth": 120,
+ "evenBetterToml.formatter.reorderKeys": true,
+ "evenBetterToml.formatter.trailingNewline": true
+}
diff --git a/BUILD b/BUILD
new file mode 100644
index 00000000..9a76f975
--- /dev/null
+++ b/BUILD
@@ -0,0 +1,255 @@
+load("@build_bazel_rules_apple//apple:apple.bzl", "apple_static_framework_import")
+load(
+ "@io_bazel_rules_kotlin//kotlin:core.bzl",
+ "define_kt_toolchain",
+ "kt_compiler_plugin",
+ "kt_kotlinc_options",
+)
+load(
+ "@io_bazel_rules_kotlin//kotlin:jvm.bzl",
+ "kt_javac_options",
+)
+load("@rules_java//java:defs.bzl", "java_binary")
+load("@rules_pkg//:pkg.bzl", "pkg_zip")
+load(
+ "@rules_xcodeproj//xcodeproj:defs.bzl",
+ "top_level_targets",
+ "xcodeproj",
+ "xcschemes",
+)
+load("//bazel:android_debug_info.bzl", "android_debug_info")
+load("//bazel:framework_imports_extractor.bzl", "framework_imports_extractor")
+load("//bazel/android:artifacts.bzl", "android_artifacts")
+load("//bazel/ios:hack.bzl", "workaround_rust_symbols")
+
+alias(
+ name = "ios_app",
+ actual = "//examples/swift/hello_world:ios_app",
+)
+
+alias(
+ name = "android_app",
+ actual = "//examples/android:android_app",
+)
+
+workaround_rust_symbols(
+ name = "ios_xcframework_with_rust_symbols",
+ out = "Capture.xcframework.zip",
+ visibility = ["//visibility:public"],
+ xcframework = "//platform/swift/source:Capture",
+)
+
+pkg_zip(
+ name = "ios_dist",
+ srcs = [
+ ":ios_xcframework_with_rust_symbols",
+ ":license",
+ "//platform/swift/source:Capture.doccarchive",
+ ],
+ out = "Capture.ios.zip",
+ tags = ["local"],
+ visibility = ["//visibility:public"],
+)
+
+# Ideally it should live inside of platform/swift/source directory
+# but its implementation depends on it being located in a root directory.
+apple_static_framework_import(
+ name = "capture_apple_static_framework_import",
+ framework_imports = [":capture_ios_framework_imports"],
+ sdk_dylibs = [
+ "resolv.9",
+ "c++",
+ ],
+ sdk_frameworks = [
+ "Network",
+ "SystemConfiguration",
+ "UIKit",
+ ],
+ visibility = ["//visibility:public"],
+)
+
+framework_imports_extractor(
+ name = "capture_ios_framework_imports",
+ framework = "//platform/swift/source:capture_ios_static_framework",
+ tags = [
+ "no-cache",
+ "no-remote",
+ ],
+)
+
+filegroup(
+ name = "license",
+ srcs = [
+ "ci/LICENSE.txt",
+ "ci/NOTICE.txt",
+ ],
+)
+
+android_artifacts(
+ name = "capture_aar",
+ android_library = "//platform/jvm/capture:capture_logger_lib",
+ archive_name = "capture",
+ excluded_artifacts = [
+ "com.google.code.findbugs:jsr305",
+ ],
+ manifest = "//platform/jvm:AndroidManifest.xml",
+ native_deps = select({
+ # When targeting an optimized build, use the stripped binary. The symbols are collected prior to stripping and exposed via capture_symbols below.
+ "//bazel/android:strip_symbols": [":capture.debug_info"],
+ "//conditions:default": ["//platform/jvm:capture"],
+ }),
+ proguard_rules = "//platform/jvm:proguard",
+ visibility = ["//visibility:public"],
+)
+
+android_debug_info(
+ name = "capture.debug_info",
+ dep = "//platform/jvm:capture",
+ tags = ["manual"],
+)
+
+# Combines all the symbols outputted by the above aar into a single symbols.tar file.
+genrule(
+ name = "capture_symbols",
+ srcs = [
+ ":capture_aar_objdump_collector",
+ ],
+ outs = ["symbols.tar"],
+ cmd = """
+ out="$$(pwd)/$(OUTS)"
+
+ mkdir -p tmp/
+ for artifact in "$(SRCS)"; do
+ cp $$artifact ./tmp/
+ done
+
+ cd tmp/
+ tar cvf "$$out" *
+ """,
+ tools = ["//bazel:zipper"],
+)
+
+exports_files([
+ "rustfmt.toml",
+ ".clippy.toml",
+])
+
+kt_kotlinc_options(
+ name = "kt_kotlinc_options",
+)
+
+kt_javac_options(
+ name = "kt_javac_options",
+)
+
+define_kt_toolchain(
+ name = "kotlin_toolchain",
+ api_version = "1.9",
+ experimental_use_abi_jars = True,
+ javac_options = "//:kt_javac_options",
+ jvm_target = "1.8",
+ kotlinc_options = "//:kt_kotlinc_options",
+ language_version = "1.9",
+)
+
+# Define the compose compiler plugin
+# Used by referencing //:jetpack_compose_compiler_plugin
+kt_compiler_plugin(
+ name = "jetpack_compose_compiler_plugin",
+ id = "androidx.compose.compiler",
+ target_embedded_compiler = True,
+ visibility = ["//visibility:public"],
+ deps = [
+ "@maven//:androidx_compose_compiler_compiler",
+ ],
+)
+
+xcodeproj(
+ name = "xcodeproj",
+ bazel_path = "./bazelw",
+ build_mode = "bazel",
+ default_xcode_configuration = "Debug",
+ generation_mode = "incremental",
+ project_name = "Capture",
+ tags = ["manual"],
+ top_level_targets = [
+ # Apps
+ top_level_targets(
+ labels = [
+ "//examples/swift/hello_world:hello_world_app",
+ "//examples/objective-c:hello_world_app",
+ "//examples/swift/session_replay_preview:session_replay_preview_app",
+ "//examples/swift/benchmark:benchmark_app",
+ # Tests
+ # Running benchmark tests doesn't work on real devices
+ # See https://github.com/MobileNativeFoundation/rules_xcodeproj/issues/2395
+ # for more details.
+ "//test/platform/swift/benchmark:run_benchmarks",
+ ],
+ target_environments = [
+ "device",
+ "simulator",
+ ],
+ ),
+ # Tests
+ "//test/platform/swift/unit_integration:test",
+ ],
+ xcode_configurations = {
+ "Debug": {
+ "//command_line_option:compilation_mode": "dbg",
+ "//command_line_option:features": [],
+ },
+ "Release": {
+ "//command_line_option:compilation_mode": "opt",
+ "//command_line_option:features": ["swift.enable_testing"],
+ },
+ },
+ xcschemes = [
+ xcschemes.scheme(
+ name = "iOS Hello World App",
+ run = xcschemes.run(
+ launch_target = xcschemes.launch_target("//examples/swift/hello_world:hello_world_app"),
+ ),
+ ),
+ xcschemes.scheme(
+ name = "iOS Hello World (ObjC)",
+ run = xcschemes.run(
+ launch_target = xcschemes.launch_target("//examples/objective-c:hello_world_app"),
+ ),
+ ),
+ xcschemes.scheme(
+ name = "iOS Session Replay App",
+ run = xcschemes.run(
+ launch_target = xcschemes.launch_target("//examples/swift/session_replay_preview:session_replay_preview_app"),
+ ),
+ ),
+ xcschemes.scheme(
+ name = "iOS Benchmark App",
+ run = xcschemes.run(
+ launch_target = xcschemes.launch_target("//examples/swift/benchmark:benchmark_app"),
+ ),
+ ),
+ xcschemes.scheme(
+ name = "iOS Capture Unit Integration Tests",
+ test = xcschemes.test(
+ test_targets = [
+ "//test/platform/swift/unit_integration:test",
+ ],
+ ),
+ ),
+ xcschemes.scheme(
+ name = "iOS Benchmark Tests",
+ test = xcschemes.test(
+ test_targets = [
+ "//test/platform/swift/benchmark:run_benchmarks",
+ ],
+ ),
+ ),
+ ],
+)
+
+java_binary(
+ name = "bazel-diff",
+ main_class = "com.bazel_diff.Main",
+ runtime_deps = ["@bazel_diff//jar"],
+)
diff --git a/CLA.md b/CLA.md
new file mode 100644
index 00000000..db7b292b
--- /dev/null
+++ b/CLA.md
@@ -0,0 +1,21 @@
+**Bitdrift Contributor License Agreement**
+
+In order to clarify the intellectual property license granted with Contributions from any person or entity, Bitdrift, Inc. ("Bitdrift") must have a Contributor License Agreement on file that has been signed by each Contributor, indicating agreement to the license terms below.
+
+You accept and agree to the following terms and conditions for Your present and future Contributions submitted to Bitdrift. Except for the license granted herein to Bitdrift and recipients of software distributed by Bitdrift, You reserve all right, title, and interest in and to Your Contributions.
+
+1\. Definitions.
+
+"You" (or "Your") shall mean the copyright owner or legal entity authorized by the copyright owner that is making this Agreement with Bitdrift. For legal entities, the entity making a Contribution and all other entities that control, are controlled by, or are under common control with that entity are considered to be a single Contributor. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+"Contribution" shall mean any original work of authorship, including any modifications or additions to an existing work, that is intentionally submitted by You to Bitdrift for inclusion in, or documentation of, any of the products owned or managed by Bitdrift (the "Work"). For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to Bitdrift or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, Bitdrift for the purpose of discussing and improving the Work.
+
+2\. Grant of Copyright License. Subject to the terms and conditions of this Agreement, You hereby grant to Bitdrift and to recipients of software distributed by Bitdrift a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, and distribute Your Contributions and such derivative works.
+
+3\. Grant of Patent License. Subject to the terms and conditions of this Agreement, You hereby grant to Bitdrift and to recipients of software distributed by Bitdrift a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by You that are necessarily infringed by Your Contribution(s) alone or by combination of Your Contribution(s) with the Work to which such Contribution(s) was submitted. If any entity institutes patent litigation against You or any other entity (including a cross-claim or counterclaim in a lawsuit) alleging that your Contribution, or the Work to which you have contributed, constitutes direct or contributory patent infringement, then any patent licenses granted to that entity under this Agreement for that Contribution or Work shall terminate as of the date such litigation is filed.
+
+4\. You represent that you are legally entitled to grant the above license. If you are contributing on your own individual behalf, and your employer(s) has rights to intellectual property that you create that includes your Contributions, you represent that you have received permission to make Contributions on behalf of that employer, that your employer has waived such rights for your Contributions to Bitdrift, or that your employer has executed a separate Corporate CLA with Bitdrift. If you are contributing on behalf of an entity, you represent that you are authorized by that entity to make your Contributions.
+
+5\. You represent that each of Your Contributions is Your original creation (see section 7 for submissions on behalf of others). You represent that Your Contribution submissions include complete details of any third-party license or other restriction (including, but not limited to, related patents and trademarks) of which you are personally aware and which are associated with any part of Your Contributions.
+
+6\. You provide Your Contributions on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON- INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE.
diff --git a/Cargo.Bazel.lock b/Cargo.Bazel.lock
new file mode 100644
index 00000000..5cda1540
--- /dev/null
+++ b/Cargo.Bazel.lock
@@ -0,0 +1,21074 @@
+{
+ "checksum": "1c0b0ba664ad4b267d43db44407b2f5a8066bbe33d272fbb409fa397d1ee03d8",
+ "crates": {
+ "addr2line 0.22.0": {
+ "name": "addr2line",
+ "version": "0.22.0",
+ "package_url": "https://github.com/gimli-rs/addr2line",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/addr2line/0.22.0/download",
+ "sha256": "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "addr2line",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "addr2line",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "gimli 0.29.0",
+ "target": "gimli"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.22.0"
+ },
+ "license": "Apache-2.0 OR MIT",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "adler 1.0.2": {
+ "name": "adler",
+ "version": "1.0.2",
+ "package_url": "https://github.com/jonas-schievink/adler.git",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/adler/1.0.2/download",
+ "sha256": "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "adler",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "adler",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2015",
+ "version": "1.0.2"
+ },
+ "license": "0BSD OR MIT OR Apache-2.0",
+ "license_ids": [
+ "0BSD",
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-0BSD"
+ },
+ "adler2 2.0.0": {
+ "name": "adler2",
+ "version": "2.0.0",
+ "package_url": "https://github.com/oyvindln/adler2",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/adler2/2.0.0/download",
+ "sha256": "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "adler2",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "adler2",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2021",
+ "version": "2.0.0"
+ },
+ "license": "0BSD OR MIT OR Apache-2.0",
+ "license_ids": [
+ "0BSD",
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-0BSD"
+ },
+ "aho-corasick 1.1.3": {
+ "name": "aho-corasick",
+ "version": "1.1.3",
+ "package_url": "https://github.com/BurntSushi/aho-corasick",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/aho-corasick/1.1.3/download",
+ "sha256": "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "aho_corasick",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "aho_corasick",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "perf-literal",
+ "std"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "memchr 2.7.4",
+ "target": "memchr"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "1.1.3"
+ },
+ "license": "Unlicense OR MIT",
+ "license_ids": [
+ "MIT",
+ "Unlicense"
+ ],
+ "license_file": "LICENSE-MIT"
+ },
+ "android-tzdata 0.1.1": {
+ "name": "android-tzdata",
+ "version": "0.1.1",
+ "package_url": "https://github.com/RumovZ/android-tzdata",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/android-tzdata/0.1.1/download",
+ "sha256": "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "android_tzdata",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "android_tzdata",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2018",
+ "version": "0.1.1"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "android_log-sys 0.3.1": {
+ "name": "android_log-sys",
+ "version": "0.3.1",
+ "package_url": "https://github.com/rust-mobile/android_log-sys-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/android_log-sys/0.3.1/download",
+ "sha256": "5ecc8056bf6ab9892dcd53216c83d1597487d7dacac16c8df6b877d127df9937"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "android_log_sys",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "android_log_sys",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2015",
+ "version": "0.3.1"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "android_logger 0.14.1": {
+ "name": "android_logger",
+ "version": "0.14.1",
+ "package_url": "https://github.com/rust-mobile/android_logger-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/android_logger/0.14.1/download",
+ "sha256": "05b07e8e73d720a1f2e4b6014766e6039fd2e96a4fa44e2a78d0e1fa2ff49826"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "android_logger",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "android_logger",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "android_log-sys 0.3.1",
+ "target": "android_log_sys"
+ },
+ {
+ "id": "env_filter 0.1.2",
+ "target": "env_filter"
+ },
+ {
+ "id": "log 0.4.22",
+ "target": "log"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.14.1"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "android_system_properties 0.1.5": {
+ "name": "android_system_properties",
+ "version": "0.1.5",
+ "package_url": "https://github.com/nical/android_system_properties",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/android_system_properties/0.1.5/download",
+ "sha256": "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "android_system_properties",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "android_system_properties",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.1.5"
+ },
+ "license": "MIT/Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "anes 0.1.6": {
+ "name": "anes",
+ "version": "0.1.6",
+ "package_url": "https://github.com/zrzka/anes-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/anes/0.1.6/download",
+ "sha256": "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "anes",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "anes",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default"
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.1.6"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": null
+ },
+ "anstyle 1.0.8": {
+ "name": "anstyle",
+ "version": "1.0.8",
+ "package_url": "https://github.com/rust-cli/anstyle.git",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/anstyle/1.0.8/download",
+ "sha256": "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "anstyle",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "anstyle",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default",
+ "std"
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "1.0.8"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "anyhow 1.0.86": {
+ "name": "anyhow",
+ "version": "1.0.86",
+ "package_url": "https://github.com/dtolnay/anyhow",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/anyhow/1.0.86/download",
+ "sha256": "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "anyhow",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "anyhow",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default",
+ "std"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "anyhow 1.0.86",
+ "target": "build_script_build"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "1.0.86"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ]
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "arc-swap 1.7.1": {
+ "name": "arc-swap",
+ "version": "1.7.1",
+ "package_url": "https://github.com/vorner/arc-swap",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/arc-swap/1.7.1/download",
+ "sha256": "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "arc_swap",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "arc_swap",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2018",
+ "version": "1.7.1"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "assert_matches 1.5.0": {
+ "name": "assert_matches",
+ "version": "1.5.0",
+ "package_url": "https://github.com/murarth/assert_matches",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/assert_matches/1.5.0/download",
+ "sha256": "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "assert_matches",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "assert_matches",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2015",
+ "version": "1.5.0"
+ },
+ "license": "MIT/Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "async-trait 0.1.81": {
+ "name": "async-trait",
+ "version": "0.1.81",
+ "package_url": "https://github.com/dtolnay/async-trait",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/async-trait/0.1.81/download",
+ "sha256": "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107"
+ }
+ },
+ "targets": [
+ {
+ "ProcMacro": {
+ "crate_name": "async_trait",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "async_trait",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "proc-macro2 1.0.86",
+ "target": "proc_macro2"
+ },
+ {
+ "id": "quote 1.0.36",
+ "target": "quote"
+ },
+ {
+ "id": "syn 2.0.75",
+ "target": "syn"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.1.81"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "atomic-waker 1.1.2": {
+ "name": "atomic-waker",
+ "version": "1.1.2",
+ "package_url": "https://github.com/smol-rs/atomic-waker",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/atomic-waker/1.1.2/download",
+ "sha256": "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "atomic_waker",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "atomic_waker",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2018",
+ "version": "1.1.2"
+ },
+ "license": "Apache-2.0 OR MIT",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "autocfg 1.3.0": {
+ "name": "autocfg",
+ "version": "1.3.0",
+ "package_url": "https://github.com/cuviper/autocfg",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/autocfg/1.3.0/download",
+ "sha256": "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "autocfg",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "autocfg",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2015",
+ "version": "1.3.0"
+ },
+ "license": "Apache-2.0 OR MIT",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "axum 0.7.5": {
+ "name": "axum",
+ "version": "0.7.5",
+ "package_url": "https://github.com/tokio-rs/axum",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/axum/0.7.5/download",
+ "sha256": "3a6c9af12842a67734c9a2e355436e5d03b22383ed60cf13cd0c18fbfe3dcbcf"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "axum",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "axum",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default",
+ "form",
+ "http1",
+ "http2",
+ "json",
+ "matched-path",
+ "original-uri",
+ "query",
+ "tokio",
+ "tower-log",
+ "tracing"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "axum 0.7.5",
+ "target": "build_script_build"
+ },
+ {
+ "id": "axum-core 0.4.3",
+ "target": "axum_core"
+ },
+ {
+ "id": "bytes 1.7.1",
+ "target": "bytes"
+ },
+ {
+ "id": "futures-util 0.3.30",
+ "target": "futures_util"
+ },
+ {
+ "id": "http 1.1.0",
+ "target": "http"
+ },
+ {
+ "id": "http-body 1.0.1",
+ "target": "http_body"
+ },
+ {
+ "id": "http-body-util 0.1.2",
+ "target": "http_body_util"
+ },
+ {
+ "id": "hyper 1.4.1",
+ "target": "hyper"
+ },
+ {
+ "id": "hyper-util 0.1.7",
+ "target": "hyper_util"
+ },
+ {
+ "id": "itoa 1.0.11",
+ "target": "itoa"
+ },
+ {
+ "id": "matchit 0.7.3",
+ "target": "matchit"
+ },
+ {
+ "id": "memchr 2.7.4",
+ "target": "memchr"
+ },
+ {
+ "id": "mime 0.3.17",
+ "target": "mime"
+ },
+ {
+ "id": "percent-encoding 2.3.1",
+ "target": "percent_encoding"
+ },
+ {
+ "id": "pin-project-lite 0.2.14",
+ "target": "pin_project_lite"
+ },
+ {
+ "id": "serde 1.0.208",
+ "target": "serde"
+ },
+ {
+ "id": "serde_json 1.0.125",
+ "target": "serde_json"
+ },
+ {
+ "id": "serde_path_to_error 0.1.16",
+ "target": "serde_path_to_error"
+ },
+ {
+ "id": "serde_urlencoded 0.7.1",
+ "target": "serde_urlencoded"
+ },
+ {
+ "id": "sync_wrapper 1.0.1",
+ "target": "sync_wrapper"
+ },
+ {
+ "id": "tokio 1.39.3",
+ "target": "tokio"
+ },
+ {
+ "id": "tower 0.4.13",
+ "target": "tower"
+ },
+ {
+ "id": "tower-layer 0.3.3",
+ "target": "tower_layer"
+ },
+ {
+ "id": "tower-service 0.3.3",
+ "target": "tower_service"
+ },
+ {
+ "id": "tracing 0.1.40",
+ "target": "tracing"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "proc_macro_deps": {
+ "common": [
+ {
+ "id": "async-trait 0.1.81",
+ "target": "async_trait"
+ }
+ ],
+ "selects": {}
+ },
+ "version": "0.7.5"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ],
+ "proc_macro_deps": {
+ "common": [
+ {
+ "id": "rustversion 1.0.17",
+ "target": "rustversion"
+ }
+ ],
+ "selects": {}
+ }
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE"
+ },
+ "axum-core 0.4.3": {
+ "name": "axum-core",
+ "version": "0.4.3",
+ "package_url": "https://github.com/tokio-rs/axum",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/axum-core/0.4.3/download",
+ "sha256": "a15c63fd72d41492dc4f497196f5da1fb04fb7529e631d73630d1b491e47a2e3"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "axum_core",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "axum_core",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "tracing"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "axum-core 0.4.3",
+ "target": "build_script_build"
+ },
+ {
+ "id": "bytes 1.7.1",
+ "target": "bytes"
+ },
+ {
+ "id": "futures-util 0.3.30",
+ "target": "futures_util"
+ },
+ {
+ "id": "http 1.1.0",
+ "target": "http"
+ },
+ {
+ "id": "http-body 1.0.1",
+ "target": "http_body"
+ },
+ {
+ "id": "http-body-util 0.1.2",
+ "target": "http_body_util"
+ },
+ {
+ "id": "mime 0.3.17",
+ "target": "mime"
+ },
+ {
+ "id": "pin-project-lite 0.2.14",
+ "target": "pin_project_lite"
+ },
+ {
+ "id": "sync_wrapper 0.1.2",
+ "target": "sync_wrapper"
+ },
+ {
+ "id": "tower-layer 0.3.3",
+ "target": "tower_layer"
+ },
+ {
+ "id": "tower-service 0.3.3",
+ "target": "tower_service"
+ },
+ {
+ "id": "tracing 0.1.40",
+ "target": "tracing"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "proc_macro_deps": {
+ "common": [
+ {
+ "id": "async-trait 0.1.81",
+ "target": "async_trait"
+ }
+ ],
+ "selects": {}
+ },
+ "version": "0.4.3"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ],
+ "proc_macro_deps": {
+ "common": [
+ {
+ "id": "rustversion 1.0.17",
+ "target": "rustversion"
+ }
+ ],
+ "selects": {}
+ }
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE"
+ },
+ "axum-server 0.7.1": {
+ "name": "axum-server",
+ "version": "0.7.1",
+ "package_url": "https://github.com/programatik29/axum-server",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/axum-server/0.7.1/download",
+ "sha256": "56bac90848f6a9393ac03c63c640925c4b7c8ca21654de40d53f55964667c7d8"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "axum_server",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "axum_server",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "arc-swap",
+ "default",
+ "rustls",
+ "rustls-pemfile",
+ "rustls-pki-types",
+ "tls-rustls-no-provider",
+ "tokio-rustls"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "arc-swap 1.7.1",
+ "target": "arc_swap"
+ },
+ {
+ "id": "bytes 1.7.1",
+ "target": "bytes"
+ },
+ {
+ "id": "futures-util 0.3.30",
+ "target": "futures_util"
+ },
+ {
+ "id": "http 1.1.0",
+ "target": "http"
+ },
+ {
+ "id": "http-body 1.0.1",
+ "target": "http_body"
+ },
+ {
+ "id": "http-body-util 0.1.2",
+ "target": "http_body_util"
+ },
+ {
+ "id": "hyper 1.4.1",
+ "target": "hyper"
+ },
+ {
+ "id": "hyper-util 0.1.7",
+ "target": "hyper_util"
+ },
+ {
+ "id": "pin-project-lite 0.2.14",
+ "target": "pin_project_lite"
+ },
+ {
+ "id": "rustls 0.23.12",
+ "target": "rustls"
+ },
+ {
+ "id": "rustls-pemfile 2.1.3",
+ "target": "rustls_pemfile"
+ },
+ {
+ "id": "rustls-pki-types 1.8.0",
+ "target": "rustls_pki_types"
+ },
+ {
+ "id": "tokio 1.39.3",
+ "target": "tokio"
+ },
+ {
+ "id": "tokio-rustls 0.26.0",
+ "target": "tokio_rustls"
+ },
+ {
+ "id": "tower 0.4.13",
+ "target": "tower"
+ },
+ {
+ "id": "tower-service 0.3.3",
+ "target": "tower_service"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.7.1"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE"
+ },
+ "backoff 0.4.0": {
+ "name": "backoff",
+ "version": "0.4.0",
+ "package_url": "https://github.com/ihrwein/backoff",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/backoff/0.4.0/download",
+ "sha256": "b62ddb9cb1ec0a098ad4bbf9344d0713fa193ae1a80af55febcff2627b6a00c1"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "backoff",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "backoff",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "getrandom 0.2.15",
+ "target": "getrandom"
+ },
+ {
+ "id": "instant 0.1.13",
+ "target": "instant"
+ },
+ {
+ "id": "rand 0.8.5",
+ "target": "rand"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.4.0"
+ },
+ "license": "MIT/Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "backtrace 0.3.73": {
+ "name": "backtrace",
+ "version": "0.3.73",
+ "package_url": "https://github.com/rust-lang/backtrace-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/backtrace/0.3.73/download",
+ "sha256": "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "backtrace",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "backtrace",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "backtrace 0.3.73",
+ "target": "build_script_build"
+ },
+ {
+ "id": "cfg-if 1.0.0",
+ "target": "cfg_if"
+ },
+ {
+ "id": "rustc-demangle 0.1.24",
+ "target": "rustc_demangle"
+ }
+ ],
+ "selects": {
+ "cfg(not(all(windows, target_env = \"msvc\", not(target_vendor = \"uwp\"))))": [
+ {
+ "id": "addr2line 0.22.0",
+ "target": "addr2line"
+ },
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ },
+ {
+ "id": "miniz_oxide 0.7.4",
+ "target": "miniz_oxide"
+ },
+ {
+ "id": "object 0.36.3",
+ "target": "object"
+ }
+ ]
+ }
+ },
+ "edition": "2021",
+ "version": "0.3.73"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "cc 1.1.13",
+ "target": "cc"
+ }
+ ],
+ "selects": {}
+ }
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "base64 0.22.1": {
+ "name": "base64",
+ "version": "0.22.1",
+ "package_url": "https://github.com/marshallpierce/rust-base64",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/base64/0.22.1/download",
+ "sha256": "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "base64",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "base64",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "alloc",
+ "default",
+ "std"
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.22.1"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "base64ct 1.6.0": {
+ "name": "base64ct",
+ "version": "1.6.0",
+ "package_url": "https://github.com/RustCrypto/formats/tree/master/base64ct",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/base64ct/1.6.0/download",
+ "sha256": "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "base64ct",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "base64ct",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "alloc",
+ "std"
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "1.6.0"
+ },
+ "license": "Apache-2.0 OR MIT",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "bd-api 1.0.0": {
+ "name": "bd-api",
+ "version": "1.0.0",
+ "package_url": null,
+ "repository": {
+ "Git": {
+ "remote": "https://github.com/bitdriftlabs/shared-core.git",
+ "commitish": {
+ "Rev": "4946752bd2a4e18c20645722bd5d567d62c43d9f"
+ },
+ "strip_prefix": "bd-api"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "bd_api",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "bd_api",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "anyhow 1.0.86",
+ "target": "anyhow"
+ },
+ {
+ "id": "backoff 0.4.0",
+ "target": "backoff"
+ },
+ {
+ "id": "bd-client-common 1.0.0",
+ "target": "bd_client_common"
+ },
+ {
+ "id": "bd-client-stats-store 1.0.0",
+ "target": "bd_client_stats_store"
+ },
+ {
+ "id": "bd-device 1.0.0",
+ "target": "bd_device"
+ },
+ {
+ "id": "bd-grpc-codec 1.0.0",
+ "target": "bd_grpc_codec"
+ },
+ {
+ "id": "bd-internal-logging 1.0.0",
+ "target": "bd_internal_logging"
+ },
+ {
+ "id": "bd-metadata 1.0.0",
+ "target": "bd_metadata"
+ },
+ {
+ "id": "bd-pgv 1.0.0",
+ "target": "bd_pgv"
+ },
+ {
+ "id": "bd-proto 1.0.0",
+ "target": "bd_proto"
+ },
+ {
+ "id": "bd-runtime 1.0.0",
+ "target": "bd_runtime"
+ },
+ {
+ "id": "bd-shutdown 1.0.0",
+ "target": "bd_shutdown"
+ },
+ {
+ "id": "bd-time 1.0.0",
+ "target": "bd_time"
+ },
+ {
+ "id": "log 0.4.22",
+ "target": "log"
+ },
+ {
+ "id": "protobuf 4.0.0-alpha.0",
+ "target": "protobuf"
+ },
+ {
+ "id": "time 0.3.36",
+ "target": "time"
+ },
+ {
+ "id": "tokio 1.39.3",
+ "target": "tokio"
+ },
+ {
+ "id": "tracing 0.1.40",
+ "target": "tracing"
+ },
+ {
+ "id": "uuid 1.10.0",
+ "target": "uuid"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "proc_macro_deps": {
+ "common": [
+ {
+ "id": "async-trait 0.1.81",
+ "target": "async_trait"
+ }
+ ],
+ "selects": {}
+ },
+ "version": "1.0.0"
+ },
+ "license": null,
+ "license_ids": [],
+ "license_file": "../LICENSE"
+ },
+ "bd-buffer 1.0.0": {
+ "name": "bd-buffer",
+ "version": "1.0.0",
+ "package_url": null,
+ "repository": {
+ "Git": {
+ "remote": "https://github.com/bitdriftlabs/shared-core.git",
+ "commitish": {
+ "Rev": "4946752bd2a4e18c20645722bd5d567d62c43d9f"
+ },
+ "strip_prefix": "bd-buffer"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "bd_buffer",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "bd_buffer",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "anyhow 1.0.86",
+ "target": "anyhow"
+ },
+ {
+ "id": "bd-client-common 1.0.0",
+ "target": "bd_client_common"
+ },
+ {
+ "id": "bd-client-stats-store 1.0.0",
+ "target": "bd_client_stats_store"
+ },
+ {
+ "id": "bd-completion 1.0.0",
+ "target": "bd_completion"
+ },
+ {
+ "id": "bd-proto 1.0.0",
+ "target": "bd_proto"
+ },
+ {
+ "id": "bd-runtime 1.0.0",
+ "target": "bd_runtime"
+ },
+ {
+ "id": "bd-stats-common 1.0.0",
+ "target": "bd_stats_common"
+ },
+ {
+ "id": "crc32fast 1.4.2",
+ "target": "crc32fast"
+ },
+ {
+ "id": "fs2 0.4.3",
+ "target": "fs2"
+ },
+ {
+ "id": "futures 0.3.30",
+ "target": "futures"
+ },
+ {
+ "id": "intrusive-collections 0.9.6",
+ "target": "intrusive_collections"
+ },
+ {
+ "id": "log 0.4.22",
+ "target": "log"
+ },
+ {
+ "id": "memmap2 0.9.4",
+ "target": "memmap2"
+ },
+ {
+ "id": "parking_lot 0.12.3",
+ "target": "parking_lot"
+ },
+ {
+ "id": "static_assertions 1.1.0",
+ "target": "static_assertions"
+ },
+ {
+ "id": "thiserror 1.0.63",
+ "target": "thiserror"
+ },
+ {
+ "id": "time 0.3.36",
+ "target": "time"
+ },
+ {
+ "id": "tokio 1.39.3",
+ "target": "tokio"
+ },
+ {
+ "id": "tracing 0.1.40",
+ "target": "tracing"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "proc_macro_deps": {
+ "common": [
+ {
+ "id": "async-trait 0.1.81",
+ "target": "async_trait"
+ }
+ ],
+ "selects": {}
+ },
+ "version": "1.0.0"
+ },
+ "license": null,
+ "license_ids": [],
+ "license_file": "../LICENSE"
+ },
+ "bd-client-common 1.0.0": {
+ "name": "bd-client-common",
+ "version": "1.0.0",
+ "package_url": null,
+ "repository": {
+ "Git": {
+ "remote": "https://github.com/bitdriftlabs/shared-core.git",
+ "commitish": {
+ "Rev": "4946752bd2a4e18c20645722bd5d567d62c43d9f"
+ },
+ "strip_prefix": "bd-client-common"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "bd_client_common",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "bd_client_common",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "anyhow 1.0.86",
+ "target": "anyhow"
+ },
+ {
+ "id": "bd-client-stats-store 1.0.0",
+ "target": "bd_client_stats_store"
+ },
+ {
+ "id": "bd-log-primitives 1.0.0",
+ "target": "bd_log_primitives"
+ },
+ {
+ "id": "bd-matcher 1.0.0",
+ "target": "bd_matcher"
+ },
+ {
+ "id": "bd-metadata 1.0.0",
+ "target": "bd_metadata"
+ },
+ {
+ "id": "bd-proto 1.0.0",
+ "target": "bd_proto"
+ },
+ {
+ "id": "flatbuffers 24.3.25",
+ "target": "flatbuffers"
+ },
+ {
+ "id": "log 0.4.22",
+ "target": "log"
+ },
+ {
+ "id": "parking_lot 0.12.3",
+ "target": "parking_lot"
+ },
+ {
+ "id": "protobuf 4.0.0-alpha.0",
+ "target": "protobuf"
+ },
+ {
+ "id": "thiserror 1.0.63",
+ "target": "thiserror"
+ },
+ {
+ "id": "time 0.3.36",
+ "target": "time"
+ },
+ {
+ "id": "tokio 1.39.3",
+ "target": "tokio"
+ },
+ {
+ "id": "uuid 1.10.0",
+ "target": "uuid"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "1.0.0"
+ },
+ "license": null,
+ "license_ids": [],
+ "license_file": "../LICENSE"
+ },
+ "bd-client-stats 1.0.0": {
+ "name": "bd-client-stats",
+ "version": "1.0.0",
+ "package_url": null,
+ "repository": {
+ "Git": {
+ "remote": "https://github.com/bitdriftlabs/shared-core.git",
+ "commitish": {
+ "Rev": "4946752bd2a4e18c20645722bd5d567d62c43d9f"
+ },
+ "strip_prefix": "bd-client-stats"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "bd_client_stats",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "bd_client_stats",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "anyhow 1.0.86",
+ "target": "anyhow"
+ },
+ {
+ "id": "bd-api 1.0.0",
+ "target": "bd_api"
+ },
+ {
+ "id": "bd-client-common 1.0.0",
+ "target": "bd_client_common"
+ },
+ {
+ "id": "bd-client-stats-store 1.0.0",
+ "target": "bd_client_stats_store"
+ },
+ {
+ "id": "bd-completion 1.0.0",
+ "target": "bd_completion"
+ },
+ {
+ "id": "bd-proto 1.0.0",
+ "target": "bd_proto"
+ },
+ {
+ "id": "bd-runtime 1.0.0",
+ "target": "bd_runtime"
+ },
+ {
+ "id": "bd-shutdown 1.0.0",
+ "target": "bd_shutdown"
+ },
+ {
+ "id": "bd-stats-common 1.0.0",
+ "target": "bd_stats_common"
+ },
+ {
+ "id": "bd-time 1.0.0",
+ "target": "bd_time"
+ },
+ {
+ "id": "flate2 1.0.32",
+ "target": "flate2"
+ },
+ {
+ "id": "log 0.4.22",
+ "target": "log"
+ },
+ {
+ "id": "parking_lot 0.12.3",
+ "target": "parking_lot"
+ },
+ {
+ "id": "protobuf 4.0.0-alpha.0",
+ "target": "protobuf"
+ },
+ {
+ "id": "time 0.3.36",
+ "target": "time"
+ },
+ {
+ "id": "tokio 1.39.3",
+ "target": "tokio"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "proc_macro_deps": {
+ "common": [
+ {
+ "id": "async-trait 0.1.81",
+ "target": "async_trait"
+ }
+ ],
+ "selects": {}
+ },
+ "version": "1.0.0"
+ },
+ "license": null,
+ "license_ids": [],
+ "license_file": "../LICENSE"
+ },
+ "bd-client-stats-store 1.0.0": {
+ "name": "bd-client-stats-store",
+ "version": "1.0.0",
+ "package_url": null,
+ "repository": {
+ "Git": {
+ "remote": "https://github.com/bitdriftlabs/shared-core.git",
+ "commitish": {
+ "Rev": "4946752bd2a4e18c20645722bd5d567d62c43d9f"
+ },
+ "strip_prefix": "bd-client-stats-store"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "bd_client_stats_store",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "bd_client_stats_store",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "bd-proto 1.0.0",
+ "target": "bd_proto"
+ },
+ {
+ "id": "bd-stats-common 1.0.0",
+ "target": "bd_stats_common"
+ },
+ {
+ "id": "log 0.4.22",
+ "target": "log"
+ },
+ {
+ "id": "parking_lot 0.12.3",
+ "target": "parking_lot"
+ },
+ {
+ "id": "sketches-rust 0.2.2",
+ "target": "sketches_rust"
+ },
+ {
+ "id": "thiserror 1.0.63",
+ "target": "thiserror"
+ },
+ {
+ "id": "tokio 1.39.3",
+ "target": "tokio"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "1.0.0"
+ },
+ "license": null,
+ "license_ids": [],
+ "license_file": "../LICENSE"
+ },
+ "bd-completion 1.0.0": {
+ "name": "bd-completion",
+ "version": "1.0.0",
+ "package_url": null,
+ "repository": {
+ "Git": {
+ "remote": "https://github.com/bitdriftlabs/shared-core.git",
+ "commitish": {
+ "Rev": "4946752bd2a4e18c20645722bd5d567d62c43d9f"
+ },
+ "strip_prefix": "bd-completion"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "bd_completion",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "bd_completion",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "anyhow 1.0.86",
+ "target": "anyhow"
+ },
+ {
+ "id": "log 0.4.22",
+ "target": "log"
+ },
+ {
+ "id": "tokio 1.39.3",
+ "target": "tokio"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "1.0.0"
+ },
+ "license": null,
+ "license_ids": [],
+ "license_file": "../LICENSE"
+ },
+ "bd-device 1.0.0": {
+ "name": "bd-device",
+ "version": "1.0.0",
+ "package_url": null,
+ "repository": {
+ "Git": {
+ "remote": "https://github.com/bitdriftlabs/shared-core.git",
+ "commitish": {
+ "Rev": "4946752bd2a4e18c20645722bd5d567d62c43d9f"
+ },
+ "strip_prefix": "bd-device"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "bd_device",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "bd_device",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "anyhow 1.0.86",
+ "target": "anyhow"
+ },
+ {
+ "id": "bd-client-common 1.0.0",
+ "target": "bd_client_common"
+ },
+ {
+ "id": "bd-key-value 1.0.0",
+ "target": "bd_key_value"
+ },
+ {
+ "id": "bd-time 1.0.0",
+ "target": "bd_time"
+ },
+ {
+ "id": "log 0.4.22",
+ "target": "log"
+ },
+ {
+ "id": "parking_lot 0.12.3",
+ "target": "parking_lot"
+ },
+ {
+ "id": "serde 1.0.208",
+ "target": "serde"
+ },
+ {
+ "id": "serde_yaml 0.9.34+deprecated",
+ "target": "serde_yaml"
+ },
+ {
+ "id": "time 0.3.36",
+ "target": "time"
+ },
+ {
+ "id": "uuid 1.10.0",
+ "target": "uuid"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "1.0.0"
+ },
+ "license": null,
+ "license_ids": [],
+ "license_file": "../LICENSE"
+ },
+ "bd-events 1.0.0": {
+ "name": "bd-events",
+ "version": "1.0.0",
+ "package_url": null,
+ "repository": {
+ "Git": {
+ "remote": "https://github.com/bitdriftlabs/shared-core.git",
+ "commitish": {
+ "Rev": "4946752bd2a4e18c20645722bd5d567d62c43d9f"
+ },
+ "strip_prefix": "bd-events"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "bd_events",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "bd_events",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "bd-runtime 1.0.0",
+ "target": "bd_runtime"
+ },
+ {
+ "id": "bd-shutdown 1.0.0",
+ "target": "bd_shutdown"
+ },
+ {
+ "id": "log 0.4.22",
+ "target": "log"
+ },
+ {
+ "id": "tokio 1.39.3",
+ "target": "tokio"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "proc_macro_deps": {
+ "common": [
+ {
+ "id": "ctor 0.2.8",
+ "target": "ctor"
+ }
+ ],
+ "selects": {}
+ },
+ "version": "1.0.0"
+ },
+ "license": null,
+ "license_ids": [],
+ "license_file": "../LICENSE"
+ },
+ "bd-grpc 1.0.0": {
+ "name": "bd-grpc",
+ "version": "1.0.0",
+ "package_url": null,
+ "repository": {
+ "Git": {
+ "remote": "https://github.com/bitdriftlabs/shared-core.git",
+ "commitish": {
+ "Rev": "4946752bd2a4e18c20645722bd5d567d62c43d9f"
+ },
+ "strip_prefix": "bd-grpc"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "bd_grpc",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "bd_grpc",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "anyhow 1.0.86",
+ "target": "anyhow"
+ },
+ {
+ "id": "axum 0.7.5",
+ "target": "axum"
+ },
+ {
+ "id": "base64ct 1.6.0",
+ "target": "base64ct"
+ },
+ {
+ "id": "bd-grpc 1.0.0",
+ "target": "build_script_build"
+ },
+ {
+ "id": "bd-grpc-codec 1.0.0",
+ "target": "bd_grpc_codec"
+ },
+ {
+ "id": "bd-log 1.0.0",
+ "target": "bd_log"
+ },
+ {
+ "id": "bd-pgv 1.0.0",
+ "target": "bd_pgv"
+ },
+ {
+ "id": "bd-server-stats 1.0.0",
+ "target": "bd_server_stats"
+ },
+ {
+ "id": "bd-shutdown 1.0.0",
+ "target": "bd_shutdown"
+ },
+ {
+ "id": "bd-stats-common 1.0.0",
+ "target": "bd_stats_common"
+ },
+ {
+ "id": "bd-time 1.0.0",
+ "target": "bd_time"
+ },
+ {
+ "id": "bytes 1.7.1",
+ "target": "bytes"
+ },
+ {
+ "id": "futures 0.3.30",
+ "target": "futures"
+ },
+ {
+ "id": "http 1.1.0",
+ "target": "http"
+ },
+ {
+ "id": "http-body 1.0.1",
+ "target": "http_body"
+ },
+ {
+ "id": "http-body-util 0.1.2",
+ "target": "http_body_util"
+ },
+ {
+ "id": "hyper 1.4.1",
+ "target": "hyper"
+ },
+ {
+ "id": "hyper-util 0.1.7",
+ "target": "hyper_util"
+ },
+ {
+ "id": "log 0.4.22",
+ "target": "log"
+ },
+ {
+ "id": "prometheus 0.13.4",
+ "target": "prometheus"
+ },
+ {
+ "id": "protobuf 4.0.0-alpha.0",
+ "target": "protobuf"
+ },
+ {
+ "id": "snap 1.1.1",
+ "target": "snap"
+ },
+ {
+ "id": "thiserror 1.0.63",
+ "target": "thiserror"
+ },
+ {
+ "id": "time 0.3.36",
+ "target": "time"
+ },
+ {
+ "id": "tokio 1.39.3",
+ "target": "tokio"
+ },
+ {
+ "id": "tokio-stream 0.1.15",
+ "target": "tokio_stream"
+ },
+ {
+ "id": "tower 0.4.13",
+ "target": "tower"
+ },
+ {
+ "id": "unwrap-infallible 0.1.5",
+ "target": "unwrap_infallible"
+ },
+ {
+ "id": "urlencoding 2.1.3",
+ "target": "urlencoding"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "proc_macro_deps": {
+ "common": [
+ {
+ "id": "async-trait 0.1.81",
+ "target": "async_trait"
+ }
+ ],
+ "selects": {}
+ },
+ "version": "1.0.0"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "protobuf-codegen 4.0.0-alpha.0",
+ "target": "protobuf_codegen"
+ }
+ ],
+ "selects": {}
+ },
+ "build_script_env": {
+ "common": {
+ "SKIP_PROTO_GEN": "1"
+ },
+ "selects": {}
+ }
+ },
+ "license": null,
+ "license_ids": [],
+ "license_file": "../LICENSE"
+ },
+ "bd-grpc-codec 1.0.0": {
+ "name": "bd-grpc-codec",
+ "version": "1.0.0",
+ "package_url": null,
+ "repository": {
+ "Git": {
+ "remote": "https://github.com/bitdriftlabs/shared-core.git",
+ "commitish": {
+ "Rev": "4946752bd2a4e18c20645722bd5d567d62c43d9f"
+ },
+ "strip_prefix": "bd-grpc-codec"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "bd_grpc_codec",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "bd_grpc_codec",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default",
+ "zlib"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "anyhow 1.0.86",
+ "target": "anyhow"
+ },
+ {
+ "id": "bd-client-common 1.0.0",
+ "target": "bd_client_common"
+ },
+ {
+ "id": "bd-stats-common 1.0.0",
+ "target": "bd_stats_common"
+ },
+ {
+ "id": "bytes 1.7.1",
+ "target": "bytes"
+ },
+ {
+ "id": "flate2 1.0.32",
+ "target": "flate2"
+ },
+ {
+ "id": "log 0.4.22",
+ "target": "log"
+ },
+ {
+ "id": "protobuf 4.0.0-alpha.0",
+ "target": "protobuf"
+ },
+ {
+ "id": "thiserror 1.0.63",
+ "target": "thiserror"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "1.0.0"
+ },
+ "license": null,
+ "license_ids": [],
+ "license_file": "../LICENSE"
+ },
+ "bd-hyper-network 1.0.0": {
+ "name": "bd-hyper-network",
+ "version": "1.0.0",
+ "package_url": null,
+ "repository": {
+ "Git": {
+ "remote": "https://github.com/bitdriftlabs/shared-core.git",
+ "commitish": {
+ "Rev": "4946752bd2a4e18c20645722bd5d567d62c43d9f"
+ },
+ "strip_prefix": "bd-hyper-network"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "bd_hyper_network",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "bd_hyper_network",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "anyhow 1.0.86",
+ "target": "anyhow"
+ },
+ {
+ "id": "bd-api 1.0.0",
+ "target": "bd_api"
+ },
+ {
+ "id": "bd-client-common 1.0.0",
+ "target": "bd_client_common"
+ },
+ {
+ "id": "bd-shutdown 1.0.0",
+ "target": "bd_shutdown"
+ },
+ {
+ "id": "bytes 1.7.1",
+ "target": "bytes"
+ },
+ {
+ "id": "http 1.1.0",
+ "target": "http"
+ },
+ {
+ "id": "http-body 1.0.1",
+ "target": "http_body"
+ },
+ {
+ "id": "http-body-util 0.1.2",
+ "target": "http_body_util"
+ },
+ {
+ "id": "hyper 1.4.1",
+ "target": "hyper"
+ },
+ {
+ "id": "hyper-rustls 0.27.2",
+ "target": "hyper_rustls"
+ },
+ {
+ "id": "hyper-util 0.1.7",
+ "target": "hyper_util"
+ },
+ {
+ "id": "log 0.4.22",
+ "target": "log"
+ },
+ {
+ "id": "tokio 1.39.3",
+ "target": "tokio"
+ },
+ {
+ "id": "tokio-stream 0.1.15",
+ "target": "tokio_stream"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "proc_macro_deps": {
+ "common": [
+ {
+ "id": "async-trait 0.1.81",
+ "target": "async_trait"
+ }
+ ],
+ "selects": {}
+ },
+ "version": "1.0.0"
+ },
+ "license": null,
+ "license_ids": [],
+ "license_file": "../LICENSE"
+ },
+ "bd-internal-logging 1.0.0": {
+ "name": "bd-internal-logging",
+ "version": "1.0.0",
+ "package_url": null,
+ "repository": {
+ "Git": {
+ "remote": "https://github.com/bitdriftlabs/shared-core.git",
+ "commitish": {
+ "Rev": "4946752bd2a4e18c20645722bd5d567d62c43d9f"
+ },
+ "strip_prefix": "bd-internal-logging"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "bd_internal_logging",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "bd_internal_logging",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "anyhow 1.0.86",
+ "target": "anyhow"
+ },
+ {
+ "id": "bd-log-primitives 1.0.0",
+ "target": "bd_log_primitives"
+ },
+ {
+ "id": "bd-proto 1.0.0",
+ "target": "bd_proto"
+ },
+ {
+ "id": "bd-runtime 1.0.0",
+ "target": "bd_runtime"
+ },
+ {
+ "id": "tokio 1.39.3",
+ "target": "tokio"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "1.0.0"
+ },
+ "license": null,
+ "license_ids": [],
+ "license_file": "../LICENSE"
+ },
+ "bd-key-value 1.0.0": {
+ "name": "bd-key-value",
+ "version": "1.0.0",
+ "package_url": null,
+ "repository": {
+ "Git": {
+ "remote": "https://github.com/bitdriftlabs/shared-core.git",
+ "commitish": {
+ "Rev": "4946752bd2a4e18c20645722bd5d567d62c43d9f"
+ },
+ "strip_prefix": "bd-key-value"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "bd_key_value",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "bd_key_value",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "anyhow 1.0.86",
+ "target": "anyhow"
+ },
+ {
+ "id": "base64 0.22.1",
+ "target": "base64"
+ },
+ {
+ "id": "bd-log 1.0.0",
+ "target": "bd_log"
+ },
+ {
+ "id": "bincode 1.3.3",
+ "target": "bincode"
+ },
+ {
+ "id": "log 0.4.22",
+ "target": "log"
+ },
+ {
+ "id": "serde 1.0.208",
+ "target": "serde"
+ },
+ {
+ "id": "time 0.3.36",
+ "target": "time"
+ },
+ {
+ "id": "tokio 1.39.3",
+ "target": "tokio"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "1.0.0"
+ },
+ "license": null,
+ "license_ids": [],
+ "license_file": "../LICENSE"
+ },
+ "bd-log 1.0.0": {
+ "name": "bd-log",
+ "version": "1.0.0",
+ "package_url": null,
+ "repository": {
+ "Git": {
+ "remote": "https://github.com/bitdriftlabs/shared-core.git",
+ "commitish": {
+ "Rev": "4946752bd2a4e18c20645722bd5d567d62c43d9f"
+ },
+ "strip_prefix": "bd-log"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "bd_log",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "bd_log",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "anyhow 1.0.86",
+ "target": "anyhow"
+ },
+ {
+ "id": "bd-time 1.0.0",
+ "target": "bd_time"
+ },
+ {
+ "id": "log 0.4.22",
+ "target": "log"
+ },
+ {
+ "id": "parking_lot 0.12.3",
+ "target": "parking_lot"
+ },
+ {
+ "id": "time 0.3.36",
+ "target": "time"
+ },
+ {
+ "id": "tokio 1.39.3",
+ "target": "tokio"
+ },
+ {
+ "id": "tracing 0.1.40",
+ "target": "tracing"
+ },
+ {
+ "id": "tracing-error 0.2.0",
+ "target": "tracing_error"
+ },
+ {
+ "id": "tracing-log 0.2.0",
+ "target": "tracing_log"
+ },
+ {
+ "id": "tracing-subscriber 0.3.18",
+ "target": "tracing_subscriber"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "1.0.0"
+ },
+ "license": null,
+ "license_ids": [],
+ "license_file": "../LICENSE"
+ },
+ "bd-log-metadata 1.0.0": {
+ "name": "bd-log-metadata",
+ "version": "1.0.0",
+ "package_url": null,
+ "repository": {
+ "Git": {
+ "remote": "https://github.com/bitdriftlabs/shared-core.git",
+ "commitish": {
+ "Rev": "4946752bd2a4e18c20645722bd5d567d62c43d9f"
+ },
+ "strip_prefix": "bd-log-metadata"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "bd_log_metadata",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "bd_log_metadata",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "anyhow 1.0.86",
+ "target": "anyhow"
+ },
+ {
+ "id": "bd-log-primitives 1.0.0",
+ "target": "bd_log_primitives"
+ },
+ {
+ "id": "time 0.3.36",
+ "target": "time"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "1.0.0"
+ },
+ "license": null,
+ "license_ids": [],
+ "license_file": "../LICENSE"
+ },
+ "bd-log-primitives 1.0.0": {
+ "name": "bd-log-primitives",
+ "version": "1.0.0",
+ "package_url": null,
+ "repository": {
+ "Git": {
+ "remote": "https://github.com/bitdriftlabs/shared-core.git",
+ "commitish": {
+ "Rev": "4946752bd2a4e18c20645722bd5d567d62c43d9f"
+ },
+ "strip_prefix": "bd-log-primitives"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "bd_log_primitives",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "bd_log_primitives",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "anyhow 1.0.86",
+ "target": "anyhow"
+ },
+ {
+ "id": "bd-proto 1.0.0",
+ "target": "bd_proto"
+ },
+ {
+ "id": "time 0.3.36",
+ "target": "time"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "1.0.0"
+ },
+ "license": null,
+ "license_ids": [],
+ "license_file": "../LICENSE"
+ },
+ "bd-logger 1.0.0": {
+ "name": "bd-logger",
+ "version": "1.0.0",
+ "package_url": null,
+ "repository": {
+ "Git": {
+ "remote": "https://github.com/bitdriftlabs/shared-core.git",
+ "commitish": {
+ "Rev": "4946752bd2a4e18c20645722bd5d567d62c43d9f"
+ },
+ "strip_prefix": "bd-logger"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "bd_logger",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "bd_logger",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "anyhow 1.0.86",
+ "target": "anyhow"
+ },
+ {
+ "id": "backoff 0.4.0",
+ "target": "backoff"
+ },
+ {
+ "id": "bd-api 1.0.0",
+ "target": "bd_api"
+ },
+ {
+ "id": "bd-buffer 1.0.0",
+ "target": "bd_buffer"
+ },
+ {
+ "id": "bd-client-common 1.0.0",
+ "target": "bd_client_common"
+ },
+ {
+ "id": "bd-client-stats 1.0.0",
+ "target": "bd_client_stats"
+ },
+ {
+ "id": "bd-client-stats-store 1.0.0",
+ "target": "bd_client_stats_store"
+ },
+ {
+ "id": "bd-completion 1.0.0",
+ "target": "bd_completion"
+ },
+ {
+ "id": "bd-device 1.0.0",
+ "target": "bd_device"
+ },
+ {
+ "id": "bd-events 1.0.0",
+ "target": "bd_events"
+ },
+ {
+ "id": "bd-internal-logging 1.0.0",
+ "target": "bd_internal_logging"
+ },
+ {
+ "id": "bd-key-value 1.0.0",
+ "target": "bd_key_value"
+ },
+ {
+ "id": "bd-log 1.0.0",
+ "target": "bd_log"
+ },
+ {
+ "id": "bd-log-metadata 1.0.0",
+ "target": "bd_log_metadata"
+ },
+ {
+ "id": "bd-log-primitives 1.0.0",
+ "target": "bd_log_primitives"
+ },
+ {
+ "id": "bd-matcher 1.0.0",
+ "target": "bd_matcher"
+ },
+ {
+ "id": "bd-proto 1.0.0",
+ "target": "bd_proto"
+ },
+ {
+ "id": "bd-resource-utilization 1.0.0",
+ "target": "bd_resource_utilization"
+ },
+ {
+ "id": "bd-runtime 1.0.0",
+ "target": "bd_runtime"
+ },
+ {
+ "id": "bd-session 1.0.0",
+ "target": "bd_session"
+ },
+ {
+ "id": "bd-shutdown 1.0.0",
+ "target": "bd_shutdown"
+ },
+ {
+ "id": "bd-stats-common 1.0.0",
+ "target": "bd_stats_common"
+ },
+ {
+ "id": "bd-time 1.0.0",
+ "target": "bd_time"
+ },
+ {
+ "id": "bd-workflows 0.1.0",
+ "target": "bd_workflows"
+ },
+ {
+ "id": "flatbuffers 24.3.25",
+ "target": "flatbuffers"
+ },
+ {
+ "id": "futures-util 0.3.30",
+ "target": "futures_util"
+ },
+ {
+ "id": "itertools 0.13.0",
+ "target": "itertools"
+ },
+ {
+ "id": "log 0.4.22",
+ "target": "log"
+ },
+ {
+ "id": "parking_lot 0.12.3",
+ "target": "parking_lot"
+ },
+ {
+ "id": "protobuf 4.0.0-alpha.0",
+ "target": "protobuf"
+ },
+ {
+ "id": "serde 1.0.208",
+ "target": "serde"
+ },
+ {
+ "id": "thiserror 1.0.63",
+ "target": "thiserror"
+ },
+ {
+ "id": "time 0.3.36",
+ "target": "time"
+ },
+ {
+ "id": "tokio 1.39.3",
+ "target": "tokio"
+ },
+ {
+ "id": "tower 0.4.13",
+ "target": "tower"
+ },
+ {
+ "id": "tracing 0.1.40",
+ "target": "tracing"
+ },
+ {
+ "id": "unwrap-infallible 0.1.5",
+ "target": "unwrap_infallible"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "proc_macro_deps": {
+ "common": [
+ {
+ "id": "async-trait 0.1.81",
+ "target": "async_trait"
+ }
+ ],
+ "selects": {}
+ },
+ "version": "1.0.0"
+ },
+ "license": null,
+ "license_ids": [],
+ "license_file": "../LICENSE"
+ },
+ "bd-matcher 1.0.0": {
+ "name": "bd-matcher",
+ "version": "1.0.0",
+ "package_url": null,
+ "repository": {
+ "Git": {
+ "remote": "https://github.com/bitdriftlabs/shared-core.git",
+ "commitish": {
+ "Rev": "4946752bd2a4e18c20645722bd5d567d62c43d9f"
+ },
+ "strip_prefix": "bd-matcher"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "bd_matcher",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "bd_matcher",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "bd-log-primitives 1.0.0",
+ "target": "bd_log_primitives"
+ },
+ {
+ "id": "bd-proto 1.0.0",
+ "target": "bd_proto"
+ },
+ {
+ "id": "protobuf 4.0.0-alpha.0",
+ "target": "protobuf"
+ },
+ {
+ "id": "regex 1.10.6",
+ "target": "regex"
+ },
+ {
+ "id": "thiserror 1.0.63",
+ "target": "thiserror"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "1.0.0"
+ },
+ "license": null,
+ "license_ids": [],
+ "license_file": "../LICENSE"
+ },
+ "bd-metadata 1.0.0": {
+ "name": "bd-metadata",
+ "version": "1.0.0",
+ "package_url": null,
+ "repository": {
+ "Git": {
+ "remote": "https://github.com/bitdriftlabs/shared-core.git",
+ "commitish": {
+ "Rev": "4946752bd2a4e18c20645722bd5d567d62c43d9f"
+ },
+ "strip_prefix": "bd-metadata"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "bd_metadata",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "bd_metadata",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "anyhow 1.0.86",
+ "target": "anyhow"
+ },
+ {
+ "id": "base64 0.22.1",
+ "target": "base64"
+ },
+ {
+ "id": "bd-log 1.0.0",
+ "target": "bd_log"
+ },
+ {
+ "id": "bincode 1.3.3",
+ "target": "bincode"
+ },
+ {
+ "id": "log 0.4.22",
+ "target": "log"
+ },
+ {
+ "id": "serde 1.0.208",
+ "target": "serde"
+ },
+ {
+ "id": "time 0.3.36",
+ "target": "time"
+ },
+ {
+ "id": "tokio 1.39.3",
+ "target": "tokio"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "1.0.0"
+ },
+ "license": null,
+ "license_ids": [],
+ "license_file": "../LICENSE"
+ },
+ "bd-noop-network 1.0.0": {
+ "name": "bd-noop-network",
+ "version": "1.0.0",
+ "package_url": null,
+ "repository": {
+ "Git": {
+ "remote": "https://github.com/bitdriftlabs/shared-core.git",
+ "commitish": {
+ "Rev": "4946752bd2a4e18c20645722bd5d567d62c43d9f"
+ },
+ "strip_prefix": "bd-noop-network"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "bd_noop_network",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "bd_noop_network",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "anyhow 1.0.86",
+ "target": "anyhow"
+ },
+ {
+ "id": "bd-api 1.0.0",
+ "target": "bd_api"
+ },
+ {
+ "id": "bd-client-common 1.0.0",
+ "target": "bd_client_common"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "proc_macro_deps": {
+ "common": [
+ {
+ "id": "async-trait 0.1.81",
+ "target": "async_trait"
+ }
+ ],
+ "selects": {}
+ },
+ "version": "1.0.0"
+ },
+ "license": null,
+ "license_ids": [],
+ "license_file": "../LICENSE"
+ },
+ "bd-pgv 1.0.0": {
+ "name": "bd-pgv",
+ "version": "1.0.0",
+ "package_url": null,
+ "repository": {
+ "Git": {
+ "remote": "https://github.com/bitdriftlabs/shared-core.git",
+ "commitish": {
+ "Rev": "4946752bd2a4e18c20645722bd5d567d62c43d9f"
+ },
+ "strip_prefix": "bd-pgv"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "bd_pgv",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "bd_pgv",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "bd-pgv 1.0.0",
+ "target": "build_script_build"
+ },
+ {
+ "id": "log 0.4.22",
+ "target": "log"
+ },
+ {
+ "id": "protobuf 4.0.0-alpha.0",
+ "target": "protobuf"
+ },
+ {
+ "id": "thiserror 1.0.63",
+ "target": "thiserror"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "1.0.0"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "protobuf-codegen 4.0.0-alpha.0",
+ "target": "protobuf_codegen"
+ }
+ ],
+ "selects": {}
+ },
+ "build_script_env": {
+ "common": {
+ "SKIP_PROTO_GEN": "1"
+ },
+ "selects": {}
+ }
+ },
+ "license": null,
+ "license_ids": [],
+ "license_file": "../LICENSE"
+ },
+ "bd-proto 1.0.0": {
+ "name": "bd-proto",
+ "version": "1.0.0",
+ "package_url": null,
+ "repository": {
+ "Git": {
+ "remote": "https://github.com/bitdriftlabs/shared-core.git",
+ "commitish": {
+ "Rev": "4946752bd2a4e18c20645722bd5d567d62c43d9f"
+ },
+ "strip_prefix": "bd-proto"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "bd_proto",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "bd_proto",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "bd-pgv 1.0.0",
+ "target": "bd_pgv"
+ },
+ {
+ "id": "bd-proto 1.0.0",
+ "target": "build_script_build"
+ },
+ {
+ "id": "bytes 1.7.1",
+ "target": "bytes"
+ },
+ {
+ "id": "flatbuffers 24.3.25",
+ "target": "flatbuffers"
+ },
+ {
+ "id": "protobuf 4.0.0-alpha.0",
+ "target": "protobuf"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "1.0.0"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "flatc-rust 0.2.0",
+ "target": "flatc_rust"
+ },
+ {
+ "id": "protobuf-codegen 4.0.0-alpha.0",
+ "target": "protobuf_codegen"
+ }
+ ],
+ "selects": {}
+ },
+ "build_script_env": {
+ "common": {
+ "SKIP_PROTO_GEN": "1"
+ },
+ "selects": {}
+ }
+ },
+ "license": null,
+ "license_ids": [],
+ "license_file": "../LICENSE"
+ },
+ "bd-resource-utilization 1.0.0": {
+ "name": "bd-resource-utilization",
+ "version": "1.0.0",
+ "package_url": null,
+ "repository": {
+ "Git": {
+ "remote": "https://github.com/bitdriftlabs/shared-core.git",
+ "commitish": {
+ "Rev": "4946752bd2a4e18c20645722bd5d567d62c43d9f"
+ },
+ "strip_prefix": "bd-resource-utilization"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "bd_resource_utilization",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "bd_resource_utilization",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "anyhow 1.0.86",
+ "target": "anyhow"
+ },
+ {
+ "id": "bd-internal-logging 1.0.0",
+ "target": "bd_internal_logging"
+ },
+ {
+ "id": "bd-log-primitives 1.0.0",
+ "target": "bd_log_primitives"
+ },
+ {
+ "id": "bd-runtime 1.0.0",
+ "target": "bd_runtime"
+ },
+ {
+ "id": "bd-shutdown 1.0.0",
+ "target": "bd_shutdown"
+ },
+ {
+ "id": "log 0.4.22",
+ "target": "log"
+ },
+ {
+ "id": "tokio 1.39.3",
+ "target": "tokio"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "proc_macro_deps": {
+ "common": [
+ {
+ "id": "ctor 0.2.8",
+ "target": "ctor"
+ }
+ ],
+ "selects": {}
+ },
+ "version": "1.0.0"
+ },
+ "license": null,
+ "license_ids": [],
+ "license_file": "../LICENSE"
+ },
+ "bd-runtime 1.0.0": {
+ "name": "bd-runtime",
+ "version": "1.0.0",
+ "package_url": null,
+ "repository": {
+ "Git": {
+ "remote": "https://github.com/bitdriftlabs/shared-core.git",
+ "commitish": {
+ "Rev": "4946752bd2a4e18c20645722bd5d567d62c43d9f"
+ },
+ "strip_prefix": "bd-runtime"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "bd_runtime",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "bd_runtime",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "anyhow 1.0.86",
+ "target": "anyhow"
+ },
+ {
+ "id": "bd-client-common 1.0.0",
+ "target": "bd_client_common"
+ },
+ {
+ "id": "bd-proto 1.0.0",
+ "target": "bd_proto"
+ },
+ {
+ "id": "log 0.4.22",
+ "target": "log"
+ },
+ {
+ "id": "protobuf 4.0.0-alpha.0",
+ "target": "protobuf"
+ },
+ {
+ "id": "time 0.3.36",
+ "target": "time"
+ },
+ {
+ "id": "tokio 1.39.3",
+ "target": "tokio"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "1.0.0"
+ },
+ "license": null,
+ "license_ids": [],
+ "license_file": "../LICENSE"
+ },
+ "bd-server-stats 1.0.0": {
+ "name": "bd-server-stats",
+ "version": "1.0.0",
+ "package_url": null,
+ "repository": {
+ "Git": {
+ "remote": "https://github.com/bitdriftlabs/shared-core.git",
+ "commitish": {
+ "Rev": "4946752bd2a4e18c20645722bd5d567d62c43d9f"
+ },
+ "strip_prefix": "bd-server-stats"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "bd_server_stats",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "bd_server_stats",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "bd-stats-common 1.0.0",
+ "target": "bd_stats_common"
+ },
+ {
+ "id": "bd-time 1.0.0",
+ "target": "bd_time"
+ },
+ {
+ "id": "concat-string 1.0.1",
+ "target": "concat_string"
+ },
+ {
+ "id": "dashmap 6.0.1",
+ "target": "dashmap"
+ },
+ {
+ "id": "itertools 0.13.0",
+ "target": "itertools"
+ },
+ {
+ "id": "log 0.4.22",
+ "target": "log"
+ },
+ {
+ "id": "parking_lot 0.12.3",
+ "target": "parking_lot"
+ },
+ {
+ "id": "prometheus 0.13.4",
+ "target": "prometheus"
+ },
+ {
+ "id": "regex 1.10.6",
+ "target": "regex"
+ },
+ {
+ "id": "thiserror 1.0.63",
+ "target": "thiserror"
+ },
+ {
+ "id": "time 0.3.36",
+ "target": "time"
+ },
+ {
+ "id": "tokio 1.39.3",
+ "target": "tokio"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "1.0.0"
+ },
+ "license": null,
+ "license_ids": [],
+ "license_file": "../LICENSE"
+ },
+ "bd-session 1.0.0": {
+ "name": "bd-session",
+ "version": "1.0.0",
+ "package_url": null,
+ "repository": {
+ "Git": {
+ "remote": "https://github.com/bitdriftlabs/shared-core.git",
+ "commitish": {
+ "Rev": "4946752bd2a4e18c20645722bd5d567d62c43d9f"
+ },
+ "strip_prefix": "bd-session"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "bd_session",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "bd_session",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "anyhow 1.0.86",
+ "target": "anyhow"
+ },
+ {
+ "id": "bd-client-common 1.0.0",
+ "target": "bd_client_common"
+ },
+ {
+ "id": "bd-key-value 1.0.0",
+ "target": "bd_key_value"
+ },
+ {
+ "id": "bd-log 1.0.0",
+ "target": "bd_log"
+ },
+ {
+ "id": "bd-time 1.0.0",
+ "target": "bd_time"
+ },
+ {
+ "id": "log 0.4.22",
+ "target": "log"
+ },
+ {
+ "id": "parking_lot 0.12.3",
+ "target": "parking_lot"
+ },
+ {
+ "id": "serde 1.0.208",
+ "target": "serde"
+ },
+ {
+ "id": "serde_yaml 0.9.34+deprecated",
+ "target": "serde_yaml"
+ },
+ {
+ "id": "thread_local 1.1.8",
+ "target": "thread_local"
+ },
+ {
+ "id": "time 0.3.36",
+ "target": "time"
+ },
+ {
+ "id": "tokio 1.39.3",
+ "target": "tokio"
+ },
+ {
+ "id": "uuid 1.10.0",
+ "target": "uuid"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "1.0.0"
+ },
+ "license": null,
+ "license_ids": [],
+ "license_file": "../LICENSE"
+ },
+ "bd-shutdown 1.0.0": {
+ "name": "bd-shutdown",
+ "version": "1.0.0",
+ "package_url": null,
+ "repository": {
+ "Git": {
+ "remote": "https://github.com/bitdriftlabs/shared-core.git",
+ "commitish": {
+ "Rev": "4946752bd2a4e18c20645722bd5d567d62c43d9f"
+ },
+ "strip_prefix": "bd-shutdown"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "bd_shutdown",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "bd_shutdown",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "log 0.4.22",
+ "target": "log"
+ },
+ {
+ "id": "tokio 1.39.3",
+ "target": "tokio"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "1.0.0"
+ },
+ "license": null,
+ "license_ids": [],
+ "license_file": "../LICENSE"
+ },
+ "bd-stats-common 1.0.0": {
+ "name": "bd-stats-common",
+ "version": "1.0.0",
+ "package_url": null,
+ "repository": {
+ "Git": {
+ "remote": "https://github.com/bitdriftlabs/shared-core.git",
+ "commitish": {
+ "Rev": "4946752bd2a4e18c20645722bd5d567d62c43d9f"
+ },
+ "strip_prefix": "bd-stats-common"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "bd_stats_common",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "bd_stats_common",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2021",
+ "version": "1.0.0"
+ },
+ "license": null,
+ "license_ids": [],
+ "license_file": "../LICENSE"
+ },
+ "bd-test-helpers 1.0.0": {
+ "name": "bd-test-helpers",
+ "version": "1.0.0",
+ "package_url": null,
+ "repository": {
+ "Git": {
+ "remote": "https://github.com/bitdriftlabs/shared-core.git",
+ "commitish": {
+ "Rev": "4946752bd2a4e18c20645722bd5d567d62c43d9f"
+ },
+ "strip_prefix": "bd-test-helpers"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "bd_test_helpers",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "bd_test_helpers",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "anyhow 1.0.86",
+ "target": "anyhow"
+ },
+ {
+ "id": "axum 0.7.5",
+ "target": "axum"
+ },
+ {
+ "id": "axum-server 0.7.1",
+ "target": "axum_server"
+ },
+ {
+ "id": "bd-client-common 1.0.0",
+ "target": "bd_client_common"
+ },
+ {
+ "id": "bd-events 1.0.0",
+ "target": "bd_events"
+ },
+ {
+ "id": "bd-grpc 1.0.0",
+ "target": "bd_grpc"
+ },
+ {
+ "id": "bd-key-value 1.0.0",
+ "target": "bd_key_value"
+ },
+ {
+ "id": "bd-log-metadata 1.0.0",
+ "target": "bd_log_metadata"
+ },
+ {
+ "id": "bd-log-primitives 1.0.0",
+ "target": "bd_log_primitives"
+ },
+ {
+ "id": "bd-matcher 1.0.0",
+ "target": "bd_matcher"
+ },
+ {
+ "id": "bd-metadata 1.0.0",
+ "target": "bd_metadata"
+ },
+ {
+ "id": "bd-proto 1.0.0",
+ "target": "bd_proto"
+ },
+ {
+ "id": "bd-resource-utilization 1.0.0",
+ "target": "bd_resource_utilization"
+ },
+ {
+ "id": "bd-session 1.0.0",
+ "target": "bd_session"
+ },
+ {
+ "id": "bd-time 1.0.0",
+ "target": "bd_time"
+ },
+ {
+ "id": "futures-core 0.3.30",
+ "target": "futures_core"
+ },
+ {
+ "id": "http-body-util 0.1.2",
+ "target": "http_body_util"
+ },
+ {
+ "id": "log 0.4.22",
+ "target": "log"
+ },
+ {
+ "id": "parking_lot 0.12.3",
+ "target": "parking_lot"
+ },
+ {
+ "id": "prometheus 0.13.4",
+ "target": "prometheus"
+ },
+ {
+ "id": "protobuf 4.0.0-alpha.0",
+ "target": "protobuf"
+ },
+ {
+ "id": "serde 1.0.208",
+ "target": "serde"
+ },
+ {
+ "id": "time 0.3.36",
+ "target": "time"
+ },
+ {
+ "id": "tokio 1.39.3",
+ "target": "tokio"
+ },
+ {
+ "id": "tokio-stream 0.1.15",
+ "target": "tokio_stream"
+ },
+ {
+ "id": "tracing 0.1.40",
+ "target": "tracing"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "proc_macro_deps": {
+ "common": [
+ {
+ "id": "async-trait 0.1.81",
+ "target": "async_trait"
+ }
+ ],
+ "selects": {}
+ },
+ "version": "1.0.0"
+ },
+ "license": null,
+ "license_ids": [],
+ "license_file": "../LICENSE"
+ },
+ "bd-time 1.0.0": {
+ "name": "bd-time",
+ "version": "1.0.0",
+ "package_url": null,
+ "repository": {
+ "Git": {
+ "remote": "https://github.com/bitdriftlabs/shared-core.git",
+ "commitish": {
+ "Rev": "4946752bd2a4e18c20645722bd5d567d62c43d9f"
+ },
+ "strip_prefix": "bd-time"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "bd_time",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "bd_time",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "parking_lot 0.12.3",
+ "target": "parking_lot"
+ },
+ {
+ "id": "protobuf 4.0.0-alpha.0",
+ "target": "protobuf"
+ },
+ {
+ "id": "time 0.3.36",
+ "target": "time"
+ },
+ {
+ "id": "tokio 1.39.3",
+ "target": "tokio"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "proc_macro_deps": {
+ "common": [
+ {
+ "id": "async-trait 0.1.81",
+ "target": "async_trait"
+ }
+ ],
+ "selects": {}
+ },
+ "version": "1.0.0"
+ },
+ "license": null,
+ "license_ids": [],
+ "license_file": "../LICENSE"
+ },
+ "bd-workflows 0.1.0": {
+ "name": "bd-workflows",
+ "version": "0.1.0",
+ "package_url": null,
+ "repository": {
+ "Git": {
+ "remote": "https://github.com/bitdriftlabs/shared-core.git",
+ "commitish": {
+ "Rev": "4946752bd2a4e18c20645722bd5d567d62c43d9f"
+ },
+ "strip_prefix": "bd-workflows"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "bd_workflows",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "bd_workflows",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "anyhow 1.0.86",
+ "target": "anyhow"
+ },
+ {
+ "id": "bd-api 1.0.0",
+ "target": "bd_api"
+ },
+ {
+ "id": "bd-client-common 1.0.0",
+ "target": "bd_client_common"
+ },
+ {
+ "id": "bd-client-stats 1.0.0",
+ "target": "bd_client_stats"
+ },
+ {
+ "id": "bd-client-stats-store 1.0.0",
+ "target": "bd_client_stats_store"
+ },
+ {
+ "id": "bd-completion 1.0.0",
+ "target": "bd_completion"
+ },
+ {
+ "id": "bd-log-primitives 1.0.0",
+ "target": "bd_log_primitives"
+ },
+ {
+ "id": "bd-matcher 1.0.0",
+ "target": "bd_matcher"
+ },
+ {
+ "id": "bd-proto 1.0.0",
+ "target": "bd_proto"
+ },
+ {
+ "id": "bd-runtime 1.0.0",
+ "target": "bd_runtime"
+ },
+ {
+ "id": "bd-shutdown 1.0.0",
+ "target": "bd_shutdown"
+ },
+ {
+ "id": "bd-stats-common 1.0.0",
+ "target": "bd_stats_common"
+ },
+ {
+ "id": "bincode 1.3.3",
+ "target": "bincode"
+ },
+ {
+ "id": "itertools 0.13.0",
+ "target": "itertools"
+ },
+ {
+ "id": "log 0.4.22",
+ "target": "log"
+ },
+ {
+ "id": "protobuf 4.0.0-alpha.0",
+ "target": "protobuf"
+ },
+ {
+ "id": "regex 1.10.6",
+ "target": "regex"
+ },
+ {
+ "id": "serde 1.0.208",
+ "target": "serde"
+ },
+ {
+ "id": "thiserror 1.0.63",
+ "target": "thiserror"
+ },
+ {
+ "id": "time 0.3.36",
+ "target": "time"
+ },
+ {
+ "id": "tokio 1.39.3",
+ "target": "tokio"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "proc_macro_deps": {
+ "common": [
+ {
+ "id": "async-trait 0.1.81",
+ "target": "async_trait"
+ }
+ ],
+ "selects": {}
+ },
+ "version": "0.1.0"
+ },
+ "license": null,
+ "license_ids": [],
+ "license_file": "../LICENSE"
+ },
+ "bincode 1.3.3": {
+ "name": "bincode",
+ "version": "1.3.3",
+ "package_url": "https://github.com/servo/bincode",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/bincode/1.3.3/download",
+ "sha256": "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "bincode",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "bincode",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "serde 1.0.208",
+ "target": "serde"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2015",
+ "version": "1.3.3"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE.md"
+ },
+ "bitflags 1.3.2": {
+ "name": "bitflags",
+ "version": "1.3.2",
+ "package_url": "https://github.com/bitflags/bitflags",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/bitflags/1.3.2/download",
+ "sha256": "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "bitflags",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "bitflags",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default"
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "1.3.2"
+ },
+ "license": "MIT/Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "bitflags 2.6.0": {
+ "name": "bitflags",
+ "version": "2.6.0",
+ "package_url": "https://github.com/bitflags/bitflags",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/bitflags/2.6.0/download",
+ "sha256": "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "bitflags",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "bitflags",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "std"
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "2.6.0"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "block 0.1.6": {
+ "name": "block",
+ "version": "0.1.6",
+ "package_url": "http://github.com/SSheldon/rust-block",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/block/0.1.6/download",
+ "sha256": "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "block",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "block",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2015",
+ "version": "0.1.6"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": null
+ },
+ "bumpalo 3.16.0": {
+ "name": "bumpalo",
+ "version": "3.16.0",
+ "package_url": "https://github.com/fitzgen/bumpalo",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/bumpalo/3.16.0/download",
+ "sha256": "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "bumpalo",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "bumpalo",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default"
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "3.16.0"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "byteorder 1.5.0": {
+ "name": "byteorder",
+ "version": "1.5.0",
+ "package_url": "https://github.com/BurntSushi/byteorder",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/byteorder/1.5.0/download",
+ "sha256": "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "byteorder",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "byteorder",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2021",
+ "version": "1.5.0"
+ },
+ "license": "Unlicense OR MIT",
+ "license_ids": [
+ "MIT",
+ "Unlicense"
+ ],
+ "license_file": "LICENSE-MIT"
+ },
+ "bytes 1.7.1": {
+ "name": "bytes",
+ "version": "1.7.1",
+ "package_url": "https://github.com/tokio-rs/bytes",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/bytes/1.7.1/download",
+ "sha256": "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "bytes",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "bytes",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default",
+ "std"
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "1.7.1"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE"
+ },
+ "capture 1.0.0": {
+ "name": "capture",
+ "version": "1.0.0",
+ "package_url": null,
+ "repository": null,
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "capture",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "capture",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "android_logger 0.14.1",
+ "target": "android_logger"
+ },
+ {
+ "id": "anyhow 1.0.86",
+ "target": "anyhow"
+ },
+ {
+ "id": "bd-api 1.0.0",
+ "target": "bd_api"
+ },
+ {
+ "id": "bd-client-common 1.0.0",
+ "target": "bd_client_common"
+ },
+ {
+ "id": "bd-client-stats-store 1.0.0",
+ "target": "bd_client_stats_store"
+ },
+ {
+ "id": "bd-device 1.0.0",
+ "target": "bd_device"
+ },
+ {
+ "id": "bd-key-value 1.0.0",
+ "target": "bd_key_value"
+ },
+ {
+ "id": "bd-logger 1.0.0",
+ "target": "bd_logger"
+ },
+ {
+ "id": "bd-runtime 1.0.0",
+ "target": "bd_runtime"
+ },
+ {
+ "id": "bd-session 1.0.0",
+ "target": "bd_session"
+ },
+ {
+ "id": "bd-time 1.0.0",
+ "target": "bd_time"
+ },
+ {
+ "id": "jni 0.21.1",
+ "target": "jni"
+ },
+ {
+ "id": "log 0.4.22",
+ "target": "log"
+ },
+ {
+ "id": "time 0.3.36",
+ "target": "time"
+ },
+ {
+ "id": "tracing-subscriber 0.3.18",
+ "target": "tracing_subscriber"
+ },
+ {
+ "id": "uuid 1.10.0",
+ "target": "uuid"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "proc_macro_deps": {
+ "common": [
+ {
+ "id": "async-trait 0.1.81",
+ "target": "async_trait"
+ }
+ ],
+ "selects": {}
+ },
+ "version": "1.0.0"
+ },
+ "license": null,
+ "license_ids": [],
+ "license_file": "LICENSE"
+ },
+ "cast 0.3.0": {
+ "name": "cast",
+ "version": "0.3.0",
+ "package_url": "https://github.com/japaric/cast.rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/cast/0.3.0/download",
+ "sha256": "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "cast",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "cast",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2018",
+ "version": "0.3.0"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "cc 1.1.13": {
+ "name": "cc",
+ "version": "1.1.13",
+ "package_url": "https://github.com/rust-lang/cc-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/cc/1.1.13/download",
+ "sha256": "72db2f7947ecee9b03b510377e8bb9077afa27176fdbff55c51027e976fdcc48"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "cc",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "cc",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "shlex 1.3.0",
+ "target": "shlex"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "1.1.13"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "cesu8 1.1.0": {
+ "name": "cesu8",
+ "version": "1.1.0",
+ "package_url": "https://github.com/emk/cesu8-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/cesu8/1.1.0/download",
+ "sha256": "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "cesu8",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "cesu8",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2015",
+ "version": "1.1.0"
+ },
+ "license": "Apache-2.0/MIT",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": null
+ },
+ "cfg-if 1.0.0": {
+ "name": "cfg-if",
+ "version": "1.0.0",
+ "package_url": "https://github.com/alexcrichton/cfg-if",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/cfg-if/1.0.0/download",
+ "sha256": "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "cfg_if",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "cfg_if",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2018",
+ "version": "1.0.0"
+ },
+ "license": "MIT/Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "chrono 0.4.38": {
+ "name": "chrono",
+ "version": "0.4.38",
+ "package_url": "https://github.com/chronotope/chrono",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/chrono/0.4.38/download",
+ "sha256": "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "chrono",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "chrono",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "alloc",
+ "android-tzdata",
+ "clock",
+ "default",
+ "iana-time-zone",
+ "js-sys",
+ "now",
+ "oldtime",
+ "std",
+ "wasm-bindgen",
+ "wasmbind",
+ "winapi",
+ "windows-targets"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "num-traits 0.2.19",
+ "target": "num_traits"
+ }
+ ],
+ "selects": {
+ "aarch64-apple-darwin": [
+ {
+ "id": "iana-time-zone 0.1.60",
+ "target": "iana_time_zone"
+ }
+ ],
+ "aarch64-apple-ios": [
+ {
+ "id": "iana-time-zone 0.1.60",
+ "target": "iana_time_zone"
+ }
+ ],
+ "aarch64-apple-ios-sim": [
+ {
+ "id": "iana-time-zone 0.1.60",
+ "target": "iana_time_zone"
+ }
+ ],
+ "aarch64-fuchsia": [
+ {
+ "id": "iana-time-zone 0.1.60",
+ "target": "iana_time_zone"
+ }
+ ],
+ "aarch64-linux-android": [
+ {
+ "id": "android-tzdata 0.1.1",
+ "target": "android_tzdata"
+ },
+ {
+ "id": "iana-time-zone 0.1.60",
+ "target": "iana_time_zone"
+ }
+ ],
+ "aarch64-pc-windows-msvc": [
+ {
+ "id": "windows-targets 0.52.6",
+ "target": "windows_targets"
+ }
+ ],
+ "aarch64-unknown-linux-gnu": [
+ {
+ "id": "iana-time-zone 0.1.60",
+ "target": "iana_time_zone"
+ }
+ ],
+ "aarch64-unknown-nixos-gnu": [
+ {
+ "id": "iana-time-zone 0.1.60",
+ "target": "iana_time_zone"
+ }
+ ],
+ "aarch64-unknown-nto-qnx710": [
+ {
+ "id": "iana-time-zone 0.1.60",
+ "target": "iana_time_zone"
+ }
+ ],
+ "arm-unknown-linux-gnueabi": [
+ {
+ "id": "iana-time-zone 0.1.60",
+ "target": "iana_time_zone"
+ }
+ ],
+ "armv7-linux-androideabi": [
+ {
+ "id": "android-tzdata 0.1.1",
+ "target": "android_tzdata"
+ },
+ {
+ "id": "iana-time-zone 0.1.60",
+ "target": "iana_time_zone"
+ }
+ ],
+ "armv7-unknown-linux-gnueabi": [
+ {
+ "id": "iana-time-zone 0.1.60",
+ "target": "iana_time_zone"
+ }
+ ],
+ "i686-apple-darwin": [
+ {
+ "id": "iana-time-zone 0.1.60",
+ "target": "iana_time_zone"
+ }
+ ],
+ "i686-linux-android": [
+ {
+ "id": "android-tzdata 0.1.1",
+ "target": "android_tzdata"
+ },
+ {
+ "id": "iana-time-zone 0.1.60",
+ "target": "iana_time_zone"
+ }
+ ],
+ "i686-pc-windows-msvc": [
+ {
+ "id": "windows-targets 0.52.6",
+ "target": "windows_targets"
+ }
+ ],
+ "i686-unknown-freebsd": [
+ {
+ "id": "iana-time-zone 0.1.60",
+ "target": "iana_time_zone"
+ }
+ ],
+ "i686-unknown-linux-gnu": [
+ {
+ "id": "iana-time-zone 0.1.60",
+ "target": "iana_time_zone"
+ }
+ ],
+ "powerpc-unknown-linux-gnu": [
+ {
+ "id": "iana-time-zone 0.1.60",
+ "target": "iana_time_zone"
+ }
+ ],
+ "s390x-unknown-linux-gnu": [
+ {
+ "id": "iana-time-zone 0.1.60",
+ "target": "iana_time_zone"
+ }
+ ],
+ "wasm32-unknown-unknown": [
+ {
+ "id": "js-sys 0.3.70",
+ "target": "js_sys"
+ },
+ {
+ "id": "wasm-bindgen 0.2.93",
+ "target": "wasm_bindgen"
+ }
+ ],
+ "x86_64-apple-darwin": [
+ {
+ "id": "iana-time-zone 0.1.60",
+ "target": "iana_time_zone"
+ }
+ ],
+ "x86_64-apple-ios": [
+ {
+ "id": "iana-time-zone 0.1.60",
+ "target": "iana_time_zone"
+ }
+ ],
+ "x86_64-fuchsia": [
+ {
+ "id": "iana-time-zone 0.1.60",
+ "target": "iana_time_zone"
+ }
+ ],
+ "x86_64-linux-android": [
+ {
+ "id": "android-tzdata 0.1.1",
+ "target": "android_tzdata"
+ },
+ {
+ "id": "iana-time-zone 0.1.60",
+ "target": "iana_time_zone"
+ }
+ ],
+ "x86_64-pc-windows-msvc": [
+ {
+ "id": "windows-targets 0.52.6",
+ "target": "windows_targets"
+ }
+ ],
+ "x86_64-unknown-freebsd": [
+ {
+ "id": "iana-time-zone 0.1.60",
+ "target": "iana_time_zone"
+ }
+ ],
+ "x86_64-unknown-linux-gnu": [
+ {
+ "id": "iana-time-zone 0.1.60",
+ "target": "iana_time_zone"
+ }
+ ],
+ "x86_64-unknown-nixos-gnu": [
+ {
+ "id": "iana-time-zone 0.1.60",
+ "target": "iana_time_zone"
+ }
+ ]
+ }
+ },
+ "edition": "2021",
+ "version": "0.4.38"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE.txt"
+ },
+ "ciborium 0.2.2": {
+ "name": "ciborium",
+ "version": "0.2.2",
+ "package_url": "https://github.com/enarx/ciborium",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/ciborium/0.2.2/download",
+ "sha256": "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "ciborium",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "ciborium",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default",
+ "std"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "ciborium-io 0.2.2",
+ "target": "ciborium_io"
+ },
+ {
+ "id": "ciborium-ll 0.2.2",
+ "target": "ciborium_ll"
+ },
+ {
+ "id": "serde 1.0.208",
+ "target": "serde"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.2.2"
+ },
+ "license": "Apache-2.0",
+ "license_ids": [
+ "Apache-2.0"
+ ],
+ "license_file": "LICENSE"
+ },
+ "ciborium-io 0.2.2": {
+ "name": "ciborium-io",
+ "version": "0.2.2",
+ "package_url": "https://github.com/enarx/ciborium",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/ciborium-io/0.2.2/download",
+ "sha256": "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "ciborium_io",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "ciborium_io",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "alloc",
+ "std"
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.2.2"
+ },
+ "license": "Apache-2.0",
+ "license_ids": [
+ "Apache-2.0"
+ ],
+ "license_file": "LICENSE"
+ },
+ "ciborium-ll 0.2.2": {
+ "name": "ciborium-ll",
+ "version": "0.2.2",
+ "package_url": "https://github.com/enarx/ciborium",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/ciborium-ll/0.2.2/download",
+ "sha256": "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "ciborium_ll",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "ciborium_ll",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "ciborium-io 0.2.2",
+ "target": "ciborium_io"
+ },
+ {
+ "id": "half 2.4.1",
+ "target": "half"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.2.2"
+ },
+ "license": "Apache-2.0",
+ "license_ids": [
+ "Apache-2.0"
+ ],
+ "license_file": "LICENSE"
+ },
+ "clap 4.5.16": {
+ "name": "clap",
+ "version": "4.5.16",
+ "package_url": "https://github.com/clap-rs/clap",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/clap/4.5.16/download",
+ "sha256": "ed6719fffa43d0d87e5fd8caeab59be1554fb028cd30edc88fc4369b17971019"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "clap",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "clap",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "std"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "clap_builder 4.5.15",
+ "target": "clap_builder"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "4.5.16"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "clap_builder 4.5.15": {
+ "name": "clap_builder",
+ "version": "4.5.15",
+ "package_url": "https://github.com/clap-rs/clap",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/clap_builder/4.5.15/download",
+ "sha256": "216aec2b177652e3846684cbfe25c9964d18ec45234f0f5da5157b207ed1aab6"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "clap_builder",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "clap_builder",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "std"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "anstyle 1.0.8",
+ "target": "anstyle"
+ },
+ {
+ "id": "clap_lex 0.7.2",
+ "target": "clap_lex"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "4.5.15"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "clap_lex 0.7.2": {
+ "name": "clap_lex",
+ "version": "0.7.2",
+ "package_url": "https://github.com/clap-rs/clap",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/clap_lex/0.7.2/download",
+ "sha256": "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "clap_lex",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "clap_lex",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2021",
+ "version": "0.7.2"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "combine 4.6.7": {
+ "name": "combine",
+ "version": "4.6.7",
+ "package_url": "https://github.com/Marwes/combine",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/combine/4.6.7/download",
+ "sha256": "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "combine",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "combine",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "alloc",
+ "bytes",
+ "default",
+ "std"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "bytes 1.7.1",
+ "target": "bytes"
+ },
+ {
+ "id": "memchr 2.7.4",
+ "target": "memchr"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "4.6.7"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE"
+ },
+ "concat-string 1.0.1": {
+ "name": "concat-string",
+ "version": "1.0.1",
+ "package_url": "https://github.com/FaultyRAM/concat-string",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/concat-string/1.0.1/download",
+ "sha256": "7439becb5fafc780b6f4de382b1a7a3e70234afe783854a4702ee8adbb838609"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "concat_string",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "concat_string",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2015",
+ "version": "1.0.1"
+ },
+ "license": "Apache-2.0 OR MIT",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "core-foundation-sys 0.8.7": {
+ "name": "core-foundation-sys",
+ "version": "0.8.7",
+ "package_url": "https://github.com/servo/core-foundation-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/core-foundation-sys/0.8.7/download",
+ "sha256": "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "core_foundation_sys",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "core_foundation_sys",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default",
+ "link"
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.8.7"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "crc32fast 1.4.2": {
+ "name": "crc32fast",
+ "version": "1.4.2",
+ "package_url": "https://github.com/srijs/rust-crc32fast",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/crc32fast/1.4.2/download",
+ "sha256": "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "crc32fast",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "crc32fast",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default",
+ "std"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "cfg-if 1.0.0",
+ "target": "cfg_if"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2015",
+ "version": "1.4.2"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "criterion 0.5.1": {
+ "name": "criterion",
+ "version": "0.5.1",
+ "package_url": "https://github.com/bheisler/criterion.rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/criterion/0.5.1/download",
+ "sha256": "f2b12d017a929603d80db1831cd3a24082f8137ce19c69e6447f54f5fc8d692f"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "criterion",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "criterion",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "cargo_bench_support",
+ "default",
+ "plotters",
+ "rayon"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "anes 0.1.6",
+ "target": "anes"
+ },
+ {
+ "id": "cast 0.3.0",
+ "target": "cast"
+ },
+ {
+ "id": "ciborium 0.2.2",
+ "target": "ciborium"
+ },
+ {
+ "id": "clap 4.5.16",
+ "target": "clap"
+ },
+ {
+ "id": "criterion-plot 0.5.0",
+ "target": "criterion_plot"
+ },
+ {
+ "id": "is-terminal 0.4.13",
+ "target": "is_terminal"
+ },
+ {
+ "id": "itertools 0.10.5",
+ "target": "itertools"
+ },
+ {
+ "id": "num-traits 0.2.19",
+ "target": "num_traits"
+ },
+ {
+ "id": "once_cell 1.19.0",
+ "target": "once_cell"
+ },
+ {
+ "id": "oorandom 11.1.4",
+ "target": "oorandom"
+ },
+ {
+ "id": "plotters 0.3.6",
+ "target": "plotters"
+ },
+ {
+ "id": "rayon 1.10.0",
+ "target": "rayon"
+ },
+ {
+ "id": "regex 1.10.6",
+ "target": "regex"
+ },
+ {
+ "id": "serde 1.0.208",
+ "target": "serde"
+ },
+ {
+ "id": "serde_json 1.0.125",
+ "target": "serde_json"
+ },
+ {
+ "id": "tinytemplate 1.2.1",
+ "target": "tinytemplate"
+ },
+ {
+ "id": "walkdir 2.5.0",
+ "target": "walkdir"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "proc_macro_deps": {
+ "common": [
+ {
+ "id": "serde_derive 1.0.208",
+ "target": "serde_derive"
+ }
+ ],
+ "selects": {}
+ },
+ "version": "0.5.1"
+ },
+ "license": "Apache-2.0 OR MIT",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "criterion-plot 0.5.0": {
+ "name": "criterion-plot",
+ "version": "0.5.0",
+ "package_url": "https://github.com/bheisler/criterion.rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/criterion-plot/0.5.0/download",
+ "sha256": "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "criterion_plot",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "criterion_plot",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "cast 0.3.0",
+ "target": "cast"
+ },
+ {
+ "id": "itertools 0.10.5",
+ "target": "itertools"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.5.0"
+ },
+ "license": "MIT/Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "crossbeam-deque 0.8.5": {
+ "name": "crossbeam-deque",
+ "version": "0.8.5",
+ "package_url": "https://github.com/crossbeam-rs/crossbeam",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/crossbeam-deque/0.8.5/download",
+ "sha256": "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "crossbeam_deque",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "crossbeam_deque",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default",
+ "std"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "crossbeam-epoch 0.9.18",
+ "target": "crossbeam_epoch"
+ },
+ {
+ "id": "crossbeam-utils 0.8.20",
+ "target": "crossbeam_utils"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.8.5"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "crossbeam-epoch 0.9.18": {
+ "name": "crossbeam-epoch",
+ "version": "0.9.18",
+ "package_url": "https://github.com/crossbeam-rs/crossbeam",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/crossbeam-epoch/0.9.18/download",
+ "sha256": "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "crossbeam_epoch",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "crossbeam_epoch",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "alloc",
+ "std"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "crossbeam-utils 0.8.20",
+ "target": "crossbeam_utils"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.9.18"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "crossbeam-utils 0.8.20": {
+ "name": "crossbeam-utils",
+ "version": "0.8.20",
+ "package_url": "https://github.com/crossbeam-rs/crossbeam",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/crossbeam-utils/0.8.20/download",
+ "sha256": "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "crossbeam_utils",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "crossbeam_utils",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default",
+ "std"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "crossbeam-utils 0.8.20",
+ "target": "build_script_build"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.8.20"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ]
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "crunchy 0.2.2": {
+ "name": "crunchy",
+ "version": "0.2.2",
+ "package_url": null,
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/crunchy/0.2.2/download",
+ "sha256": "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "crunchy",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "crunchy",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "crunchy 0.2.2",
+ "target": "build_script_build"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2015",
+ "version": "0.2.2"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ]
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": null
+ },
+ "ctor 0.2.8": {
+ "name": "ctor",
+ "version": "0.2.8",
+ "package_url": "https://github.com/mmastrac/rust-ctor",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/ctor/0.2.8/download",
+ "sha256": "edb49164822f3ee45b17acd4a208cfc1251410cf0cad9a833234c9890774dd9f"
+ }
+ },
+ "targets": [
+ {
+ "ProcMacro": {
+ "crate_name": "ctor",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "ctor",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "quote 1.0.36",
+ "target": "quote"
+ },
+ {
+ "id": "syn 2.0.75",
+ "target": "syn"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.2.8"
+ },
+ "license": "Apache-2.0 OR MIT",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "dashmap 6.0.1": {
+ "name": "dashmap",
+ "version": "6.0.1",
+ "package_url": "https://github.com/xacrimon/dashmap",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/dashmap/6.0.1/download",
+ "sha256": "804c8821570c3f8b70230c2ba75ffa5c0f9a4189b9a432b6656c536712acae28"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "dashmap",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "dashmap",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "cfg-if 1.0.0",
+ "target": "cfg_if"
+ },
+ {
+ "id": "crossbeam-utils 0.8.20",
+ "target": "crossbeam_utils"
+ },
+ {
+ "id": "hashbrown 0.14.5",
+ "target": "hashbrown"
+ },
+ {
+ "id": "lock_api 0.4.12",
+ "target": "lock_api"
+ },
+ {
+ "id": "once_cell 1.19.0",
+ "target": "once_cell"
+ },
+ {
+ "id": "parking_lot_core 0.9.10",
+ "target": "parking_lot_core"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "6.0.1"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE"
+ },
+ "deranged 0.3.11": {
+ "name": "deranged",
+ "version": "0.3.11",
+ "package_url": "https://github.com/jhpratt/deranged",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/deranged/0.3.11/download",
+ "sha256": "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "deranged",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "deranged",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "alloc",
+ "powerfmt",
+ "serde",
+ "std"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "powerfmt 0.2.0",
+ "target": "powerfmt"
+ },
+ {
+ "id": "serde 1.0.208",
+ "target": "serde"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.3.11"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-Apache"
+ },
+ "diff 0.1.13": {
+ "name": "diff",
+ "version": "0.1.13",
+ "package_url": "https://github.com/utkarshkukreti/diff.rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/diff/0.1.13/download",
+ "sha256": "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "diff",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "diff",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2015",
+ "version": "0.1.13"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "either 1.13.0": {
+ "name": "either",
+ "version": "1.13.0",
+ "package_url": "https://github.com/rayon-rs/either",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/either/1.13.0/download",
+ "sha256": "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "either",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "either",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default",
+ "use_std"
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "1.13.0"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "env_filter 0.1.2": {
+ "name": "env_filter",
+ "version": "0.1.2",
+ "package_url": "https://github.com/rust-cli/env_logger",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/env_filter/0.1.2/download",
+ "sha256": "4f2c92ceda6ceec50f43169f9ee8424fe2db276791afde7b2cd8bc084cb376ab"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "env_filter",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "env_filter",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "log 0.4.22",
+ "target": "log"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.1.2"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "equivalent 1.0.1": {
+ "name": "equivalent",
+ "version": "1.0.1",
+ "package_url": "https://github.com/cuviper/equivalent",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/equivalent/1.0.1/download",
+ "sha256": "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "equivalent",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "equivalent",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2015",
+ "version": "1.0.1"
+ },
+ "license": "Apache-2.0 OR MIT",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "errno 0.3.9": {
+ "name": "errno",
+ "version": "0.3.9",
+ "package_url": "https://github.com/lambda-fairy/rust-errno",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/errno/0.3.9/download",
+ "sha256": "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "errno",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "errno",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "std"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [],
+ "selects": {
+ "cfg(target_os = \"hermit\")": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "cfg(target_os = \"wasi\")": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "cfg(unix)": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "cfg(windows)": [
+ {
+ "id": "windows-sys 0.52.0",
+ "target": "windows_sys"
+ }
+ ]
+ }
+ },
+ "edition": "2018",
+ "version": "0.3.9"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "fastrand 2.1.0": {
+ "name": "fastrand",
+ "version": "2.1.0",
+ "package_url": "https://github.com/smol-rs/fastrand",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/fastrand/2.1.0/download",
+ "sha256": "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "fastrand",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "fastrand",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "alloc",
+ "default",
+ "std"
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "2.1.0"
+ },
+ "license": "Apache-2.0 OR MIT",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "flatbuffers 24.3.25": {
+ "name": "flatbuffers",
+ "version": "24.3.25",
+ "package_url": "https://github.com/google/flatbuffers",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/flatbuffers/24.3.25/download",
+ "sha256": "8add37afff2d4ffa83bc748a70b4b1370984f6980768554182424ef71447c35f"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "flatbuffers",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "flatbuffers",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default",
+ "std"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "bitflags 1.3.2",
+ "target": "bitflags"
+ },
+ {
+ "id": "flatbuffers 24.3.25",
+ "target": "build_script_build"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "24.3.25"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "rustc_version 0.4.0",
+ "target": "rustc_version"
+ }
+ ],
+ "selects": {}
+ }
+ },
+ "license": "Apache-2.0",
+ "license_ids": [
+ "Apache-2.0"
+ ],
+ "license_file": null
+ },
+ "flatc-rust 0.2.0": {
+ "name": "flatc-rust",
+ "version": "0.2.0",
+ "package_url": "https://github.com/frol/flatc-rust",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/flatc-rust/0.2.0/download",
+ "sha256": "57e61227926ef5b237af48bee74394cc4a5a221ebd10c5147a98e612f207851d"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "flatc_rust",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "flatc_rust",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "log 0.4.22",
+ "target": "log"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.2.0"
+ },
+ "license": "MIT/Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "flate2 1.0.32": {
+ "name": "flate2",
+ "version": "1.0.32",
+ "package_url": "https://github.com/rust-lang/flate2-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/flate2/1.0.32/download",
+ "sha256": "9c0596c1eac1f9e04ed902702e9878208b336edc9d6fddc8a48387349bab3666"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "flate2",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "flate2",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "any_impl",
+ "any_zlib",
+ "libz-sys",
+ "zlib"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "crc32fast 1.4.2",
+ "target": "crc32fast"
+ },
+ {
+ "id": "libz-sys 1.1.19",
+ "target": "libz_sys"
+ }
+ ],
+ "selects": {
+ "cfg(all(target_arch = \"wasm32\", not(target_os = \"emscripten\")))": [
+ {
+ "id": "miniz_oxide 0.8.0",
+ "target": "miniz_oxide"
+ }
+ ]
+ }
+ },
+ "edition": "2018",
+ "version": "1.0.32"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "fnv 1.0.7": {
+ "name": "fnv",
+ "version": "1.0.7",
+ "package_url": "https://github.com/servo/rust-fnv",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/fnv/1.0.7/download",
+ "sha256": "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "fnv",
+ "crate_root": "lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "fnv",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default",
+ "std"
+ ],
+ "selects": {}
+ },
+ "edition": "2015",
+ "version": "1.0.7"
+ },
+ "license": "Apache-2.0 / MIT",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "form_urlencoded 1.2.1": {
+ "name": "form_urlencoded",
+ "version": "1.2.1",
+ "package_url": "https://github.com/servo/rust-url",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/form_urlencoded/1.2.1/download",
+ "sha256": "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "form_urlencoded",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "form_urlencoded",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "alloc",
+ "default",
+ "std"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "percent-encoding 2.3.1",
+ "target": "percent_encoding"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "1.2.1"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "fs2 0.4.3": {
+ "name": "fs2",
+ "version": "0.4.3",
+ "package_url": "https://github.com/danburkert/fs2-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/fs2/0.4.3/download",
+ "sha256": "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "fs2",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "fs2",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [],
+ "selects": {
+ "cfg(unix)": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "cfg(windows)": [
+ {
+ "id": "winapi 0.3.9",
+ "target": "winapi"
+ }
+ ]
+ }
+ },
+ "edition": "2015",
+ "version": "0.4.3"
+ },
+ "license": "MIT/Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "fuchsia-cprng 0.1.1": {
+ "name": "fuchsia-cprng",
+ "version": "0.1.1",
+ "package_url": "https://fuchsia.googlesource.com/fuchsia/+/master/garnet/public/rust/fuchsia-cprng",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/fuchsia-cprng/0.1.1/download",
+ "sha256": "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "fuchsia_cprng",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "fuchsia_cprng",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2018",
+ "version": "0.1.1"
+ },
+ "license": null,
+ "license_ids": [],
+ "license_file": "LICENSE"
+ },
+ "futures 0.3.30": {
+ "name": "futures",
+ "version": "0.3.30",
+ "package_url": "https://github.com/rust-lang/futures-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/futures/0.3.30/download",
+ "sha256": "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "futures",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "futures",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "alloc",
+ "async-await",
+ "default",
+ "executor",
+ "futures-executor",
+ "std"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "futures-channel 0.3.30",
+ "target": "futures_channel"
+ },
+ {
+ "id": "futures-core 0.3.30",
+ "target": "futures_core"
+ },
+ {
+ "id": "futures-executor 0.3.30",
+ "target": "futures_executor"
+ },
+ {
+ "id": "futures-io 0.3.30",
+ "target": "futures_io"
+ },
+ {
+ "id": "futures-sink 0.3.30",
+ "target": "futures_sink"
+ },
+ {
+ "id": "futures-task 0.3.30",
+ "target": "futures_task"
+ },
+ {
+ "id": "futures-util 0.3.30",
+ "target": "futures_util"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.3.30"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "futures-channel 0.3.30": {
+ "name": "futures-channel",
+ "version": "0.3.30",
+ "package_url": "https://github.com/rust-lang/futures-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/futures-channel/0.3.30/download",
+ "sha256": "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "futures_channel",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "futures_channel",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "alloc",
+ "default",
+ "futures-sink",
+ "sink",
+ "std"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "futures-core 0.3.30",
+ "target": "futures_core"
+ },
+ {
+ "id": "futures-sink 0.3.30",
+ "target": "futures_sink"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.3.30"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "futures-core 0.3.30": {
+ "name": "futures-core",
+ "version": "0.3.30",
+ "package_url": "https://github.com/rust-lang/futures-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/futures-core/0.3.30/download",
+ "sha256": "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "futures_core",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "futures_core",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "alloc",
+ "default",
+ "std"
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.3.30"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "futures-executor 0.3.30": {
+ "name": "futures-executor",
+ "version": "0.3.30",
+ "package_url": "https://github.com/rust-lang/futures-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/futures-executor/0.3.30/download",
+ "sha256": "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "futures_executor",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "futures_executor",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "std"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "futures-core 0.3.30",
+ "target": "futures_core"
+ },
+ {
+ "id": "futures-task 0.3.30",
+ "target": "futures_task"
+ },
+ {
+ "id": "futures-util 0.3.30",
+ "target": "futures_util"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.3.30"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "futures-io 0.3.30": {
+ "name": "futures-io",
+ "version": "0.3.30",
+ "package_url": "https://github.com/rust-lang/futures-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/futures-io/0.3.30/download",
+ "sha256": "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "futures_io",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "futures_io",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "std"
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.3.30"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "futures-macro 0.3.30": {
+ "name": "futures-macro",
+ "version": "0.3.30",
+ "package_url": "https://github.com/rust-lang/futures-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/futures-macro/0.3.30/download",
+ "sha256": "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac"
+ }
+ },
+ "targets": [
+ {
+ "ProcMacro": {
+ "crate_name": "futures_macro",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "futures_macro",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "proc-macro2 1.0.86",
+ "target": "proc_macro2"
+ },
+ {
+ "id": "quote 1.0.36",
+ "target": "quote"
+ },
+ {
+ "id": "syn 2.0.75",
+ "target": "syn"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.3.30"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "futures-sink 0.3.30": {
+ "name": "futures-sink",
+ "version": "0.3.30",
+ "package_url": "https://github.com/rust-lang/futures-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/futures-sink/0.3.30/download",
+ "sha256": "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "futures_sink",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "futures_sink",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "alloc",
+ "default",
+ "std"
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.3.30"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "futures-task 0.3.30": {
+ "name": "futures-task",
+ "version": "0.3.30",
+ "package_url": "https://github.com/rust-lang/futures-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/futures-task/0.3.30/download",
+ "sha256": "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "futures_task",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "futures_task",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "alloc",
+ "std"
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.3.30"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "futures-util 0.3.30": {
+ "name": "futures-util",
+ "version": "0.3.30",
+ "package_url": "https://github.com/rust-lang/futures-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/futures-util/0.3.30/download",
+ "sha256": "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "futures_util",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "futures_util",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "alloc",
+ "async-await",
+ "async-await-macro",
+ "channel",
+ "default",
+ "futures-channel",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "io",
+ "memchr",
+ "sink",
+ "slab",
+ "std"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "futures-channel 0.3.30",
+ "target": "futures_channel"
+ },
+ {
+ "id": "futures-core 0.3.30",
+ "target": "futures_core"
+ },
+ {
+ "id": "futures-io 0.3.30",
+ "target": "futures_io"
+ },
+ {
+ "id": "futures-sink 0.3.30",
+ "target": "futures_sink"
+ },
+ {
+ "id": "futures-task 0.3.30",
+ "target": "futures_task"
+ },
+ {
+ "id": "memchr 2.7.4",
+ "target": "memchr"
+ },
+ {
+ "id": "pin-project-lite 0.2.14",
+ "target": "pin_project_lite"
+ },
+ {
+ "id": "pin-utils 0.1.0",
+ "target": "pin_utils"
+ },
+ {
+ "id": "slab 0.4.9",
+ "target": "slab"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "proc_macro_deps": {
+ "common": [
+ {
+ "id": "futures-macro 0.3.30",
+ "target": "futures_macro"
+ }
+ ],
+ "selects": {}
+ },
+ "version": "0.3.30"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "getrandom 0.2.15": {
+ "name": "getrandom",
+ "version": "0.2.15",
+ "package_url": "https://github.com/rust-random/getrandom",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/getrandom/0.2.15/download",
+ "sha256": "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "getrandom",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "getrandom",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "std"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "cfg-if 1.0.0",
+ "target": "cfg_if"
+ }
+ ],
+ "selects": {
+ "cfg(target_os = \"wasi\")": [
+ {
+ "id": "wasi 0.11.0+wasi-snapshot-preview1",
+ "target": "wasi"
+ }
+ ],
+ "cfg(unix)": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ]
+ }
+ },
+ "edition": "2018",
+ "version": "0.2.15"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "gimli 0.29.0": {
+ "name": "gimli",
+ "version": "0.29.0",
+ "package_url": "https://github.com/gimli-rs/gimli",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/gimli/0.29.0/download",
+ "sha256": "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "gimli",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "gimli",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2018",
+ "version": "0.29.0"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "h2 0.4.6": {
+ "name": "h2",
+ "version": "0.4.6",
+ "package_url": "https://github.com/hyperium/h2",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/h2/0.4.6/download",
+ "sha256": "524e8ac6999421f49a846c2d4411f337e53497d8ec55d67753beffa43c5d9205"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "h2",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "h2",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "atomic-waker 1.1.2",
+ "target": "atomic_waker"
+ },
+ {
+ "id": "bytes 1.7.1",
+ "target": "bytes"
+ },
+ {
+ "id": "fnv 1.0.7",
+ "target": "fnv"
+ },
+ {
+ "id": "futures-core 0.3.30",
+ "target": "futures_core"
+ },
+ {
+ "id": "futures-sink 0.3.30",
+ "target": "futures_sink"
+ },
+ {
+ "id": "http 1.1.0",
+ "target": "http"
+ },
+ {
+ "id": "indexmap 2.4.0",
+ "target": "indexmap"
+ },
+ {
+ "id": "slab 0.4.9",
+ "target": "slab"
+ },
+ {
+ "id": "tokio 1.39.3",
+ "target": "tokio"
+ },
+ {
+ "id": "tokio-util 0.7.11",
+ "target": "tokio_util"
+ },
+ {
+ "id": "tracing 0.1.40",
+ "target": "tracing"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.4.6"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE"
+ },
+ "half 2.4.1": {
+ "name": "half",
+ "version": "2.4.1",
+ "package_url": "https://github.com/starkat99/half-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/half/2.4.1/download",
+ "sha256": "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "half",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "half",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "cfg-if 1.0.0",
+ "target": "cfg_if"
+ }
+ ],
+ "selects": {
+ "cfg(target_arch = \"spirv\")": [
+ {
+ "id": "crunchy 0.2.2",
+ "target": "crunchy"
+ }
+ ]
+ }
+ },
+ "edition": "2021",
+ "version": "2.4.1"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE"
+ },
+ "hashbrown 0.14.5": {
+ "name": "hashbrown",
+ "version": "0.14.5",
+ "package_url": "https://github.com/rust-lang/hashbrown",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/hashbrown/0.14.5/download",
+ "sha256": "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "hashbrown",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "hashbrown",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "raw"
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.14.5"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "hermit-abi 0.3.9": {
+ "name": "hermit-abi",
+ "version": "0.3.9",
+ "package_url": "https://github.com/hermit-os/hermit-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/hermit-abi/0.3.9/download",
+ "sha256": "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "hermit_abi",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "hermit_abi",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2021",
+ "version": "0.3.9"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "hermit-abi 0.4.0": {
+ "name": "hermit-abi",
+ "version": "0.4.0",
+ "package_url": "https://github.com/hermit-os/hermit-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/hermit-abi/0.4.0/download",
+ "sha256": "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "hermit_abi",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "hermit_abi",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2021",
+ "version": "0.4.0"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "home 0.5.9": {
+ "name": "home",
+ "version": "0.5.9",
+ "package_url": "https://github.com/rust-lang/cargo",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/home/0.5.9/download",
+ "sha256": "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "home",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "home",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [],
+ "selects": {
+ "cfg(windows)": [
+ {
+ "id": "windows-sys 0.52.0",
+ "target": "windows_sys"
+ }
+ ]
+ }
+ },
+ "edition": "2021",
+ "version": "0.5.9"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "http 1.1.0": {
+ "name": "http",
+ "version": "1.1.0",
+ "package_url": "https://github.com/hyperium/http",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/http/1.1.0/download",
+ "sha256": "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "http",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "http",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default",
+ "std"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "bytes 1.7.1",
+ "target": "bytes"
+ },
+ {
+ "id": "fnv 1.0.7",
+ "target": "fnv"
+ },
+ {
+ "id": "itoa 1.0.11",
+ "target": "itoa"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "1.1.0"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "http-body 1.0.1": {
+ "name": "http-body",
+ "version": "1.0.1",
+ "package_url": "https://github.com/hyperium/http-body",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/http-body/1.0.1/download",
+ "sha256": "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "http_body",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "http_body",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "bytes 1.7.1",
+ "target": "bytes"
+ },
+ {
+ "id": "http 1.1.0",
+ "target": "http"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "1.0.1"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE"
+ },
+ "http-body-util 0.1.2": {
+ "name": "http-body-util",
+ "version": "0.1.2",
+ "package_url": "https://github.com/hyperium/http-body",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/http-body-util/0.1.2/download",
+ "sha256": "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "http_body_util",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "http_body_util",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "bytes 1.7.1",
+ "target": "bytes"
+ },
+ {
+ "id": "futures-util 0.3.30",
+ "target": "futures_util"
+ },
+ {
+ "id": "http 1.1.0",
+ "target": "http"
+ },
+ {
+ "id": "http-body 1.0.1",
+ "target": "http_body"
+ },
+ {
+ "id": "pin-project-lite 0.2.14",
+ "target": "pin_project_lite"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.1.2"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE"
+ },
+ "httparse 1.9.4": {
+ "name": "httparse",
+ "version": "1.9.4",
+ "package_url": "https://github.com/seanmonstar/httparse",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/httparse/1.9.4/download",
+ "sha256": "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "httparse",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "httparse",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default",
+ "std"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "httparse 1.9.4",
+ "target": "build_script_build"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "1.9.4"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ]
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "httpdate 1.0.3": {
+ "name": "httpdate",
+ "version": "1.0.3",
+ "package_url": "https://github.com/pyfisch/httpdate",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/httpdate/1.0.3/download",
+ "sha256": "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "httpdate",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "httpdate",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2021",
+ "version": "1.0.3"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "hyper 1.4.1": {
+ "name": "hyper",
+ "version": "1.4.1",
+ "package_url": "https://github.com/hyperium/hyper",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/hyper/1.4.1/download",
+ "sha256": "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "hyper",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "hyper",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "client",
+ "default",
+ "http1",
+ "http2",
+ "server"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "bytes 1.7.1",
+ "target": "bytes"
+ },
+ {
+ "id": "futures-channel 0.3.30",
+ "target": "futures_channel"
+ },
+ {
+ "id": "futures-util 0.3.30",
+ "target": "futures_util"
+ },
+ {
+ "id": "h2 0.4.6",
+ "target": "h2"
+ },
+ {
+ "id": "http 1.1.0",
+ "target": "http"
+ },
+ {
+ "id": "http-body 1.0.1",
+ "target": "http_body"
+ },
+ {
+ "id": "httparse 1.9.4",
+ "target": "httparse"
+ },
+ {
+ "id": "httpdate 1.0.3",
+ "target": "httpdate"
+ },
+ {
+ "id": "itoa 1.0.11",
+ "target": "itoa"
+ },
+ {
+ "id": "pin-project-lite 0.2.14",
+ "target": "pin_project_lite"
+ },
+ {
+ "id": "smallvec 1.13.2",
+ "target": "smallvec"
+ },
+ {
+ "id": "tokio 1.39.3",
+ "target": "tokio"
+ },
+ {
+ "id": "want 0.3.1",
+ "target": "want"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "1.4.1"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE"
+ },
+ "hyper-rustls 0.27.2": {
+ "name": "hyper-rustls",
+ "version": "0.27.2",
+ "package_url": "https://github.com/rustls/hyper-rustls",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/hyper-rustls/0.27.2/download",
+ "sha256": "5ee4be2c948921a1a5320b629c4193916ed787a7f7f293fd3f7f5a6c9de74155"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "hyper_rustls",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "hyper_rustls",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "http1",
+ "http2",
+ "ring",
+ "webpki-roots",
+ "webpki-tokio"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "futures-util 0.3.30",
+ "target": "futures_util"
+ },
+ {
+ "id": "http 1.1.0",
+ "target": "http"
+ },
+ {
+ "id": "hyper 1.4.1",
+ "target": "hyper"
+ },
+ {
+ "id": "hyper-util 0.1.7",
+ "target": "hyper_util"
+ },
+ {
+ "id": "rustls 0.23.12",
+ "target": "rustls"
+ },
+ {
+ "id": "rustls-pki-types 1.8.0",
+ "target": "rustls_pki_types",
+ "alias": "pki_types"
+ },
+ {
+ "id": "tokio 1.39.3",
+ "target": "tokio"
+ },
+ {
+ "id": "tokio-rustls 0.26.0",
+ "target": "tokio_rustls"
+ },
+ {
+ "id": "tower-service 0.3.3",
+ "target": "tower_service"
+ },
+ {
+ "id": "webpki-roots 0.26.3",
+ "target": "webpki_roots"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.27.2"
+ },
+ "license": "Apache-2.0 OR ISC OR MIT",
+ "license_ids": [
+ "Apache-2.0",
+ "ISC",
+ "MIT"
+ ],
+ "license_file": "LICENSE"
+ },
+ "hyper-util 0.1.7": {
+ "name": "hyper-util",
+ "version": "0.1.7",
+ "package_url": "https://github.com/hyperium/hyper-util",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/hyper-util/0.1.7/download",
+ "sha256": "cde7055719c54e36e95e8719f95883f22072a48ede39db7fc17a4e1d5281e9b9"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "hyper_util",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "hyper_util",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "client",
+ "client-legacy",
+ "default",
+ "http1",
+ "http2",
+ "server",
+ "server-auto",
+ "tokio"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "bytes 1.7.1",
+ "target": "bytes"
+ },
+ {
+ "id": "futures-channel 0.3.30",
+ "target": "futures_channel"
+ },
+ {
+ "id": "futures-util 0.3.30",
+ "target": "futures_util"
+ },
+ {
+ "id": "http 1.1.0",
+ "target": "http"
+ },
+ {
+ "id": "http-body 1.0.1",
+ "target": "http_body"
+ },
+ {
+ "id": "hyper 1.4.1",
+ "target": "hyper"
+ },
+ {
+ "id": "pin-project-lite 0.2.14",
+ "target": "pin_project_lite"
+ },
+ {
+ "id": "socket2 0.5.7",
+ "target": "socket2"
+ },
+ {
+ "id": "tokio 1.39.3",
+ "target": "tokio"
+ },
+ {
+ "id": "tower 0.4.13",
+ "target": "tower"
+ },
+ {
+ "id": "tower-service 0.3.3",
+ "target": "tower_service"
+ },
+ {
+ "id": "tracing 0.1.40",
+ "target": "tracing"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.1.7"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE"
+ },
+ "iana-time-zone 0.1.60": {
+ "name": "iana-time-zone",
+ "version": "0.1.60",
+ "package_url": "https://github.com/strawlab/iana-time-zone",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/iana-time-zone/0.1.60/download",
+ "sha256": "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "iana_time_zone",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "iana_time_zone",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "fallback"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [],
+ "selects": {
+ "cfg(any(target_os = \"macos\", target_os = \"ios\"))": [
+ {
+ "id": "core-foundation-sys 0.8.7",
+ "target": "core_foundation_sys"
+ }
+ ],
+ "cfg(target_arch = \"wasm32\")": [
+ {
+ "id": "js-sys 0.3.70",
+ "target": "js_sys"
+ },
+ {
+ "id": "wasm-bindgen 0.2.93",
+ "target": "wasm_bindgen"
+ }
+ ],
+ "cfg(target_os = \"android\")": [
+ {
+ "id": "android_system_properties 0.1.5",
+ "target": "android_system_properties"
+ }
+ ],
+ "cfg(target_os = \"haiku\")": [
+ {
+ "id": "iana-time-zone-haiku 0.1.2",
+ "target": "iana_time_zone_haiku"
+ }
+ ],
+ "cfg(target_os = \"windows\")": [
+ {
+ "id": "windows-core 0.52.0",
+ "target": "windows_core"
+ }
+ ]
+ }
+ },
+ "edition": "2018",
+ "version": "0.1.60"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "iana-time-zone-haiku 0.1.2": {
+ "name": "iana-time-zone-haiku",
+ "version": "0.1.2",
+ "package_url": "https://github.com/strawlab/iana-time-zone",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/iana-time-zone-haiku/0.1.2/download",
+ "sha256": "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "iana_time_zone_haiku",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "iana_time_zone_haiku",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "iana-time-zone-haiku 0.1.2",
+ "target": "build_script_build"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.1.2"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "cc 1.1.13",
+ "target": "cc"
+ }
+ ],
+ "selects": {}
+ }
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "indexmap 2.4.0": {
+ "name": "indexmap",
+ "version": "2.4.0",
+ "package_url": "https://github.com/indexmap-rs/indexmap",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/indexmap/2.4.0/download",
+ "sha256": "93ead53efc7ea8ed3cfb0c79fc8023fbb782a5432b52830b6518941cebe6505c"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "indexmap",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "indexmap",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default",
+ "std"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "equivalent 1.0.1",
+ "target": "equivalent"
+ },
+ {
+ "id": "hashbrown 0.14.5",
+ "target": "hashbrown"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "2.4.0"
+ },
+ "license": "Apache-2.0 OR MIT",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "instant 0.1.13": {
+ "name": "instant",
+ "version": "0.1.13",
+ "package_url": "https://github.com/sebcrozet/instant",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/instant/0.1.13/download",
+ "sha256": "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "instant",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "instant",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "cfg-if 1.0.0",
+ "target": "cfg_if"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.1.13"
+ },
+ "license": "BSD-3-Clause",
+ "license_ids": [
+ "BSD-3-Clause"
+ ],
+ "license_file": "LICENSE"
+ },
+ "intrusive-collections 0.9.6": {
+ "name": "intrusive-collections",
+ "version": "0.9.6",
+ "package_url": "https://github.com/Amanieu/intrusive-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/intrusive-collections/0.9.6/download",
+ "sha256": "b694dc9f70c3bda874626d2aed13b780f137aab435f4e9814121955cf706122e"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "intrusive_collections",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "intrusive_collections",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "alloc",
+ "default"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "memoffset 0.9.1",
+ "target": "memoffset"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.9.6"
+ },
+ "license": "Apache-2.0/MIT",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "is-terminal 0.4.13": {
+ "name": "is-terminal",
+ "version": "0.4.13",
+ "package_url": "https://github.com/sunfishcode/is-terminal",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/is-terminal/0.4.13/download",
+ "sha256": "261f68e344040fbd0edea105bef17c66edf46f984ddb1115b775ce31be948f4b"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "is_terminal",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "is_terminal",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [],
+ "selects": {
+ "cfg(any(unix, target_os = \"wasi\"))": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "cfg(target_os = \"hermit\")": [
+ {
+ "id": "hermit-abi 0.4.0",
+ "target": "hermit_abi"
+ }
+ ],
+ "cfg(windows)": [
+ {
+ "id": "windows-sys 0.52.0",
+ "target": "windows_sys"
+ }
+ ]
+ }
+ },
+ "edition": "2018",
+ "version": "0.4.13"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE-MIT"
+ },
+ "itertools 0.10.5": {
+ "name": "itertools",
+ "version": "0.10.5",
+ "package_url": "https://github.com/rust-itertools/itertools",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/itertools/0.10.5/download",
+ "sha256": "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "itertools",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "itertools",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default",
+ "use_alloc",
+ "use_std"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "either 1.13.0",
+ "target": "either"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.10.5"
+ },
+ "license": "MIT/Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "itertools 0.13.0": {
+ "name": "itertools",
+ "version": "0.13.0",
+ "package_url": "https://github.com/rust-itertools/itertools",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/itertools/0.13.0/download",
+ "sha256": "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "itertools",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "itertools",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default",
+ "use_alloc",
+ "use_std"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "either 1.13.0",
+ "target": "either"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.13.0"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "itoa 1.0.11": {
+ "name": "itoa",
+ "version": "1.0.11",
+ "package_url": "https://github.com/dtolnay/itoa",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/itoa/1.0.11/download",
+ "sha256": "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "itoa",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "itoa",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2018",
+ "version": "1.0.11"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "jni 0.21.1": {
+ "name": "jni",
+ "version": "0.21.1",
+ "package_url": "https://github.com/jni-rs/jni-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/jni/0.21.1/download",
+ "sha256": "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "jni",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "jni",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "cesu8 1.1.0",
+ "target": "cesu8"
+ },
+ {
+ "id": "cfg-if 1.0.0",
+ "target": "cfg_if"
+ },
+ {
+ "id": "combine 4.6.7",
+ "target": "combine"
+ },
+ {
+ "id": "jni-sys 0.3.0",
+ "target": "jni_sys"
+ },
+ {
+ "id": "log 0.4.22",
+ "target": "log"
+ },
+ {
+ "id": "thiserror 1.0.63",
+ "target": "thiserror"
+ }
+ ],
+ "selects": {
+ "cfg(windows)": [
+ {
+ "id": "windows-sys 0.45.0",
+ "target": "windows_sys"
+ }
+ ]
+ }
+ },
+ "edition": "2018",
+ "version": "0.21.1"
+ },
+ "license": "MIT/Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "jni-sys 0.3.0": {
+ "name": "jni-sys",
+ "version": "0.3.0",
+ "package_url": "https://github.com/sfackler/rust-jni-sys",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/jni-sys/0.3.0/download",
+ "sha256": "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "jni_sys",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "jni_sys",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2015",
+ "version": "0.3.0"
+ },
+ "license": "MIT/Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "js-sys 0.3.70": {
+ "name": "js-sys",
+ "version": "0.3.70",
+ "package_url": "https://github.com/rustwasm/wasm-bindgen/tree/master/crates/js-sys",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/js-sys/0.3.70/download",
+ "sha256": "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "js_sys",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "js_sys",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "wasm-bindgen 0.2.93",
+ "target": "wasm_bindgen"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.3.70"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "lazy_static 1.5.0": {
+ "name": "lazy_static",
+ "version": "1.5.0",
+ "package_url": "https://github.com/rust-lang-nursery/lazy-static.rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/lazy_static/1.5.0/download",
+ "sha256": "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "lazy_static",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "lazy_static",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2015",
+ "version": "1.5.0"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "libc 0.2.158": {
+ "name": "libc",
+ "version": "0.2.158",
+ "package_url": "https://github.com/rust-lang/libc",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/libc/0.2.158/download",
+ "sha256": "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "libc",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "libc",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default",
+ "extra_traits",
+ "std"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "libc 0.2.158",
+ "target": "build_script_build"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2015",
+ "version": "0.2.158"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ]
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "libz-sys 1.1.19": {
+ "name": "libz-sys",
+ "version": "1.1.19",
+ "package_url": "https://github.com/rust-lang/libz-sys",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/libz-sys/1.1.19/download",
+ "sha256": "fdc53a7799a7496ebc9fd29f31f7df80e83c9bda5299768af5f9e59eeea74647"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "libz_sys",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "libz_sys",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "libz-sys 1.1.19",
+ "target": "build_script_build"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "1.1.19"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "cc 1.1.13",
+ "target": "cc"
+ },
+ {
+ "id": "pkg-config 0.3.30",
+ "target": "pkg_config"
+ },
+ {
+ "id": "vcpkg 0.2.15",
+ "target": "vcpkg"
+ }
+ ],
+ "selects": {}
+ },
+ "links": "z"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "linux-raw-sys 0.4.14": {
+ "name": "linux-raw-sys",
+ "version": "0.4.14",
+ "package_url": "https://github.com/sunfishcode/linux-raw-sys",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/linux-raw-sys/0.4.14/download",
+ "sha256": "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "linux_raw_sys",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "linux_raw_sys",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "errno",
+ "general",
+ "ioctl",
+ "std"
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.4.14"
+ },
+ "license": "Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "lock_api 0.4.12": {
+ "name": "lock_api",
+ "version": "0.4.12",
+ "package_url": "https://github.com/Amanieu/parking_lot",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/lock_api/0.4.12/download",
+ "sha256": "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "lock_api",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "lock_api",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "atomic_usize",
+ "default"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "lock_api 0.4.12",
+ "target": "build_script_build"
+ },
+ {
+ "id": "scopeguard 1.2.0",
+ "target": "scopeguard"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.4.12"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "autocfg 1.3.0",
+ "target": "autocfg"
+ }
+ ],
+ "selects": {}
+ }
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "log 0.4.22": {
+ "name": "log",
+ "version": "0.4.22",
+ "package_url": "https://github.com/rust-lang/log",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/log/0.4.22/download",
+ "sha256": "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "log",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "log",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "max_level_trace",
+ "release_max_level_info",
+ "std"
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.4.22"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "logger_benchmark 1.0.0": {
+ "name": "logger_benchmark",
+ "version": "1.0.0",
+ "package_url": null,
+ "repository": null,
+ "targets": [],
+ "library_target_name": null,
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "bd-api 1.0.0",
+ "target": "bd_api"
+ },
+ {
+ "id": "bd-buffer 1.0.0",
+ "target": "bd_buffer"
+ },
+ {
+ "id": "bd-client-common 1.0.0",
+ "target": "bd_client_common"
+ },
+ {
+ "id": "bd-hyper-network 1.0.0",
+ "target": "bd_hyper_network"
+ },
+ {
+ "id": "bd-key-value 1.0.0",
+ "target": "bd_key_value"
+ },
+ {
+ "id": "bd-logger 1.0.0",
+ "target": "bd_logger"
+ },
+ {
+ "id": "bd-noop-network 1.0.0",
+ "target": "bd_noop_network"
+ },
+ {
+ "id": "bd-session 1.0.0",
+ "target": "bd_session"
+ },
+ {
+ "id": "bd-shutdown 1.0.0",
+ "target": "bd_shutdown"
+ },
+ {
+ "id": "bd-test-helpers 1.0.0",
+ "target": "bd_test_helpers"
+ },
+ {
+ "id": "criterion 0.5.1",
+ "target": "criterion"
+ },
+ {
+ "id": "protobuf 4.0.0-alpha.0",
+ "target": "protobuf"
+ },
+ {
+ "id": "tempdir 0.3.7",
+ "target": "tempdir"
+ },
+ {
+ "id": "time 0.3.36",
+ "target": "time"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "1.0.0"
+ },
+ "license": null,
+ "license_ids": [],
+ "license_file": "LICENSE"
+ },
+ "malloc_buf 0.0.6": {
+ "name": "malloc_buf",
+ "version": "0.0.6",
+ "package_url": "https://github.com/SSheldon/malloc_buf",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/malloc_buf/0.0.6/download",
+ "sha256": "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "malloc_buf",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "malloc_buf",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2015",
+ "version": "0.0.6"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": null
+ },
+ "matchers 0.1.0": {
+ "name": "matchers",
+ "version": "0.1.0",
+ "package_url": "https://github.com/hawkw/matchers",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/matchers/0.1.0/download",
+ "sha256": "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "matchers",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "matchers",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "regex-automata 0.1.10",
+ "target": "regex_automata"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.1.0"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE"
+ },
+ "matchit 0.7.3": {
+ "name": "matchit",
+ "version": "0.7.3",
+ "package_url": "https://github.com/ibraheemdev/matchit",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/matchit/0.7.3/download",
+ "sha256": "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "matchit",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "matchit",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default"
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.7.3"
+ },
+ "license": "MIT AND BSD-3-Clause",
+ "license_ids": [
+ "BSD-3-Clause",
+ "MIT"
+ ],
+ "license_file": "LICENSE"
+ },
+ "memchr 2.7.4": {
+ "name": "memchr",
+ "version": "2.7.4",
+ "package_url": "https://github.com/BurntSushi/memchr",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/memchr/2.7.4/download",
+ "sha256": "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "memchr",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "memchr",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "alloc",
+ "default",
+ "std"
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "2.7.4"
+ },
+ "license": "Unlicense OR MIT",
+ "license_ids": [
+ "MIT",
+ "Unlicense"
+ ],
+ "license_file": "LICENSE-MIT"
+ },
+ "memmap2 0.9.4": {
+ "name": "memmap2",
+ "version": "0.9.4",
+ "package_url": "https://github.com/RazrFalcon/memmap2-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/memmap2/0.9.4/download",
+ "sha256": "fe751422e4a8caa417e13c3ea66452215d7d63e19e604f4980461212f3ae1322"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "memmap2",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "memmap2",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [],
+ "selects": {
+ "cfg(unix)": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ]
+ }
+ },
+ "edition": "2018",
+ "version": "0.9.4"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "memoffset 0.9.1": {
+ "name": "memoffset",
+ "version": "0.9.1",
+ "package_url": "https://github.com/Gilnaa/memoffset",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/memoffset/0.9.1/download",
+ "sha256": "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "memoffset",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "memoffset",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "memoffset 0.9.1",
+ "target": "build_script_build"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2015",
+ "version": "0.9.1"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "autocfg 1.3.0",
+ "target": "autocfg"
+ }
+ ],
+ "selects": {}
+ }
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE"
+ },
+ "mime 0.3.17": {
+ "name": "mime",
+ "version": "0.3.17",
+ "package_url": "https://github.com/hyperium/mime",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/mime/0.3.17/download",
+ "sha256": "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "mime",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "mime",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2015",
+ "version": "0.3.17"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "miniz_oxide 0.7.4": {
+ "name": "miniz_oxide",
+ "version": "0.7.4",
+ "package_url": "https://github.com/Frommi/miniz_oxide/tree/master/miniz_oxide",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/miniz_oxide/0.7.4/download",
+ "sha256": "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "miniz_oxide",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "miniz_oxide",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "adler 1.0.2",
+ "target": "adler"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.7.4"
+ },
+ "license": "MIT OR Zlib OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT",
+ "Zlib"
+ ],
+ "license_file": "LICENSE"
+ },
+ "miniz_oxide 0.8.0": {
+ "name": "miniz_oxide",
+ "version": "0.8.0",
+ "package_url": "https://github.com/Frommi/miniz_oxide/tree/master/miniz_oxide",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/miniz_oxide/0.8.0/download",
+ "sha256": "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "miniz_oxide",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "miniz_oxide",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "with-alloc"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "adler2 2.0.0",
+ "target": "adler2"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.8.0"
+ },
+ "license": "MIT OR Zlib OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT",
+ "Zlib"
+ ],
+ "license_file": "LICENSE"
+ },
+ "mio 1.0.2": {
+ "name": "mio",
+ "version": "1.0.2",
+ "package_url": "https://github.com/tokio-rs/mio",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/mio/1.0.2/download",
+ "sha256": "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "mio",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "mio",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "net",
+ "os-ext",
+ "os-poll"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [],
+ "selects": {
+ "cfg(target_os = \"hermit\")": [
+ {
+ "id": "hermit-abi 0.3.9",
+ "target": "hermit_abi",
+ "alias": "libc"
+ }
+ ],
+ "cfg(target_os = \"wasi\")": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ },
+ {
+ "id": "wasi 0.11.0+wasi-snapshot-preview1",
+ "target": "wasi"
+ }
+ ],
+ "cfg(unix)": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "cfg(windows)": [
+ {
+ "id": "windows-sys 0.52.0",
+ "target": "windows_sys"
+ }
+ ]
+ }
+ },
+ "edition": "2021",
+ "version": "1.0.2"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE"
+ },
+ "nu-ansi-term 0.46.0": {
+ "name": "nu-ansi-term",
+ "version": "0.46.0",
+ "package_url": "https://github.com/nushell/nu-ansi-term",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/nu-ansi-term/0.46.0/download",
+ "sha256": "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "nu_ansi_term",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "nu_ansi_term",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "overload 0.1.1",
+ "target": "overload"
+ }
+ ],
+ "selects": {
+ "cfg(target_os = \"windows\")": [
+ {
+ "id": "winapi 0.3.9",
+ "target": "winapi"
+ }
+ ]
+ }
+ },
+ "edition": "2018",
+ "version": "0.46.0"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": null
+ },
+ "num-conv 0.1.0": {
+ "name": "num-conv",
+ "version": "0.1.0",
+ "package_url": "https://github.com/jhpratt/num-conv",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/num-conv/0.1.0/download",
+ "sha256": "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "num_conv",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "num_conv",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2021",
+ "version": "0.1.0"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-Apache"
+ },
+ "num-traits 0.2.19": {
+ "name": "num-traits",
+ "version": "0.2.19",
+ "package_url": "https://github.com/rust-num/num-traits",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/num-traits/0.2.19/download",
+ "sha256": "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "num_traits",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "num_traits",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default",
+ "std"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "num-traits 0.2.19",
+ "target": "build_script_build"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.2.19"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "autocfg 1.3.0",
+ "target": "autocfg"
+ }
+ ],
+ "selects": {}
+ }
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "objc 0.2.7": {
+ "name": "objc",
+ "version": "0.2.7",
+ "package_url": "http://github.com/SSheldon/rust-objc",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/objc/0.2.7/download",
+ "sha256": "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "objc",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "objc",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "malloc_buf 0.0.6",
+ "target": "malloc_buf"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2015",
+ "version": "0.2.7"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE.txt"
+ },
+ "objc-foundation 0.1.1": {
+ "name": "objc-foundation",
+ "version": "0.1.1",
+ "package_url": "http://github.com/SSheldon/rust-objc-foundation",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/objc-foundation/0.1.1/download",
+ "sha256": "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "objc_foundation",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "objc_foundation",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "block 0.1.6",
+ "target": "block"
+ },
+ {
+ "id": "objc 0.2.7",
+ "target": "objc"
+ },
+ {
+ "id": "objc_id 0.1.1",
+ "target": "objc_id"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2015",
+ "version": "0.1.1"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": null
+ },
+ "objc_id 0.1.1": {
+ "name": "objc_id",
+ "version": "0.1.1",
+ "package_url": "http://github.com/SSheldon/rust-objc-id",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/objc_id/0.1.1/download",
+ "sha256": "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "objc_id",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "objc_id",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "objc 0.2.7",
+ "target": "objc"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2015",
+ "version": "0.1.1"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": null
+ },
+ "object 0.36.3": {
+ "name": "object",
+ "version": "0.36.3",
+ "package_url": "https://github.com/gimli-rs/object",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/object/0.36.3/download",
+ "sha256": "27b64972346851a39438c60b341ebc01bba47464ae329e55cf343eb93964efd9"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "object",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "object",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "memchr 2.7.4",
+ "target": "memchr"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.36.3"
+ },
+ "license": "Apache-2.0 OR MIT",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "once_cell 1.19.0": {
+ "name": "once_cell",
+ "version": "1.19.0",
+ "package_url": "https://github.com/matklad/once_cell",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/once_cell/1.19.0/download",
+ "sha256": "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "once_cell",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "once_cell",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "alloc",
+ "default",
+ "race",
+ "std"
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "1.19.0"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "oorandom 11.1.4": {
+ "name": "oorandom",
+ "version": "11.1.4",
+ "package_url": "https://hg.sr.ht/~icefox/oorandom",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/oorandom/11.1.4/download",
+ "sha256": "b410bbe7e14ab526a0e86877eb47c6996a2bd7746f027ba551028c925390e4e9"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "oorandom",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "oorandom",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2018",
+ "version": "11.1.4"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE-MIT"
+ },
+ "overload 0.1.1": {
+ "name": "overload",
+ "version": "0.1.1",
+ "package_url": "https://github.com/danaugrs/overload",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/overload/0.1.1/download",
+ "sha256": "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "overload",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "overload",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2018",
+ "version": "0.1.1"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE"
+ },
+ "parking_lot 0.12.3": {
+ "name": "parking_lot",
+ "version": "0.12.3",
+ "package_url": "https://github.com/Amanieu/parking_lot",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/parking_lot/0.12.3/download",
+ "sha256": "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "parking_lot",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "parking_lot",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "lock_api 0.4.12",
+ "target": "lock_api"
+ },
+ {
+ "id": "parking_lot_core 0.9.10",
+ "target": "parking_lot_core"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.12.3"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "parking_lot_core 0.9.10": {
+ "name": "parking_lot_core",
+ "version": "0.9.10",
+ "package_url": "https://github.com/Amanieu/parking_lot",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/parking_lot_core/0.9.10/download",
+ "sha256": "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "parking_lot_core",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "parking_lot_core",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "cfg-if 1.0.0",
+ "target": "cfg_if"
+ },
+ {
+ "id": "parking_lot_core 0.9.10",
+ "target": "build_script_build"
+ },
+ {
+ "id": "smallvec 1.13.2",
+ "target": "smallvec"
+ }
+ ],
+ "selects": {
+ "cfg(target_os = \"redox\")": [
+ {
+ "id": "redox_syscall 0.5.3",
+ "target": "syscall"
+ }
+ ],
+ "cfg(unix)": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "cfg(windows)": [
+ {
+ "id": "windows-targets 0.52.6",
+ "target": "windows_targets"
+ }
+ ]
+ }
+ },
+ "edition": "2021",
+ "version": "0.9.10"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ]
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "percent-encoding 2.3.1": {
+ "name": "percent-encoding",
+ "version": "2.3.1",
+ "package_url": "https://github.com/servo/rust-url/",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/percent-encoding/2.3.1/download",
+ "sha256": "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "percent_encoding",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "percent_encoding",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "alloc",
+ "default",
+ "std"
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "2.3.1"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "pin-project 1.1.5": {
+ "name": "pin-project",
+ "version": "1.1.5",
+ "package_url": "https://github.com/taiki-e/pin-project",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/pin-project/1.1.5/download",
+ "sha256": "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "pin_project",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "pin_project",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2021",
+ "proc_macro_deps": {
+ "common": [
+ {
+ "id": "pin-project-internal 1.1.5",
+ "target": "pin_project_internal"
+ }
+ ],
+ "selects": {}
+ },
+ "version": "1.1.5"
+ },
+ "license": "Apache-2.0 OR MIT",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "pin-project-internal 1.1.5": {
+ "name": "pin-project-internal",
+ "version": "1.1.5",
+ "package_url": "https://github.com/taiki-e/pin-project",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/pin-project-internal/1.1.5/download",
+ "sha256": "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965"
+ }
+ },
+ "targets": [
+ {
+ "ProcMacro": {
+ "crate_name": "pin_project_internal",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "pin_project_internal",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "proc-macro2 1.0.86",
+ "target": "proc_macro2"
+ },
+ {
+ "id": "quote 1.0.36",
+ "target": "quote"
+ },
+ {
+ "id": "syn 2.0.75",
+ "target": "syn"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "1.1.5"
+ },
+ "license": "Apache-2.0 OR MIT",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "pin-project-lite 0.2.14": {
+ "name": "pin-project-lite",
+ "version": "0.2.14",
+ "package_url": "https://github.com/taiki-e/pin-project-lite",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/pin-project-lite/0.2.14/download",
+ "sha256": "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "pin_project_lite",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "pin_project_lite",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2018",
+ "version": "0.2.14"
+ },
+ "license": "Apache-2.0 OR MIT",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "pin-utils 0.1.0": {
+ "name": "pin-utils",
+ "version": "0.1.0",
+ "package_url": "https://github.com/rust-lang-nursery/pin-utils",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/pin-utils/0.1.0/download",
+ "sha256": "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "pin_utils",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "pin_utils",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2018",
+ "version": "0.1.0"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "pkg-config 0.3.30": {
+ "name": "pkg-config",
+ "version": "0.3.30",
+ "package_url": "https://github.com/rust-lang/pkg-config-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/pkg-config/0.3.30/download",
+ "sha256": "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "pkg_config",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "pkg_config",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2015",
+ "version": "0.3.30"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "platform-shared 1.0.0": {
+ "name": "platform-shared",
+ "version": "1.0.0",
+ "package_url": null,
+ "repository": null,
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "platform_shared",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "platform_shared",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "anyhow 1.0.86",
+ "target": "anyhow"
+ },
+ {
+ "id": "bd-api 1.0.0",
+ "target": "bd_api"
+ },
+ {
+ "id": "bd-client-common 1.0.0",
+ "target": "bd_client_common"
+ },
+ {
+ "id": "bd-client-stats-store 1.0.0",
+ "target": "bd_client_stats_store"
+ },
+ {
+ "id": "bd-log-primitives 1.0.0",
+ "target": "bd_log_primitives"
+ },
+ {
+ "id": "bd-logger 1.0.0",
+ "target": "bd_logger"
+ },
+ {
+ "id": "bd-runtime 1.0.0",
+ "target": "bd_runtime"
+ },
+ {
+ "id": "bd-session 1.0.0",
+ "target": "bd_session"
+ },
+ {
+ "id": "parking_lot 0.12.3",
+ "target": "parking_lot"
+ },
+ {
+ "id": "platform-shared 1.0.0",
+ "target": "build_script_build"
+ },
+ {
+ "id": "regex 1.10.6",
+ "target": "regex"
+ },
+ {
+ "id": "time 0.3.36",
+ "target": "time"
+ },
+ {
+ "id": "tokio 1.39.3",
+ "target": "tokio"
+ }
+ ],
+ "selects": {}
+ },
+ "deps_dev": {
+ "common": [
+ {
+ "id": "pretty_assertions 1.4.0",
+ "target": "pretty_assertions"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "1.0.0"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ]
+ },
+ "license": null,
+ "license_ids": [],
+ "license_file": "LICENSE"
+ },
+ "platform_test_helpers 1.0.0": {
+ "name": "platform_test_helpers",
+ "version": "1.0.0",
+ "package_url": null,
+ "repository": null,
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "platform_test_helpers",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "platform_test_helpers",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "anyhow 1.0.86",
+ "target": "anyhow"
+ },
+ {
+ "id": "assert_matches 1.5.0",
+ "target": "assert_matches"
+ },
+ {
+ "id": "bd-api 1.0.0",
+ "target": "bd_api"
+ },
+ {
+ "id": "bd-client-common 1.0.0",
+ "target": "bd_client_common"
+ },
+ {
+ "id": "bd-key-value 1.0.0",
+ "target": "bd_key_value"
+ },
+ {
+ "id": "bd-logger 1.0.0",
+ "target": "bd_logger"
+ },
+ {
+ "id": "bd-proto 1.0.0",
+ "target": "bd_proto"
+ },
+ {
+ "id": "bd-runtime 1.0.0",
+ "target": "bd_runtime"
+ },
+ {
+ "id": "bd-test-helpers 1.0.0",
+ "target": "bd_test_helpers"
+ },
+ {
+ "id": "time 0.3.36",
+ "target": "time"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "1.0.0"
+ },
+ "license": null,
+ "license_ids": [],
+ "license_file": "LICENSE"
+ },
+ "plotters 0.3.6": {
+ "name": "plotters",
+ "version": "0.3.6",
+ "package_url": "https://github.com/plotters-rs/plotters",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/plotters/0.3.6/download",
+ "sha256": "a15b6eccb8484002195a3e44fe65a4ce8e93a625797a063735536fd59cb01cf3"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "plotters",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "plotters",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "area_series",
+ "line_series",
+ "plotters-svg",
+ "svg_backend"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "num-traits 0.2.19",
+ "target": "num_traits"
+ },
+ {
+ "id": "plotters-backend 0.3.6",
+ "target": "plotters_backend"
+ },
+ {
+ "id": "plotters-svg 0.3.6",
+ "target": "plotters_svg"
+ }
+ ],
+ "selects": {
+ "cfg(all(target_arch = \"wasm32\", not(target_os = \"wasi\")))": [
+ {
+ "id": "wasm-bindgen 0.2.93",
+ "target": "wasm_bindgen"
+ },
+ {
+ "id": "web-sys 0.3.70",
+ "target": "web_sys"
+ }
+ ]
+ }
+ },
+ "edition": "2018",
+ "version": "0.3.6"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE"
+ },
+ "plotters-backend 0.3.6": {
+ "name": "plotters-backend",
+ "version": "0.3.6",
+ "package_url": "https://github.com/plotters-rs/plotters",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/plotters-backend/0.3.6/download",
+ "sha256": "414cec62c6634ae900ea1c56128dfe87cf63e7caece0852ec76aba307cebadb7"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "plotters_backend",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "plotters_backend",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2018",
+ "version": "0.3.6"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE"
+ },
+ "plotters-svg 0.3.6": {
+ "name": "plotters-svg",
+ "version": "0.3.6",
+ "package_url": "https://github.com/plotters-rs/plotters.git",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/plotters-svg/0.3.6/download",
+ "sha256": "81b30686a7d9c3e010b84284bdd26a29f2138574f52f5eb6f794fc0ad924e705"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "plotters_svg",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "plotters_svg",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "plotters-backend 0.3.6",
+ "target": "plotters_backend"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.3.6"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE"
+ },
+ "pom_checker 0.1.0": {
+ "name": "pom_checker",
+ "version": "0.1.0",
+ "package_url": null,
+ "repository": null,
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "pom_checker",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "pom_checker",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "simple-xml 0.1.10",
+ "target": "simple_xml"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.1.0"
+ },
+ "license": null,
+ "license_ids": [],
+ "license_file": "LICENSE"
+ },
+ "powerfmt 0.2.0": {
+ "name": "powerfmt",
+ "version": "0.2.0",
+ "package_url": "https://github.com/jhpratt/powerfmt",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/powerfmt/0.2.0/download",
+ "sha256": "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "powerfmt",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "powerfmt",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2021",
+ "version": "0.2.0"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-Apache"
+ },
+ "ppv-lite86 0.2.20": {
+ "name": "ppv-lite86",
+ "version": "0.2.20",
+ "package_url": "https://github.com/cryptocorrosion/cryptocorrosion",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/ppv-lite86/0.2.20/download",
+ "sha256": "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "ppv_lite86",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "ppv_lite86",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "simd",
+ "std"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "zerocopy 0.7.35",
+ "target": "zerocopy"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.2.20"
+ },
+ "license": "MIT/Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "pretty_assertions 1.4.0": {
+ "name": "pretty_assertions",
+ "version": "1.4.0",
+ "package_url": "https://github.com/rust-pretty-assertions/rust-pretty-assertions",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/pretty_assertions/1.4.0/download",
+ "sha256": "af7cee1a6c8a5b9208b3cb1061f10c0cb689087b3d8ce85fb9d2dd7a29b6ba66"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "pretty_assertions",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "pretty_assertions",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default",
+ "std"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "diff 0.1.13",
+ "target": "diff"
+ },
+ {
+ "id": "yansi 0.5.1",
+ "target": "yansi"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "1.4.0"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "proc-macro2 1.0.86": {
+ "name": "proc-macro2",
+ "version": "1.0.86",
+ "package_url": "https://github.com/dtolnay/proc-macro2",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/proc-macro2/1.0.86/download",
+ "sha256": "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "proc_macro2",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "proc_macro2",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default",
+ "proc-macro"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "proc-macro2 1.0.86",
+ "target": "build_script_build"
+ },
+ {
+ "id": "unicode-ident 1.0.12",
+ "target": "unicode_ident"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "1.0.86"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ]
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "prometheus 0.13.4": {
+ "name": "prometheus",
+ "version": "0.13.4",
+ "package_url": "https://github.com/tikv/rust-prometheus",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/prometheus/0.13.4/download",
+ "sha256": "3d33c28a30771f7f96db69893f78b857f7450d7e0237e9c8fc6427a81bae7ed1"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "prometheus",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "prometheus",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "cfg-if 1.0.0",
+ "target": "cfg_if"
+ },
+ {
+ "id": "fnv 1.0.7",
+ "target": "fnv"
+ },
+ {
+ "id": "lazy_static 1.5.0",
+ "target": "lazy_static"
+ },
+ {
+ "id": "memchr 2.7.4",
+ "target": "memchr"
+ },
+ {
+ "id": "parking_lot 0.12.3",
+ "target": "parking_lot"
+ },
+ {
+ "id": "prometheus 0.13.4",
+ "target": "build_script_build"
+ },
+ {
+ "id": "thiserror 1.0.63",
+ "target": "thiserror"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.13.4"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ]
+ },
+ "license": "Apache-2.0",
+ "license_ids": [
+ "Apache-2.0"
+ ],
+ "license_file": "LICENSE"
+ },
+ "proto 0.1.0": {
+ "name": "proto",
+ "version": "0.1.0",
+ "package_url": null,
+ "repository": null,
+ "targets": [],
+ "library_target_name": null,
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "serde 1.0.208",
+ "target": "serde"
+ },
+ {
+ "id": "serde_json 1.0.125",
+ "target": "serde_json"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.1.0"
+ },
+ "license": null,
+ "license_ids": [],
+ "license_file": "LICENSE"
+ },
+ "protobuf 4.0.0-alpha.0": {
+ "name": "protobuf",
+ "version": "4.0.0-alpha.0",
+ "package_url": "https://github.com/stepancheg/rust-protobuf/",
+ "repository": {
+ "Git": {
+ "remote": "https://github.com/bitdriftlabs/rust-protobuf.git",
+ "commitish": {
+ "Rev": "b35660c7846ebdbb3e14c238832eb353a6dbdecf"
+ },
+ "strip_prefix": "protobuf"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "protobuf",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "protobuf",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "bytes",
+ "default",
+ "with-bytes"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "bytes 1.7.1",
+ "target": "bytes"
+ },
+ {
+ "id": "once_cell 1.19.0",
+ "target": "once_cell"
+ },
+ {
+ "id": "protobuf 4.0.0-alpha.0",
+ "target": "build_script_build"
+ },
+ {
+ "id": "protobuf-support 4.0.0-alpha.0",
+ "target": "protobuf_support"
+ },
+ {
+ "id": "thiserror 1.0.63",
+ "target": "thiserror"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "4.0.0-alpha.0"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ]
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE.txt"
+ },
+ "protobuf-codegen 4.0.0-alpha.0": {
+ "name": "protobuf-codegen",
+ "version": "4.0.0-alpha.0",
+ "package_url": "https://github.com/stepancheg/rust-protobuf/",
+ "repository": {
+ "Git": {
+ "remote": "https://github.com/bitdriftlabs/rust-protobuf.git",
+ "commitish": {
+ "Rev": "b35660c7846ebdbb3e14c238832eb353a6dbdecf"
+ },
+ "strip_prefix": "protobuf-codegen"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "protobuf_codegen",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "protobuf_codegen",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "anyhow 1.0.86",
+ "target": "anyhow"
+ },
+ {
+ "id": "once_cell 1.19.0",
+ "target": "once_cell"
+ },
+ {
+ "id": "protobuf 4.0.0-alpha.0",
+ "target": "protobuf"
+ },
+ {
+ "id": "protobuf-parse 4.0.0-alpha.0",
+ "target": "protobuf_parse"
+ },
+ {
+ "id": "regex 1.10.6",
+ "target": "regex"
+ },
+ {
+ "id": "tempfile 3.12.0",
+ "target": "tempfile"
+ },
+ {
+ "id": "thiserror 1.0.63",
+ "target": "thiserror"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "4.0.0-alpha.0"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE.txt"
+ },
+ "protobuf-parse 4.0.0-alpha.0": {
+ "name": "protobuf-parse",
+ "version": "4.0.0-alpha.0",
+ "package_url": "https://github.com/stepancheg/rust-protobuf/tree/master/protobuf-parse/",
+ "repository": {
+ "Git": {
+ "remote": "https://github.com/bitdriftlabs/rust-protobuf.git",
+ "commitish": {
+ "Rev": "b35660c7846ebdbb3e14c238832eb353a6dbdecf"
+ },
+ "strip_prefix": "protobuf-parse"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "protobuf_parse",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "protobuf_parse",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "anyhow 1.0.86",
+ "target": "anyhow"
+ },
+ {
+ "id": "indexmap 2.4.0",
+ "target": "indexmap"
+ },
+ {
+ "id": "log 0.4.22",
+ "target": "log"
+ },
+ {
+ "id": "protobuf 4.0.0-alpha.0",
+ "target": "protobuf"
+ },
+ {
+ "id": "protobuf-support 4.0.0-alpha.0",
+ "target": "protobuf_support"
+ },
+ {
+ "id": "tempfile 3.12.0",
+ "target": "tempfile"
+ },
+ {
+ "id": "thiserror 1.0.63",
+ "target": "thiserror"
+ },
+ {
+ "id": "which 4.4.2",
+ "target": "which"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "4.0.0-alpha.0"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE.txt"
+ },
+ "protobuf-support 4.0.0-alpha.0": {
+ "name": "protobuf-support",
+ "version": "4.0.0-alpha.0",
+ "package_url": "https://github.com/stepancheg/rust-protobuf/",
+ "repository": {
+ "Git": {
+ "remote": "https://github.com/bitdriftlabs/rust-protobuf.git",
+ "commitish": {
+ "Rev": "b35660c7846ebdbb3e14c238832eb353a6dbdecf"
+ },
+ "strip_prefix": "protobuf-support"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "protobuf_support",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "protobuf_support",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "thiserror 1.0.63",
+ "target": "thiserror"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "4.0.0-alpha.0"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE.txt"
+ },
+ "quote 1.0.36": {
+ "name": "quote",
+ "version": "1.0.36",
+ "package_url": "https://github.com/dtolnay/quote",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/quote/1.0.36/download",
+ "sha256": "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "quote",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "quote",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default",
+ "proc-macro"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "proc-macro2 1.0.86",
+ "target": "proc_macro2"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "1.0.36"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "rand 0.4.6": {
+ "name": "rand",
+ "version": "0.4.6",
+ "package_url": "https://github.com/rust-lang-nursery/rand",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/rand/0.4.6/download",
+ "sha256": "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "rand",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "rand",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default",
+ "libc",
+ "std"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [],
+ "selects": {
+ "aarch64-apple-darwin": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "aarch64-apple-ios": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "aarch64-apple-ios-sim": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "aarch64-fuchsia": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "aarch64-linux-android": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "aarch64-unknown-linux-gnu": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "aarch64-unknown-nixos-gnu": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "aarch64-unknown-nto-qnx710": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "arm-unknown-linux-gnueabi": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "armv7-linux-androideabi": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "armv7-unknown-linux-gnueabi": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "cfg(target_env = \"sgx\")": [
+ {
+ "id": "rand_core 0.3.1",
+ "target": "rand_core"
+ },
+ {
+ "id": "rdrand 0.4.0",
+ "target": "rdrand"
+ }
+ ],
+ "cfg(target_os = \"fuchsia\")": [
+ {
+ "id": "fuchsia-cprng 0.1.1",
+ "target": "fuchsia_cprng"
+ }
+ ],
+ "cfg(windows)": [
+ {
+ "id": "winapi 0.3.9",
+ "target": "winapi"
+ }
+ ],
+ "i686-apple-darwin": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "i686-linux-android": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "i686-unknown-freebsd": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "i686-unknown-linux-gnu": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "powerpc-unknown-linux-gnu": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "s390x-unknown-linux-gnu": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "x86_64-apple-darwin": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "x86_64-apple-ios": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "x86_64-fuchsia": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "x86_64-linux-android": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "x86_64-unknown-freebsd": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "x86_64-unknown-linux-gnu": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "x86_64-unknown-nixos-gnu": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ]
+ }
+ },
+ "edition": "2015",
+ "version": "0.4.6"
+ },
+ "license": "MIT/Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "rand 0.8.5": {
+ "name": "rand",
+ "version": "0.8.5",
+ "package_url": "https://github.com/rust-random/rand",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/rand/0.8.5/download",
+ "sha256": "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "rand",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "rand",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "alloc",
+ "default",
+ "getrandom",
+ "libc",
+ "rand_chacha",
+ "std",
+ "std_rng"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "rand_chacha 0.3.1",
+ "target": "rand_chacha"
+ },
+ {
+ "id": "rand_core 0.6.4",
+ "target": "rand_core"
+ }
+ ],
+ "selects": {
+ "aarch64-apple-darwin": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "aarch64-apple-ios": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "aarch64-apple-ios-sim": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "aarch64-fuchsia": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "aarch64-linux-android": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "aarch64-unknown-linux-gnu": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "aarch64-unknown-nixos-gnu": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "aarch64-unknown-nto-qnx710": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "arm-unknown-linux-gnueabi": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "armv7-linux-androideabi": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "armv7-unknown-linux-gnueabi": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "i686-apple-darwin": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "i686-linux-android": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "i686-unknown-freebsd": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "i686-unknown-linux-gnu": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "powerpc-unknown-linux-gnu": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "s390x-unknown-linux-gnu": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "x86_64-apple-darwin": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "x86_64-apple-ios": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "x86_64-fuchsia": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "x86_64-linux-android": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "x86_64-unknown-freebsd": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "x86_64-unknown-linux-gnu": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "x86_64-unknown-nixos-gnu": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ]
+ }
+ },
+ "edition": "2018",
+ "version": "0.8.5"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "rand_chacha 0.3.1": {
+ "name": "rand_chacha",
+ "version": "0.3.1",
+ "package_url": "https://github.com/rust-random/rand",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/rand_chacha/0.3.1/download",
+ "sha256": "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "rand_chacha",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "rand_chacha",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "std"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "ppv-lite86 0.2.20",
+ "target": "ppv_lite86"
+ },
+ {
+ "id": "rand_core 0.6.4",
+ "target": "rand_core"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.3.1"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "rand_core 0.3.1": {
+ "name": "rand_core",
+ "version": "0.3.1",
+ "package_url": "https://github.com/rust-random/rand",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/rand_core/0.3.1/download",
+ "sha256": "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "rand_core",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "rand_core",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "rand_core 0.4.2",
+ "target": "rand_core"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2015",
+ "version": "0.3.1"
+ },
+ "license": "MIT/Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "rand_core 0.4.2": {
+ "name": "rand_core",
+ "version": "0.4.2",
+ "package_url": "https://github.com/rust-random/rand",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/rand_core/0.4.2/download",
+ "sha256": "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "rand_core",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "rand_core",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2015",
+ "version": "0.4.2"
+ },
+ "license": "MIT/Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "rand_core 0.6.4": {
+ "name": "rand_core",
+ "version": "0.6.4",
+ "package_url": "https://github.com/rust-random/rand",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/rand_core/0.6.4/download",
+ "sha256": "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "rand_core",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "rand_core",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "alloc",
+ "getrandom",
+ "std"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "getrandom 0.2.15",
+ "target": "getrandom"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.6.4"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "rayon 1.10.0": {
+ "name": "rayon",
+ "version": "1.10.0",
+ "package_url": "https://github.com/rayon-rs/rayon",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/rayon/1.10.0/download",
+ "sha256": "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "rayon",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "rayon",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "either 1.13.0",
+ "target": "either"
+ },
+ {
+ "id": "rayon-core 1.12.1",
+ "target": "rayon_core"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "1.10.0"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "rayon-core 1.12.1": {
+ "name": "rayon-core",
+ "version": "1.12.1",
+ "package_url": "https://github.com/rayon-rs/rayon",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/rayon-core/1.12.1/download",
+ "sha256": "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "rayon_core",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "rayon_core",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "crossbeam-deque 0.8.5",
+ "target": "crossbeam_deque"
+ },
+ {
+ "id": "crossbeam-utils 0.8.20",
+ "target": "crossbeam_utils"
+ },
+ {
+ "id": "rayon-core 1.12.1",
+ "target": "build_script_build"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "1.12.1"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ],
+ "links": "rayon-core"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "rdrand 0.4.0": {
+ "name": "rdrand",
+ "version": "0.4.0",
+ "package_url": "https://github.com/nagisa/rust_rdrand/",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/rdrand/0.4.0/download",
+ "sha256": "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "rdrand",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "rdrand",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "rand_core 0.3.1",
+ "target": "rand_core"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2015",
+ "version": "0.4.0"
+ },
+ "license": "ISC",
+ "license_ids": [
+ "ISC"
+ ],
+ "license_file": "LICENSE"
+ },
+ "redox_syscall 0.5.3": {
+ "name": "redox_syscall",
+ "version": "0.5.3",
+ "package_url": "https://gitlab.redox-os.org/redox-os/syscall",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/redox_syscall/0.5.3/download",
+ "sha256": "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "syscall",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "syscall",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "bitflags 2.6.0",
+ "target": "bitflags"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.5.3"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE"
+ },
+ "regex 1.10.6": {
+ "name": "regex",
+ "version": "1.10.6",
+ "package_url": "https://github.com/rust-lang/regex",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/regex/1.10.6/download",
+ "sha256": "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "regex",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "regex",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default",
+ "perf",
+ "perf-backtrack",
+ "perf-cache",
+ "perf-dfa",
+ "perf-inline",
+ "perf-literal",
+ "perf-onepass",
+ "std",
+ "unicode",
+ "unicode-age",
+ "unicode-bool",
+ "unicode-case",
+ "unicode-gencat",
+ "unicode-perl",
+ "unicode-script",
+ "unicode-segment"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "aho-corasick 1.1.3",
+ "target": "aho_corasick"
+ },
+ {
+ "id": "memchr 2.7.4",
+ "target": "memchr"
+ },
+ {
+ "id": "regex-automata 0.4.7",
+ "target": "regex_automata"
+ },
+ {
+ "id": "regex-syntax 0.8.4",
+ "target": "regex_syntax"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "1.10.6"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "regex-automata 0.1.10": {
+ "name": "regex-automata",
+ "version": "0.1.10",
+ "package_url": "https://github.com/BurntSushi/regex-automata",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/regex-automata/0.1.10/download",
+ "sha256": "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "regex_automata",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "regex_automata",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default",
+ "regex-syntax",
+ "std"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "regex-syntax 0.6.29",
+ "target": "regex_syntax"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2015",
+ "version": "0.1.10"
+ },
+ "license": "Unlicense/MIT",
+ "license_ids": [
+ "MIT",
+ "Unlicense"
+ ],
+ "license_file": "LICENSE-MIT"
+ },
+ "regex-automata 0.4.7": {
+ "name": "regex-automata",
+ "version": "0.4.7",
+ "package_url": "https://github.com/rust-lang/regex/tree/master/regex-automata",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/regex-automata/0.4.7/download",
+ "sha256": "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "regex_automata",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "regex_automata",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "alloc",
+ "dfa-onepass",
+ "hybrid",
+ "meta",
+ "nfa-backtrack",
+ "nfa-pikevm",
+ "nfa-thompson",
+ "perf-inline",
+ "perf-literal",
+ "perf-literal-multisubstring",
+ "perf-literal-substring",
+ "std",
+ "syntax",
+ "unicode",
+ "unicode-age",
+ "unicode-bool",
+ "unicode-case",
+ "unicode-gencat",
+ "unicode-perl",
+ "unicode-script",
+ "unicode-segment",
+ "unicode-word-boundary"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "aho-corasick 1.1.3",
+ "target": "aho_corasick"
+ },
+ {
+ "id": "memchr 2.7.4",
+ "target": "memchr"
+ },
+ {
+ "id": "regex-syntax 0.8.4",
+ "target": "regex_syntax"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.4.7"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "regex-syntax 0.6.29": {
+ "name": "regex-syntax",
+ "version": "0.6.29",
+ "package_url": "https://github.com/rust-lang/regex",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/regex-syntax/0.6.29/download",
+ "sha256": "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "regex_syntax",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "regex_syntax",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default",
+ "unicode",
+ "unicode-age",
+ "unicode-bool",
+ "unicode-case",
+ "unicode-gencat",
+ "unicode-perl",
+ "unicode-script",
+ "unicode-segment"
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.6.29"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "regex-syntax 0.8.4": {
+ "name": "regex-syntax",
+ "version": "0.8.4",
+ "package_url": "https://github.com/rust-lang/regex/tree/master/regex-syntax",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/regex-syntax/0.8.4/download",
+ "sha256": "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "regex_syntax",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "regex_syntax",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default",
+ "std",
+ "unicode",
+ "unicode-age",
+ "unicode-bool",
+ "unicode-case",
+ "unicode-gencat",
+ "unicode-perl",
+ "unicode-script",
+ "unicode-segment"
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.8.4"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "remove_dir_all 0.5.3": {
+ "name": "remove_dir_all",
+ "version": "0.5.3",
+ "package_url": "https://github.com/XAMPPRocky/remove_dir_all.git",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/remove_dir_all/0.5.3/download",
+ "sha256": "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "remove_dir_all",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "remove_dir_all",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [],
+ "selects": {
+ "cfg(windows)": [
+ {
+ "id": "winapi 0.3.9",
+ "target": "winapi"
+ }
+ ]
+ }
+ },
+ "edition": "2015",
+ "version": "0.5.3"
+ },
+ "license": "MIT/Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": null
+ },
+ "ring 0.17.8": {
+ "name": "ring",
+ "version": "0.17.8",
+ "package_url": "https://github.com/briansmith/ring",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/ring/0.17.8/download",
+ "sha256": "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "ring",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "ring",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "alloc",
+ "default",
+ "dev_urandom_fallback"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "cfg-if 1.0.0",
+ "target": "cfg_if"
+ },
+ {
+ "id": "getrandom 0.2.15",
+ "target": "getrandom"
+ },
+ {
+ "id": "ring 0.17.8",
+ "target": "build_script_build"
+ },
+ {
+ "id": "untrusted 0.9.0",
+ "target": "untrusted"
+ }
+ ],
+ "selects": {
+ "cfg(all(any(target_os = \"android\", target_os = \"linux\"), any(target_arch = \"aarch64\", target_arch = \"arm\")))": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "cfg(all(target_arch = \"aarch64\", target_os = \"windows\"))": [
+ {
+ "id": "windows-sys 0.52.0",
+ "target": "windows_sys"
+ }
+ ],
+ "cfg(any(target_arch = \"aarch64\", target_arch = \"arm\", target_arch = \"x86\", target_arch = \"x86_64\"))": [
+ {
+ "id": "spin 0.9.8",
+ "target": "spin"
+ }
+ ]
+ }
+ },
+ "edition": "2021",
+ "version": "0.17.8"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "cc 1.1.13",
+ "target": "cc"
+ }
+ ],
+ "selects": {}
+ },
+ "links": "ring_core_0_17_8"
+ },
+ "license": null,
+ "license_ids": [],
+ "license_file": "LICENSE"
+ },
+ "rustc-demangle 0.1.24": {
+ "name": "rustc-demangle",
+ "version": "0.1.24",
+ "package_url": "https://github.com/rust-lang/rustc-demangle",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/rustc-demangle/0.1.24/download",
+ "sha256": "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "rustc_demangle",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "rustc_demangle",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2015",
+ "version": "0.1.24"
+ },
+ "license": "MIT/Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "rustc_version 0.4.0": {
+ "name": "rustc_version",
+ "version": "0.4.0",
+ "package_url": "https://github.com/Kimundi/rustc-version-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/rustc_version/0.4.0/download",
+ "sha256": "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "rustc_version",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "rustc_version",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "semver 1.0.23",
+ "target": "semver"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.4.0"
+ },
+ "license": "MIT/Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "rustix 0.38.34": {
+ "name": "rustix",
+ "version": "0.38.34",
+ "package_url": "https://github.com/bytecodealliance/rustix",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/rustix/0.38.34/download",
+ "sha256": "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "rustix",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "rustix",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "alloc",
+ "default",
+ "fs",
+ "libc-extra-traits",
+ "std",
+ "use-libc-auxv"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "bitflags 2.6.0",
+ "target": "bitflags"
+ },
+ {
+ "id": "errno 0.3.9",
+ "target": "errno",
+ "alias": "libc_errno"
+ },
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ },
+ {
+ "id": "rustix 0.38.34",
+ "target": "build_script_build"
+ }
+ ],
+ "selects": {
+ "cfg(all(any(target_os = \"android\", target_os = \"linux\"), any(rustix_use_libc, miri, not(all(target_os = \"linux\", target_endian = \"little\", 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 = \"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\")))))))": [
+ {
+ "id": "linux-raw-sys 0.4.14",
+ "target": "linux_raw_sys"
+ }
+ ],
+ "cfg(all(not(rustix_use_libc), not(miri), target_os = \"linux\", target_endian = \"little\", 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 = \"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\"))))": [
+ {
+ "id": "linux-raw-sys 0.4.14",
+ "target": "linux_raw_sys"
+ }
+ ],
+ "cfg(windows)": [
+ {
+ "id": "windows-sys 0.52.0",
+ "target": "windows_sys"
+ }
+ ]
+ }
+ },
+ "edition": "2021",
+ "version": "0.38.34"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ]
+ },
+ "license": "Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "rustls 0.23.12": {
+ "name": "rustls",
+ "version": "0.23.12",
+ "package_url": "https://github.com/rustls/rustls",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/rustls/0.23.12/download",
+ "sha256": "c58f8c84392efc0a126acce10fa59ff7b3d2ac06ab451a33f2741989b806b044"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "rustls",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "rustls",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "ring",
+ "std"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "once_cell 1.19.0",
+ "target": "once_cell"
+ },
+ {
+ "id": "ring 0.17.8",
+ "target": "ring"
+ },
+ {
+ "id": "rustls 0.23.12",
+ "target": "build_script_build"
+ },
+ {
+ "id": "rustls-pki-types 1.8.0",
+ "target": "rustls_pki_types",
+ "alias": "pki_types"
+ },
+ {
+ "id": "rustls-webpki 0.102.6",
+ "target": "webpki"
+ },
+ {
+ "id": "subtle 2.6.1",
+ "target": "subtle"
+ },
+ {
+ "id": "zeroize 1.8.1",
+ "target": "zeroize"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.23.12"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ],
+ "link_deps": {
+ "common": [
+ {
+ "id": "ring 0.17.8",
+ "target": "ring"
+ }
+ ],
+ "selects": {}
+ }
+ },
+ "license": "Apache-2.0 OR ISC OR MIT",
+ "license_ids": [
+ "Apache-2.0",
+ "ISC",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "rustls-pemfile 2.1.3": {
+ "name": "rustls-pemfile",
+ "version": "2.1.3",
+ "package_url": "https://github.com/rustls/pemfile",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/rustls-pemfile/2.1.3/download",
+ "sha256": "196fe16b00e106300d3e45ecfcb764fa292a535d7326a29a5875c579c7417425"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "rustls_pemfile",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "rustls_pemfile",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default",
+ "std"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "base64 0.22.1",
+ "target": "base64"
+ },
+ {
+ "id": "rustls-pki-types 1.8.0",
+ "target": "rustls_pki_types",
+ "alias": "pki_types"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "2.1.3"
+ },
+ "license": "Apache-2.0 OR ISC OR MIT",
+ "license_ids": [
+ "Apache-2.0",
+ "ISC",
+ "MIT"
+ ],
+ "license_file": "LICENSE"
+ },
+ "rustls-pki-types 1.8.0": {
+ "name": "rustls-pki-types",
+ "version": "1.8.0",
+ "package_url": "https://github.com/rustls/pki-types",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/rustls-pki-types/1.8.0/download",
+ "sha256": "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "rustls_pki_types",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "rustls_pki_types",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "alloc",
+ "default",
+ "std"
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "1.8.0"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "rustls-webpki 0.102.6": {
+ "name": "rustls-webpki",
+ "version": "0.102.6",
+ "package_url": "https://github.com/rustls/webpki",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/rustls-webpki/0.102.6/download",
+ "sha256": "8e6b52d4fda176fd835fdc55a835d4a89b8499cad995885a21149d5ad62f852e"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "webpki",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "webpki",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "alloc",
+ "ring",
+ "std"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "ring 0.17.8",
+ "target": "ring"
+ },
+ {
+ "id": "rustls-pki-types 1.8.0",
+ "target": "rustls_pki_types",
+ "alias": "pki_types"
+ },
+ {
+ "id": "untrusted 0.9.0",
+ "target": "untrusted"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.102.6"
+ },
+ "license": "ISC",
+ "license_ids": [
+ "ISC"
+ ],
+ "license_file": "LICENSE"
+ },
+ "rustversion 1.0.17": {
+ "name": "rustversion",
+ "version": "1.0.17",
+ "package_url": "https://github.com/dtolnay/rustversion",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/rustversion/1.0.17/download",
+ "sha256": "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6"
+ }
+ },
+ "targets": [
+ {
+ "ProcMacro": {
+ "crate_name": "rustversion",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build/build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "rustversion",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "rustversion 1.0.17",
+ "target": "build_script_build"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "1.0.17"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ]
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "ryu 1.0.18": {
+ "name": "ryu",
+ "version": "1.0.18",
+ "package_url": "https://github.com/dtolnay/ryu",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/ryu/1.0.18/download",
+ "sha256": "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "ryu",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "ryu",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2018",
+ "version": "1.0.18"
+ },
+ "license": "Apache-2.0 OR BSL-1.0",
+ "license_ids": [
+ "Apache-2.0",
+ "BSL-1.0"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "same-file 1.0.6": {
+ "name": "same-file",
+ "version": "1.0.6",
+ "package_url": "https://github.com/BurntSushi/same-file",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/same-file/1.0.6/download",
+ "sha256": "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "same_file",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "same_file",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [],
+ "selects": {
+ "cfg(windows)": [
+ {
+ "id": "winapi-util 0.1.9",
+ "target": "winapi_util"
+ }
+ ]
+ }
+ },
+ "edition": "2018",
+ "version": "1.0.6"
+ },
+ "license": "Unlicense/MIT",
+ "license_ids": [
+ "MIT",
+ "Unlicense"
+ ],
+ "license_file": "LICENSE-MIT"
+ },
+ "scopeguard 1.2.0": {
+ "name": "scopeguard",
+ "version": "1.2.0",
+ "package_url": "https://github.com/bluss/scopeguard",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/scopeguard/1.2.0/download",
+ "sha256": "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "scopeguard",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "scopeguard",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2015",
+ "version": "1.2.0"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "semver 1.0.23": {
+ "name": "semver",
+ "version": "1.0.23",
+ "package_url": "https://github.com/dtolnay/semver",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/semver/1.0.23/download",
+ "sha256": "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "semver",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "semver",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default",
+ "std"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "semver 1.0.23",
+ "target": "build_script_build"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "1.0.23"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ]
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "serde 1.0.208": {
+ "name": "serde",
+ "version": "1.0.208",
+ "package_url": "https://github.com/serde-rs/serde",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/serde/1.0.208/download",
+ "sha256": "cff085d2cb684faa248efb494c39b68e522822ac0de72ccf08109abde717cfb2"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "serde",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "serde",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "alloc",
+ "default",
+ "derive",
+ "serde_derive",
+ "std"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "serde 1.0.208",
+ "target": "build_script_build"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "proc_macro_deps": {
+ "common": [
+ {
+ "id": "serde_derive 1.0.208",
+ "target": "serde_derive"
+ }
+ ],
+ "selects": {}
+ },
+ "version": "1.0.208"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ]
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "serde_derive 1.0.208": {
+ "name": "serde_derive",
+ "version": "1.0.208",
+ "package_url": "https://github.com/serde-rs/serde",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/serde_derive/1.0.208/download",
+ "sha256": "24008e81ff7613ed8e5ba0cfaf24e2c2f1e5b8a0495711e44fcd4882fca62bcf"
+ }
+ },
+ "targets": [
+ {
+ "ProcMacro": {
+ "crate_name": "serde_derive",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "serde_derive",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "proc-macro2 1.0.86",
+ "target": "proc_macro2"
+ },
+ {
+ "id": "quote 1.0.36",
+ "target": "quote"
+ },
+ {
+ "id": "syn 2.0.75",
+ "target": "syn"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2015",
+ "version": "1.0.208"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "serde_json 1.0.125": {
+ "name": "serde_json",
+ "version": "1.0.125",
+ "package_url": "https://github.com/serde-rs/json",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/serde_json/1.0.125/download",
+ "sha256": "83c8e735a073ccf5be70aa8066aa984eaf2fa000db6c8d0100ae605b366d31ed"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "serde_json",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "serde_json",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default",
+ "raw_value",
+ "std"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "itoa 1.0.11",
+ "target": "itoa"
+ },
+ {
+ "id": "memchr 2.7.4",
+ "target": "memchr"
+ },
+ {
+ "id": "ryu 1.0.18",
+ "target": "ryu"
+ },
+ {
+ "id": "serde 1.0.208",
+ "target": "serde"
+ },
+ {
+ "id": "serde_json 1.0.125",
+ "target": "build_script_build"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "1.0.125"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ]
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "serde_path_to_error 0.1.16": {
+ "name": "serde_path_to_error",
+ "version": "0.1.16",
+ "package_url": "https://github.com/dtolnay/path-to-error",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/serde_path_to_error/0.1.16/download",
+ "sha256": "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "serde_path_to_error",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "serde_path_to_error",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "itoa 1.0.11",
+ "target": "itoa"
+ },
+ {
+ "id": "serde 1.0.208",
+ "target": "serde"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.1.16"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "serde_urlencoded 0.7.1": {
+ "name": "serde_urlencoded",
+ "version": "0.7.1",
+ "package_url": "https://github.com/nox/serde_urlencoded",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/serde_urlencoded/0.7.1/download",
+ "sha256": "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "serde_urlencoded",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "serde_urlencoded",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "form_urlencoded 1.2.1",
+ "target": "form_urlencoded"
+ },
+ {
+ "id": "itoa 1.0.11",
+ "target": "itoa"
+ },
+ {
+ "id": "ryu 1.0.18",
+ "target": "ryu"
+ },
+ {
+ "id": "serde 1.0.208",
+ "target": "serde"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.7.1"
+ },
+ "license": "MIT/Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "serde_yaml 0.9.34+deprecated": {
+ "name": "serde_yaml",
+ "version": "0.9.34+deprecated",
+ "package_url": "https://github.com/dtolnay/serde-yaml",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/serde_yaml/0.9.34+deprecated/download",
+ "sha256": "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "serde_yaml",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "serde_yaml",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "indexmap 2.4.0",
+ "target": "indexmap"
+ },
+ {
+ "id": "itoa 1.0.11",
+ "target": "itoa"
+ },
+ {
+ "id": "ryu 1.0.18",
+ "target": "ryu"
+ },
+ {
+ "id": "serde 1.0.208",
+ "target": "serde"
+ },
+ {
+ "id": "unsafe-libyaml 0.2.11",
+ "target": "unsafe_libyaml"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.9.34+deprecated"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "sharded-slab 0.1.7": {
+ "name": "sharded-slab",
+ "version": "0.1.7",
+ "package_url": "https://github.com/hawkw/sharded-slab",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/sharded-slab/0.1.7/download",
+ "sha256": "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "sharded_slab",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "sharded_slab",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "lazy_static 1.5.0",
+ "target": "lazy_static"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.1.7"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE"
+ },
+ "shlex 1.3.0": {
+ "name": "shlex",
+ "version": "1.3.0",
+ "package_url": "https://github.com/comex/rust-shlex",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/shlex/1.3.0/download",
+ "sha256": "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "shlex",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "shlex",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default",
+ "std"
+ ],
+ "selects": {}
+ },
+ "edition": "2015",
+ "version": "1.3.0"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "signal-hook-registry 1.4.2": {
+ "name": "signal-hook-registry",
+ "version": "1.4.2",
+ "package_url": "https://github.com/vorner/signal-hook",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/signal-hook-registry/1.4.2/download",
+ "sha256": "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "signal_hook_registry",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "signal_hook_registry",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2015",
+ "version": "1.4.2"
+ },
+ "license": "Apache-2.0/MIT",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "simple-xml 0.1.10": {
+ "name": "simple-xml",
+ "version": "0.1.10",
+ "package_url": "https://github.com/ten3roberts/simple-xml",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/simple-xml/0.1.10/download",
+ "sha256": "e73900daedd2d1f51bb648e8a7dbc44a0f062403db9671a161fd52b3a283c0ea"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "simple_xml",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "simple_xml",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2018",
+ "version": "0.1.10"
+ },
+ "license": null,
+ "license_ids": [],
+ "license_file": "LICENSE"
+ },
+ "sketches-rust 0.2.2": {
+ "name": "sketches-rust",
+ "version": "0.2.2",
+ "package_url": "https://github.com/loyispa/sketches-rust",
+ "repository": {
+ "Git": {
+ "remote": "https://github.com/mattklein123/sketches-rust.git",
+ "commitish": {
+ "Rev": "654de9475d364e7d97f8615de5b7c5368ccd26a7"
+ }
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "sketches_rust",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "sketches_rust",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "thiserror 1.0.63",
+ "target": "thiserror"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.2.2"
+ },
+ "license": "Apache-2.0",
+ "license_ids": [
+ "Apache-2.0"
+ ],
+ "license_file": "LICENSE"
+ },
+ "slab 0.4.9": {
+ "name": "slab",
+ "version": "0.4.9",
+ "package_url": "https://github.com/tokio-rs/slab",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/slab/0.4.9/download",
+ "sha256": "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "slab",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "slab",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default",
+ "std"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "slab 0.4.9",
+ "target": "build_script_build"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.4.9"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "autocfg 1.3.0",
+ "target": "autocfg"
+ }
+ ],
+ "selects": {}
+ }
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE"
+ },
+ "smallvec 1.13.2": {
+ "name": "smallvec",
+ "version": "1.13.2",
+ "package_url": "https://github.com/servo/rust-smallvec",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/smallvec/1.13.2/download",
+ "sha256": "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "smallvec",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "smallvec",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "const_generics",
+ "const_new"
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "1.13.2"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "snap 1.1.1": {
+ "name": "snap",
+ "version": "1.1.1",
+ "package_url": "https://github.com/BurntSushi/rust-snappy",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/snap/1.1.1/download",
+ "sha256": "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "snap",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "snap",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "snap 1.1.1",
+ "target": "build_script_build"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "1.1.1"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ]
+ },
+ "license": "BSD-3-Clause",
+ "license_ids": [
+ "BSD-3-Clause"
+ ],
+ "license_file": null
+ },
+ "socket2 0.5.7": {
+ "name": "socket2",
+ "version": "0.5.7",
+ "package_url": "https://github.com/rust-lang/socket2",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/socket2/0.5.7/download",
+ "sha256": "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "socket2",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "socket2",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "all"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [],
+ "selects": {
+ "cfg(unix)": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ }
+ ],
+ "cfg(windows)": [
+ {
+ "id": "windows-sys 0.52.0",
+ "target": "windows_sys"
+ }
+ ]
+ }
+ },
+ "edition": "2021",
+ "version": "0.5.7"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "spin 0.9.8": {
+ "name": "spin",
+ "version": "0.9.8",
+ "package_url": "https://github.com/mvdnes/spin-rs.git",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/spin/0.9.8/download",
+ "sha256": "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "spin",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "spin",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "once"
+ ],
+ "selects": {}
+ },
+ "edition": "2015",
+ "version": "0.9.8"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE"
+ },
+ "static_assertions 1.1.0": {
+ "name": "static_assertions",
+ "version": "1.1.0",
+ "package_url": "https://github.com/nvzqz/static-assertions-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/static_assertions/1.1.0/download",
+ "sha256": "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "static_assertions",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "static_assertions",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2015",
+ "version": "1.1.0"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "subtle 2.6.1": {
+ "name": "subtle",
+ "version": "2.6.1",
+ "package_url": "https://github.com/dalek-cryptography/subtle",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/subtle/2.6.1/download",
+ "sha256": "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "subtle",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "subtle",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2018",
+ "version": "2.6.1"
+ },
+ "license": "BSD-3-Clause",
+ "license_ids": [
+ "BSD-3-Clause"
+ ],
+ "license_file": "LICENSE"
+ },
+ "swift_bridge 1.0.0": {
+ "name": "swift_bridge",
+ "version": "1.0.0",
+ "package_url": null,
+ "repository": null,
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "swift_bridge",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "swift_bridge",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "anyhow 1.0.86",
+ "target": "anyhow"
+ },
+ {
+ "id": "bd-api 1.0.0",
+ "target": "bd_api"
+ },
+ {
+ "id": "bd-client-common 1.0.0",
+ "target": "bd_client_common"
+ },
+ {
+ "id": "bd-device 1.0.0",
+ "target": "bd_device"
+ },
+ {
+ "id": "bd-key-value 1.0.0",
+ "target": "bd_key_value"
+ },
+ {
+ "id": "bd-log 1.0.0",
+ "target": "bd_log"
+ },
+ {
+ "id": "bd-logger 1.0.0",
+ "target": "bd_logger"
+ },
+ {
+ "id": "bd-noop-network 1.0.0",
+ "target": "bd_noop_network"
+ },
+ {
+ "id": "bd-runtime 1.0.0",
+ "target": "bd_runtime"
+ },
+ {
+ "id": "bd-session 1.0.0",
+ "target": "bd_session"
+ },
+ {
+ "id": "bd-time 1.0.0",
+ "target": "bd_time"
+ },
+ {
+ "id": "log 0.4.22",
+ "target": "log"
+ },
+ {
+ "id": "objc 0.2.7",
+ "target": "objc"
+ },
+ {
+ "id": "parking_lot 0.12.3",
+ "target": "parking_lot"
+ },
+ {
+ "id": "time 0.3.36",
+ "target": "time"
+ },
+ {
+ "id": "tokio 1.39.3",
+ "target": "tokio"
+ },
+ {
+ "id": "tracing-subscriber 0.3.18",
+ "target": "tracing_subscriber"
+ },
+ {
+ "id": "uuid 1.10.0",
+ "target": "uuid"
+ }
+ ],
+ "selects": {}
+ },
+ "deps_dev": {
+ "common": [
+ {
+ "id": "bd-test-helpers 1.0.0",
+ "target": "bd_test_helpers"
+ },
+ {
+ "id": "pretty_assertions 1.4.0",
+ "target": "pretty_assertions"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "proc_macro_deps": {
+ "common": [
+ {
+ "id": "async-trait 0.1.81",
+ "target": "async_trait"
+ }
+ ],
+ "selects": {}
+ },
+ "version": "1.0.0"
+ },
+ "license": null,
+ "license_ids": [],
+ "license_file": "LICENSE"
+ },
+ "syn 2.0.75": {
+ "name": "syn",
+ "version": "2.0.75",
+ "package_url": "https://github.com/dtolnay/syn",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/syn/2.0.75/download",
+ "sha256": "f6af063034fc1935ede7be0122941bafa9bacb949334d090b77ca98b5817c7d9"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "syn",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "syn",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "clone-impls",
+ "default",
+ "derive",
+ "extra-traits",
+ "full",
+ "parsing",
+ "printing",
+ "proc-macro",
+ "visit",
+ "visit-mut"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "proc-macro2 1.0.86",
+ "target": "proc_macro2"
+ },
+ {
+ "id": "quote 1.0.36",
+ "target": "quote"
+ },
+ {
+ "id": "unicode-ident 1.0.12",
+ "target": "unicode_ident"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "2.0.75"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "sync_wrapper 0.1.2": {
+ "name": "sync_wrapper",
+ "version": "0.1.2",
+ "package_url": "https://github.com/Actyx/sync_wrapper",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/sync_wrapper/0.1.2/download",
+ "sha256": "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "sync_wrapper",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "sync_wrapper",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2018",
+ "version": "0.1.2"
+ },
+ "license": "Apache-2.0",
+ "license_ids": [
+ "Apache-2.0"
+ ],
+ "license_file": "LICENSE"
+ },
+ "sync_wrapper 1.0.1": {
+ "name": "sync_wrapper",
+ "version": "1.0.1",
+ "package_url": "https://github.com/Actyx/sync_wrapper",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/sync_wrapper/1.0.1/download",
+ "sha256": "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "sync_wrapper",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "sync_wrapper",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2018",
+ "version": "1.0.1"
+ },
+ "license": "Apache-2.0",
+ "license_ids": [
+ "Apache-2.0"
+ ],
+ "license_file": "LICENSE"
+ },
+ "tempdir 0.3.7": {
+ "name": "tempdir",
+ "version": "0.3.7",
+ "package_url": "https://github.com/rust-lang/tempdir",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/tempdir/0.3.7/download",
+ "sha256": "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "tempdir",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "tempdir",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "rand 0.4.6",
+ "target": "rand"
+ },
+ {
+ "id": "remove_dir_all 0.5.3",
+ "target": "remove_dir_all"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2015",
+ "version": "0.3.7"
+ },
+ "license": "MIT/Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "tempfile 3.12.0": {
+ "name": "tempfile",
+ "version": "3.12.0",
+ "package_url": "https://github.com/Stebalien/tempfile",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/tempfile/3.12.0/download",
+ "sha256": "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "tempfile",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "tempfile",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "cfg-if 1.0.0",
+ "target": "cfg_if"
+ },
+ {
+ "id": "fastrand 2.1.0",
+ "target": "fastrand"
+ },
+ {
+ "id": "once_cell 1.19.0",
+ "target": "once_cell"
+ }
+ ],
+ "selects": {
+ "cfg(any(unix, target_os = \"wasi\"))": [
+ {
+ "id": "rustix 0.38.34",
+ "target": "rustix"
+ }
+ ],
+ "cfg(windows)": [
+ {
+ "id": "windows-sys 0.59.0",
+ "target": "windows_sys"
+ }
+ ]
+ }
+ },
+ "edition": "2021",
+ "version": "3.12.0"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "test_jni 1.0.0": {
+ "name": "test_jni",
+ "version": "1.0.0",
+ "package_url": null,
+ "repository": null,
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "test_jni",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "test_jni",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "anyhow 1.0.86",
+ "target": "anyhow"
+ },
+ {
+ "id": "assert_matches 1.5.0",
+ "target": "assert_matches"
+ },
+ {
+ "id": "bd-client-common 1.0.0",
+ "target": "bd_client_common"
+ },
+ {
+ "id": "bd-log 1.0.0",
+ "target": "bd_log"
+ },
+ {
+ "id": "bd-logger 1.0.0",
+ "target": "bd_logger"
+ },
+ {
+ "id": "bd-proto 1.0.0",
+ "target": "bd_proto"
+ },
+ {
+ "id": "bd-test-helpers 1.0.0",
+ "target": "bd_test_helpers"
+ },
+ {
+ "id": "chrono 0.4.38",
+ "target": "chrono"
+ },
+ {
+ "id": "jni 0.21.1",
+ "target": "jni"
+ },
+ {
+ "id": "time 0.3.36",
+ "target": "time"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "proc_macro_deps": {
+ "common": [
+ {
+ "id": "ctor 0.2.8",
+ "target": "ctor"
+ }
+ ],
+ "selects": {}
+ },
+ "version": "1.0.0"
+ },
+ "license": null,
+ "license_ids": [],
+ "license_file": "LICENSE"
+ },
+ "test_swift_bridge 1.0.0": {
+ "name": "test_swift_bridge",
+ "version": "1.0.0",
+ "package_url": null,
+ "repository": null,
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "test_swift_bridge",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "test_swift_bridge",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "bd-client-common 1.0.0",
+ "target": "bd_client_common"
+ },
+ {
+ "id": "bd-key-value 1.0.0",
+ "target": "bd_key_value"
+ },
+ {
+ "id": "bd-logger 1.0.0",
+ "target": "bd_logger"
+ },
+ {
+ "id": "bd-proto 1.0.0",
+ "target": "bd_proto"
+ },
+ {
+ "id": "bd-test-helpers 1.0.0",
+ "target": "bd_test_helpers"
+ },
+ {
+ "id": "objc 0.2.7",
+ "target": "objc"
+ },
+ {
+ "id": "objc-foundation 0.1.1",
+ "target": "objc_foundation"
+ },
+ {
+ "id": "protobuf 4.0.0-alpha.0",
+ "target": "protobuf"
+ },
+ {
+ "id": "time 0.3.36",
+ "target": "time"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "proc_macro_deps": {
+ "common": [
+ {
+ "id": "ctor 0.2.8",
+ "target": "ctor"
+ }
+ ],
+ "selects": {}
+ },
+ "version": "1.0.0"
+ },
+ "license": null,
+ "license_ids": [],
+ "license_file": "LICENSE"
+ },
+ "thiserror 1.0.63": {
+ "name": "thiserror",
+ "version": "1.0.63",
+ "package_url": "https://github.com/dtolnay/thiserror",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/thiserror/1.0.63/download",
+ "sha256": "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "thiserror",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "thiserror",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "thiserror 1.0.63",
+ "target": "build_script_build"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "proc_macro_deps": {
+ "common": [
+ {
+ "id": "thiserror-impl 1.0.63",
+ "target": "thiserror_impl"
+ }
+ ],
+ "selects": {}
+ },
+ "version": "1.0.63"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ]
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "thiserror-impl 1.0.63": {
+ "name": "thiserror-impl",
+ "version": "1.0.63",
+ "package_url": "https://github.com/dtolnay/thiserror",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/thiserror-impl/1.0.63/download",
+ "sha256": "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261"
+ }
+ },
+ "targets": [
+ {
+ "ProcMacro": {
+ "crate_name": "thiserror_impl",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "thiserror_impl",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "proc-macro2 1.0.86",
+ "target": "proc_macro2"
+ },
+ {
+ "id": "quote 1.0.36",
+ "target": "quote"
+ },
+ {
+ "id": "syn 2.0.75",
+ "target": "syn"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "1.0.63"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "thread_local 1.1.8": {
+ "name": "thread_local",
+ "version": "1.1.8",
+ "package_url": "https://github.com/Amanieu/thread_local-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/thread_local/1.1.8/download",
+ "sha256": "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "thread_local",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "thread_local",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "cfg-if 1.0.0",
+ "target": "cfg_if"
+ },
+ {
+ "id": "once_cell 1.19.0",
+ "target": "once_cell"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "1.1.8"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "time 0.3.36": {
+ "name": "time",
+ "version": "0.3.36",
+ "package_url": "https://github.com/time-rs/time",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/time/0.3.36/download",
+ "sha256": "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "time",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "time",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "alloc",
+ "default",
+ "formatting",
+ "macros",
+ "parsing",
+ "serde",
+ "serde-well-known",
+ "std"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "deranged 0.3.11",
+ "target": "deranged"
+ },
+ {
+ "id": "itoa 1.0.11",
+ "target": "itoa"
+ },
+ {
+ "id": "num-conv 0.1.0",
+ "target": "num_conv"
+ },
+ {
+ "id": "powerfmt 0.2.0",
+ "target": "powerfmt"
+ },
+ {
+ "id": "serde 1.0.208",
+ "target": "serde"
+ },
+ {
+ "id": "time-core 0.1.2",
+ "target": "time_core"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "proc_macro_deps": {
+ "common": [
+ {
+ "id": "time-macros 0.2.18",
+ "target": "time_macros"
+ }
+ ],
+ "selects": {}
+ },
+ "version": "0.3.36"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-Apache"
+ },
+ "time-core 0.1.2": {
+ "name": "time-core",
+ "version": "0.1.2",
+ "package_url": "https://github.com/time-rs/time",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/time-core/0.1.2/download",
+ "sha256": "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "time_core",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "time_core",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2021",
+ "version": "0.1.2"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-Apache"
+ },
+ "time-macros 0.2.18": {
+ "name": "time-macros",
+ "version": "0.2.18",
+ "package_url": "https://github.com/time-rs/time",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/time-macros/0.2.18/download",
+ "sha256": "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf"
+ }
+ },
+ "targets": [
+ {
+ "ProcMacro": {
+ "crate_name": "time_macros",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "time_macros",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "formatting",
+ "parsing",
+ "serde"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "num-conv 0.1.0",
+ "target": "num_conv"
+ },
+ {
+ "id": "time-core 0.1.2",
+ "target": "time_core"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.2.18"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-Apache"
+ },
+ "tinytemplate 1.2.1": {
+ "name": "tinytemplate",
+ "version": "1.2.1",
+ "package_url": "https://github.com/bheisler/TinyTemplate",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/tinytemplate/1.2.1/download",
+ "sha256": "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "tinytemplate",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "tinytemplate",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "serde 1.0.208",
+ "target": "serde"
+ },
+ {
+ "id": "serde_json 1.0.125",
+ "target": "serde_json"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2015",
+ "version": "1.2.1"
+ },
+ "license": "Apache-2.0 OR MIT",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "tokio 1.39.3": {
+ "name": "tokio",
+ "version": "1.39.3",
+ "package_url": "https://github.com/tokio-rs/tokio",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/tokio/1.39.3/download",
+ "sha256": "9babc99b9923bfa4804bd74722ff02c0381021eafa4db9949217e3be8e84fff5"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "tokio",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "tokio",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "bytes",
+ "default",
+ "fs",
+ "full",
+ "io-std",
+ "io-util",
+ "libc",
+ "macros",
+ "mio",
+ "net",
+ "parking_lot",
+ "process",
+ "rt",
+ "rt-multi-thread",
+ "signal",
+ "signal-hook-registry",
+ "socket2",
+ "sync",
+ "test-util",
+ "time",
+ "tokio-macros"
+ ],
+ "selects": {
+ "aarch64-pc-windows-msvc": [
+ "windows-sys"
+ ],
+ "i686-pc-windows-msvc": [
+ "windows-sys"
+ ],
+ "x86_64-pc-windows-msvc": [
+ "windows-sys"
+ ]
+ }
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "bytes 1.7.1",
+ "target": "bytes"
+ },
+ {
+ "id": "mio 1.0.2",
+ "target": "mio"
+ },
+ {
+ "id": "parking_lot 0.12.3",
+ "target": "parking_lot"
+ },
+ {
+ "id": "pin-project-lite 0.2.14",
+ "target": "pin_project_lite"
+ }
+ ],
+ "selects": {
+ "aarch64-apple-darwin": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ },
+ {
+ "id": "signal-hook-registry 1.4.2",
+ "target": "signal_hook_registry"
+ },
+ {
+ "id": "socket2 0.5.7",
+ "target": "socket2"
+ }
+ ],
+ "aarch64-apple-ios": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ },
+ {
+ "id": "signal-hook-registry 1.4.2",
+ "target": "signal_hook_registry"
+ },
+ {
+ "id": "socket2 0.5.7",
+ "target": "socket2"
+ }
+ ],
+ "aarch64-apple-ios-sim": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ },
+ {
+ "id": "signal-hook-registry 1.4.2",
+ "target": "signal_hook_registry"
+ },
+ {
+ "id": "socket2 0.5.7",
+ "target": "socket2"
+ }
+ ],
+ "aarch64-fuchsia": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ },
+ {
+ "id": "signal-hook-registry 1.4.2",
+ "target": "signal_hook_registry"
+ },
+ {
+ "id": "socket2 0.5.7",
+ "target": "socket2"
+ }
+ ],
+ "aarch64-linux-android": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ },
+ {
+ "id": "signal-hook-registry 1.4.2",
+ "target": "signal_hook_registry"
+ },
+ {
+ "id": "socket2 0.5.7",
+ "target": "socket2"
+ }
+ ],
+ "aarch64-pc-windows-msvc": [
+ {
+ "id": "socket2 0.5.7",
+ "target": "socket2"
+ },
+ {
+ "id": "windows-sys 0.52.0",
+ "target": "windows_sys"
+ }
+ ],
+ "aarch64-unknown-linux-gnu": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ },
+ {
+ "id": "signal-hook-registry 1.4.2",
+ "target": "signal_hook_registry"
+ },
+ {
+ "id": "socket2 0.5.7",
+ "target": "socket2"
+ }
+ ],
+ "aarch64-unknown-nixos-gnu": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ },
+ {
+ "id": "signal-hook-registry 1.4.2",
+ "target": "signal_hook_registry"
+ },
+ {
+ "id": "socket2 0.5.7",
+ "target": "socket2"
+ }
+ ],
+ "aarch64-unknown-nto-qnx710": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ },
+ {
+ "id": "signal-hook-registry 1.4.2",
+ "target": "signal_hook_registry"
+ },
+ {
+ "id": "socket2 0.5.7",
+ "target": "socket2"
+ }
+ ],
+ "arm-unknown-linux-gnueabi": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ },
+ {
+ "id": "signal-hook-registry 1.4.2",
+ "target": "signal_hook_registry"
+ },
+ {
+ "id": "socket2 0.5.7",
+ "target": "socket2"
+ }
+ ],
+ "armv7-linux-androideabi": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ },
+ {
+ "id": "signal-hook-registry 1.4.2",
+ "target": "signal_hook_registry"
+ },
+ {
+ "id": "socket2 0.5.7",
+ "target": "socket2"
+ }
+ ],
+ "armv7-unknown-linux-gnueabi": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ },
+ {
+ "id": "signal-hook-registry 1.4.2",
+ "target": "signal_hook_registry"
+ },
+ {
+ "id": "socket2 0.5.7",
+ "target": "socket2"
+ }
+ ],
+ "cfg(tokio_taskdump)": [
+ {
+ "id": "backtrace 0.3.73",
+ "target": "backtrace"
+ }
+ ],
+ "i686-apple-darwin": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ },
+ {
+ "id": "signal-hook-registry 1.4.2",
+ "target": "signal_hook_registry"
+ },
+ {
+ "id": "socket2 0.5.7",
+ "target": "socket2"
+ }
+ ],
+ "i686-linux-android": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ },
+ {
+ "id": "signal-hook-registry 1.4.2",
+ "target": "signal_hook_registry"
+ },
+ {
+ "id": "socket2 0.5.7",
+ "target": "socket2"
+ }
+ ],
+ "i686-pc-windows-msvc": [
+ {
+ "id": "socket2 0.5.7",
+ "target": "socket2"
+ },
+ {
+ "id": "windows-sys 0.52.0",
+ "target": "windows_sys"
+ }
+ ],
+ "i686-unknown-freebsd": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ },
+ {
+ "id": "signal-hook-registry 1.4.2",
+ "target": "signal_hook_registry"
+ },
+ {
+ "id": "socket2 0.5.7",
+ "target": "socket2"
+ }
+ ],
+ "i686-unknown-linux-gnu": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ },
+ {
+ "id": "signal-hook-registry 1.4.2",
+ "target": "signal_hook_registry"
+ },
+ {
+ "id": "socket2 0.5.7",
+ "target": "socket2"
+ }
+ ],
+ "powerpc-unknown-linux-gnu": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ },
+ {
+ "id": "signal-hook-registry 1.4.2",
+ "target": "signal_hook_registry"
+ },
+ {
+ "id": "socket2 0.5.7",
+ "target": "socket2"
+ }
+ ],
+ "riscv32imc-unknown-none-elf": [
+ {
+ "id": "socket2 0.5.7",
+ "target": "socket2"
+ }
+ ],
+ "riscv64gc-unknown-none-elf": [
+ {
+ "id": "socket2 0.5.7",
+ "target": "socket2"
+ }
+ ],
+ "s390x-unknown-linux-gnu": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ },
+ {
+ "id": "signal-hook-registry 1.4.2",
+ "target": "signal_hook_registry"
+ },
+ {
+ "id": "socket2 0.5.7",
+ "target": "socket2"
+ }
+ ],
+ "thumbv7em-none-eabi": [
+ {
+ "id": "socket2 0.5.7",
+ "target": "socket2"
+ }
+ ],
+ "thumbv8m.main-none-eabi": [
+ {
+ "id": "socket2 0.5.7",
+ "target": "socket2"
+ }
+ ],
+ "x86_64-apple-darwin": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ },
+ {
+ "id": "signal-hook-registry 1.4.2",
+ "target": "signal_hook_registry"
+ },
+ {
+ "id": "socket2 0.5.7",
+ "target": "socket2"
+ }
+ ],
+ "x86_64-apple-ios": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ },
+ {
+ "id": "signal-hook-registry 1.4.2",
+ "target": "signal_hook_registry"
+ },
+ {
+ "id": "socket2 0.5.7",
+ "target": "socket2"
+ }
+ ],
+ "x86_64-fuchsia": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ },
+ {
+ "id": "signal-hook-registry 1.4.2",
+ "target": "signal_hook_registry"
+ },
+ {
+ "id": "socket2 0.5.7",
+ "target": "socket2"
+ }
+ ],
+ "x86_64-linux-android": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ },
+ {
+ "id": "signal-hook-registry 1.4.2",
+ "target": "signal_hook_registry"
+ },
+ {
+ "id": "socket2 0.5.7",
+ "target": "socket2"
+ }
+ ],
+ "x86_64-pc-windows-msvc": [
+ {
+ "id": "socket2 0.5.7",
+ "target": "socket2"
+ },
+ {
+ "id": "windows-sys 0.52.0",
+ "target": "windows_sys"
+ }
+ ],
+ "x86_64-unknown-freebsd": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ },
+ {
+ "id": "signal-hook-registry 1.4.2",
+ "target": "signal_hook_registry"
+ },
+ {
+ "id": "socket2 0.5.7",
+ "target": "socket2"
+ }
+ ],
+ "x86_64-unknown-linux-gnu": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ },
+ {
+ "id": "signal-hook-registry 1.4.2",
+ "target": "signal_hook_registry"
+ },
+ {
+ "id": "socket2 0.5.7",
+ "target": "socket2"
+ }
+ ],
+ "x86_64-unknown-nixos-gnu": [
+ {
+ "id": "libc 0.2.158",
+ "target": "libc"
+ },
+ {
+ "id": "signal-hook-registry 1.4.2",
+ "target": "signal_hook_registry"
+ },
+ {
+ "id": "socket2 0.5.7",
+ "target": "socket2"
+ }
+ ],
+ "x86_64-unknown-none": [
+ {
+ "id": "socket2 0.5.7",
+ "target": "socket2"
+ }
+ ]
+ }
+ },
+ "edition": "2021",
+ "proc_macro_deps": {
+ "common": [
+ {
+ "id": "tokio-macros 2.4.0",
+ "target": "tokio_macros"
+ }
+ ],
+ "selects": {}
+ },
+ "version": "1.39.3"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE"
+ },
+ "tokio-macros 2.4.0": {
+ "name": "tokio-macros",
+ "version": "2.4.0",
+ "package_url": "https://github.com/tokio-rs/tokio",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/tokio-macros/2.4.0/download",
+ "sha256": "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752"
+ }
+ },
+ "targets": [
+ {
+ "ProcMacro": {
+ "crate_name": "tokio_macros",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "tokio_macros",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "proc-macro2 1.0.86",
+ "target": "proc_macro2"
+ },
+ {
+ "id": "quote 1.0.36",
+ "target": "quote"
+ },
+ {
+ "id": "syn 2.0.75",
+ "target": "syn"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "2.4.0"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE"
+ },
+ "tokio-rustls 0.26.0": {
+ "name": "tokio-rustls",
+ "version": "0.26.0",
+ "package_url": "https://github.com/rustls/tokio-rustls",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/tokio-rustls/0.26.0/download",
+ "sha256": "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "tokio_rustls",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "tokio_rustls",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "rustls 0.23.12",
+ "target": "rustls"
+ },
+ {
+ "id": "rustls-pki-types 1.8.0",
+ "target": "rustls_pki_types",
+ "alias": "pki_types"
+ },
+ {
+ "id": "tokio 1.39.3",
+ "target": "tokio"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.26.0"
+ },
+ "license": "MIT/Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "tokio-stream 0.1.15": {
+ "name": "tokio-stream",
+ "version": "0.1.15",
+ "package_url": "https://github.com/tokio-rs/tokio",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/tokio-stream/0.1.15/download",
+ "sha256": "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "tokio_stream",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "tokio_stream",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default",
+ "time"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "futures-core 0.3.30",
+ "target": "futures_core"
+ },
+ {
+ "id": "pin-project-lite 0.2.14",
+ "target": "pin_project_lite"
+ },
+ {
+ "id": "tokio 1.39.3",
+ "target": "tokio"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.1.15"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE"
+ },
+ "tokio-util 0.7.11": {
+ "name": "tokio-util",
+ "version": "0.7.11",
+ "package_url": "https://github.com/tokio-rs/tokio",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/tokio-util/0.7.11/download",
+ "sha256": "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "tokio_util",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "tokio_util",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "codec",
+ "default",
+ "io"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "bytes 1.7.1",
+ "target": "bytes"
+ },
+ {
+ "id": "futures-core 0.3.30",
+ "target": "futures_core"
+ },
+ {
+ "id": "futures-sink 0.3.30",
+ "target": "futures_sink"
+ },
+ {
+ "id": "pin-project-lite 0.2.14",
+ "target": "pin_project_lite"
+ },
+ {
+ "id": "tokio 1.39.3",
+ "target": "tokio"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.7.11"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE"
+ },
+ "tower 0.4.13": {
+ "name": "tower",
+ "version": "0.4.13",
+ "package_url": "https://github.com/tower-rs/tower",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/tower/0.4.13/download",
+ "sha256": "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "tower",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "tower",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "__common",
+ "default",
+ "futures-core",
+ "futures-util",
+ "log",
+ "make",
+ "pin-project",
+ "pin-project-lite",
+ "retry",
+ "tokio",
+ "tracing",
+ "util"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "futures-core 0.3.30",
+ "target": "futures_core"
+ },
+ {
+ "id": "futures-util 0.3.30",
+ "target": "futures_util"
+ },
+ {
+ "id": "pin-project 1.1.5",
+ "target": "pin_project"
+ },
+ {
+ "id": "pin-project-lite 0.2.14",
+ "target": "pin_project_lite"
+ },
+ {
+ "id": "tokio 1.39.3",
+ "target": "tokio"
+ },
+ {
+ "id": "tower-layer 0.3.3",
+ "target": "tower_layer"
+ },
+ {
+ "id": "tower-service 0.3.3",
+ "target": "tower_service"
+ },
+ {
+ "id": "tracing 0.1.40",
+ "target": "tracing"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.4.13"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE"
+ },
+ "tower-layer 0.3.3": {
+ "name": "tower-layer",
+ "version": "0.3.3",
+ "package_url": "https://github.com/tower-rs/tower",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/tower-layer/0.3.3/download",
+ "sha256": "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "tower_layer",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "tower_layer",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2018",
+ "version": "0.3.3"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE"
+ },
+ "tower-service 0.3.3": {
+ "name": "tower-service",
+ "version": "0.3.3",
+ "package_url": "https://github.com/tower-rs/tower",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/tower-service/0.3.3/download",
+ "sha256": "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "tower_service",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "tower_service",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2018",
+ "version": "0.3.3"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE"
+ },
+ "tracing 0.1.40": {
+ "name": "tracing",
+ "version": "0.1.40",
+ "package_url": "https://github.com/tokio-rs/tracing",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/tracing/0.1.40/download",
+ "sha256": "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "tracing",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "tracing",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "attributes",
+ "default",
+ "log",
+ "std",
+ "tracing-attributes"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "log 0.4.22",
+ "target": "log"
+ },
+ {
+ "id": "pin-project-lite 0.2.14",
+ "target": "pin_project_lite"
+ },
+ {
+ "id": "tracing-core 0.1.32",
+ "target": "tracing_core"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "proc_macro_deps": {
+ "common": [
+ {
+ "id": "tracing-attributes 0.1.27",
+ "target": "tracing_attributes"
+ }
+ ],
+ "selects": {}
+ },
+ "version": "0.1.40"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE"
+ },
+ "tracing-attributes 0.1.27": {
+ "name": "tracing-attributes",
+ "version": "0.1.27",
+ "package_url": "https://github.com/tokio-rs/tracing",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/tracing-attributes/0.1.27/download",
+ "sha256": "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
+ }
+ },
+ "targets": [
+ {
+ "ProcMacro": {
+ "crate_name": "tracing_attributes",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "tracing_attributes",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "proc-macro2 1.0.86",
+ "target": "proc_macro2"
+ },
+ {
+ "id": "quote 1.0.36",
+ "target": "quote"
+ },
+ {
+ "id": "syn 2.0.75",
+ "target": "syn"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.1.27"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE"
+ },
+ "tracing-core 0.1.32": {
+ "name": "tracing-core",
+ "version": "0.1.32",
+ "package_url": "https://github.com/tokio-rs/tracing",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/tracing-core/0.1.32/download",
+ "sha256": "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "tracing_core",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "tracing_core",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default",
+ "once_cell",
+ "std"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "once_cell 1.19.0",
+ "target": "once_cell"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.1.32"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE"
+ },
+ "tracing-error 0.2.0": {
+ "name": "tracing-error",
+ "version": "0.2.0",
+ "package_url": "https://github.com/tokio-rs/tracing",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/tracing-error/0.2.0/download",
+ "sha256": "d686ec1c0f384b1277f097b2f279a2ecc11afe8c133c1aabf036a27cb4cd206e"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "tracing_error",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "tracing_error",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default",
+ "traced-error"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "tracing 0.1.40",
+ "target": "tracing"
+ },
+ {
+ "id": "tracing-subscriber 0.3.18",
+ "target": "tracing_subscriber"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.2.0"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE"
+ },
+ "tracing-log 0.2.0": {
+ "name": "tracing-log",
+ "version": "0.2.0",
+ "package_url": "https://github.com/tokio-rs/tracing",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/tracing-log/0.2.0/download",
+ "sha256": "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "tracing_log",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "tracing_log",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default",
+ "log-tracer",
+ "std"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "log 0.4.22",
+ "target": "log"
+ },
+ {
+ "id": "once_cell 1.19.0",
+ "target": "once_cell"
+ },
+ {
+ "id": "tracing-core 0.1.32",
+ "target": "tracing_core"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.2.0"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE"
+ },
+ "tracing-subscriber 0.3.18": {
+ "name": "tracing-subscriber",
+ "version": "0.3.18",
+ "package_url": "https://github.com/tokio-rs/tracing",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/tracing-subscriber/0.3.18/download",
+ "sha256": "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "tracing_subscriber",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "tracing_subscriber",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "alloc",
+ "ansi",
+ "default",
+ "env-filter",
+ "fmt",
+ "matchers",
+ "nu-ansi-term",
+ "once_cell",
+ "regex",
+ "registry",
+ "sharded-slab",
+ "smallvec",
+ "std",
+ "thread_local",
+ "tracing",
+ "tracing-log"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "matchers 0.1.0",
+ "target": "matchers"
+ },
+ {
+ "id": "nu-ansi-term 0.46.0",
+ "target": "nu_ansi_term"
+ },
+ {
+ "id": "once_cell 1.19.0",
+ "target": "once_cell"
+ },
+ {
+ "id": "regex 1.10.6",
+ "target": "regex"
+ },
+ {
+ "id": "sharded-slab 0.1.7",
+ "target": "sharded_slab"
+ },
+ {
+ "id": "smallvec 1.13.2",
+ "target": "smallvec"
+ },
+ {
+ "id": "thread_local 1.1.8",
+ "target": "thread_local"
+ },
+ {
+ "id": "tracing 0.1.40",
+ "target": "tracing"
+ },
+ {
+ "id": "tracing-core 0.1.32",
+ "target": "tracing_core"
+ },
+ {
+ "id": "tracing-log 0.2.0",
+ "target": "tracing_log"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.3.18"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE"
+ },
+ "try-lock 0.2.5": {
+ "name": "try-lock",
+ "version": "0.2.5",
+ "package_url": "https://github.com/seanmonstar/try-lock",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/try-lock/0.2.5/download",
+ "sha256": "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "try_lock",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "try_lock",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2015",
+ "version": "0.2.5"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE"
+ },
+ "unicode-ident 1.0.12": {
+ "name": "unicode-ident",
+ "version": "1.0.12",
+ "package_url": "https://github.com/dtolnay/unicode-ident",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/unicode-ident/1.0.12/download",
+ "sha256": "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "unicode_ident",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "unicode_ident",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2018",
+ "version": "1.0.12"
+ },
+ "license": "(MIT OR Apache-2.0) AND Unicode-DFS-2016",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT",
+ "Unicode-DFS-2016"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "unsafe-libyaml 0.2.11": {
+ "name": "unsafe-libyaml",
+ "version": "0.2.11",
+ "package_url": "https://github.com/dtolnay/unsafe-libyaml",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/unsafe-libyaml/0.2.11/download",
+ "sha256": "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "unsafe_libyaml",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "unsafe_libyaml",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2021",
+ "version": "0.2.11"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE-MIT"
+ },
+ "untrusted 0.9.0": {
+ "name": "untrusted",
+ "version": "0.9.0",
+ "package_url": "https://github.com/briansmith/untrusted",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/untrusted/0.9.0/download",
+ "sha256": "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "untrusted",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "untrusted",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2018",
+ "version": "0.9.0"
+ },
+ "license": "ISC",
+ "license_ids": [
+ "ISC"
+ ],
+ "license_file": "LICENSE.txt"
+ },
+ "unwrap-infallible 0.1.5": {
+ "name": "unwrap-infallible",
+ "version": "0.1.5",
+ "package_url": "https://github.com/mzabaluev/unwrap-infallible",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/unwrap-infallible/0.1.5/download",
+ "sha256": "151ac09978d3c2862c4e39b557f4eceee2cc72150bc4cb4f16abf061b6e381fb"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "unwrap_infallible",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "unwrap_infallible",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default"
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.1.5"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "urlencoding 2.1.3": {
+ "name": "urlencoding",
+ "version": "2.1.3",
+ "package_url": "https://github.com/kornelski/rust_urlencoding",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/urlencoding/2.1.3/download",
+ "sha256": "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "urlencoding",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "urlencoding",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2021",
+ "version": "2.1.3"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE"
+ },
+ "uuid 1.10.0": {
+ "name": "uuid",
+ "version": "1.10.0",
+ "package_url": "https://github.com/uuid-rs/uuid",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/uuid/1.10.0/download",
+ "sha256": "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "uuid",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "uuid",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default",
+ "rng",
+ "std",
+ "v4"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "getrandom 0.2.15",
+ "target": "getrandom"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "1.10.0"
+ },
+ "license": "Apache-2.0 OR MIT",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "valuable 0.1.0": {
+ "name": "valuable",
+ "version": "0.1.0",
+ "package_url": "https://github.com/tokio-rs/valuable",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/valuable/0.1.0/download",
+ "sha256": "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "valuable",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "valuable",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "valuable 0.1.0",
+ "target": "build_script_build"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.1.0"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ]
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": null
+ },
+ "vcpkg 0.2.15": {
+ "name": "vcpkg",
+ "version": "0.2.15",
+ "package_url": "https://github.com/mcgoo/vcpkg-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/vcpkg/0.2.15/download",
+ "sha256": "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "vcpkg",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "vcpkg",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2015",
+ "version": "0.2.15"
+ },
+ "license": "MIT/Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "walkdir 2.5.0": {
+ "name": "walkdir",
+ "version": "2.5.0",
+ "package_url": "https://github.com/BurntSushi/walkdir",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/walkdir/2.5.0/download",
+ "sha256": "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "walkdir",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "walkdir",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "same-file 1.0.6",
+ "target": "same_file"
+ }
+ ],
+ "selects": {
+ "cfg(windows)": [
+ {
+ "id": "winapi-util 0.1.9",
+ "target": "winapi_util"
+ }
+ ]
+ }
+ },
+ "edition": "2018",
+ "version": "2.5.0"
+ },
+ "license": "Unlicense/MIT",
+ "license_ids": [
+ "MIT",
+ "Unlicense"
+ ],
+ "license_file": "LICENSE-MIT"
+ },
+ "want 0.3.1": {
+ "name": "want",
+ "version": "0.3.1",
+ "package_url": "https://github.com/seanmonstar/want",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/want/0.3.1/download",
+ "sha256": "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "want",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "want",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "try-lock 0.2.5",
+ "target": "try_lock"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.3.1"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE"
+ },
+ "wasi 0.11.0+wasi-snapshot-preview1": {
+ "name": "wasi",
+ "version": "0.11.0+wasi-snapshot-preview1",
+ "package_url": "https://github.com/bytecodealliance/wasi",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/wasi/0.11.0+wasi-snapshot-preview1/download",
+ "sha256": "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "wasi",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "wasi",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default",
+ "std"
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.11.0+wasi-snapshot-preview1"
+ },
+ "license": "Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "wasm-bindgen 0.2.93": {
+ "name": "wasm-bindgen",
+ "version": "0.2.93",
+ "package_url": "https://github.com/rustwasm/wasm-bindgen",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/wasm-bindgen/0.2.93/download",
+ "sha256": "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "wasm_bindgen",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "wasm_bindgen",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "default",
+ "spans",
+ "std"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "cfg-if 1.0.0",
+ "target": "cfg_if"
+ },
+ {
+ "id": "once_cell 1.19.0",
+ "target": "once_cell"
+ },
+ {
+ "id": "wasm-bindgen 0.2.93",
+ "target": "build_script_build"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "proc_macro_deps": {
+ "common": [
+ {
+ "id": "wasm-bindgen-macro 0.2.93",
+ "target": "wasm_bindgen_macro"
+ }
+ ],
+ "selects": {}
+ },
+ "version": "0.2.93"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ]
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "wasm-bindgen-backend 0.2.93": {
+ "name": "wasm-bindgen-backend",
+ "version": "0.2.93",
+ "package_url": "https://github.com/rustwasm/wasm-bindgen/tree/master/crates/backend",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/wasm-bindgen-backend/0.2.93/download",
+ "sha256": "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "wasm_bindgen_backend",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "wasm_bindgen_backend",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [],
+ "selects": {
+ "wasm32-unknown-unknown": [
+ "spans"
+ ]
+ }
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "bumpalo 3.16.0",
+ "target": "bumpalo"
+ },
+ {
+ "id": "log 0.4.22",
+ "target": "log"
+ },
+ {
+ "id": "once_cell 1.19.0",
+ "target": "once_cell"
+ },
+ {
+ "id": "proc-macro2 1.0.86",
+ "target": "proc_macro2"
+ },
+ {
+ "id": "quote 1.0.36",
+ "target": "quote"
+ },
+ {
+ "id": "syn 2.0.75",
+ "target": "syn"
+ },
+ {
+ "id": "wasm-bindgen-shared 0.2.93",
+ "target": "wasm_bindgen_shared"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.2.93"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "wasm-bindgen-macro 0.2.93": {
+ "name": "wasm-bindgen-macro",
+ "version": "0.2.93",
+ "package_url": "https://github.com/rustwasm/wasm-bindgen/tree/master/crates/macro",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/wasm-bindgen-macro/0.2.93/download",
+ "sha256": "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf"
+ }
+ },
+ "targets": [
+ {
+ "ProcMacro": {
+ "crate_name": "wasm_bindgen_macro",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "wasm_bindgen_macro",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [],
+ "selects": {
+ "wasm32-unknown-unknown": [
+ "spans"
+ ]
+ }
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "quote 1.0.36",
+ "target": "quote"
+ },
+ {
+ "id": "wasm-bindgen-macro-support 0.2.93",
+ "target": "wasm_bindgen_macro_support"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.2.93"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "wasm-bindgen-macro-support 0.2.93": {
+ "name": "wasm-bindgen-macro-support",
+ "version": "0.2.93",
+ "package_url": "https://github.com/rustwasm/wasm-bindgen/tree/master/crates/macro-support",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/wasm-bindgen-macro-support/0.2.93/download",
+ "sha256": "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "wasm_bindgen_macro_support",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "wasm_bindgen_macro_support",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [],
+ "selects": {
+ "wasm32-unknown-unknown": [
+ "spans"
+ ]
+ }
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "proc-macro2 1.0.86",
+ "target": "proc_macro2"
+ },
+ {
+ "id": "quote 1.0.36",
+ "target": "quote"
+ },
+ {
+ "id": "syn 2.0.75",
+ "target": "syn"
+ },
+ {
+ "id": "wasm-bindgen-backend 0.2.93",
+ "target": "wasm_bindgen_backend"
+ },
+ {
+ "id": "wasm-bindgen-shared 0.2.93",
+ "target": "wasm_bindgen_shared"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.2.93"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "wasm-bindgen-shared 0.2.93": {
+ "name": "wasm-bindgen-shared",
+ "version": "0.2.93",
+ "package_url": "https://github.com/rustwasm/wasm-bindgen/tree/master/crates/shared",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/wasm-bindgen-shared/0.2.93/download",
+ "sha256": "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "wasm_bindgen_shared",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "wasm_bindgen_shared",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "wasm-bindgen-shared 0.2.93",
+ "target": "build_script_build"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.2.93"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ],
+ "links": "wasm_bindgen"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "web-sys 0.3.70": {
+ "name": "web-sys",
+ "version": "0.3.70",
+ "package_url": "https://github.com/rustwasm/wasm-bindgen/tree/master/crates/web-sys",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/web-sys/0.3.70/download",
+ "sha256": "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "web_sys",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "web_sys",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "CanvasRenderingContext2d",
+ "Document",
+ "DomRect",
+ "DomRectReadOnly",
+ "Element",
+ "EventTarget",
+ "HtmlCanvasElement",
+ "HtmlElement",
+ "Node",
+ "Window"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "js-sys 0.3.70",
+ "target": "js_sys"
+ },
+ {
+ "id": "wasm-bindgen 0.2.93",
+ "target": "wasm_bindgen"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.3.70"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "webpki-roots 0.26.3": {
+ "name": "webpki-roots",
+ "version": "0.26.3",
+ "package_url": "https://github.com/rustls/webpki-roots",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/webpki-roots/0.26.3/download",
+ "sha256": "bd7c23921eeb1713a4e851530e9b9756e4fb0e89978582942612524cf09f01cd"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "webpki_roots",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "webpki_roots",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "rustls-pki-types 1.8.0",
+ "target": "rustls_pki_types",
+ "alias": "pki_types"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.26.3"
+ },
+ "license": "MPL-2.0",
+ "license_ids": [
+ "MPL-2.0"
+ ],
+ "license_file": "LICENSE"
+ },
+ "which 4.4.2": {
+ "name": "which",
+ "version": "4.4.2",
+ "package_url": "https://github.com/harryfei/which-rs.git",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/which/4.4.2/download",
+ "sha256": "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "which",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "which",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "either 1.13.0",
+ "target": "either"
+ },
+ {
+ "id": "rustix 0.38.34",
+ "target": "rustix"
+ }
+ ],
+ "selects": {
+ "cfg(any(windows, unix, target_os = \"redox\"))": [
+ {
+ "id": "home 0.5.9",
+ "target": "home"
+ }
+ ],
+ "cfg(windows)": [
+ {
+ "id": "once_cell 1.19.0",
+ "target": "once_cell"
+ }
+ ]
+ }
+ },
+ "edition": "2021",
+ "version": "4.4.2"
+ },
+ "license": "MIT",
+ "license_ids": [
+ "MIT"
+ ],
+ "license_file": "LICENSE.txt"
+ },
+ "winapi 0.3.9": {
+ "name": "winapi",
+ "version": "0.3.9",
+ "package_url": "https://github.com/retep998/winapi-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/winapi/0.3.9/download",
+ "sha256": "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "winapi",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "winapi",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "consoleapi",
+ "errhandlingapi",
+ "fileapi",
+ "handleapi",
+ "minwindef",
+ "ntsecapi",
+ "processenv",
+ "processthreadsapi",
+ "profileapi",
+ "std",
+ "winbase",
+ "winerror",
+ "winnt"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "winapi 0.3.9",
+ "target": "build_script_build"
+ }
+ ],
+ "selects": {
+ "i686-pc-windows-gnu": [
+ {
+ "id": "winapi-i686-pc-windows-gnu 0.4.0",
+ "target": "winapi_i686_pc_windows_gnu"
+ }
+ ],
+ "x86_64-pc-windows-gnu": [
+ {
+ "id": "winapi-x86_64-pc-windows-gnu 0.4.0",
+ "target": "winapi_x86_64_pc_windows_gnu"
+ }
+ ]
+ }
+ },
+ "edition": "2015",
+ "version": "0.3.9"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ]
+ },
+ "license": "MIT/Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "winapi-i686-pc-windows-gnu 0.4.0": {
+ "name": "winapi-i686-pc-windows-gnu",
+ "version": "0.4.0",
+ "package_url": "https://github.com/retep998/winapi-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/winapi-i686-pc-windows-gnu/0.4.0/download",
+ "sha256": "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "winapi_i686_pc_windows_gnu",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "winapi_i686_pc_windows_gnu",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "winapi-i686-pc-windows-gnu 0.4.0",
+ "target": "build_script_build"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2015",
+ "version": "0.4.0"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ]
+ },
+ "license": "MIT/Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": null
+ },
+ "winapi-util 0.1.9": {
+ "name": "winapi-util",
+ "version": "0.1.9",
+ "package_url": "https://github.com/BurntSushi/winapi-util",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/winapi-util/0.1.9/download",
+ "sha256": "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "winapi_util",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "winapi_util",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [],
+ "selects": {
+ "cfg(windows)": [
+ {
+ "id": "windows-sys 0.59.0",
+ "target": "windows_sys"
+ }
+ ]
+ }
+ },
+ "edition": "2021",
+ "version": "0.1.9"
+ },
+ "license": "Unlicense OR MIT",
+ "license_ids": [
+ "MIT",
+ "Unlicense"
+ ],
+ "license_file": "LICENSE-MIT"
+ },
+ "winapi-x86_64-pc-windows-gnu 0.4.0": {
+ "name": "winapi-x86_64-pc-windows-gnu",
+ "version": "0.4.0",
+ "package_url": "https://github.com/retep998/winapi-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/winapi-x86_64-pc-windows-gnu/0.4.0/download",
+ "sha256": "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "winapi_x86_64_pc_windows_gnu",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "winapi_x86_64_pc_windows_gnu",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "winapi-x86_64-pc-windows-gnu 0.4.0",
+ "target": "build_script_build"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2015",
+ "version": "0.4.0"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ]
+ },
+ "license": "MIT/Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": null
+ },
+ "windows-core 0.52.0": {
+ "name": "windows-core",
+ "version": "0.52.0",
+ "package_url": "https://github.com/microsoft/windows-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/windows-core/0.52.0/download",
+ "sha256": "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "windows_core",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "windows_core",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "windows-targets 0.52.6",
+ "target": "windows_targets"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.52.0"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "license-apache-2.0"
+ },
+ "windows-sys 0.45.0": {
+ "name": "windows-sys",
+ "version": "0.45.0",
+ "package_url": "https://github.com/microsoft/windows-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/windows-sys/0.45.0/download",
+ "sha256": "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "windows_sys",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "windows_sys",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "Win32",
+ "Win32_Globalization",
+ "default"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [],
+ "selects": {
+ "cfg(not(windows_raw_dylib))": [
+ {
+ "id": "windows-targets 0.42.2",
+ "target": "windows_targets"
+ }
+ ]
+ }
+ },
+ "edition": "2018",
+ "version": "0.45.0"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "license-apache-2.0"
+ },
+ "windows-sys 0.52.0": {
+ "name": "windows-sys",
+ "version": "0.52.0",
+ "package_url": "https://github.com/microsoft/windows-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/windows-sys/0.52.0/download",
+ "sha256": "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "windows_sys",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "windows_sys",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "Wdk",
+ "Wdk_Foundation",
+ "Wdk_Storage",
+ "Wdk_Storage_FileSystem",
+ "Wdk_System",
+ "Wdk_System_IO",
+ "Win32",
+ "Win32_Foundation",
+ "Win32_Networking",
+ "Win32_Networking_WinSock",
+ "Win32_Security",
+ "Win32_Storage",
+ "Win32_Storage_FileSystem",
+ "Win32_System",
+ "Win32_System_Console",
+ "Win32_System_IO",
+ "Win32_System_Pipes",
+ "Win32_System_SystemServices",
+ "Win32_System_Threading",
+ "Win32_System_WindowsProgramming",
+ "default"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "windows-targets 0.52.6",
+ "target": "windows_targets"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.52.0"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "license-apache-2.0"
+ },
+ "windows-sys 0.59.0": {
+ "name": "windows-sys",
+ "version": "0.59.0",
+ "package_url": "https://github.com/microsoft/windows-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/windows-sys/0.59.0/download",
+ "sha256": "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "windows_sys",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "windows_sys",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "Win32",
+ "Win32_Foundation",
+ "Win32_Storage",
+ "Win32_Storage_FileSystem",
+ "Win32_System",
+ "Win32_System_Console",
+ "Win32_System_SystemInformation",
+ "default"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "windows-targets 0.52.6",
+ "target": "windows_targets"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.59.0"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "license-apache-2.0"
+ },
+ "windows-targets 0.42.2": {
+ "name": "windows-targets",
+ "version": "0.42.2",
+ "package_url": "https://github.com/microsoft/windows-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/windows-targets/0.42.2/download",
+ "sha256": "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "windows_targets",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "windows_targets",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [],
+ "selects": {
+ "aarch64-pc-windows-gnullvm": [
+ {
+ "id": "windows_aarch64_gnullvm 0.42.2",
+ "target": "windows_aarch64_gnullvm"
+ }
+ ],
+ "aarch64-pc-windows-msvc": [
+ {
+ "id": "windows_aarch64_msvc 0.42.2",
+ "target": "windows_aarch64_msvc"
+ }
+ ],
+ "aarch64-uwp-windows-msvc": [
+ {
+ "id": "windows_aarch64_msvc 0.42.2",
+ "target": "windows_aarch64_msvc"
+ }
+ ],
+ "i686-pc-windows-gnu": [
+ {
+ "id": "windows_i686_gnu 0.42.2",
+ "target": "windows_i686_gnu"
+ }
+ ],
+ "i686-pc-windows-msvc": [
+ {
+ "id": "windows_i686_msvc 0.42.2",
+ "target": "windows_i686_msvc"
+ }
+ ],
+ "i686-uwp-windows-gnu": [
+ {
+ "id": "windows_i686_gnu 0.42.2",
+ "target": "windows_i686_gnu"
+ }
+ ],
+ "i686-uwp-windows-msvc": [
+ {
+ "id": "windows_i686_msvc 0.42.2",
+ "target": "windows_i686_msvc"
+ }
+ ],
+ "x86_64-pc-windows-gnu": [
+ {
+ "id": "windows_x86_64_gnu 0.42.2",
+ "target": "windows_x86_64_gnu"
+ }
+ ],
+ "x86_64-pc-windows-gnullvm": [
+ {
+ "id": "windows_x86_64_gnullvm 0.42.2",
+ "target": "windows_x86_64_gnullvm"
+ }
+ ],
+ "x86_64-pc-windows-msvc": [
+ {
+ "id": "windows_x86_64_msvc 0.42.2",
+ "target": "windows_x86_64_msvc"
+ }
+ ],
+ "x86_64-uwp-windows-gnu": [
+ {
+ "id": "windows_x86_64_gnu 0.42.2",
+ "target": "windows_x86_64_gnu"
+ }
+ ],
+ "x86_64-uwp-windows-msvc": [
+ {
+ "id": "windows_x86_64_msvc 0.42.2",
+ "target": "windows_x86_64_msvc"
+ }
+ ]
+ }
+ },
+ "edition": "2018",
+ "version": "0.42.2"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "license-apache-2.0"
+ },
+ "windows-targets 0.52.6": {
+ "name": "windows-targets",
+ "version": "0.52.6",
+ "package_url": "https://github.com/microsoft/windows-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/windows-targets/0.52.6/download",
+ "sha256": "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "windows_targets",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "windows_targets",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [],
+ "selects": {
+ "aarch64-pc-windows-gnullvm": [
+ {
+ "id": "windows_aarch64_gnullvm 0.52.6",
+ "target": "windows_aarch64_gnullvm"
+ }
+ ],
+ "cfg(all(any(target_arch = \"x86_64\", target_arch = \"arm64ec\"), target_env = \"msvc\", not(windows_raw_dylib)))": [
+ {
+ "id": "windows_x86_64_msvc 0.52.6",
+ "target": "windows_x86_64_msvc"
+ }
+ ],
+ "cfg(all(target_arch = \"aarch64\", target_env = \"msvc\", not(windows_raw_dylib)))": [
+ {
+ "id": "windows_aarch64_msvc 0.52.6",
+ "target": "windows_aarch64_msvc"
+ }
+ ],
+ "cfg(all(target_arch = \"x86\", target_env = \"gnu\", not(target_abi = \"llvm\"), not(windows_raw_dylib)))": [
+ {
+ "id": "windows_i686_gnu 0.52.6",
+ "target": "windows_i686_gnu"
+ }
+ ],
+ "cfg(all(target_arch = \"x86\", target_env = \"msvc\", not(windows_raw_dylib)))": [
+ {
+ "id": "windows_i686_msvc 0.52.6",
+ "target": "windows_i686_msvc"
+ }
+ ],
+ "cfg(all(target_arch = \"x86_64\", target_env = \"gnu\", not(target_abi = \"llvm\"), not(windows_raw_dylib)))": [
+ {
+ "id": "windows_x86_64_gnu 0.52.6",
+ "target": "windows_x86_64_gnu"
+ }
+ ],
+ "i686-pc-windows-gnullvm": [
+ {
+ "id": "windows_i686_gnullvm 0.52.6",
+ "target": "windows_i686_gnullvm"
+ }
+ ],
+ "x86_64-pc-windows-gnullvm": [
+ {
+ "id": "windows_x86_64_gnullvm 0.52.6",
+ "target": "windows_x86_64_gnullvm"
+ }
+ ]
+ }
+ },
+ "edition": "2021",
+ "version": "0.52.6"
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "license-apache-2.0"
+ },
+ "windows_aarch64_gnullvm 0.42.2": {
+ "name": "windows_aarch64_gnullvm",
+ "version": "0.42.2",
+ "package_url": "https://github.com/microsoft/windows-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/windows_aarch64_gnullvm/0.42.2/download",
+ "sha256": "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "windows_aarch64_gnullvm",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "windows_aarch64_gnullvm",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "windows_aarch64_gnullvm 0.42.2",
+ "target": "build_script_build"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.42.2"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ]
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "license-apache-2.0"
+ },
+ "windows_aarch64_gnullvm 0.52.6": {
+ "name": "windows_aarch64_gnullvm",
+ "version": "0.52.6",
+ "package_url": "https://github.com/microsoft/windows-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/windows_aarch64_gnullvm/0.52.6/download",
+ "sha256": "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "windows_aarch64_gnullvm",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "windows_aarch64_gnullvm",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "windows_aarch64_gnullvm 0.52.6",
+ "target": "build_script_build"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.52.6"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ]
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "license-apache-2.0"
+ },
+ "windows_aarch64_msvc 0.42.2": {
+ "name": "windows_aarch64_msvc",
+ "version": "0.42.2",
+ "package_url": "https://github.com/microsoft/windows-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/windows_aarch64_msvc/0.42.2/download",
+ "sha256": "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "windows_aarch64_msvc",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "windows_aarch64_msvc",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "windows_aarch64_msvc 0.42.2",
+ "target": "build_script_build"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.42.2"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ]
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "license-apache-2.0"
+ },
+ "windows_aarch64_msvc 0.52.6": {
+ "name": "windows_aarch64_msvc",
+ "version": "0.52.6",
+ "package_url": "https://github.com/microsoft/windows-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/windows_aarch64_msvc/0.52.6/download",
+ "sha256": "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "windows_aarch64_msvc",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "windows_aarch64_msvc",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "windows_aarch64_msvc 0.52.6",
+ "target": "build_script_build"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.52.6"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ]
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "license-apache-2.0"
+ },
+ "windows_i686_gnu 0.42.2": {
+ "name": "windows_i686_gnu",
+ "version": "0.42.2",
+ "package_url": "https://github.com/microsoft/windows-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/windows_i686_gnu/0.42.2/download",
+ "sha256": "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "windows_i686_gnu",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "windows_i686_gnu",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "windows_i686_gnu 0.42.2",
+ "target": "build_script_build"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.42.2"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ]
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "license-apache-2.0"
+ },
+ "windows_i686_gnu 0.52.6": {
+ "name": "windows_i686_gnu",
+ "version": "0.52.6",
+ "package_url": "https://github.com/microsoft/windows-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/windows_i686_gnu/0.52.6/download",
+ "sha256": "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "windows_i686_gnu",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "windows_i686_gnu",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "windows_i686_gnu 0.52.6",
+ "target": "build_script_build"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.52.6"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ]
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "license-apache-2.0"
+ },
+ "windows_i686_gnullvm 0.52.6": {
+ "name": "windows_i686_gnullvm",
+ "version": "0.52.6",
+ "package_url": "https://github.com/microsoft/windows-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/windows_i686_gnullvm/0.52.6/download",
+ "sha256": "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "windows_i686_gnullvm",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "windows_i686_gnullvm",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "windows_i686_gnullvm 0.52.6",
+ "target": "build_script_build"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.52.6"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ]
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "license-apache-2.0"
+ },
+ "windows_i686_msvc 0.42.2": {
+ "name": "windows_i686_msvc",
+ "version": "0.42.2",
+ "package_url": "https://github.com/microsoft/windows-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/windows_i686_msvc/0.42.2/download",
+ "sha256": "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "windows_i686_msvc",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "windows_i686_msvc",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "windows_i686_msvc 0.42.2",
+ "target": "build_script_build"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.42.2"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ]
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "license-apache-2.0"
+ },
+ "windows_i686_msvc 0.52.6": {
+ "name": "windows_i686_msvc",
+ "version": "0.52.6",
+ "package_url": "https://github.com/microsoft/windows-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/windows_i686_msvc/0.52.6/download",
+ "sha256": "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "windows_i686_msvc",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "windows_i686_msvc",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "windows_i686_msvc 0.52.6",
+ "target": "build_script_build"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.52.6"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ]
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "license-apache-2.0"
+ },
+ "windows_x86_64_gnu 0.42.2": {
+ "name": "windows_x86_64_gnu",
+ "version": "0.42.2",
+ "package_url": "https://github.com/microsoft/windows-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/windows_x86_64_gnu/0.42.2/download",
+ "sha256": "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "windows_x86_64_gnu",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "windows_x86_64_gnu",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "windows_x86_64_gnu 0.42.2",
+ "target": "build_script_build"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.42.2"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ]
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "license-apache-2.0"
+ },
+ "windows_x86_64_gnu 0.52.6": {
+ "name": "windows_x86_64_gnu",
+ "version": "0.52.6",
+ "package_url": "https://github.com/microsoft/windows-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/windows_x86_64_gnu/0.52.6/download",
+ "sha256": "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "windows_x86_64_gnu",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "windows_x86_64_gnu",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "windows_x86_64_gnu 0.52.6",
+ "target": "build_script_build"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.52.6"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ]
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "license-apache-2.0"
+ },
+ "windows_x86_64_gnullvm 0.42.2": {
+ "name": "windows_x86_64_gnullvm",
+ "version": "0.42.2",
+ "package_url": "https://github.com/microsoft/windows-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/windows_x86_64_gnullvm/0.42.2/download",
+ "sha256": "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "windows_x86_64_gnullvm",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "windows_x86_64_gnullvm",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "windows_x86_64_gnullvm 0.42.2",
+ "target": "build_script_build"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.42.2"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ]
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "license-apache-2.0"
+ },
+ "windows_x86_64_gnullvm 0.52.6": {
+ "name": "windows_x86_64_gnullvm",
+ "version": "0.52.6",
+ "package_url": "https://github.com/microsoft/windows-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/windows_x86_64_gnullvm/0.52.6/download",
+ "sha256": "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "windows_x86_64_gnullvm",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "windows_x86_64_gnullvm",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "windows_x86_64_gnullvm 0.52.6",
+ "target": "build_script_build"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.52.6"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ]
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "license-apache-2.0"
+ },
+ "windows_x86_64_msvc 0.42.2": {
+ "name": "windows_x86_64_msvc",
+ "version": "0.42.2",
+ "package_url": "https://github.com/microsoft/windows-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/windows_x86_64_msvc/0.42.2/download",
+ "sha256": "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "windows_x86_64_msvc",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "windows_x86_64_msvc",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "windows_x86_64_msvc 0.42.2",
+ "target": "build_script_build"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.42.2"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ]
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "license-apache-2.0"
+ },
+ "windows_x86_64_msvc 0.52.6": {
+ "name": "windows_x86_64_msvc",
+ "version": "0.52.6",
+ "package_url": "https://github.com/microsoft/windows-rs",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/windows_x86_64_msvc/0.52.6/download",
+ "sha256": "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "windows_x86_64_msvc",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ },
+ {
+ "BuildScript": {
+ "crate_name": "build_script_build",
+ "crate_root": "build.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "windows_x86_64_msvc",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "windows_x86_64_msvc 0.52.6",
+ "target": "build_script_build"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "0.52.6"
+ },
+ "build_script_attrs": {
+ "data_glob": [
+ "**"
+ ]
+ },
+ "license": "MIT OR Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "license-apache-2.0"
+ },
+ "yansi 0.5.1": {
+ "name": "yansi",
+ "version": "0.5.1",
+ "package_url": "https://github.com/SergioBenitez/yansi",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/yansi/0.5.1/download",
+ "sha256": "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "yansi",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "yansi",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "edition": "2015",
+ "version": "0.5.1"
+ },
+ "license": "MIT/Apache-2.0",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "zerocopy 0.7.35": {
+ "name": "zerocopy",
+ "version": "0.7.35",
+ "package_url": "https://github.com/google/zerocopy",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/zerocopy/0.7.35/download",
+ "sha256": "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "zerocopy",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "zerocopy",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "byteorder",
+ "default",
+ "derive",
+ "simd",
+ "zerocopy-derive"
+ ],
+ "selects": {}
+ },
+ "deps": {
+ "common": [
+ {
+ "id": "byteorder 1.5.0",
+ "target": "byteorder"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "proc_macro_deps": {
+ "common": [
+ {
+ "id": "zerocopy-derive 0.7.35",
+ "target": "zerocopy_derive"
+ }
+ ],
+ "selects": {}
+ },
+ "version": "0.7.35"
+ },
+ "license": "BSD-2-Clause OR Apache-2.0 OR MIT",
+ "license_ids": [
+ "Apache-2.0",
+ "BSD-2-Clause",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "zerocopy-derive 0.7.35": {
+ "name": "zerocopy-derive",
+ "version": "0.7.35",
+ "package_url": "https://github.com/google/zerocopy",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/zerocopy-derive/0.7.35/download",
+ "sha256": "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
+ }
+ },
+ "targets": [
+ {
+ "ProcMacro": {
+ "crate_name": "zerocopy_derive",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "zerocopy_derive",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "deps": {
+ "common": [
+ {
+ "id": "proc-macro2 1.0.86",
+ "target": "proc_macro2"
+ },
+ {
+ "id": "quote 1.0.36",
+ "target": "quote"
+ },
+ {
+ "id": "syn 2.0.75",
+ "target": "syn"
+ }
+ ],
+ "selects": {}
+ },
+ "edition": "2018",
+ "version": "0.7.35"
+ },
+ "license": "BSD-2-Clause OR Apache-2.0 OR MIT",
+ "license_ids": [
+ "Apache-2.0",
+ "BSD-2-Clause",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ },
+ "zeroize 1.8.1": {
+ "name": "zeroize",
+ "version": "1.8.1",
+ "package_url": "https://github.com/RustCrypto/utils/tree/master/zeroize",
+ "repository": {
+ "Http": {
+ "url": "https://static.crates.io/crates/zeroize/1.8.1/download",
+ "sha256": "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde"
+ }
+ },
+ "targets": [
+ {
+ "Library": {
+ "crate_name": "zeroize",
+ "crate_root": "src/lib.rs",
+ "srcs": {
+ "allow_empty": true,
+ "include": [
+ "**/*.rs"
+ ]
+ }
+ }
+ }
+ ],
+ "library_target_name": "zeroize",
+ "common_attrs": {
+ "compile_data_glob": [
+ "**"
+ ],
+ "crate_features": {
+ "common": [
+ "alloc",
+ "default"
+ ],
+ "selects": {}
+ },
+ "edition": "2021",
+ "version": "1.8.1"
+ },
+ "license": "Apache-2.0 OR MIT",
+ "license_ids": [
+ "Apache-2.0",
+ "MIT"
+ ],
+ "license_file": "LICENSE-APACHE"
+ }
+ },
+ "binary_crates": [],
+ "workspace_members": {
+ "capture 1.0.0": "platform/jvm",
+ "logger_benchmark 1.0.0": "test/benchmark",
+ "platform-shared 1.0.0": "platform/shared",
+ "platform_test_helpers 1.0.0": "platform/test_helpers",
+ "pom_checker 0.1.0": "test/platform/pom_checker",
+ "proto 0.1.0": "proto",
+ "swift_bridge 1.0.0": "platform/swift/source",
+ "test_jni 1.0.0": "test/platform/jvm",
+ "test_swift_bridge 1.0.0": "test/platform/swift/bridging"
+ },
+ "conditions": {
+ "aarch64-apple-darwin": [
+ "aarch64-apple-darwin"
+ ],
+ "aarch64-apple-ios": [
+ "aarch64-apple-ios"
+ ],
+ "aarch64-apple-ios-sim": [
+ "aarch64-apple-ios-sim"
+ ],
+ "aarch64-fuchsia": [
+ "aarch64-fuchsia"
+ ],
+ "aarch64-linux-android": [
+ "aarch64-linux-android"
+ ],
+ "aarch64-pc-windows-gnullvm": [],
+ "aarch64-pc-windows-msvc": [
+ "aarch64-pc-windows-msvc"
+ ],
+ "aarch64-unknown-linux-gnu": [
+ "aarch64-unknown-linux-gnu",
+ "aarch64-unknown-nixos-gnu"
+ ],
+ "aarch64-unknown-nixos-gnu": [
+ "aarch64-unknown-nixos-gnu"
+ ],
+ "aarch64-unknown-nto-qnx710": [
+ "aarch64-unknown-nto-qnx710"
+ ],
+ "aarch64-uwp-windows-msvc": [],
+ "arm-unknown-linux-gnueabi": [
+ "arm-unknown-linux-gnueabi"
+ ],
+ "armv7-linux-androideabi": [
+ "armv7-linux-androideabi"
+ ],
+ "armv7-unknown-linux-gnueabi": [
+ "armv7-unknown-linux-gnueabi"
+ ],
+ "cfg(all(any(target_arch = \"x86_64\", target_arch = \"arm64ec\"), target_env = \"msvc\", not(windows_raw_dylib)))": [
+ "x86_64-pc-windows-msvc"
+ ],
+ "cfg(all(any(target_os = \"android\", target_os = \"linux\"), any(rustix_use_libc, miri, not(all(target_os = \"linux\", target_endian = \"little\", 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 = \"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\")))))))": [
+ "aarch64-linux-android",
+ "armv7-linux-androideabi",
+ "i686-linux-android",
+ "powerpc-unknown-linux-gnu",
+ "s390x-unknown-linux-gnu",
+ "x86_64-linux-android"
+ ],
+ "cfg(all(any(target_os = \"android\", target_os = \"linux\"), any(target_arch = \"aarch64\", target_arch = \"arm\")))": [
+ "aarch64-linux-android",
+ "aarch64-unknown-linux-gnu",
+ "aarch64-unknown-nixos-gnu",
+ "arm-unknown-linux-gnueabi",
+ "armv7-linux-androideabi",
+ "armv7-unknown-linux-gnueabi"
+ ],
+ "cfg(all(not(rustix_use_libc), not(miri), target_os = \"linux\", target_endian = \"little\", 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 = \"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\"))))": [
+ "aarch64-unknown-linux-gnu",
+ "aarch64-unknown-nixos-gnu",
+ "arm-unknown-linux-gnueabi",
+ "armv7-unknown-linux-gnueabi",
+ "i686-unknown-linux-gnu",
+ "x86_64-unknown-linux-gnu",
+ "x86_64-unknown-nixos-gnu"
+ ],
+ "cfg(all(target_arch = \"aarch64\", target_env = \"msvc\", not(windows_raw_dylib)))": [
+ "aarch64-pc-windows-msvc"
+ ],
+ "cfg(all(target_arch = \"aarch64\", target_os = \"windows\"))": [
+ "aarch64-pc-windows-msvc"
+ ],
+ "cfg(all(target_arch = \"wasm32\", not(target_os = \"emscripten\")))": [
+ "wasm32-unknown-unknown",
+ "wasm32-wasi"
+ ],
+ "cfg(all(target_arch = \"wasm32\", not(target_os = \"wasi\")))": [
+ "wasm32-unknown-unknown"
+ ],
+ "cfg(all(target_arch = \"x86\", target_env = \"gnu\", not(target_abi = \"llvm\"), not(windows_raw_dylib)))": [
+ "i686-unknown-linux-gnu"
+ ],
+ "cfg(all(target_arch = \"x86\", target_env = \"msvc\", not(windows_raw_dylib)))": [
+ "i686-pc-windows-msvc"
+ ],
+ "cfg(all(target_arch = \"x86_64\", target_env = \"gnu\", not(target_abi = \"llvm\"), not(windows_raw_dylib)))": [
+ "x86_64-unknown-linux-gnu",
+ "x86_64-unknown-nixos-gnu"
+ ],
+ "cfg(any(target_arch = \"aarch64\", target_arch = \"arm\", target_arch = \"x86\", target_arch = \"x86_64\"))": [
+ "aarch64-apple-darwin",
+ "aarch64-apple-ios",
+ "aarch64-apple-ios-sim",
+ "aarch64-fuchsia",
+ "aarch64-linux-android",
+ "aarch64-pc-windows-msvc",
+ "aarch64-unknown-linux-gnu",
+ "aarch64-unknown-nixos-gnu",
+ "aarch64-unknown-nto-qnx710",
+ "arm-unknown-linux-gnueabi",
+ "armv7-linux-androideabi",
+ "armv7-unknown-linux-gnueabi",
+ "i686-apple-darwin",
+ "i686-linux-android",
+ "i686-pc-windows-msvc",
+ "i686-unknown-freebsd",
+ "i686-unknown-linux-gnu",
+ "thumbv7em-none-eabi",
+ "thumbv8m.main-none-eabi",
+ "x86_64-apple-darwin",
+ "x86_64-apple-ios",
+ "x86_64-fuchsia",
+ "x86_64-linux-android",
+ "x86_64-pc-windows-msvc",
+ "x86_64-unknown-freebsd",
+ "x86_64-unknown-linux-gnu",
+ "x86_64-unknown-nixos-gnu",
+ "x86_64-unknown-none"
+ ],
+ "cfg(any(target_os = \"macos\", target_os = \"ios\"))": [
+ "aarch64-apple-darwin",
+ "aarch64-apple-ios",
+ "aarch64-apple-ios-sim",
+ "i686-apple-darwin",
+ "x86_64-apple-darwin",
+ "x86_64-apple-ios"
+ ],
+ "cfg(any(unix, target_os = \"wasi\"))": [
+ "aarch64-apple-darwin",
+ "aarch64-apple-ios",
+ "aarch64-apple-ios-sim",
+ "aarch64-fuchsia",
+ "aarch64-linux-android",
+ "aarch64-unknown-linux-gnu",
+ "aarch64-unknown-nixos-gnu",
+ "aarch64-unknown-nto-qnx710",
+ "arm-unknown-linux-gnueabi",
+ "armv7-linux-androideabi",
+ "armv7-unknown-linux-gnueabi",
+ "i686-apple-darwin",
+ "i686-linux-android",
+ "i686-unknown-freebsd",
+ "i686-unknown-linux-gnu",
+ "powerpc-unknown-linux-gnu",
+ "s390x-unknown-linux-gnu",
+ "wasm32-wasi",
+ "x86_64-apple-darwin",
+ "x86_64-apple-ios",
+ "x86_64-fuchsia",
+ "x86_64-linux-android",
+ "x86_64-unknown-freebsd",
+ "x86_64-unknown-linux-gnu",
+ "x86_64-unknown-nixos-gnu"
+ ],
+ "cfg(any(windows, unix, target_os = \"redox\"))": [
+ "aarch64-apple-darwin",
+ "aarch64-apple-ios",
+ "aarch64-apple-ios-sim",
+ "aarch64-fuchsia",
+ "aarch64-linux-android",
+ "aarch64-pc-windows-msvc",
+ "aarch64-unknown-linux-gnu",
+ "aarch64-unknown-nixos-gnu",
+ "aarch64-unknown-nto-qnx710",
+ "arm-unknown-linux-gnueabi",
+ "armv7-linux-androideabi",
+ "armv7-unknown-linux-gnueabi",
+ "i686-apple-darwin",
+ "i686-linux-android",
+ "i686-pc-windows-msvc",
+ "i686-unknown-freebsd",
+ "i686-unknown-linux-gnu",
+ "powerpc-unknown-linux-gnu",
+ "s390x-unknown-linux-gnu",
+ "x86_64-apple-darwin",
+ "x86_64-apple-ios",
+ "x86_64-fuchsia",
+ "x86_64-linux-android",
+ "x86_64-pc-windows-msvc",
+ "x86_64-unknown-freebsd",
+ "x86_64-unknown-linux-gnu",
+ "x86_64-unknown-nixos-gnu"
+ ],
+ "cfg(not(all(windows, target_env = \"msvc\", not(target_vendor = \"uwp\"))))": [
+ "aarch64-apple-darwin",
+ "aarch64-apple-ios",
+ "aarch64-apple-ios-sim",
+ "aarch64-fuchsia",
+ "aarch64-linux-android",
+ "aarch64-unknown-linux-gnu",
+ "aarch64-unknown-nixos-gnu",
+ "aarch64-unknown-nto-qnx710",
+ "arm-unknown-linux-gnueabi",
+ "armv7-linux-androideabi",
+ "armv7-unknown-linux-gnueabi",
+ "i686-apple-darwin",
+ "i686-linux-android",
+ "i686-unknown-freebsd",
+ "i686-unknown-linux-gnu",
+ "powerpc-unknown-linux-gnu",
+ "riscv32imc-unknown-none-elf",
+ "riscv64gc-unknown-none-elf",
+ "s390x-unknown-linux-gnu",
+ "thumbv7em-none-eabi",
+ "thumbv8m.main-none-eabi",
+ "wasm32-unknown-unknown",
+ "wasm32-wasi",
+ "x86_64-apple-darwin",
+ "x86_64-apple-ios",
+ "x86_64-fuchsia",
+ "x86_64-linux-android",
+ "x86_64-unknown-freebsd",
+ "x86_64-unknown-linux-gnu",
+ "x86_64-unknown-nixos-gnu",
+ "x86_64-unknown-none"
+ ],
+ "cfg(not(windows_raw_dylib))": [
+ "aarch64-apple-darwin",
+ "aarch64-apple-ios",
+ "aarch64-apple-ios-sim",
+ "aarch64-fuchsia",
+ "aarch64-linux-android",
+ "aarch64-pc-windows-msvc",
+ "aarch64-unknown-linux-gnu",
+ "aarch64-unknown-nixos-gnu",
+ "aarch64-unknown-nto-qnx710",
+ "arm-unknown-linux-gnueabi",
+ "armv7-linux-androideabi",
+ "armv7-unknown-linux-gnueabi",
+ "i686-apple-darwin",
+ "i686-linux-android",
+ "i686-pc-windows-msvc",
+ "i686-unknown-freebsd",
+ "i686-unknown-linux-gnu",
+ "powerpc-unknown-linux-gnu",
+ "riscv32imc-unknown-none-elf",
+ "riscv64gc-unknown-none-elf",
+ "s390x-unknown-linux-gnu",
+ "thumbv7em-none-eabi",
+ "thumbv8m.main-none-eabi",
+ "wasm32-unknown-unknown",
+ "wasm32-wasi",
+ "x86_64-apple-darwin",
+ "x86_64-apple-ios",
+ "x86_64-fuchsia",
+ "x86_64-linux-android",
+ "x86_64-pc-windows-msvc",
+ "x86_64-unknown-freebsd",
+ "x86_64-unknown-linux-gnu",
+ "x86_64-unknown-nixos-gnu",
+ "x86_64-unknown-none"
+ ],
+ "cfg(target_arch = \"spirv\")": [],
+ "cfg(target_arch = \"wasm32\")": [
+ "wasm32-unknown-unknown",
+ "wasm32-wasi"
+ ],
+ "cfg(target_env = \"sgx\")": [],
+ "cfg(target_os = \"android\")": [
+ "aarch64-linux-android",
+ "armv7-linux-androideabi",
+ "i686-linux-android",
+ "x86_64-linux-android"
+ ],
+ "cfg(target_os = \"fuchsia\")": [
+ "aarch64-fuchsia",
+ "x86_64-fuchsia"
+ ],
+ "cfg(target_os = \"haiku\")": [],
+ "cfg(target_os = \"hermit\")": [],
+ "cfg(target_os = \"redox\")": [],
+ "cfg(target_os = \"wasi\")": [
+ "wasm32-wasi"
+ ],
+ "cfg(target_os = \"windows\")": [
+ "aarch64-pc-windows-msvc",
+ "i686-pc-windows-msvc",
+ "x86_64-pc-windows-msvc"
+ ],
+ "cfg(tokio_taskdump)": [],
+ "cfg(unix)": [
+ "aarch64-apple-darwin",
+ "aarch64-apple-ios",
+ "aarch64-apple-ios-sim",
+ "aarch64-fuchsia",
+ "aarch64-linux-android",
+ "aarch64-unknown-linux-gnu",
+ "aarch64-unknown-nixos-gnu",
+ "aarch64-unknown-nto-qnx710",
+ "arm-unknown-linux-gnueabi",
+ "armv7-linux-androideabi",
+ "armv7-unknown-linux-gnueabi",
+ "i686-apple-darwin",
+ "i686-linux-android",
+ "i686-unknown-freebsd",
+ "i686-unknown-linux-gnu",
+ "powerpc-unknown-linux-gnu",
+ "s390x-unknown-linux-gnu",
+ "x86_64-apple-darwin",
+ "x86_64-apple-ios",
+ "x86_64-fuchsia",
+ "x86_64-linux-android",
+ "x86_64-unknown-freebsd",
+ "x86_64-unknown-linux-gnu",
+ "x86_64-unknown-nixos-gnu"
+ ],
+ "cfg(windows)": [
+ "aarch64-pc-windows-msvc",
+ "i686-pc-windows-msvc",
+ "x86_64-pc-windows-msvc"
+ ],
+ "i686-apple-darwin": [
+ "i686-apple-darwin"
+ ],
+ "i686-linux-android": [
+ "i686-linux-android"
+ ],
+ "i686-pc-windows-gnu": [],
+ "i686-pc-windows-gnullvm": [],
+ "i686-pc-windows-msvc": [
+ "i686-pc-windows-msvc"
+ ],
+ "i686-unknown-freebsd": [
+ "i686-unknown-freebsd"
+ ],
+ "i686-unknown-linux-gnu": [
+ "i686-unknown-linux-gnu"
+ ],
+ "i686-uwp-windows-gnu": [],
+ "i686-uwp-windows-msvc": [],
+ "powerpc-unknown-linux-gnu": [
+ "powerpc-unknown-linux-gnu"
+ ],
+ "riscv32imc-unknown-none-elf": [
+ "riscv32imc-unknown-none-elf"
+ ],
+ "riscv64gc-unknown-none-elf": [
+ "riscv64gc-unknown-none-elf"
+ ],
+ "s390x-unknown-linux-gnu": [
+ "s390x-unknown-linux-gnu"
+ ],
+ "thumbv7em-none-eabi": [
+ "thumbv7em-none-eabi"
+ ],
+ "thumbv8m.main-none-eabi": [
+ "thumbv8m.main-none-eabi"
+ ],
+ "wasm32-unknown-unknown": [
+ "wasm32-unknown-unknown"
+ ],
+ "wasm32-wasi": [
+ "wasm32-wasi"
+ ],
+ "x86_64-apple-darwin": [
+ "x86_64-apple-darwin"
+ ],
+ "x86_64-apple-ios": [
+ "x86_64-apple-ios"
+ ],
+ "x86_64-fuchsia": [
+ "x86_64-fuchsia"
+ ],
+ "x86_64-linux-android": [
+ "x86_64-linux-android"
+ ],
+ "x86_64-pc-windows-gnu": [],
+ "x86_64-pc-windows-gnullvm": [],
+ "x86_64-pc-windows-msvc": [
+ "x86_64-pc-windows-msvc"
+ ],
+ "x86_64-unknown-freebsd": [
+ "x86_64-unknown-freebsd"
+ ],
+ "x86_64-unknown-linux-gnu": [
+ "x86_64-unknown-linux-gnu",
+ "x86_64-unknown-nixos-gnu"
+ ],
+ "x86_64-unknown-nixos-gnu": [
+ "x86_64-unknown-nixos-gnu"
+ ],
+ "x86_64-unknown-none": [
+ "x86_64-unknown-none"
+ ],
+ "x86_64-uwp-windows-gnu": [],
+ "x86_64-uwp-windows-msvc": []
+ },
+ "direct_deps": [
+ "android_logger 0.14.1",
+ "anyhow 1.0.86",
+ "assert_matches 1.5.0",
+ "async-trait 0.1.81",
+ "bd-api 1.0.0",
+ "bd-buffer 1.0.0",
+ "bd-client-common 1.0.0",
+ "bd-client-stats-store 1.0.0",
+ "bd-device 1.0.0",
+ "bd-hyper-network 1.0.0",
+ "bd-key-value 1.0.0",
+ "bd-log 1.0.0",
+ "bd-log-primitives 1.0.0",
+ "bd-logger 1.0.0",
+ "bd-noop-network 1.0.0",
+ "bd-proto 1.0.0",
+ "bd-runtime 1.0.0",
+ "bd-session 1.0.0",
+ "bd-shutdown 1.0.0",
+ "bd-test-helpers 1.0.0",
+ "bd-time 1.0.0",
+ "chrono 0.4.38",
+ "criterion 0.5.1",
+ "ctor 0.2.8",
+ "jni 0.21.1",
+ "log 0.4.22",
+ "objc 0.2.7",
+ "objc-foundation 0.1.1",
+ "parking_lot 0.12.3",
+ "protobuf 4.0.0-alpha.0",
+ "regex 1.10.6",
+ "serde 1.0.208",
+ "serde_json 1.0.125",
+ "simple-xml 0.1.10",
+ "tempdir 0.3.7",
+ "time 0.3.36",
+ "tokio 1.39.3",
+ "tracing-subscriber 0.3.18",
+ "uuid 1.10.0"
+ ],
+ "direct_dev_deps": [
+ "pretty_assertions 1.4.0"
+ ]
+}
diff --git a/Cargo.lock b/Cargo.lock
new file mode 100644
index 00000000..eb7e1078
--- /dev/null
+++ b/Cargo.lock
@@ -0,0 +1,3208 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "adler2"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627"
+
+[[package]]
+name = "aho-corasick"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "android-tzdata"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
+
+[[package]]
+name = "android_log-sys"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ecc8056bf6ab9892dcd53216c83d1597487d7dacac16c8df6b877d127df9937"
+
+[[package]]
+name = "android_logger"
+version = "0.14.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05b07e8e73d720a1f2e4b6014766e6039fd2e96a4fa44e2a78d0e1fa2ff49826"
+dependencies = [
+ "android_log-sys",
+ "env_filter",
+ "log",
+]
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "anes"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299"
+
+[[package]]
+name = "anstyle"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1"
+
+[[package]]
+name = "anyhow"
+version = "1.0.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da"
+
+[[package]]
+name = "arc-swap"
+version = "1.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457"
+
+[[package]]
+name = "assert_matches"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9"
+
+[[package]]
+name = "async-trait"
+version = "0.1.81"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "atomic-waker"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
+
+[[package]]
+name = "autocfg"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0"
+
+[[package]]
+name = "axum"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a6c9af12842a67734c9a2e355436e5d03b22383ed60cf13cd0c18fbfe3dcbcf"
+dependencies = [
+ "async-trait",
+ "axum-core",
+ "bytes",
+ "futures-util",
+ "http",
+ "http-body",
+ "http-body-util",
+ "hyper",
+ "hyper-util",
+ "itoa",
+ "matchit",
+ "memchr",
+ "mime",
+ "percent-encoding",
+ "pin-project-lite",
+ "rustversion",
+ "serde",
+ "serde_json",
+ "serde_path_to_error",
+ "serde_urlencoded",
+ "sync_wrapper 1.0.1",
+ "tokio",
+ "tower",
+ "tower-layer",
+ "tower-service",
+ "tracing",
+]
+
+[[package]]
+name = "axum-core"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a15c63fd72d41492dc4f497196f5da1fb04fb7529e631d73630d1b491e47a2e3"
+dependencies = [
+ "async-trait",
+ "bytes",
+ "futures-util",
+ "http",
+ "http-body",
+ "http-body-util",
+ "mime",
+ "pin-project-lite",
+ "rustversion",
+ "sync_wrapper 0.1.2",
+ "tower-layer",
+ "tower-service",
+ "tracing",
+]
+
+[[package]]
+name = "axum-server"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56bac90848f6a9393ac03c63c640925c4b7c8ca21654de40d53f55964667c7d8"
+dependencies = [
+ "arc-swap",
+ "bytes",
+ "futures-util",
+ "http",
+ "http-body",
+ "http-body-util",
+ "hyper",
+ "hyper-util",
+ "pin-project-lite",
+ "rustls",
+ "rustls-pemfile",
+ "rustls-pki-types",
+ "tokio",
+ "tokio-rustls",
+ "tower",
+ "tower-service",
+]
+
+[[package]]
+name = "backoff"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b62ddb9cb1ec0a098ad4bbf9344d0713fa193ae1a80af55febcff2627b6a00c1"
+dependencies = [
+ "getrandom",
+ "instant",
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "backtrace"
+version = "0.3.73"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide 0.7.4",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base64"
+version = "0.22.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
+
+[[package]]
+name = "base64ct"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b"
+
+[[package]]
+name = "bd-api"
+version = "1.0.0"
+source = "git+https://github.com/bitdriftlabs/shared-core.git?rev=4946752bd2a4e18c20645722bd5d567d62c43d9f#4946752bd2a4e18c20645722bd5d567d62c43d9f"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "backoff",
+ "bd-client-common",
+ "bd-client-stats-store",
+ "bd-device",
+ "bd-grpc-codec",
+ "bd-internal-logging",
+ "bd-metadata",
+ "bd-pgv",
+ "bd-proto",
+ "bd-runtime",
+ "bd-shutdown",
+ "bd-time",
+ "log",
+ "protobuf",
+ "time",
+ "tokio",
+ "tracing",
+ "uuid",
+]
+
+[[package]]
+name = "bd-buffer"
+version = "1.0.0"
+source = "git+https://github.com/bitdriftlabs/shared-core.git?rev=4946752bd2a4e18c20645722bd5d567d62c43d9f#4946752bd2a4e18c20645722bd5d567d62c43d9f"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "bd-client-common",
+ "bd-client-stats-store",
+ "bd-completion",
+ "bd-proto",
+ "bd-runtime",
+ "bd-stats-common",
+ "crc32fast",
+ "fs2",
+ "futures",
+ "intrusive-collections",
+ "log",
+ "memmap2",
+ "parking_lot",
+ "static_assertions",
+ "thiserror",
+ "time",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "bd-client-common"
+version = "1.0.0"
+source = "git+https://github.com/bitdriftlabs/shared-core.git?rev=4946752bd2a4e18c20645722bd5d567d62c43d9f#4946752bd2a4e18c20645722bd5d567d62c43d9f"
+dependencies = [
+ "anyhow",
+ "bd-client-stats-store",
+ "bd-log-primitives",
+ "bd-matcher",
+ "bd-metadata",
+ "bd-proto",
+ "flatbuffers",
+ "log",
+ "parking_lot",
+ "protobuf",
+ "thiserror",
+ "time",
+ "tokio",
+ "uuid",
+]
+
+[[package]]
+name = "bd-client-stats"
+version = "1.0.0"
+source = "git+https://github.com/bitdriftlabs/shared-core.git?rev=4946752bd2a4e18c20645722bd5d567d62c43d9f#4946752bd2a4e18c20645722bd5d567d62c43d9f"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "bd-api",
+ "bd-client-common",
+ "bd-client-stats-store",
+ "bd-completion",
+ "bd-proto",
+ "bd-runtime",
+ "bd-shutdown",
+ "bd-stats-common",
+ "bd-time",
+ "flate2",
+ "log",
+ "parking_lot",
+ "protobuf",
+ "time",
+ "tokio",
+]
+
+[[package]]
+name = "bd-client-stats-store"
+version = "1.0.0"
+source = "git+https://github.com/bitdriftlabs/shared-core.git?rev=4946752bd2a4e18c20645722bd5d567d62c43d9f#4946752bd2a4e18c20645722bd5d567d62c43d9f"
+dependencies = [
+ "bd-proto",
+ "bd-stats-common",
+ "log",
+ "parking_lot",
+ "sketches-rust",
+ "thiserror",
+ "tokio",
+]
+
+[[package]]
+name = "bd-completion"
+version = "1.0.0"
+source = "git+https://github.com/bitdriftlabs/shared-core.git?rev=4946752bd2a4e18c20645722bd5d567d62c43d9f#4946752bd2a4e18c20645722bd5d567d62c43d9f"
+dependencies = [
+ "anyhow",
+ "log",
+ "tokio",
+]
+
+[[package]]
+name = "bd-device"
+version = "1.0.0"
+source = "git+https://github.com/bitdriftlabs/shared-core.git?rev=4946752bd2a4e18c20645722bd5d567d62c43d9f#4946752bd2a4e18c20645722bd5d567d62c43d9f"
+dependencies = [
+ "anyhow",
+ "bd-client-common",
+ "bd-key-value",
+ "bd-time",
+ "log",
+ "parking_lot",
+ "serde",
+ "serde_yaml",
+ "time",
+ "uuid",
+]
+
+[[package]]
+name = "bd-events"
+version = "1.0.0"
+source = "git+https://github.com/bitdriftlabs/shared-core.git?rev=4946752bd2a4e18c20645722bd5d567d62c43d9f#4946752bd2a4e18c20645722bd5d567d62c43d9f"
+dependencies = [
+ "bd-runtime",
+ "bd-shutdown",
+ "ctor",
+ "log",
+ "tokio",
+]
+
+[[package]]
+name = "bd-grpc"
+version = "1.0.0"
+source = "git+https://github.com/bitdriftlabs/shared-core.git?rev=4946752bd2a4e18c20645722bd5d567d62c43d9f#4946752bd2a4e18c20645722bd5d567d62c43d9f"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "axum",
+ "base64ct",
+ "bd-grpc-codec",
+ "bd-log",
+ "bd-pgv",
+ "bd-server-stats",
+ "bd-shutdown",
+ "bd-stats-common",
+ "bd-time",
+ "bytes",
+ "futures",
+ "http",
+ "http-body",
+ "http-body-util",
+ "hyper",
+ "hyper-util",
+ "log",
+ "prometheus",
+ "protobuf",
+ "protobuf-codegen",
+ "snap",
+ "thiserror",
+ "time",
+ "tokio",
+ "tokio-stream",
+ "tower",
+ "unwrap-infallible",
+ "urlencoding",
+]
+
+[[package]]
+name = "bd-grpc-codec"
+version = "1.0.0"
+source = "git+https://github.com/bitdriftlabs/shared-core.git?rev=4946752bd2a4e18c20645722bd5d567d62c43d9f#4946752bd2a4e18c20645722bd5d567d62c43d9f"
+dependencies = [
+ "anyhow",
+ "bd-client-common",
+ "bd-stats-common",
+ "bytes",
+ "flate2",
+ "log",
+ "protobuf",
+ "thiserror",
+]
+
+[[package]]
+name = "bd-hyper-network"
+version = "1.0.0"
+source = "git+https://github.com/bitdriftlabs/shared-core.git?rev=4946752bd2a4e18c20645722bd5d567d62c43d9f#4946752bd2a4e18c20645722bd5d567d62c43d9f"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "bd-api",
+ "bd-client-common",
+ "bd-shutdown",
+ "bytes",
+ "http",
+ "http-body",
+ "http-body-util",
+ "hyper",
+ "hyper-rustls",
+ "hyper-util",
+ "log",
+ "tokio",
+ "tokio-stream",
+]
+
+[[package]]
+name = "bd-internal-logging"
+version = "1.0.0"
+source = "git+https://github.com/bitdriftlabs/shared-core.git?rev=4946752bd2a4e18c20645722bd5d567d62c43d9f#4946752bd2a4e18c20645722bd5d567d62c43d9f"
+dependencies = [
+ "anyhow",
+ "bd-log-primitives",
+ "bd-proto",
+ "bd-runtime",
+ "tokio",
+]
+
+[[package]]
+name = "bd-key-value"
+version = "1.0.0"
+source = "git+https://github.com/bitdriftlabs/shared-core.git?rev=4946752bd2a4e18c20645722bd5d567d62c43d9f#4946752bd2a4e18c20645722bd5d567d62c43d9f"
+dependencies = [
+ "anyhow",
+ "base64",
+ "bd-log",
+ "bincode",
+ "log",
+ "serde",
+ "time",
+ "tokio",
+]
+
+[[package]]
+name = "bd-log"
+version = "1.0.0"
+source = "git+https://github.com/bitdriftlabs/shared-core.git?rev=4946752bd2a4e18c20645722bd5d567d62c43d9f#4946752bd2a4e18c20645722bd5d567d62c43d9f"
+dependencies = [
+ "anyhow",
+ "bd-time",
+ "log",
+ "parking_lot",
+ "time",
+ "tokio",
+ "tracing",
+ "tracing-error",
+ "tracing-log",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "bd-log-metadata"
+version = "1.0.0"
+source = "git+https://github.com/bitdriftlabs/shared-core.git?rev=4946752bd2a4e18c20645722bd5d567d62c43d9f#4946752bd2a4e18c20645722bd5d567d62c43d9f"
+dependencies = [
+ "anyhow",
+ "bd-log-primitives",
+ "time",
+]
+
+[[package]]
+name = "bd-log-primitives"
+version = "1.0.0"
+source = "git+https://github.com/bitdriftlabs/shared-core.git?rev=4946752bd2a4e18c20645722bd5d567d62c43d9f#4946752bd2a4e18c20645722bd5d567d62c43d9f"
+dependencies = [
+ "anyhow",
+ "bd-proto",
+ "time",
+]
+
+[[package]]
+name = "bd-logger"
+version = "1.0.0"
+source = "git+https://github.com/bitdriftlabs/shared-core.git?rev=4946752bd2a4e18c20645722bd5d567d62c43d9f#4946752bd2a4e18c20645722bd5d567d62c43d9f"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "backoff",
+ "bd-api",
+ "bd-buffer",
+ "bd-client-common",
+ "bd-client-stats",
+ "bd-client-stats-store",
+ "bd-completion",
+ "bd-device",
+ "bd-events",
+ "bd-internal-logging",
+ "bd-key-value",
+ "bd-log",
+ "bd-log-metadata",
+ "bd-log-primitives",
+ "bd-matcher",
+ "bd-proto",
+ "bd-resource-utilization",
+ "bd-runtime",
+ "bd-session",
+ "bd-shutdown",
+ "bd-stats-common",
+ "bd-time",
+ "bd-workflows",
+ "flatbuffers",
+ "futures-util",
+ "itertools 0.13.0",
+ "log",
+ "parking_lot",
+ "protobuf",
+ "serde",
+ "thiserror",
+ "time",
+ "tokio",
+ "tower",
+ "tracing",
+ "unwrap-infallible",
+]
+
+[[package]]
+name = "bd-matcher"
+version = "1.0.0"
+source = "git+https://github.com/bitdriftlabs/shared-core.git?rev=4946752bd2a4e18c20645722bd5d567d62c43d9f#4946752bd2a4e18c20645722bd5d567d62c43d9f"
+dependencies = [
+ "bd-log-primitives",
+ "bd-proto",
+ "protobuf",
+ "regex",
+ "thiserror",
+]
+
+[[package]]
+name = "bd-metadata"
+version = "1.0.0"
+source = "git+https://github.com/bitdriftlabs/shared-core.git?rev=4946752bd2a4e18c20645722bd5d567d62c43d9f#4946752bd2a4e18c20645722bd5d567d62c43d9f"
+dependencies = [
+ "anyhow",
+ "base64",
+ "bd-log",
+ "bincode",
+ "log",
+ "serde",
+ "time",
+ "tokio",
+]
+
+[[package]]
+name = "bd-noop-network"
+version = "1.0.0"
+source = "git+https://github.com/bitdriftlabs/shared-core.git?rev=4946752bd2a4e18c20645722bd5d567d62c43d9f#4946752bd2a4e18c20645722bd5d567d62c43d9f"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "bd-api",
+ "bd-client-common",
+]
+
+[[package]]
+name = "bd-pgv"
+version = "1.0.0"
+source = "git+https://github.com/bitdriftlabs/shared-core.git?rev=4946752bd2a4e18c20645722bd5d567d62c43d9f#4946752bd2a4e18c20645722bd5d567d62c43d9f"
+dependencies = [
+ "log",
+ "protobuf",
+ "protobuf-codegen",
+ "thiserror",
+]
+
+[[package]]
+name = "bd-proto"
+version = "1.0.0"
+source = "git+https://github.com/bitdriftlabs/shared-core.git?rev=4946752bd2a4e18c20645722bd5d567d62c43d9f#4946752bd2a4e18c20645722bd5d567d62c43d9f"
+dependencies = [
+ "bd-pgv",
+ "bytes",
+ "flatbuffers",
+ "flatc-rust",
+ "protobuf",
+ "protobuf-codegen",
+]
+
+[[package]]
+name = "bd-resource-utilization"
+version = "1.0.0"
+source = "git+https://github.com/bitdriftlabs/shared-core.git?rev=4946752bd2a4e18c20645722bd5d567d62c43d9f#4946752bd2a4e18c20645722bd5d567d62c43d9f"
+dependencies = [
+ "anyhow",
+ "bd-internal-logging",
+ "bd-log-primitives",
+ "bd-runtime",
+ "bd-shutdown",
+ "ctor",
+ "log",
+ "tokio",
+]
+
+[[package]]
+name = "bd-runtime"
+version = "1.0.0"
+source = "git+https://github.com/bitdriftlabs/shared-core.git?rev=4946752bd2a4e18c20645722bd5d567d62c43d9f#4946752bd2a4e18c20645722bd5d567d62c43d9f"
+dependencies = [
+ "anyhow",
+ "bd-client-common",
+ "bd-proto",
+ "log",
+ "protobuf",
+ "time",
+ "tokio",
+]
+
+[[package]]
+name = "bd-server-stats"
+version = "1.0.0"
+source = "git+https://github.com/bitdriftlabs/shared-core.git?rev=4946752bd2a4e18c20645722bd5d567d62c43d9f#4946752bd2a4e18c20645722bd5d567d62c43d9f"
+dependencies = [
+ "bd-stats-common",
+ "bd-time",
+ "concat-string",
+ "dashmap",
+ "itertools 0.13.0",
+ "log",
+ "parking_lot",
+ "prometheus",
+ "regex",
+ "thiserror",
+ "time",
+ "tokio",
+]
+
+[[package]]
+name = "bd-session"
+version = "1.0.0"
+source = "git+https://github.com/bitdriftlabs/shared-core.git?rev=4946752bd2a4e18c20645722bd5d567d62c43d9f#4946752bd2a4e18c20645722bd5d567d62c43d9f"
+dependencies = [
+ "anyhow",
+ "bd-client-common",
+ "bd-key-value",
+ "bd-log",
+ "bd-time",
+ "log",
+ "parking_lot",
+ "serde",
+ "serde_yaml",
+ "thread_local",
+ "time",
+ "tokio",
+ "uuid",
+]
+
+[[package]]
+name = "bd-shutdown"
+version = "1.0.0"
+source = "git+https://github.com/bitdriftlabs/shared-core.git?rev=4946752bd2a4e18c20645722bd5d567d62c43d9f#4946752bd2a4e18c20645722bd5d567d62c43d9f"
+dependencies = [
+ "log",
+ "tokio",
+]
+
+[[package]]
+name = "bd-stats-common"
+version = "1.0.0"
+source = "git+https://github.com/bitdriftlabs/shared-core.git?rev=4946752bd2a4e18c20645722bd5d567d62c43d9f#4946752bd2a4e18c20645722bd5d567d62c43d9f"
+
+[[package]]
+name = "bd-test-helpers"
+version = "1.0.0"
+source = "git+https://github.com/bitdriftlabs/shared-core.git?rev=4946752bd2a4e18c20645722bd5d567d62c43d9f#4946752bd2a4e18c20645722bd5d567d62c43d9f"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "axum",
+ "axum-server",
+ "bd-client-common",
+ "bd-events",
+ "bd-grpc",
+ "bd-key-value",
+ "bd-log-metadata",
+ "bd-log-primitives",
+ "bd-matcher",
+ "bd-metadata",
+ "bd-proto",
+ "bd-resource-utilization",
+ "bd-session",
+ "bd-time",
+ "futures-core",
+ "http-body-util",
+ "log",
+ "parking_lot",
+ "prometheus",
+ "protobuf",
+ "serde",
+ "time",
+ "tokio",
+ "tokio-stream",
+ "tracing",
+]
+
+[[package]]
+name = "bd-time"
+version = "1.0.0"
+source = "git+https://github.com/bitdriftlabs/shared-core.git?rev=4946752bd2a4e18c20645722bd5d567d62c43d9f#4946752bd2a4e18c20645722bd5d567d62c43d9f"
+dependencies = [
+ "async-trait",
+ "parking_lot",
+ "protobuf",
+ "time",
+ "tokio",
+]
+
+[[package]]
+name = "bd-workflows"
+version = "0.1.0"
+source = "git+https://github.com/bitdriftlabs/shared-core.git?rev=4946752bd2a4e18c20645722bd5d567d62c43d9f#4946752bd2a4e18c20645722bd5d567d62c43d9f"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "bd-api",
+ "bd-client-common",
+ "bd-client-stats",
+ "bd-client-stats-store",
+ "bd-completion",
+ "bd-log-primitives",
+ "bd-matcher",
+ "bd-proto",
+ "bd-runtime",
+ "bd-shutdown",
+ "bd-stats-common",
+ "bincode",
+ "itertools 0.13.0",
+ "log",
+ "protobuf",
+ "regex",
+ "serde",
+ "thiserror",
+ "time",
+ "tokio",
+]
+
+[[package]]
+name = "bincode"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de"
+
+[[package]]
+name = "block"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
+
+[[package]]
+name = "bumpalo"
+version = "3.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"
+
+[[package]]
+name = "byteorder"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+
+[[package]]
+name = "bytes"
+version = "1.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50"
+
+[[package]]
+name = "capture"
+version = "1.0.0"
+dependencies = [
+ "android_logger",
+ "anyhow",
+ "async-trait",
+ "bd-api",
+ "bd-client-common",
+ "bd-client-stats-store",
+ "bd-device",
+ "bd-key-value",
+ "bd-logger",
+ "bd-runtime",
+ "bd-session",
+ "bd-time",
+ "jni",
+ "log",
+ "platform-shared",
+ "time",
+ "tracing-subscriber",
+ "uuid",
+]
+
+[[package]]
+name = "cast"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5"
+
+[[package]]
+name = "cc"
+version = "1.1.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72db2f7947ecee9b03b510377e8bb9077afa27176fdbff55c51027e976fdcc48"
+dependencies = [
+ "shlex",
+]
+
+[[package]]
+name = "cesu8"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chrono"
+version = "0.4.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401"
+dependencies = [
+ "android-tzdata",
+ "iana-time-zone",
+ "js-sys",
+ "num-traits",
+ "wasm-bindgen",
+ "windows-targets 0.52.6",
+]
+
+[[package]]
+name = "ciborium"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e"
+dependencies = [
+ "ciborium-io",
+ "ciborium-ll",
+ "serde",
+]
+
+[[package]]
+name = "ciborium-io"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757"
+
+[[package]]
+name = "ciborium-ll"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9"
+dependencies = [
+ "ciborium-io",
+ "half",
+]
+
+[[package]]
+name = "clap"
+version = "4.5.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed6719fffa43d0d87e5fd8caeab59be1554fb028cd30edc88fc4369b17971019"
+dependencies = [
+ "clap_builder",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.5.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "216aec2b177652e3846684cbfe25c9964d18ec45234f0f5da5157b207ed1aab6"
+dependencies = [
+ "anstyle",
+ "clap_lex",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97"
+
+[[package]]
+name = "combine"
+version = "4.6.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd"
+dependencies = [
+ "bytes",
+ "memchr",
+]
+
+[[package]]
+name = "concat-string"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7439becb5fafc780b6f4de382b1a7a3e70234afe783854a4702ee8adbb838609"
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
+
+[[package]]
+name = "crc32fast"
+version = "1.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "criterion"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2b12d017a929603d80db1831cd3a24082f8137ce19c69e6447f54f5fc8d692f"
+dependencies = [
+ "anes",
+ "cast",
+ "ciborium",
+ "clap",
+ "criterion-plot",
+ "is-terminal",
+ "itertools 0.10.5",
+ "num-traits",
+ "once_cell",
+ "oorandom",
+ "plotters",
+ "rayon",
+ "regex",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "tinytemplate",
+ "walkdir",
+]
+
+[[package]]
+name = "criterion-plot"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1"
+dependencies = [
+ "cast",
+ "itertools 0.10.5",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d"
+dependencies = [
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80"
+
+[[package]]
+name = "crunchy"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
+
+[[package]]
+name = "ctor"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "edb49164822f3ee45b17acd4a208cfc1251410cf0cad9a833234c9890774dd9f"
+dependencies = [
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "dashmap"
+version = "6.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "804c8821570c3f8b70230c2ba75ffa5c0f9a4189b9a432b6656c536712acae28"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+ "hashbrown",
+ "lock_api",
+ "once_cell",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "deranged"
+version = "0.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4"
+dependencies = [
+ "powerfmt",
+ "serde",
+]
+
+[[package]]
+name = "diff"
+version = "0.1.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8"
+
+[[package]]
+name = "either"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0"
+
+[[package]]
+name = "env_filter"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f2c92ceda6ceec50f43169f9ee8424fe2db276791afde7b2cd8bc084cb376ab"
+dependencies = [
+ "log",
+]
+
+[[package]]
+name = "equivalent"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+
+[[package]]
+name = "errno"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba"
+dependencies = [
+ "libc",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "fastrand"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a"
+
+[[package]]
+name = "flatbuffers"
+version = "24.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8add37afff2d4ffa83bc748a70b4b1370984f6980768554182424ef71447c35f"
+dependencies = [
+ "bitflags 1.3.2",
+ "rustc_version",
+]
+
+[[package]]
+name = "flatc-rust"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57e61227926ef5b237af48bee74394cc4a5a221ebd10c5147a98e612f207851d"
+dependencies = [
+ "log",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c0596c1eac1f9e04ed902702e9878208b336edc9d6fddc8a48387349bab3666"
+dependencies = [
+ "crc32fast",
+ "libz-sys",
+ "miniz_oxide 0.8.0",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "fs2"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "fuchsia-cprng"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
+
+[[package]]
+name = "futures"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1"
+
+[[package]]
+name = "futures-macro"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5"
+
+[[package]]
+name = "futures-task"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004"
+
+[[package]]
+name = "futures-util"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "gimli"
+version = "0.29.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd"
+
+[[package]]
+name = "h2"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "524e8ac6999421f49a846c2d4411f337e53497d8ec55d67753beffa43c5d9205"
+dependencies = [
+ "atomic-waker",
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "http",
+ "indexmap",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "half"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888"
+dependencies = [
+ "cfg-if",
+ "crunchy",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.14.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024"
+
+[[package]]
+name = "hermit-abi"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc"
+
+[[package]]
+name = "home"
+version = "0.5.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5"
+dependencies = [
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "http"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184"
+dependencies = [
+ "bytes",
+ "http",
+]
+
+[[package]]
+name = "http-body-util"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f"
+dependencies = [
+ "bytes",
+ "futures-util",
+ "http",
+ "http-body",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9"
+
+[[package]]
+name = "httpdate"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
+
+[[package]]
+name = "hyper"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "smallvec",
+ "tokio",
+ "want",
+]
+
+[[package]]
+name = "hyper-rustls"
+version = "0.27.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ee4be2c948921a1a5320b629c4193916ed787a7f7f293fd3f7f5a6c9de74155"
+dependencies = [
+ "futures-util",
+ "http",
+ "hyper",
+ "hyper-util",
+ "rustls",
+ "rustls-pki-types",
+ "tokio",
+ "tokio-rustls",
+ "tower-service",
+ "webpki-roots",
+]
+
+[[package]]
+name = "hyper-util"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cde7055719c54e36e95e8719f95883f22072a48ede39db7fc17a4e1d5281e9b9"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-util",
+ "http",
+ "http-body",
+ "hyper",
+ "pin-project-lite",
+ "socket2",
+ "tokio",
+ "tower",
+ "tower-service",
+ "tracing",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.60"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "windows-core",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93ead53efc7ea8ed3cfb0c79fc8023fbb782a5432b52830b6518941cebe6505c"
+dependencies = [
+ "equivalent",
+ "hashbrown",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "intrusive-collections"
+version = "0.9.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b694dc9f70c3bda874626d2aed13b780f137aab435f4e9814121955cf706122e"
+dependencies = [
+ "memoffset",
+]
+
+[[package]]
+name = "is-terminal"
+version = "0.4.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "261f68e344040fbd0edea105bef17c66edf46f984ddb1115b775ce31be948f4b"
+dependencies = [
+ "hermit-abi 0.4.0",
+ "libc",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itertools"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b"
+
+[[package]]
+name = "jni"
+version = "0.21.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97"
+dependencies = [
+ "cesu8",
+ "cfg-if",
+ "combine",
+ "jni-sys",
+ "log",
+ "thiserror",
+ "walkdir",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "jni-sys"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
+
+[[package]]
+name = "js-sys"
+version = "0.3.70"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
+
+[[package]]
+name = "libc"
+version = "0.2.158"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439"
+
+[[package]]
+name = "libz-sys"
+version = "1.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fdc53a7799a7496ebc9fd29f31f7df80e83c9bda5299768af5f9e59eeea74647"
+dependencies = [
+ "cc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89"
+
+[[package]]
+name = "lock_api"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24"
+
+[[package]]
+name = "logger_benchmark"
+version = "1.0.0"
+dependencies = [
+ "bd-api",
+ "bd-buffer",
+ "bd-client-common",
+ "bd-hyper-network",
+ "bd-key-value",
+ "bd-logger",
+ "bd-noop-network",
+ "bd-session",
+ "bd-shutdown",
+ "bd-test-helpers",
+ "criterion",
+ "protobuf",
+ "tempdir",
+ "time",
+]
+
+[[package]]
+name = "malloc_buf"
+version = "0.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "matchers"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
+dependencies = [
+ "regex-automata 0.1.10",
+]
+
+[[package]]
+name = "matchit"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94"
+
+[[package]]
+name = "memchr"
+version = "2.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
+
+[[package]]
+name = "memmap2"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe751422e4a8caa417e13c3ea66452215d7d63e19e604f4980461212f3ae1322"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1"
+dependencies = [
+ "adler2",
+]
+
+[[package]]
+name = "mio"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec"
+dependencies = [
+ "hermit-abi 0.3.9",
+ "libc",
+ "wasi",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "nu-ansi-term"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
+dependencies = [
+ "overload",
+ "winapi",
+]
+
+[[package]]
+name = "num-conv"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9"
+
+[[package]]
+name = "num-traits"
+version = "0.2.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "objc"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
+dependencies = [
+ "malloc_buf",
+]
+
+[[package]]
+name = "objc-foundation"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9"
+dependencies = [
+ "block",
+ "objc",
+ "objc_id",
+]
+
+[[package]]
+name = "objc_id"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b"
+dependencies = [
+ "objc",
+]
+
+[[package]]
+name = "object"
+version = "0.36.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "27b64972346851a39438c60b341ebc01bba47464ae329e55cf343eb93964efd9"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
+
+[[package]]
+name = "oorandom"
+version = "11.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b410bbe7e14ab526a0e86877eb47c6996a2bd7746f027ba551028c925390e4e9"
+
+[[package]]
+name = "overload"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
+
+[[package]]
+name = "parking_lot"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "windows-targets 0.52.6",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
+
+[[package]]
+name = "pin-project"
+version = "1.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec"
+
+[[package]]
+name = "platform-shared"
+version = "1.0.0"
+dependencies = [
+ "anyhow",
+ "bd-api",
+ "bd-client-common",
+ "bd-client-stats-store",
+ "bd-log-primitives",
+ "bd-logger",
+ "bd-runtime",
+ "bd-session",
+ "parking_lot",
+ "pretty_assertions",
+ "regex",
+ "time",
+ "tokio",
+]
+
+[[package]]
+name = "platform_test_helpers"
+version = "1.0.0"
+dependencies = [
+ "anyhow",
+ "assert_matches",
+ "bd-api",
+ "bd-client-common",
+ "bd-key-value",
+ "bd-logger",
+ "bd-proto",
+ "bd-runtime",
+ "bd-test-helpers",
+ "platform-shared",
+ "time",
+]
+
+[[package]]
+name = "plotters"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a15b6eccb8484002195a3e44fe65a4ce8e93a625797a063735536fd59cb01cf3"
+dependencies = [
+ "num-traits",
+ "plotters-backend",
+ "plotters-svg",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "plotters-backend"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "414cec62c6634ae900ea1c56128dfe87cf63e7caece0852ec76aba307cebadb7"
+
+[[package]]
+name = "plotters-svg"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81b30686a7d9c3e010b84284bdd26a29f2138574f52f5eb6f794fc0ad924e705"
+dependencies = [
+ "plotters-backend",
+]
+
+[[package]]
+name = "pom_checker"
+version = "0.1.0"
+dependencies = [
+ "simple-xml",
+]
+
+[[package]]
+name = "powerfmt"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04"
+dependencies = [
+ "zerocopy",
+]
+
+[[package]]
+name = "pretty_assertions"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af7cee1a6c8a5b9208b3cb1061f10c0cb689087b3d8ce85fb9d2dd7a29b6ba66"
+dependencies = [
+ "diff",
+ "yansi",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "prometheus"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d33c28a30771f7f96db69893f78b857f7450d7e0237e9c8fc6427a81bae7ed1"
+dependencies = [
+ "cfg-if",
+ "fnv",
+ "lazy_static",
+ "memchr",
+ "parking_lot",
+ "thiserror",
+]
+
+[[package]]
+name = "proto"
+version = "0.1.0"
+dependencies = [
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "protobuf"
+version = "4.0.0-alpha.0"
+source = "git+https://github.com/bitdriftlabs/rust-protobuf.git?branch=patch-stack#b35660c7846ebdbb3e14c238832eb353a6dbdecf"
+dependencies = [
+ "bytes",
+ "once_cell",
+ "protobuf-support",
+ "thiserror",
+]
+
+[[package]]
+name = "protobuf-codegen"
+version = "4.0.0-alpha.0"
+source = "git+https://github.com/bitdriftlabs/rust-protobuf.git?branch=patch-stack#b35660c7846ebdbb3e14c238832eb353a6dbdecf"
+dependencies = [
+ "anyhow",
+ "once_cell",
+ "protobuf",
+ "protobuf-parse",
+ "regex",
+ "tempfile",
+ "thiserror",
+]
+
+[[package]]
+name = "protobuf-parse"
+version = "4.0.0-alpha.0"
+source = "git+https://github.com/bitdriftlabs/rust-protobuf.git?branch=patch-stack#b35660c7846ebdbb3e14c238832eb353a6dbdecf"
+dependencies = [
+ "anyhow",
+ "indexmap",
+ "log",
+ "protobuf",
+ "protobuf-support",
+ "tempfile",
+ "thiserror",
+ "which",
+]
+
+[[package]]
+name = "protobuf-support"
+version = "4.0.0-alpha.0"
+source = "git+https://github.com/bitdriftlabs/rust-protobuf.git?branch=patch-stack#b35660c7846ebdbb3e14c238832eb353a6dbdecf"
+dependencies = [
+ "thiserror",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293"
+dependencies = [
+ "fuchsia-cprng",
+ "libc",
+ "rand_core 0.3.1",
+ "rdrand",
+ "winapi",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
+dependencies = [
+ "rand_core 0.4.2",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rayon"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2"
+dependencies = [
+ "crossbeam-deque",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "rdrand"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4"
+dependencies = [
+ "bitflags 2.6.0",
+]
+
+[[package]]
+name = "regex"
+version = "1.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata 0.4.7",
+ "regex-syntax 0.8.4",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+dependencies = [
+ "regex-syntax 0.6.29",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax 0.8.4",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b"
+
+[[package]]
+name = "remove_dir_all"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "ring"
+version = "0.17.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d"
+dependencies = [
+ "cc",
+ "cfg-if",
+ "getrandom",
+ "libc",
+ "spin",
+ "untrusted",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f"
+
+[[package]]
+name = "rustc_version"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "rustix"
+version = "0.38.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f"
+dependencies = [
+ "bitflags 2.6.0",
+ "errno",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "rustls"
+version = "0.23.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c58f8c84392efc0a126acce10fa59ff7b3d2ac06ab451a33f2741989b806b044"
+dependencies = [
+ "once_cell",
+ "ring",
+ "rustls-pki-types",
+ "rustls-webpki",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "2.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "196fe16b00e106300d3e45ecfcb764fa292a535d7326a29a5875c579c7417425"
+dependencies = [
+ "base64",
+ "rustls-pki-types",
+]
+
+[[package]]
+name = "rustls-pki-types"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0"
+
+[[package]]
+name = "rustls-webpki"
+version = "0.102.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e6b52d4fda176fd835fdc55a835d4a89b8499cad995885a21149d5ad62f852e"
+dependencies = [
+ "ring",
+ "rustls-pki-types",
+ "untrusted",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6"
+
+[[package]]
+name = "ryu"
+version = "1.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f"
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "semver"
+version = "1.0.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b"
+
+[[package]]
+name = "serde"
+version = "1.0.208"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cff085d2cb684faa248efb494c39b68e522822ac0de72ccf08109abde717cfb2"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.208"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24008e81ff7613ed8e5ba0cfaf24e2c2f1e5b8a0495711e44fcd4882fca62bcf"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.125"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83c8e735a073ccf5be70aa8066aa984eaf2fa000db6c8d0100ae605b366d31ed"
+dependencies = [
+ "itoa",
+ "memchr",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_path_to_error"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6"
+dependencies = [
+ "itoa",
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_yaml"
+version = "0.9.34+deprecated"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47"
+dependencies = [
+ "indexmap",
+ "itoa",
+ "ryu",
+ "serde",
+ "unsafe-libyaml",
+]
+
+[[package]]
+name = "sharded-slab"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "shlex"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "simple-xml"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e73900daedd2d1f51bb648e8a7dbc44a0f062403db9671a161fd52b3a283c0ea"
+
+[[package]]
+name = "sketches-rust"
+version = "0.2.2"
+source = "git+https://github.com/mattklein123/sketches-rust.git?branch=patch-stack#654de9475d364e7d97f8615de5b7c5368ccd26a7"
+dependencies = [
+ "thiserror",
+]
+
+[[package]]
+name = "slab"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
+
+[[package]]
+name = "snap"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b"
+
+[[package]]
+name = "socket2"
+version = "0.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c"
+dependencies = [
+ "libc",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "spin"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "subtle"
+version = "2.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
+
+[[package]]
+name = "swift_bridge"
+version = "1.0.0"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "bd-api",
+ "bd-client-common",
+ "bd-device",
+ "bd-key-value",
+ "bd-log",
+ "bd-logger",
+ "bd-noop-network",
+ "bd-runtime",
+ "bd-session",
+ "bd-test-helpers",
+ "bd-time",
+ "log",
+ "objc",
+ "parking_lot",
+ "platform-shared",
+ "pretty_assertions",
+ "time",
+ "tokio",
+ "tracing-subscriber",
+ "uuid",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.75"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6af063034fc1935ede7be0122941bafa9bacb949334d090b77ca98b5817c7d9"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "sync_wrapper"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
+
+[[package]]
+name = "sync_wrapper"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394"
+
+[[package]]
+name = "tempdir"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8"
+dependencies = [
+ "rand 0.4.6",
+ "remove_dir_all",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "once_cell",
+ "rustix",
+ "windows-sys 0.59.0",
+]
+
+[[package]]
+name = "test_jni"
+version = "1.0.0"
+dependencies = [
+ "anyhow",
+ "assert_matches",
+ "bd-client-common",
+ "bd-log",
+ "bd-logger",
+ "bd-proto",
+ "bd-test-helpers",
+ "capture",
+ "chrono",
+ "ctor",
+ "jni",
+ "platform-shared",
+ "platform_test_helpers",
+ "time",
+]
+
+[[package]]
+name = "test_swift_bridge"
+version = "1.0.0"
+dependencies = [
+ "bd-client-common",
+ "bd-key-value",
+ "bd-logger",
+ "bd-proto",
+ "bd-test-helpers",
+ "ctor",
+ "objc",
+ "objc-foundation",
+ "platform_test_helpers",
+ "protobuf",
+ "swift_bridge",
+ "time",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.63"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.63"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+]
+
+[[package]]
+name = "time"
+version = "0.3.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885"
+dependencies = [
+ "deranged",
+ "itoa",
+ "num-conv",
+ "powerfmt",
+ "serde",
+ "time-core",
+ "time-macros",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
+
+[[package]]
+name = "time-macros"
+version = "0.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf"
+dependencies = [
+ "num-conv",
+ "time-core",
+]
+
+[[package]]
+name = "tinytemplate"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc"
+dependencies = [
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "tokio"
+version = "1.39.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9babc99b9923bfa4804bd74722ff02c0381021eafa4db9949217e3be8e84fff5"
+dependencies = [
+ "backtrace",
+ "bytes",
+ "libc",
+ "mio",
+ "parking_lot",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2",
+ "tokio-macros",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4"
+dependencies = [
+ "rustls",
+ "rustls-pki-types",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-stream"
+version = "0.1.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tower"
+version = "0.4.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c"
+dependencies = [
+ "futures-core",
+ "futures-util",
+ "pin-project",
+ "pin-project-lite",
+ "tokio",
+ "tower-layer",
+ "tower-service",
+ "tracing",
+]
+
+[[package]]
+name = "tower-layer"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e"
+
+[[package]]
+name = "tower-service"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3"
+
+[[package]]
+name = "tracing"
+version = "0.1.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
+dependencies = [
+ "log",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
+dependencies = [
+ "once_cell",
+ "valuable",
+]
+
+[[package]]
+name = "tracing-error"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d686ec1c0f384b1277f097b2f279a2ecc11afe8c133c1aabf036a27cb4cd206e"
+dependencies = [
+ "tracing",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "tracing-log"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3"
+dependencies = [
+ "log",
+ "once_cell",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-subscriber"
+version = "0.3.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b"
+dependencies = [
+ "matchers",
+ "nu-ansi-term",
+ "once_cell",
+ "regex",
+ "sharded-slab",
+ "smallvec",
+ "thread_local",
+ "tracing",
+ "tracing-core",
+ "tracing-log",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+
+[[package]]
+name = "unsafe-libyaml"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861"
+
+[[package]]
+name = "untrusted"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
+
+[[package]]
+name = "unwrap-infallible"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "151ac09978d3c2862c4e39b557f4eceee2cc72150bc4cb4f16abf061b6e381fb"
+
+[[package]]
+name = "urlencoding"
+version = "2.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da"
+
+[[package]]
+name = "uuid"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "valuable"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "walkdir"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "want"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
+dependencies = [
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.93"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.93"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.93"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.93"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.93"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484"
+
+[[package]]
+name = "web-sys"
+version = "0.3.70"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.26.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd7c23921eeb1713a4e851530e9b9756e4fb0e89978582942612524cf09f01cd"
+dependencies = [
+ "rustls-pki-types",
+]
+
+[[package]]
+name = "which"
+version = "4.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7"
+dependencies = [
+ "either",
+ "home",
+ "once_cell",
+ "rustix",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
+dependencies = [
+ "windows-sys 0.59.0",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-core"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9"
+dependencies = [
+ "windows-targets 0.52.6",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
+dependencies = [
+ "windows-targets 0.52.6",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.59.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
+dependencies = [
+ "windows-targets 0.52.6",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
+dependencies = [
+ "windows_aarch64_gnullvm 0.52.6",
+ "windows_aarch64_msvc 0.52.6",
+ "windows_i686_gnu 0.52.6",
+ "windows_i686_gnullvm",
+ "windows_i686_msvc 0.52.6",
+ "windows_x86_64_gnu 0.52.6",
+ "windows_x86_64_gnullvm 0.52.6",
+ "windows_x86_64_msvc 0.52.6",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
+
+[[package]]
+name = "windows_i686_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
+
+[[package]]
+name = "yansi"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec"
+
+[[package]]
+name = "zerocopy"
+version = "0.7.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0"
+dependencies = [
+ "byteorder",
+ "zerocopy-derive",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.7.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "zeroize"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde"
diff --git a/Cargo.toml b/Cargo.toml
new file mode 100644
index 00000000..844c556c
--- /dev/null
+++ b/Cargo.toml
@@ -0,0 +1,67 @@
+[workspace]
+members = [
+ "platform/jvm",
+ "platform/shared",
+ "platform/swift/source",
+ "platform/test_helpers",
+ "proto",
+ "test/benchmark",
+ "test/platform/jvm",
+ "test/platform/swift/bridging",
+ "test/platform/pom_checker",
+]
+resolver = "2"
+
+[workspace.dependencies]
+android_logger = { version = "0.14.1", default-features = false }
+anyhow = "1.0.86"
+assert_matches = "1.5.0"
+async-trait = "0.1.81"
+bd-api = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "4946752bd2a4e18c20645722bd5d567d62c43d9f" }
+bd-buffer = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "4946752bd2a4e18c20645722bd5d567d62c43d9f" }
+bd-client-common = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "4946752bd2a4e18c20645722bd5d567d62c43d9f" }
+bd-client-stats-store = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "4946752bd2a4e18c20645722bd5d567d62c43d9f" }
+bd-device = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "4946752bd2a4e18c20645722bd5d567d62c43d9f" }
+bd-grpc = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "4946752bd2a4e18c20645722bd5d567d62c43d9f" }
+bd-hyper-network = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "4946752bd2a4e18c20645722bd5d567d62c43d9f" }
+bd-key-value = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "4946752bd2a4e18c20645722bd5d567d62c43d9f" }
+bd-log = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "4946752bd2a4e18c20645722bd5d567d62c43d9f" }
+bd-log-metadata = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "4946752bd2a4e18c20645722bd5d567d62c43d9f" }
+bd-log-primitives = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "4946752bd2a4e18c20645722bd5d567d62c43d9f" }
+bd-logger = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "4946752bd2a4e18c20645722bd5d567d62c43d9f" }
+bd-noop-network = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "4946752bd2a4e18c20645722bd5d567d62c43d9f" }
+bd-proto = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "4946752bd2a4e18c20645722bd5d567d62c43d9f" }
+bd-runtime = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "4946752bd2a4e18c20645722bd5d567d62c43d9f" }
+bd-session = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "4946752bd2a4e18c20645722bd5d567d62c43d9f" }
+bd-shutdown = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "4946752bd2a4e18c20645722bd5d567d62c43d9f" }
+bd-test-helpers = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "4946752bd2a4e18c20645722bd5d567d62c43d9f", default-features = false }
+bd-time = { git = "https://github.com/bitdriftlabs/shared-core.git", rev = "4946752bd2a4e18c20645722bd5d567d62c43d9f" }
+chrono = "0.4.38"
+clap = { version = "4.5.16", features = ["derive", "env"] }
+ctor = "0.2.8"
+env_logger = { version = "0.11.5", default-features = false }
+jni = "0.21.1"
+log = { version = "0.4.22", features = ["max_level_trace", "release_max_level_info"] }
+objc = "0.2.7"
+objc-foundation = "0.1.1"
+parameterized = "2.0.0"
+parking_lot = "0.12.3"
+platform-shared = { path = "platform/shared" }
+pretty_assertions = "1.4.0"
+protobuf = { git = "https://github.com/bitdriftlabs/rust-protobuf.git", branch = "patch-stack", features = [
+ "bytes",
+ "with-bytes",
+] }
+protobuf-codegen = { git = "https://github.com/bitdriftlabs/rust-protobuf.git", branch = "patch-stack" }
+protobuf-json-mapping = { git = "https://github.com/bitdriftlabs/rust-protobuf.git", branch = "patch-stack" }
+rand = "0.8.5"
+rand_distr = "0.4.3"
+regex = "1.10.6"
+serde = { version = "1", features = ["derive"] }
+serde_json = "1.0.125"
+tempdir = "0.3.7"
+time = { version = "0.3.36", features = ["serde-well-known", "macros"] }
+tokio = { version = "1.39.3", features = ["full", "test-util"] }
+tracing = { version = "0.1.40", features = ["log"] }
+tracing-subscriber = { version = "0.3.18", features = ["env-filter"] }
+uuid = { version = "1.10.0", features = ["v4"] }
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 00000000..3f09b052
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,164 @@
+# PolyForm Shield License 1.0.0
+
+
+
+## Acceptance
+
+In order to get any license under these terms, you must agree
+to them as both strict obligations and conditions to all
+your licenses.
+
+## Copyright License
+
+The licensor grants you a copyright license for the
+software to do everything you might do with the software
+that would otherwise infringe the licensor's copyright
+in it for any permitted purpose. However, you may
+only distribute the software according to [Distribution
+License](#distribution-license) and make changes or new works
+based on the software according to [Changes and New Works
+License](#changes-and-new-works-license).
+
+## Distribution License
+
+The licensor grants you an additional copyright license
+to distribute copies of the software. Your license
+to distribute covers distributing the software with
+changes and new works permitted by [Changes and New Works
+License](#changes-and-new-works-license).
+
+## Notices
+
+You must ensure that anyone who gets a copy of any part of
+the software from you also gets a copy of these terms or the
+URL for them above, as well as copies of any plain-text lines
+beginning with `Required Notice:` that the licensor provided
+with the software. For example:
+
+> Required Notice: Copyright Yoyodyne, Inc. (http://example.com)
+
+## Changes and New Works License
+
+The licensor grants you an additional copyright license to
+make changes and new works based on the software for any
+permitted purpose.
+
+## Patent License
+
+The licensor grants you a patent license for the software that
+covers patent claims the licensor can license, or becomes able
+to license, that you would infringe by using the software.
+
+## Noncompete
+
+Any purpose is a permitted purpose, except for providing any
+product that competes with the software or any product the
+licensor or any of its affiliates provides using the software.
+
+## Competition
+
+Goods and services compete even when they provide functionality
+through different kinds of interfaces or for different technical
+platforms. Applications can compete with services, libraries
+with plugins, frameworks with development tools, and so on,
+even if they're written in different programming languages
+or for different computer architectures. Goods and services
+compete even when provided free of charge. If you market a
+product as a practical substitute for the software or another
+product, it definitely competes.
+
+## New Products
+
+If you are using the software to provide a product that does
+not compete, but the licensor or any of its affiliates brings
+your product into competition by providing a new version of
+the software or another product using the software, you may
+continue using versions of the software available under these
+terms beforehand to provide your competing product, but not
+any later versions.
+
+## Discontinued Products
+
+You may begin using the software to compete with a product
+or service that the licensor or any of its affiliates has
+stopped providing, unless the licensor includes a plain-text
+line beginning with `Licensor Line of Business:` with the
+software that mentions that line of business. For example:
+
+> Licensor Line of Business: YoyodyneCMS Content Management
+System (http://example.com/cms)
+
+## Sales of Business
+
+If the licensor or any of its affiliates sells a line of
+business developing the software or using the software
+to provide a product, the buyer can also enforce
+[Noncompete](#noncompete) for that product.
+
+## Fair Use
+
+You may have "fair use" rights for the software under the
+law. These terms do not limit them.
+
+## No Other Rights
+
+These terms do not allow you to sublicense or transfer any of
+your licenses to anyone else, or prevent the licensor from
+granting licenses to anyone else. These terms do not imply
+any other licenses.
+
+## Patent Defense
+
+If you make any written claim that the software infringes or
+contributes to infringement of any patent, your patent license
+for the software granted under these terms ends immediately. If
+your company makes such a claim, your patent license ends
+immediately for work on behalf of your company.
+
+## Violations
+
+The first time you are notified in writing that you have
+violated any of these terms, or done anything with the software
+not covered by your licenses, your licenses can nonetheless
+continue if you come into full compliance with these terms,
+and take practical steps to correct past violations, within
+32 days of receiving notice. Otherwise, all your licenses
+end immediately.
+
+## No Liability
+
+***As far as the law allows, the software comes as is, without
+any warranty or condition, and the licensor will not be liable
+to you for any damages arising out of these terms or the use
+or nature of the software, under any kind of legal claim.***
+
+## Definitions
+
+The **licensor** is the individual or entity offering these
+terms, and the **software** is the software the licensor makes
+available under these terms.
+
+A **product** can be a good or service, or a combination
+of them.
+
+**You** refers to the individual or entity agreeing to these
+terms.
+
+**Your company** is any legal entity, sole proprietorship,
+or other kind of organization that you work for, plus all
+its affiliates.
+
+**Affiliates** means the other organizations than an
+organization has control over, is under the control of, or is
+under common control with.
+
+**Control** means ownership of substantially all the assets of
+an entity, or the power to direct its management and policies
+by vote, contract, or otherwise. Control can be direct or
+indirect.
+
+**Your licenses** are all the licenses granted to you for the
+software under these terms.
+
+**Use** means anything you do with the software requiring one
+of your licenses.
diff --git a/Makefile b/Makefile
new file mode 100644
index 00000000..dac768a6
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,44 @@
+.PHONY: build
+build:
+ echo "This command exists as CI expects BUILD command to be available"
+
+.PHONY: ktlint
+ktlint:
+ ./bazelw query 'kind(ktlint_fix, //...)' | xargs -n1 ./bazelw run
+
+.PHONY: rustfmt
+rustfmt:
+ RUSTFMT_CONFIG=$(pwd)/rustfmt.toml ./bazelw run @rules_rust//:rustfmt
+
+.PHONY: buildifier
+buildifier:
+ buildifier -warnings all -lint=fix -r .
+
+.PHONY: lint-swift
+lint-swift:
+ ./bazelw run tools/lint:lint
+
+.PHONY: lint-yaml
+lint-yaml:
+ taplo lint
+
+.PHONY: fix-yaml
+fix-yaml:
+ taplo fmt
+
+.PHONY: fix-swift
+fix-swift:
+# tools/lint:fix doesn't warn about all docstring violations.
+# For this reason format doc strings first (by running tools/lint:fix) and validate whether
+# any doc string violations are left next (by running tools/lint:lint-docstrings).
+ ./bazelw run tools/lint:fix && ./bazelw run tools/lint:lint-docstrings
+
+.PHONY: format
+format: ktlint rustfmt buildifier fix-swift lint-yaml
+
+.PHONY: repin
+repin:
+ CARGO_BAZEL_REPIN=1 ./bazelw sync --only=crate_index
+
+.PHONY: push-additional-images
+push-additional-images:
diff --git a/NOTICE b/NOTICE
new file mode 100644
index 00000000..d2ed651d
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,4 @@
+capture-sdk
+Copyright Bitdrift, Inc.
+
+Licensed under PolyForm Shield. See LICENSE for terms.
diff --git a/README.md b/README.md
index f427c599..c1b4a5e1 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,140 @@
-# capture-sdk
-mobile bitdrift SDK
+# Capture SDK
+
+The bitdrift Capture SDK is a highly optimized, lightweight library built to enable high volume, low overhead local telemetry storage and persistence. Controlled in real-time by the bitdrift control plane, the SDK selectively uploads the precise data needed to debug customer issues, and nothing more.
+
+See [here](https://docs.bitdrift.io/product/overview) for more information.
+
+## Building Requirements
+
+### Dependencies
+
+Install required dependencies using following commands:
+
+```bash
+brew install protobuf flatbuffers llvm
+
+brew tap mdogan/zulu
+brew install --cask zulu-jdk8 zulu-jdk11
+```
+
+Make sure that `llvm-objcopy` is in your `PATH`.
+
+#### Xcode
+
+Xcode 15.4 is used to compile Capture SDK on macOS. Download it from https://developer.apple.com/download/.
+
+*If you install Xcode directly from the App store you will likely not get
+the specific version above. Either install it manually or override the
+version in your .bazelrc like this:*
+
+```
+build --xcode_version=15.2
+```
+
+Bazel can also get confused about the status of Xcode installation so if you run into issues with stale version confusion do:
+
+```
+./bazelw clean --expunge
+./bazelw shutdown
+```
+
+If you are using a different version of Xcode/simulator you may also need to adjust the following settings in .bazelrc to match your environment:
+
+```
+build --ios_simulator_device="iPhone 15"
+build --ios_simulator_version=17.5
+```
+
+## Development
+
+The Capture SDK is built using [bazel](https://github.com/bazelbuild/bazel). The `./bazelw` ensures that the correct bazel version is used and the
+correct Android dependencies are installed.
+
+To run all tests:
+
+```bash
+./bazelw test //... --build_tests_only
+```
+
+### Debugging Capture SDK Hello World Apps
+
+#### iOS
+
+To run the iOS hello world app:
+
+```bash
+./bazelw run --ios_multi_cpus=x86_64 :ios_app
+```
+
+To create Xcode project iOS Capture SDK:
+
+```bash
+./bazelw run :xcodeproj
+xed . // opens generated project
+```
+
+#### Android
+
+To install the Android hello world app to an active arm64 emulator:
+
+```bash
+./bazelw mobile-install --fat_apk_cpu=arm64-v8a :android_app
+```
+
+See [examples/README.md](/examples/README.md) for more details for how to use IDE to develop locally on Android.
+
+### Benchmarking
+
+When making changes to the Rust logging path, the benchmarks in //test/benchmark:logger_benchmark
+can be used to evaluate the impact of the change. To run, invoke
+
+```bash
+./bazelw build --config benchmark //test/benchmark:logger_benchmark
+bazel-bin/test/benchmark/logger_benchmark --bench
+```
+
+Perform this for both the old and new change (in that order), then look at the relevant charts in
+target/criterion/*/report for the different benchmark functions (the output from the benchmark
+binary should indicate which ones are interesting).
+
+### Dependency Management
+We use crate_universe to manage our third party Rust dependencies. This tool inspects the dependencies
+listed in Cargo.toml and uses it to generate a number of BUILD files that allow the Capture SDK code
+to depend on these third party targets.
+
+To depend on an imported library, depend on `@crate_index//:`. For example, to depend on
+tokio depend on `@crate_index//:tokio`.
+
+### Rust Editor Support
+
+To provide a IDE-like experience we make use of https://github.com/rust-lang/rust-analyzer and
+editors with rust-analyzer support (e.g. VS Code with the `rust-analyzer` extension).
+
+We rely on rust-analyzer's Cargo integration to provide IDE-like capabilities. One thing to note
+is that we don't build the project, which means its possible for the Cargo configuration to diverge.
+This will most likely be due to reference between crates within the project not being specified in the
+relevant Cargo.toml files.
+
+### Formatters
+
+```bash
+make format
+```
+
+Individual formatters can be run via specific make targets, see the
+top-level Makefile.
+
+Note that clippy checks are disabled by default in development due to
+https://github.com/bazelbuild/rules_rust/issues/1372. To enable in dev, add `--config clippy` to your
+bazel commands.
+
+### Binary Size Comparison
+
+As keeping the binary size down, it's sometimes helpful to check if a change increases the binary
+size substantially. To get an estimate, run `./tools/capture_so_size.sh` which will compute the size of a
+stripped .so compiled for Android.
+
+### Building SDK Binaries
+
+Run `./tools/ios_release.sh` and `./tools/android_release.sh` to build iOS and Android release artifacts
+respectively.
diff --git a/WORKSPACE b/WORKSPACE
new file mode 100644
index 00000000..104efabf
--- /dev/null
+++ b/WORKSPACE
@@ -0,0 +1,379 @@
+load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive", "http_jar")
+
+http_archive(
+ name = "build_bazel_apple_support",
+ sha256 = "cf4d63f39c7ba9059f70e995bf5fe1019267d3f77379c2028561a5d7645ef67c",
+ url = "https://github.com/bazelbuild/apple_support/releases/download/1.11.1/apple_support.1.11.1.tar.gz",
+)
+
+load(
+ "@build_bazel_apple_support//lib:repositories.bzl",
+ "apple_support_dependencies",
+)
+
+apple_support_dependencies()
+
+http_archive(
+ name = "build_bazel_rules_apple",
+ sha256 = "20da675977cb8249919df14d0ce6165d7b00325fb067f0b06696b893b90a55e8",
+ url = "https://github.com/bazelbuild/rules_apple/releases/download/3.0.0/rules_apple.3.0.0.tar.gz",
+)
+
+http_archive(
+ name = "rules_java",
+ sha256 = "27abf8d2b26f4572ba4112ae8eb4439513615018e03a299f85a8460f6992f6a3",
+ urls = [
+ "https://github.com/bazelbuild/rules_java/releases/download/6.4.0/rules_java-6.4.0.tar.gz",
+ ],
+)
+
+http_archive(
+ name = "build_bazel_rules_swift",
+ sha256 = "28a66ff5d97500f0304f4e8945d936fe0584e0d5b7a6f83258298007a93190ba",
+ url = "https://github.com/bazelbuild/rules_swift/releases/download/1.13.0/rules_swift.1.13.0.tar.gz",
+)
+
+load(
+ "@build_bazel_rules_swift//swift:repositories.bzl",
+ "swift_rules_dependencies",
+)
+
+swift_rules_dependencies()
+
+load(
+ "@build_bazel_rules_swift//swift:extras.bzl",
+ "swift_rules_extra_dependencies",
+)
+
+swift_rules_extra_dependencies()
+
+RULES_RUST_VERSION = "0.49.1"
+
+http_archive(
+ name = "rules_rust",
+ sha256 = "bcf710126f6974dc2db56d9ec5ec4c7c6c4e2c53b0728b44c35b770a48024bc9",
+ urls = ["https://github.com/bazelbuild/rules_rust/releases/download/%s/rules_rust-v%s.tar.gz" % (RULES_RUST_VERSION, RULES_RUST_VERSION)],
+)
+
+load("@rules_rust//rust:repositories.bzl", "rules_rust_dependencies", "rust_register_toolchains", "rust_repository_set")
+
+rules_rust_dependencies()
+
+RUST_VERSION = "1.80.1"
+
+rust_register_toolchains(
+ extra_target_triples = [
+ "aarch64-apple-ios-sim",
+ "aarch64-apple-ios",
+ "aarch64-linux-android",
+ "armv7-linux-androideabi",
+ "i686-linux-android",
+ "x86_64-apple-ios",
+ "x86_64-linux-android",
+ ],
+ rustfmt_version = "nightly/2024-07-24",
+ # We need this shas, since these archives are generated by us and we want to make sure we always use these as opposed
+ # to the official ones. There is a `rust_std_checksum.sh` script that generates these shas in the `tools` directory.
+ # For security reasons, we include all shas here to make sure that a malicious actor with access to rust-std-mobile
+ # can't include a compromised tool.
+ #
+ # tl;dr; run e.g. $ ./tools/rust_std_checksum.sh 1.80.0
+ sha256s = {
+ "rust-std-" + RUST_VERSION + "-aarch64-apple-ios-sim.tar.gz": "52c34b0a948a885135070b8ffec67dbcd626ac953aa95f36e2243e27006fd454",
+ "rust-std-" + RUST_VERSION + "-aarch64-apple-ios.tar.gz": "87dd82f5a79e32b9d20ed6723d8399b50c79eec22a2c8df7e6572b39c32b545b",
+ "rust-std-" + RUST_VERSION + "-x86_64-apple-ios.tar.gz": "83e4a90950bedbc58609f3c88110281fd445e6bd69def91439cba33418e9bd74",
+ "rust-std-" + RUST_VERSION + "-aarch64-linux-android.tar.gz": "40849abedd67d49b1bf6317a17550788e9298eb7258d98aaa55f31e4bc811fbe",
+ "rust-std-" + RUST_VERSION + "-armv7-linux-androideabi.tar.gz": "6cf462792fb55cb8a7af15d2989088db5b5b69eb5460b6637c6cafb2bf13f4b4",
+ "rust-std-" + RUST_VERSION + "-i686-linux-android.tar.gz": "c4e4ed020d91569e6e5a85ba4a46cd357e1531768b542885485a734ddeeb3526",
+ "rustc-" + RUST_VERSION + "-aarch64-apple-darwin.tar.gz": "dc1fa2b91b259e86d68838028099969939f7074fd554c35acf87889faf29748f",
+ "cargo-" + RUST_VERSION + "-aarch64-apple-darwin.tar.gz": "effbc189e39d518fbbd2a67cc8e5f0fd6f0c1cf45f058fa667b30eed1b4a99b7",
+ "llvm-tools-" + RUST_VERSION + "-aarch64-apple-darwin.tar.gz": "d8a0942a1739e3ddc1b48cc38c3592308a2a1b5828bd7848af6bddd69c5019b7",
+ "rust-std-" + RUST_VERSION + "-aarch64-apple-darwin.tar.gz": "7da7be82dd9e6697829e271feaa5898a089721e5b52bac764e3672472dd69081",
+ "clippy-" + RUST_VERSION + "-aarch64-apple-darwin.tar.gz": "d60f21c86a9cc769b5933f1599b597ff18e4f318ff950a2e9898135e7b5c6bc3",
+ "rustfmt-" + RUST_VERSION + "-aarch64-apple-darwin.tar.gz": "06237fa91d9b08a2362f3ad1df02f74d6859a9a745617390f31c10569a8d4112",
+ },
+ urls = [
+ # NOTE: `urls` are technically mirrors so we want to make sure we always try our own first then the official ones.
+ # We'll ensure that the ones we want to serve always come from us by the previous sha256s dictionary. Please ensure
+ # that the extensions on both of these are the same.
+ "https://github.com/bitdriftlabs/rust-std-mobile/releases/download/" + RUST_VERSION + "/{}.tar.gz",
+
+ # We need this because we only serve std for mobile archs but rustc, clippy, cargo, llvm-tools and even std for
+ # apple-darwin/linux are served from the official mirror.
+ "https://static.rust-lang.org/dist/{}.tar.gz",
+ ],
+ versions = [
+ RUST_VERSION,
+ ],
+)
+
+# This is necessary in order to cross compile for darwin x86_64 from aarch64, done in order to provide x86_64
+# dylibs in CI.
+rust_repository_set(
+ name = "rust_macos_x86_64_aarch64_tuple",
+ edition = "2021",
+ exec_triple = "aarch64-apple-darwin",
+ extra_target_triples = ["x86_64-apple-darwin"],
+ versions = [RUST_VERSION],
+)
+
+# This is necessary in order to cross compile for darwin aarch64 from x86_64, done in order to provide aarch64
+# dylibs in CI.
+rust_repository_set(
+ name = "rust_macos_aarch64_x86_64_tuple",
+ edition = "2021",
+ exec_triple = "x86_64-apple-darwin",
+ extra_target_triples = ["aarch64-apple-darwin"],
+ versions = [RUST_VERSION],
+)
+
+http_archive(
+ name = "rules_xcodeproj",
+ sha256 = "ccc719851a9942c53b9359984106e9fa5c5c97d9621b346243b638b18ec097f9",
+ url = "https://github.com/MobileNativeFoundation/rules_xcodeproj/releases/download/1.16.0/release.tar.gz",
+)
+
+load(
+ "@rules_xcodeproj//xcodeproj:repositories.bzl",
+ "xcodeproj_rules_dependencies",
+)
+
+xcodeproj_rules_dependencies()
+
+load("@bazel_features//:deps.bzl", "bazel_features_deps")
+
+bazel_features_deps()
+
+load(
+ "@build_bazel_rules_apple//apple:apple.bzl",
+ "provisioning_profile_repository",
+)
+
+provisioning_profile_repository(
+ name = "local_provisioning_profiles",
+)
+
+load("@rules_java//java:repositories.bzl", "rules_java_dependencies", "rules_java_toolchains")
+
+rules_java_dependencies()
+
+rules_java_toolchains()
+
+apple_support_dependencies()
+
+load(
+ "@build_bazel_rules_apple//apple:repositories.bzl",
+ "apple_rules_dependencies",
+)
+
+apple_rules_dependencies()
+
+RULES_ANDROID_VERSION = "0.1.2"
+
+RULES_ANDROID_NDK_SHA = "65aedff0cd728bee394f6fb8e65ba39c4c5efb11b29b766356922d4a74c623f5"
+
+http_archive(
+ name = "rules_android_ndk",
+ sha256 = RULES_ANDROID_NDK_SHA,
+ strip_prefix = "rules_android_ndk-%s" % RULES_ANDROID_VERSION,
+ url = "https://github.com/bazelbuild/rules_android_ndk/releases/download/v%s/rules_android_ndk-v%s.tar.gz" % (RULES_ANDROID_VERSION, RULES_ANDROID_VERSION),
+)
+
+load("//bazel/android:configure.bzl", "android_configure")
+
+android_configure(
+ name = "local_config_android",
+ build_tools_version = "34.0.0",
+ # This value is the minimum supported Android sdk version.
+ ndk_api_level = 21,
+ # This is the target SDK version.
+ sdk_api_level = 34,
+)
+
+load("@local_config_android//:android_configure.bzl", "android_workspace")
+
+android_workspace()
+
+load(
+ "//bazel:capture_repositories.bzl",
+ "capture_repositories",
+)
+
+capture_repositories()
+
+load(
+ "//bazel:capture_dependencies.bzl",
+ "jvm_dependencies",
+)
+
+jvm_dependencies()
+
+load(
+ "//bazel:capture_tool_dependencies.bzl",
+ "tool_dependencies",
+)
+
+tool_dependencies()
+
+load("@SwiftLint//bazel:repos.bzl", "swiftlint_repos")
+
+swiftlint_repos()
+
+load("@SwiftLint//bazel:deps.bzl", "swiftlint_deps")
+
+swiftlint_deps()
+
+### Kotlin
+load("@io_bazel_rules_kotlin//kotlin:repositories.bzl", "kotlin_repositories", "kotlinc_version")
+
+_KOTLIN_COMPILER_VERSION = "1.9.24"
+
+_KOTLIN_COMPILER_SHA = "eb7b68e01029fa67bc8d060ee54c12018f2c60ddc438cf21db14517229aa693b"
+
+kotlin_repositories(
+ compiler_release = kotlinc_version(
+ release = _KOTLIN_COMPILER_VERSION,
+ sha256 = _KOTLIN_COMPILER_SHA,
+ ),
+)
+
+register_toolchains("//:kotlin_toolchain")
+
+load("@rules_detekt//detekt:dependencies.bzl", "rules_detekt_dependencies")
+
+rules_detekt_dependencies()
+
+load("@rules_detekt//detekt:toolchains.bzl", "rules_detekt_toolchains")
+
+rules_detekt_toolchains()
+
+load("@rules_rust//tools/rust_analyzer:deps.bzl", "rust_analyzer_deps")
+
+rust_analyzer_deps()
+
+load("@bazel_tools//tools/build_defs/repo:git.bzl", "new_git_repository")
+
+new_git_repository(
+ name = "bitdrift_api",
+ branch = "main",
+ build_file = "//bazel:BUILD.bitdriftlabs_api",
+ remote = "https://github.com/bitdriftlabs/api.git",
+)
+
+_RULES_ANDROID_VERSION = "0.1.1"
+
+_RULES_ANDROID_SHA = "cd06d15dd8bb59926e4d65f9003bfc20f9da4b2519985c27e190cddc8b7a7806"
+
+http_archive(
+ name = "build_bazel_rules_android",
+ sha256 = _RULES_ANDROID_SHA,
+ strip_prefix = "rules_android-{}".format(_RULES_ANDROID_VERSION),
+ urls = [
+ "https://github.com/bazelbuild/rules_android/archive/v{}.zip".format(_RULES_ANDROID_VERSION),
+ ],
+)
+
+http_archive(
+ name = "robolectric",
+ sha256 = "ba1269064f5509531b024cdea70349e97756f0f639e53b7cbb0938127218d6f8",
+ strip_prefix = "robolectric-bazel-4.11",
+ urls = ["https://github.com/robolectric/robolectric-bazel/archive/4.11.tar.gz"],
+)
+
+load("@robolectric//bazel:robolectric.bzl", "robolectric_repositories")
+
+robolectric_repositories()
+
+load("@rules_rust//crate_universe:repositories.bzl", "crate_universe_dependencies")
+
+crate_universe_dependencies()
+
+load("@rules_rust//crate_universe:defs.bzl", "crate", "crates_repository")
+
+crates_repository(
+ name = "crate_index",
+ annotations = {
+ "bd-grpc": [
+ crate.annotation(
+ build_script_env = {"SKIP_PROTO_GEN": "1"},
+ ),
+ ],
+ "bd-pgv": [
+ crate.annotation(
+ build_script_env = {"SKIP_PROTO_GEN": "1"},
+ ),
+ ],
+ "bd-proto": [
+ crate.annotation(
+ build_script_env = {"SKIP_PROTO_GEN": "1"},
+ ),
+ ],
+ # A recent rustix update seems to have broken something here, so manually add in the crates we need to build under Bazel.
+ "linux-raw-sys": [
+ crate.annotation(
+ crate_features = [
+ "errno",
+ "std",
+ "general",
+ "ioctl",
+ ],
+ ),
+ ],
+ },
+ cargo_config = "//:Cargo.toml",
+ cargo_lockfile = "//:Cargo.lock",
+ # This trades the chance that the registry gets corrupted for speed when repinning.
+ isolated = False,
+ lockfile = "//:Cargo.Bazel.lock",
+ manifests = [
+ "//:Cargo.toml",
+ "//proto:Cargo.toml",
+ "//platform/jvm:Cargo.toml",
+ "//test/platform/jvm:Cargo.toml",
+ "//platform/shared:Cargo.toml",
+ "//platform/swift/source:Cargo.toml",
+ "//platform/test_helpers:Cargo.toml",
+ "//test/platform/pom_checker:Cargo.toml",
+ "//test/platform/swift/bridging:Cargo.toml",
+ "//test/benchmark:Cargo.toml",
+ ],
+)
+
+load(
+ "@crate_index//:defs.bzl",
+ cargo_remote_crate_repositories = "crate_repositories",
+)
+
+cargo_remote_crate_repositories()
+
+http_jar(
+ name = "bazel_diff",
+ sha256 = "9c4546623a8b9444c06370165ea79a897fcb9881573b18fa5c9ee5c8ba0867e2",
+ urls = [
+ "https://github.com/Tinder/bazel-diff/releases/download/4.3.0/bazel-diff_deploy.jar",
+ ],
+)
+
+http_archive(
+ name = "SwiftBenchmark",
+ build_file = "@//bazel/third_party:SwiftBenchmark.BUILD",
+ sha256 = "9c5bccfbddaeed7d3aa731118644655c0e550ab2267e1a3238ca0daa06ade0f9",
+ strip_prefix = "swift-benchmark-0.1.2",
+ urls = ["https://github.com/google/swift-benchmark/archive/0.1.2.tar.gz"],
+)
+
+http_archive(
+ name = "SwiftArgumentParser",
+ build_file = "@//bazel/third_party:SwiftArgumentParser.BUILD",
+ sha256 = "44782ba7180f924f72661b8f457c268929ccd20441eac17301f18eff3b91ce0c",
+ strip_prefix = "swift-argument-parser-1.2.2",
+ urls = ["https://github.com/apple/swift-argument-parser/archive/1.2.2.tar.gz"],
+)
+
+http_archive(
+ name = "Difference",
+ build_file = "@//bazel/third_party:Difference.BUILD",
+ sha256 = "3a8f2e1f0f347f512da60968dab6bafdafb0afb46c0d0876f23b3dcb7e0ec199",
+ strip_prefix = "Difference-1.0.2",
+ urls = ["https://github.com/krzysztofzablocki/Difference/archive/1.0.2.tar.gz"],
+)
diff --git a/bazel/BUILD b/bazel/BUILD
new file mode 100644
index 00000000..27a6eb93
--- /dev/null
+++ b/bazel/BUILD
@@ -0,0 +1,112 @@
+config_setting(
+ name = "dbg_build",
+ values = {"compilation_mode": "dbg"},
+)
+
+config_setting(
+ name = "opt_build",
+ values = {"compilation_mode": "opt"},
+)
+
+config_setting(
+ name = "linux",
+ constraint_values = [
+ "@platforms//os:linux",
+ ],
+ visibility = ["//visibility:public"],
+)
+
+alias(
+ name = "zipper",
+ actual = "@bazel_tools//tools/zip:zipper",
+ visibility = ["//visibility:public"],
+)
+
+exports_files([
+ "pom_template.xml",
+ "run_fuzzer.sh",
+ "test_fuzzer.sh",
+])
+
+config_setting(
+ name = "ios_device_build",
+ values = {
+ "cpu": "ios_arm64",
+ },
+)
+
+#==== Platform definitions that are used in the 'platform_mappings' file
+platform(
+ name = "android_aarch64",
+ constraint_values = [
+ "@platforms//cpu:aarch64",
+ "@platforms//os:android",
+ ],
+)
+
+platform(
+ name = "android_armeabi",
+ constraint_values = [
+ "@platforms//cpu:armv7",
+ "@platforms//os:android",
+ ],
+)
+
+platform(
+ name = "android_x86",
+ constraint_values = [
+ "@platforms//cpu:x86_32",
+ "@platforms//os:android",
+ ],
+)
+
+platform(
+ name = "android_x86_64",
+ constraint_values = [
+ "@platforms//cpu:x86_64",
+ "@platforms//os:android",
+ ],
+)
+
+platform(
+ name = "macos_x86_64",
+ constraint_values = [
+ "@platforms//cpu:x86_64",
+ "@platforms//os:macos",
+ ],
+)
+
+platform(
+ name = "macos_arm64",
+ constraint_values = [
+ "@platforms//cpu:arm64",
+ "@platforms//os:macos",
+ ],
+)
+
+platform(
+ name = "ios_x86_64",
+ constraint_values = [
+ "@platforms//cpu:x86_64",
+ "@platforms//os:ios",
+ "@build_bazel_apple_support//constraints:simulator",
+ ],
+)
+
+platform(
+ name = "ios_sim_arm64",
+ constraint_values = [
+ "@platforms//cpu:arm64",
+ "@platforms//os:ios",
+ "@build_bazel_apple_support//constraints:simulator",
+ ],
+)
+
+platform(
+ name = "ios_arm64",
+ constraint_values = [
+ "@platforms//cpu:arm64",
+ "@platforms//os:ios",
+ "@build_bazel_apple_support//constraints:device",
+ ],
+)
diff --git a/bazel/BUILD.bitdriftlabs_api b/bazel/BUILD.bitdriftlabs_api
new file mode 100644
index 00000000..7f69edb0
--- /dev/null
+++ b/bazel/BUILD.bitdriftlabs_api
@@ -0,0 +1,11 @@
+filegroup(
+ name = "all_protos",
+ srcs = glob(["**/*.proto"]),
+ visibility = ["//visibility:public"],
+)
+
+filegroup(
+ name = "all_fbs",
+ srcs = glob(["**/*.fbs"]),
+ visibility = ["//visibility:public"],
+)
diff --git a/bazel/BUILD.objcopy b/bazel/BUILD.objcopy
new file mode 100644
index 00000000..b5d4bf4f
--- /dev/null
+++ b/bazel/BUILD.objcopy
@@ -0,0 +1,5 @@
+sh_binary(
+ name = "objcopy",
+ srcs = ["llvm-objcopy"],
+ visibility = ["//visibility:public"],
+)
diff --git a/bazel/android/BUILD b/bazel/android/BUILD
new file mode 100644
index 00000000..4b32d3c0
--- /dev/null
+++ b/bazel/android/BUILD
@@ -0,0 +1,27 @@
+load("@rules_jvm_external//:defs.bzl", "artifact")
+load("//bazel/android:build.bzl", "bitdrift_kt_jvm_library")
+
+# Test suite used for all the jvm tests.
+bitdrift_kt_jvm_library(
+ name = "test_suite_lib",
+ srcs = ["TestSuite.kt"],
+ require_javadocs = False,
+ visibility = ["//visibility:public"],
+ deps = [
+ artifact("io.github.classgraph:classgraph"),
+ artifact("junit:junit"),
+ artifact("org.assertj:assertj-core"),
+ ],
+)
+
+config_setting(
+ name = "strip_symbols",
+ values = {"define": "android_strip_symbols=true"},
+)
+
+exports_files(
+ [
+ "detekt.yml",
+ "detekt_javadocs.yml",
+ ],
+)
diff --git a/bazel/android/TestSuite.kt b/bazel/android/TestSuite.kt
new file mode 100644
index 00000000..205dd38b
--- /dev/null
+++ b/bazel/android/TestSuite.kt
@@ -0,0 +1,40 @@
+// capture-sdk - bitdrift's client SDK
+// Copyright Bitdrift, Inc. All rights reserved.
+//
+// Use of this source code is governed by a source available license that can be found in the
+// LICENSE file or at:
+// https://polyformproject.org/wp-content/uploads/2020/06/PolyForm-Shield-1.0.0.txt
+
+@file:Suppress("InvalidPackageDeclaration")
+
+package io.bitdrift.capture
+
+import io.github.classgraph.ClassGraph
+import junit.framework.JUnit4TestAdapter
+import junit.framework.TestSuite
+import org.junit.runner.RunWith
+
+@RunWith(org.junit.runners.AllTests::class)
+object TestSuite {
+ private val junitTestAnnotation = org.junit.Test::class.java.name
+
+ @JvmStatic
+ fun suite(): TestSuite {
+ val suite = TestSuite()
+
+ val scan = ClassGraph()
+ .disableModuleScanning()
+ .enableAnnotationInfo()
+ .enableMethodInfo()
+ .ignoreClassVisibility()
+ .acceptPackages("io.bitdrift.capture")
+ .scan()
+ scan.getClassesWithMethodAnnotation(junitTestAnnotation)
+ .asSequence()
+ .sortedByDescending { it.name }
+ .map { JUnit4TestAdapter(it.loadClass()) }
+ .forEach(suite::addTest)
+
+ return suite
+ }
+}
diff --git a/bazel/android/artifacts.bzl b/bazel/android/artifacts.bzl
new file mode 100644
index 00000000..42ce292a
--- /dev/null
+++ b/bazel/android/artifacts.bzl
@@ -0,0 +1,317 @@
+"""Rules for creating an aar for distribution including native libraries"""
+# Copied from https://github.com/envoyproxy/envoy-mobile/blob/main/bazel/android_artifacts.bzl
+
+load("@build_bazel_rules_android//android:rules.bzl", "android_binary")
+load("@google_bazel_common//tools/maven:pom_file.bzl", "pom_file")
+load("@rules_cc//cc:defs.bzl", "cc_library")
+load("@rules_java//java:defs.bzl", "java_binary")
+load("//bazel/android:dokka.bzl", "sources_javadocs")
+
+# This file is based on https://github.com/aj-michael/aar_with_jni which is
+# subject to the following copyright and license:
+#
+# MIT License
+#
+# Copyright (c) 2019 Adam Michael
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in all
+# copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+def android_artifacts(name, android_library, manifest, archive_name, native_deps = [], proguard_rules = "", visibility = [], excluded_artifacts = []):
+ """Create an aar including a native library
+
+ NOTE: The bazel android_library's implicit aar output doesn't flatten its transitive
+ dependencies. Additionally, when using the kotlin rules, the kt_android_library rule
+ creates a few underlying libraries which makes the declared sources and dependencies
+ a transitive dependency on the resulting android_library. The result of this is that
+ the classes.jar in the resulting aar will be empty. In order to workaround this issue,
+ this rule manually constructs the aar.
+
+
+ This macro exposes two gen rules:
+ 1. `{name}` which outputs the aar, sources.jar, javadoc.jar.
+ 2. `{name}_aar_only` which outputs the aar.
+
+ Args:
+ name: The name of the underlying gen rule.
+ android_library: The android library target.
+ manifest: The android manifest to include in the aar
+ archive_name: The basename of the output aar
+ native_deps: The native dependency targets.
+ proguard_rules: The proguard rules used for the aar.
+ visibility: The visibility of the underlying gen rule.
+ excluded_artifacts: The dependencies to avoid adding to the .pom xml even if they appear as a transitive dependency.
+ """
+
+ # Create the aar
+ classes_jar = _create_classes_jar(name, manifest, android_library)
+ jni_archive = _create_jni_library(name, native_deps)
+ aar_output = _create_aar(name, classes_jar, jni_archive, proguard_rules, manifest, visibility)
+
+ native.filegroup(
+ name = name + "_objdump_collector",
+ srcs = native_deps,
+ output_group = "objdump",
+ visibility = ["//visibility:public"],
+ )
+
+ # Generate other needed files for a maven publish
+ sources_name, javadocs_name = _create_sources_javadocs(name, android_library)
+ pom_name = _create_pom_xml(name, android_library, visibility, excluded_artifacts)
+ native.genrule(
+ name = name + "_with_artifacts",
+ srcs = [
+ aar_output,
+ pom_name,
+ sources_name + "_deploy-src.jar",
+ javadocs_name,
+ ],
+ outs = [
+ archive_name + ".aar",
+ archive_name + ".pom",
+ archive_name + "-sources.jar",
+ archive_name + "-javadoc.jar",
+ ],
+ visibility = visibility,
+ cmd = """
+ # Set source variables
+ set -- $(SRCS)
+ src_aar=$$1
+ src_pom_xml=$$2
+ src_sources_jar=$$3
+ src_javadocs=$$4
+
+ # Set output variables
+ set -- $(OUTS)
+ out_aar=$$1
+ out_pom_xml=$$2
+ out_sources_jar=$$3
+ out_javadocs=$$4
+
+ echo "Outputting .pom xml, sources.jar, and javadocs.jar..."
+ cp $$src_aar $$out_aar
+ cp $$src_pom_xml $$out_pom_xml
+ cp $$src_sources_jar $$out_sources_jar
+ cp $$src_javadocs $$out_javadocs
+ echo "Finished!"
+ """,
+ )
+
+def _create_aar(name, classes_jar, jni_archive, proguard_rules, manifest, visibility):
+ """This macro rule manually creates an aar artifact.
+
+ The underlying gen rule does the following:
+ 1. Create the final aar manifest file.
+ 2. Unzips the apk file generated by the `jni_archive_name` into a temporary directory.
+ 3. Renames the `lib` directory to `jni` directory since the aar requires the so files
+ to be in the `jni` directory.
+ 4. Copy the android binary `jar` output from the `android_binary_name` as `classes.jar`.
+ 5. Copy the proguard rules specified in the macro parameters.
+ 6. Override the apk's aar with a generated one.
+ 7. Zip everything in the temporary directory into the output.
+
+ Args:
+ name: Name of the aar generation rule.
+ classes_jar: The classes.jar file which contains all the kotlin/java classes.
+ jni_archive: The apk with the desired jni libraries.
+ proguard_rules: The proguard.txt file.
+ manifest: the Androidmanifest.xml to bundle with the aar
+ visibility: The bazel visibility for the underlying rule.
+ """
+ aar_output = name + "_local.aar"
+
+ native.genrule(
+ name = name,
+ outs = [aar_output],
+ srcs = [
+ classes_jar,
+ jni_archive,
+ manifest,
+ proguard_rules,
+ ],
+ cmd = """
+ # Set source variables
+ set -- $(SRCS)
+ src_classes_jar=$$1
+ src_jni_archive_apk=$$2
+ src_manifest_xml=$$3
+ src_proguard_txt=$$4
+
+ original_directory=$$PWD
+
+ echo "Constructing aar..."
+ final_dir=$$(mktemp -d)
+ cp $$src_classes_jar $$final_dir/classes.jar
+ cd $$final_dir
+ unzip $$original_directory/$$src_jni_archive_apk > /dev/null
+ if [[ -d lib ]]; then
+ mv lib jni
+ else
+ echo "No jni directory found"
+ fi
+ cp $$original_directory/$$src_proguard_txt ./proguard.txt
+ cp $$original_directory/$$src_manifest_xml AndroidManifest.xml
+ zip -r tmp.aar * > /dev/null
+ cp tmp.aar $$original_directory/$@
+ """,
+ visibility = visibility,
+ )
+
+ return aar_output
+
+def _create_jni_library(name, native_deps = []):
+ """Creates an apk containing the jni so files.
+
+ Args:
+ name: The name of the top level macro.
+ native_deps: The list of native dependency targets.
+ """
+ cc_lib_name = name + "_jni_interface_lib"
+ jni_archive_name = name + "_jni"
+
+ # Create a dummy manifest file for our android_binary
+ native.genrule(
+ name = name + "_binary_manifest_generator",
+ outs = [name + "_generated_AndroidManifest.xml"],
+ cmd = """cat > $(OUTS) < /dev/null
+ zip -r classes.jar * > /dev/null
+ popd
+ cp $$classes_dir/classes.jar $@
+ """,
+ )
+
+ return name + "_classes.jar"
+
+def _create_pom_xml(name, android_library, visibility, excluded_artifacts):
+ """Creates a pom xml associated with the android_library target.
+
+ Args:
+ name: The name of the top level macro.
+ android_library: The android library to generate a pom xml for.
+ visibility: The bazel visibility for the underlying rule.
+ """
+ pom_name = name + "_pom_xml"
+
+ # This is for the pom xml. It has a public visibility since this can be accessed in the root BUILD file
+ pom_file(
+ name = pom_name,
+ targets = [android_library],
+ visibility = visibility,
+ template_file = "//bazel:pom_template.xml",
+ excluded_artifacts = excluded_artifacts,
+ )
+
+ return pom_name
+
+def _create_sources_javadocs(name, android_library):
+ """Creates the sources.jar and javadocs.jar for the provided android library.
+
+ This rule generates a sources jar first using a proxy java_binary's result and then uses
+ kotlin/dokka's CLI tool to generate javadocs from the sources.jar.
+
+ Args:
+ name: The name of the top level macro.
+ android_library: The android library which to extract the sources and javadocs.
+ """
+ sources_name = name + "_android_sources_jar"
+ javadocs_name = name + "_android_javadocs"
+
+ # This implicitly outputs {name}_deploy-src.jar which is the sources jar
+ java_binary(
+ name = sources_name,
+ runtime_deps = [android_library],
+ main_class = "Capture",
+ )
+
+ # This takes all the source files from the source jar and creates a javadoc.jar from it
+ sources_javadocs(
+ name = javadocs_name,
+ sources_jar = sources_name + "_deploy-src.jar",
+ )
+
+ return sources_name, javadocs_name
+
+def _manifest(package_name):
+ """Helper function to create an appropriate manifest with a provided package name.
+
+ Args:
+ package_name: The package name used in the manifest file.
+ """
+ return """
+
+
+
+
+""".format(package_name)
diff --git a/bazel/android/build.bzl b/bazel/android/build.bzl
new file mode 100644
index 00000000..4d84287d
--- /dev/null
+++ b/bazel/android/build.bzl
@@ -0,0 +1,86 @@
+load(
+ "@io_bazel_rules_kotlin//kotlin:android.bzl",
+ "kt_android_library",
+ "kt_android_local_test",
+)
+load("@io_bazel_rules_kotlin//kotlin:jvm.bzl", "kt_jvm_library")
+load("@io_bazel_rules_kotlin//kotlin:lint.bzl", "ktlint_fix", "ktlint_test")
+load("@rules_detekt//detekt:defs.bzl", "detekt")
+
+# Configures a kt_android_library with lint targets.
+def bitdrift_kt_android_library(name, srcs, require_javadocs = True, **args):
+ kt_android_library(
+ name = name,
+ srcs = srcs,
+ **args
+ )
+
+ _jvm_lint_support(name, srcs, require_javadocs)
+
+def bitdrift_kt_jvm_library(name, srcs, require_javadocs = True, **args):
+ kt_jvm_library(
+ name = name,
+ srcs = srcs,
+ **args
+ )
+
+ _jvm_lint_support(name, srcs, require_javadocs)
+
+def bitdrift_kt_android_local_test(name, deps = [], jvm_flags = [], **kwargs):
+ lib_deps = native.glob(["src/test/**/*.kt"], exclude = ["src/test/**/*Test.kt"])
+
+ if len(lib_deps) != 0:
+ # We want the tests below to be able to depend on non-test files defined within this package,
+ # so generate a lib target containing everything that doesn't look like a test and depend on that.
+ # This means we get no cross-test file dependency, but test files depend on non-test files.
+ kt_android_library(
+ name = "_{}_lib".format(name),
+ srcs = native.glob(["src/test/**/*.kt"], exclude = ["**/*Test.kt"]),
+ deps = deps,
+ )
+
+ deps = [":_{}_lib".format(name)]
+
+ # Robolectric does some class loader magic which doesn't work well with loading a static
+ # library. To get around this, we create one test target per source file to avoid multiple
+ # class loaders being used. An alternative to this that we might consider is to avoid loading
+ # the dynamic library in each test and instead delegate that to the test runner which can
+ # hopefully ensure that the load happens exactly once.
+ for s in native.glob(["src/test/**/*Test.kt"]):
+ kt_android_local_test(
+ name = "_{}_test".format(s),
+ custom_package = "io.bitdrift.capture",
+ test_class = "io.bitdrift.capture.TestSuite",
+ deps = deps + ["//bazel/android:test_suite_lib"],
+ manifest = "//platform/jvm:AndroidManifest.xml",
+ jvm_flags = jvm_flags + ["-Dcapture_api_url=https://localhost:1234"],
+ srcs = [s],
+ **kwargs
+ )
+
+ _jvm_lint_support(name, native.glob(["src/test/**/*.kt"]), False)
+
+# Configures ktlint and detekt for the provided sources.
+def _jvm_lint_support(name, srcs, require_javadocs):
+ ktlint_fix(
+ name = "_{}_ktlint_fix".format(name),
+ srcs = srcs,
+ )
+
+ ktlint_test(
+ name = "_{}_ktlint_test".format(name),
+ srcs = srcs,
+ )
+
+ cfgs = ["//bazel/android:detekt.yml"]
+
+ if require_javadocs:
+ cfgs.append("//bazel/android:detekt_javadocs.yml")
+
+ detekt(
+ name = name + "_detekt_lint",
+ srcs = srcs,
+ tags = ["detekt_target"],
+ build_upon_default_config = True,
+ cfgs = cfgs,
+ )
diff --git a/bazel/android/configure.bzl b/bazel/android/configure.bzl
new file mode 100644
index 00000000..979c3114
--- /dev/null
+++ b/bazel/android/configure.bzl
@@ -0,0 +1,56 @@
+_ANDROID_NDK_HOME = "ANDROID_NDK_HOME"
+_ANDROID_SDK_HOME = "ANDROID_HOME"
+
+def _android_autoconf_impl(repository_ctx):
+ sdk_home = repository_ctx.os.environ.get(_ANDROID_SDK_HOME)
+ ndk_home = repository_ctx.os.environ.get(_ANDROID_NDK_HOME)
+
+ sdk_api_level = repository_ctx.attr.sdk_api_level
+ ndk_api_level = repository_ctx.attr.ndk_api_level
+ build_tools_version = repository_ctx.attr.build_tools_version
+
+ sdk_rule = ""
+ if sdk_home:
+ sdk_rule = """
+ native.android_sdk_repository(
+ name="androidsdk",
+ path="{}",
+ api_level={},
+ build_tools_version="{}",
+ )
+""".format(sdk_home, sdk_api_level, build_tools_version)
+
+ ndk_rule = ""
+ if ndk_home:
+ ndk_rule = """
+ android_ndk_repository(
+ name="androidndk",
+ path="{}",
+ api_level={},
+ )
+""".format(ndk_home, ndk_api_level)
+
+ if ndk_rule == "" and sdk_rule == "":
+ sdk_rule = "pass"
+
+ repository_ctx.file("BUILD.bazel", "")
+ repository_ctx.file("android_configure.bzl", """
+load("@rules_android_ndk//:rules.bzl", "android_ndk_repository")
+
+def android_workspace():
+ {}
+ {}
+ """.format(sdk_rule, ndk_rule))
+
+android_configure = repository_rule(
+ implementation = _android_autoconf_impl,
+ environ = [
+ _ANDROID_NDK_HOME,
+ _ANDROID_SDK_HOME,
+ ],
+ attrs = {
+ "build_tools_version": attr.string(mandatory = True),
+ "ndk_api_level": attr.int(mandatory = True),
+ "sdk_api_level": attr.int(mandatory = True),
+ },
+)
diff --git a/bazel/android/detekt.yml b/bazel/android/detekt.yml
new file mode 100644
index 00000000..39e5f7ed
--- /dev/null
+++ b/bazel/android/detekt.yml
@@ -0,0 +1,14 @@
+complexity:
+ active: false
+style:
+ MaxLineLength:
+ maxLineLength: 140
+ ReturnCount:
+ active: false
+ MagicNumber:
+ active: false
+ ForbiddenComment:
+ active: false
+exceptions:
+ TooGenericExceptionCaught:
+ active: false
diff --git a/bazel/android/detekt_javadocs.yml b/bazel/android/detekt_javadocs.yml
new file mode 100644
index 00000000..fe775c03
--- /dev/null
+++ b/bazel/android/detekt_javadocs.yml
@@ -0,0 +1,7 @@
+comments:
+ UndocumentedPublicProperty:
+ active: true
+ UndocumentedPublicFunction:
+ active: true
+ UndocumentedPublicClass:
+ active: true
diff --git a/bazel/android/dokka.bzl b/bazel/android/dokka.bzl
new file mode 100644
index 00000000..d757ab1b
--- /dev/null
+++ b/bazel/android/dokka.bzl
@@ -0,0 +1,94 @@
+def _sources_javadocs_impl(ctx):
+ javabase = ctx.attr._javabase[java_common.JavaRuntimeInfo]
+ plugins_classpath = ";".join([
+ ctx.file._dokka_analysis_kotlin_descriptors_jar.path,
+ ctx.file._dokka_base_jar.path,
+ ctx.file._freemarker_jar.path,
+ ctx.file._kotlinx_html_jar.path,
+ ])
+ output_jar = ctx.actions.declare_file("{}.jar".format(ctx.attr.name))
+
+ ctx.actions.run_shell(
+ command = """
+ set -euxo pipefail # Added -x for printing commands
+
+ java=$1
+ dokka_cli_jar=$2
+ plugin_classpath=$3
+ sources_jar=$4
+ output_jar=$5
+
+ sources_dir=$(mktemp -d)
+ tmp_dir=$(mktemp -d)
+ trap 'rm -rf "$sources_dir" "$tmp_dir"' EXIT
+
+ unzip $sources_jar -d $sources_dir > /dev/null
+
+ $java \
+ -jar $dokka_cli_jar \
+ -pluginsClasspath $plugin_classpath \
+ -moduleName "Capture" \
+ -sourceSet "-src $sources_dir -noStdlibLink -noJdkLink" \
+ -outputDir $tmp_dir > /dev/null \
+ -pluginsConfiguration "org.jetbrains.dokka.base.DokkaBase={\\"footerMessage\\": \\"© 2023 Bitdrift, Inc.\\", \\"separateInheritedMembers\\": true}"
+
+ original_directory=$PWD
+ cd $tmp_dir
+ zip -r $original_directory/$output_jar . > /dev/null
+ """,
+ arguments = [
+ javabase.java_executable_exec_path,
+ ctx.file._dokka_cli_jar.path,
+ plugins_classpath,
+ ctx.file.sources_jar.path,
+ output_jar.path,
+ ],
+ inputs = [
+ ctx.file._dokka_analysis_kotlin_descriptors_jar,
+ ctx.file._dokka_base_jar,
+ ctx.file._dokka_cli_jar,
+ ctx.file._freemarker_jar,
+ ctx.file._kotlinx_html_jar,
+ ctx.file.sources_jar,
+ ] + ctx.files._javabase,
+ outputs = [output_jar],
+ mnemonic = "BitdriftDokka",
+ progress_message = "Generating javadocs...",
+ )
+
+ return [
+ DefaultInfo(files = depset([output_jar])),
+ ]
+
+sources_javadocs = rule(
+ implementation = _sources_javadocs_impl,
+ attrs = {
+ "sources_jar": attr.label(allow_single_file = True),
+ "_dokka_analysis_kotlin_descriptors_jar": attr.label(
+ default = "@maven//:org_jetbrains_dokka_analysis_kotlin_descriptors",
+ allow_single_file = True,
+ ),
+ "_dokka_base_jar": attr.label(
+ default = "@maven//:org_jetbrains_dokka_dokka_base",
+ allow_single_file = True,
+ ),
+ "_dokka_cli_jar": attr.label(
+ default = "@maven//:org_jetbrains_dokka_dokka_cli",
+ allow_single_file = True,
+ ),
+ "_freemarker_jar": attr.label(
+ default = "@maven//:org_freemarker_freemarker",
+ allow_single_file = True,
+ ),
+ # Java Runtime is required
+ "_javabase": attr.label(
+ default = Label("@bazel_tools//tools/jdk:current_java_runtime"),
+ allow_files = True,
+ providers = [java_common.JavaRuntimeInfo],
+ ),
+ "_kotlinx_html_jar": attr.label(
+ default = "@maven//:org_jetbrains_kotlinx_kotlinx_html_jvm",
+ allow_single_file = True,
+ ),
+ },
+)
diff --git a/bazel/android_debug_info.bzl b/bazel/android_debug_info.bzl
new file mode 100644
index 00000000..30a44678
--- /dev/null
+++ b/bazel/android_debug_info.bzl
@@ -0,0 +1,63 @@
+"""
+Rule to create objdump debug info from a native dynamic library built for
+Android.
+
+This is a workaround for generally not being able to produce dwp files for
+Android https://github.com/bazelbuild/bazel/pull/14765
+
+But even if we could create those we'd need to get them out of the build
+somehow, this rule provides a separate --output_group for this
+"""
+
+def _impl(ctx):
+ library_outputs = []
+ objdump_outputs = []
+ for platform, dep in ctx.split_attr.dep.items():
+ # When --fat_apk_cpu isn't set, the platform is None
+ if len(dep.files.to_list()) != 1:
+ fail("Expected exactly one file in the library")
+
+ cc_toolchain = ctx.split_attr._cc_toolchain[platform][cc_common.CcToolchainInfo]
+ lib = dep.files.to_list()[0]
+ platform_name = platform or ctx.fragments.android.android_cpu
+ objdump_output = ctx.actions.declare_file(platform_name + "/" + platform_name + ".objdump.gz")
+
+ ctx.actions.run_shell(
+ inputs = [lib],
+ outputs = [objdump_output],
+ command = cc_toolchain.objdump_executable + " --syms " + lib.path + "| gzip -c >" + objdump_output.path,
+ tools = [cc_toolchain.all_files],
+ progress_message = "Generating symbol map " + platform_name,
+ )
+
+ strip_output = ctx.actions.declare_file(platform_name + "/" + lib.basename)
+ ctx.actions.run_shell(
+ inputs = [lib],
+ outputs = [strip_output],
+ command = cc_toolchain.strip_executable + " --strip-all " + lib.path + " -o " + strip_output.path,
+ tools = [cc_toolchain.all_files],
+ progress_message = "Stripping library " + lib.path,
+ )
+
+ library_outputs.append(strip_output)
+ objdump_outputs.append(objdump_output)
+
+ return [
+ DefaultInfo(files = depset(library_outputs)),
+ OutputGroupInfo(objdump = objdump_outputs),
+ ]
+
+android_debug_info = rule(
+ implementation = _impl,
+ attrs = dict(
+ dep = attr.label(
+ providers = [CcInfo],
+ cfg = android_common.multi_cpu_configuration,
+ ),
+ _cc_toolchain = attr.label(
+ default = Label("@bazel_tools//tools/cpp:current_cc_toolchain"),
+ cfg = android_common.multi_cpu_configuration,
+ ),
+ ),
+ fragments = ["cpp", "android"],
+)
diff --git a/bazel/bitdrift_build_system.bzl b/bazel/bitdrift_build_system.bzl
new file mode 100644
index 00000000..636a8e8a
--- /dev/null
+++ b/bazel/bitdrift_build_system.bzl
@@ -0,0 +1,144 @@
+load("@crate_index//:defs.bzl", "aliases", "all_crate_deps")
+load("@rules_rust//rust:defs.bzl", "rust_binary", "rust_clippy", "rust_library", "rust_test")
+
+def bitdrift_rust_binary(name, srcs = None, deps = [], proc_macro_deps = [], **args):
+ rust_binary(
+ name = name,
+ srcs = srcs if srcs else native.glob(["src/**/*.rs"]),
+ deps = all_crate_deps(normal = True) + deps,
+ proc_macro_deps = all_crate_deps(proc_macro = True) + proc_macro_deps,
+ aliases = aliases(),
+ edition = "2021",
+ rustc_flags = _rustc_flags(),
+ **args
+ )
+
+ rust_clippy(
+ name = "_{}_rust_clippy".format(name),
+ testonly = True,
+ deps = [
+ name,
+ ],
+ tags = [
+ "manual",
+ ],
+ )
+
+def bitdrift_rust_test(name, deps = [], proc_macro_deps = [], **args):
+ rust_test(
+ name = name,
+ rustc_flags = _rustc_flags(),
+ edition = "2021",
+ deps = all_crate_deps(normal = True, normal_dev = True) + deps,
+ proc_macro_deps = all_crate_deps(proc_macro = True, proc_macro_dev = True) + proc_macro_deps,
+ aliases = aliases(),
+ **args
+ )
+
+def bitdrift_rust_integration_test(name, **args):
+ bitdrift_rust_library(
+ name = name,
+ srcs = native.glob(["tests/**/*.rs"]),
+ crate_root = "tests/{}.rs".format(name),
+ testonly = True,
+ **args
+ )
+
+def bitdrift_rust_library_only(name, srcs, deps = []):
+ rust_library(
+ name = name,
+ srcs = srcs,
+ deps = [
+ # This dependency is required in order to allow clang to link the final binaries. Normally rustc would inject this.
+ "//core:alloc",
+ ] + deps + all_crate_deps(normal = True),
+ proc_macro_deps = all_crate_deps(
+ proc_macro = True,
+ ),
+ disable_pipelining = True,
+ aliases = aliases(),
+ rustc_flags = _rustc_flags(),
+ edition = "2021",
+ )
+
+def bitdrift_rust_library(name, srcs = None, deps = [], test_deps = [], tags = [], data = [], extra_aliases = {}, **args):
+ rust_library(
+ name = name,
+ deps = [
+ # This dependency is required in order to allow clang to link the final binaries. Normally rustc would inject this.
+ "//core:alloc",
+ ] + deps + all_crate_deps(normal = True),
+ srcs = srcs if srcs else native.glob(["src/**/*.rs"]),
+ proc_macro_deps = all_crate_deps(
+ proc_macro = True,
+ ),
+ disable_pipelining = True,
+ aliases = dict(extra_aliases.items() + aliases().items()),
+ rustc_flags = _rustc_flags(),
+ edition = "2021",
+ tags = tags,
+ data = data,
+ **args
+ )
+
+ rust_test(
+ name = "{}_test".format(name),
+ crate = name,
+ tags = tags,
+ rustc_flags = _rustc_flags(),
+ aliases = dict(extra_aliases.items() + aliases(
+ normal_dev = True,
+ proc_macro_dev = True,
+ ).items()),
+ data = data,
+ deps = all_crate_deps(
+ normal_dev = True,
+ ) + test_deps,
+ proc_macro_deps = all_crate_deps(
+ proc_macro_dev = True,
+ ),
+ edition = "2021",
+ )
+
+ rust_clippy(
+ name = "_{}_rust_clippy".format(name),
+ testonly = True,
+ deps = [
+ name,
+ ],
+ tags = [
+ "manual",
+ ],
+ )
+
+def _rustc_flags():
+ return [
+ "-Dwarnings",
+ "-Dfuture-incompatible",
+ "-Dnonstandard-style",
+ "-Drust-2018-compatibility",
+ "-Drust-2018-idioms",
+ "-Drust-2021-compatibility",
+ "-Dunused",
+ "-Dclippy::all",
+ "-Dclippy::correctness",
+ "-Dclippy::suspicious",
+ "-Dclippy::style",
+ "-Dclippy::complexity",
+ "-Dclippy::perf",
+ "-Dclippy::pedantic",
+ "-Dclippy::nursery",
+ "-Aclippy::future-not-send",
+ "-Aclippy::missing-errors-doc",
+ "-Aclippy::missing-panics-doc",
+ "-Aclippy::similar-names",
+ "-Aclippy::too-many-arguments",
+ "-Aclippy::too-many-lines",
+ "-Aclippy::unused-async",
+ "-Arust-2021-incompatible-closure-captures",
+
+ # Appears spurious on 1.62. Try to remove later.
+ "-Aclippy::redundant-pub-crate",
+ "-Aclippy::significant-drop-tightening",
+ "-Aclippy::significant-drop-in-scrutinee",
+ ]
diff --git a/bazel/bitdrift_swift_test.bzl b/bazel/bitdrift_swift_test.bzl
new file mode 100644
index 00000000..1a63f5a5
--- /dev/null
+++ b/bazel/bitdrift_swift_test.bzl
@@ -0,0 +1,60 @@
+load("@build_bazel_rules_apple//apple:ios.bzl", "ios_unit_test")
+load("@build_bazel_rules_swift//swift:swift.bzl", "swift_library")
+load("@rules_cc//cc:defs.bzl", "objc_library")
+load("//bazel:config.bzl", "MINIMUM_IOS_VERSION_TESTS")
+
+# Macro providing a way to easily/consistently define Swift unit test targets.
+#
+# - Prevents consumers from having to define both swift_library and ios_unit_test targets
+# - Provides a set of linker options that is required to properly run tests
+# - Sets default visibility and OS requirements
+#
+def bitdrift_mobile_swift_test(name, srcs, data = [], deps = [], tags = [], use_test_host = False, repository = "", visibility = []):
+ test_lib_name = name + "_lib"
+ swift_library(
+ name = test_lib_name,
+ srcs = srcs,
+ data = data,
+ deps = deps,
+ linkopts = ["-lresolv.9"],
+ testonly = True,
+ visibility = ["//visibility:private"],
+ tags = ["manual"],
+ )
+
+ test_host = None
+ if use_test_host:
+ test_host = "//test/platform/swift/test_host:TestHost"
+
+ ios_unit_test(
+ name = name,
+ data = data,
+ deps = [test_lib_name],
+ minimum_os_version = MINIMUM_IOS_VERSION_TESTS,
+ timeout = "long",
+ tags = tags + [
+ "no-cache",
+ "no-remote",
+ ],
+ test_host = test_host,
+ visibility = visibility,
+ )
+
+def bitdrift_mobile_objc_test(name, srcs, data = [], deps = [], tags = [], visibility = []):
+ test_lib_name = name + "_lib"
+ objc_library(
+ name = test_lib_name,
+ srcs = srcs,
+ data = data,
+ deps = deps,
+ visibility = ["//visibility:private"],
+ )
+
+ ios_unit_test(
+ name = name,
+ data = data,
+ deps = [test_lib_name],
+ minimum_os_version = MINIMUM_IOS_VERSION_TESTS,
+ tags = tags,
+ visibility = visibility,
+ )
diff --git a/bazel/capture_dependencies.bzl b/bazel/capture_dependencies.bzl
new file mode 100644
index 00000000..c1b0444e
--- /dev/null
+++ b/bazel/capture_dependencies.bzl
@@ -0,0 +1,49 @@
+load("@rules_jvm_external//:defs.bzl", "maven_install")
+
+def jvm_dependencies():
+ okhttp_version = "4.12.0"
+ lifecycle_version = "2.6.1"
+ compose_version = "1.4.0"
+ kotlin_compile_version = "1.9.24"
+
+ maven_install(
+ artifacts = [
+ "com.google.code.findbugs:jsr305:3.0.2",
+ # Dokka (javadocs generator)
+ "org.jetbrains.dokka:analysis-kotlin-descriptors:1.9.10",
+ "org.jetbrains.dokka:dokka-base:1.9.10",
+ "org.jetbrains.dokka:dokka-cli:1.9.10",
+ # Test artifacts
+ "org.mockito:mockito-core:4.11.0",
+ "org.mockito:mockito-inline:4.11.0",
+ "com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0",
+ "androidx.test:core:1.6.0",
+ "org.robolectric:robolectric:4.11",
+ "org.assertj:assertj-core:3.22.0",
+ "com.squareup.okhttp3:mockwebserver:{}".format(okhttp_version),
+ "junit:junit:4.13.2",
+ "io.github.classgraph:classgraph:4.8.146",
+ # Library dependencies
+ "com.michael-bull.kotlin-result:kotlin-result-jvm:1.1.18",
+ "com.google.code.gson:gson:2.10.1",
+ "com.squareup.okhttp3:okhttp:{}".format(okhttp_version),
+ "androidx.startup:startup-runtime:1.1.1",
+ "androidx.core:core:1.9.0",
+ "net.bytebuddy:byte-buddy:1.12.19",
+ "com.google.guava:listenablefuture:1.0", #required by androidx.lifecycle:lifecycle-process below
+ "androidx.lifecycle:lifecycle-common:{}".format(lifecycle_version),
+ "androidx.lifecycle:lifecycle-process:{}".format(lifecycle_version),
+ "org.jetbrains.kotlin:kotlin-stdlib:{}".format(kotlin_compile_version),
+ "androidx.appcompat:appcompat:1.5.1",
+ "androidx.activity:activity-compose:1.8.0",
+ "androidx.compose.material:material:{}".format(compose_version),
+ "androidx.compose.ui:ui:{}".format(compose_version),
+ "androidx.compose.compiler:compiler:1.5.14",
+ "androidx.emoji2:emoji2:1.2.0",
+ ],
+ version_conflict_policy = "pinned",
+ repositories = [
+ "https://repo1.maven.org/maven2",
+ "https://maven.google.com",
+ ],
+ )
diff --git a/bazel/capture_repositories.bzl b/bazel/capture_repositories.bzl
new file mode 100644
index 00000000..18777a42
--- /dev/null
+++ b/bazel/capture_repositories.bzl
@@ -0,0 +1,38 @@
+load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
+
+def capture_repositories():
+ http_archive(
+ name = "google_bazel_common",
+ sha256 = "d8c9586b24ce4a5513d972668f94b62eb7d705b92405d4bc102131f294751f1d",
+ strip_prefix = "bazel-common-413b433b91f26dbe39cdbc20f742ad6555dd1e27",
+ urls = ["https://github.com/google/bazel-common/archive/413b433b91f26dbe39cdbc20f742ad6555dd1e27.zip"],
+ )
+
+ http_archive(
+ name = "com_github_google_flatbuffers",
+ strip_prefix = "flatbuffers-22.9.29",
+ sha256 = "89df9e247521f2b8c2d85cd0a5ab79cc9f34de6edf7fd69f91887b4426ebc46c",
+ urls = ["https://github.com/google/flatbuffers/archive/refs/tags/v22.9.29.zip"],
+ )
+
+ http_archive(
+ name = "rules_jvm_external",
+ sha256 = "cd1a77b7b02e8e008439ca76fd34f5b07aecb8c752961f9640dea15e9e5ba1ca",
+ strip_prefix = "rules_jvm_external-4.2",
+ url = "https://github.com/bazelbuild/rules_jvm_external/archive/4.2.zip",
+ )
+
+ rules_detekt_version = "0.8.1.2"
+ rules_detekt_sha = "a5ae68f2487568d2c4145a8fc45da096edaaaed46487fb3d108ffe24b31d99da"
+ http_archive(
+ name = "rules_detekt",
+ sha256 = rules_detekt_sha,
+ strip_prefix = "bazel_rules_detekt-{v}".format(v = rules_detekt_version),
+ url = "https://github.com/buildfoundation/bazel_rules_detekt/releases/download/v{v}/bazel_rules_detekt-v{v}.tar.gz".format(v = rules_detekt_version),
+ )
+
+ http_archive(
+ name = "io_bazel_rules_kotlin",
+ urls = ["https://github.com/bazelbuild/rules_kotlin/releases/download/v1.9.5/rules_kotlin-v1.9.5.tar.gz"],
+ sha256 = "34e8c0351764b71d78f76c8746e98063979ce08dcf1a91666f3f3bc2949a533d",
+ )
diff --git a/bazel/capture_tool_dependencies.bzl b/bazel/capture_tool_dependencies.bzl
new file mode 100644
index 00000000..5c0481f3
--- /dev/null
+++ b/bazel/capture_tool_dependencies.bzl
@@ -0,0 +1,65 @@
+load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
+
+def tool_dependencies():
+ http_archive(
+ name = "rules_multirun",
+ sha256 = "9ced12fb88f793c2f0a8c19f498485c4a95c22c91bb51fc4ec6812d41fc3331d",
+ strip_prefix = "rules_multirun-0.6.0",
+ url = "https://github.com/keith/rules_multirun/archive/refs/tags/0.6.0.tar.gz",
+ )
+
+ http_archive(
+ name = "DrString",
+ build_file_content = """exports_files(["drstring"])""",
+ sha256 = "860788450cf9900613454a51276366ea324d5bfe71d1844106e9c1f1d7dfd82b",
+ url = "https://github.com/dduan/DrString/releases/download/0.5.2/drstring-x86_64-apple-darwin.tar.gz",
+ )
+
+ http_archive(
+ name = "DrString_Linux",
+ build_file_content = """
+load("@bazel_skylib//rules:native_binary.bzl", "native_binary")
+
+native_binary(
+ name = "DrString_Linux",
+ src = "usr/bin/drstring",
+ out = "usr/bin/drstring",
+ data = glob(["usr/lib/*.so"]),
+ visibility = ["//visibility:public"],
+)
+ """,
+ sha256 = "4589cfa00cebb31882ef4e51b2738e9974a51dc037b6a491ed25b0a120a415be",
+ url = "https://github.com/dduan/DrString/releases/download/0.5.2/drstring-x86_64-unknown-ubuntu.tar.gz",
+ )
+
+ http_archive(
+ name = "SwiftLint",
+ sha256 = "75839dc9e8a492a86bb585a3cda3d73b58997d7a14d02f1dba94171766bb8599",
+ url = "https://github.com/realm/SwiftLint/releases/download/0.53.0/bazel.tar.gz",
+ )
+
+ http_archive(
+ name = "SwiftFormat",
+ build_file_content = """
+load("@build_bazel_rules_swift//swift:swift.bzl", "swift_binary", "swift_library")
+
+swift_library(
+ name = "lib",
+ srcs = glob(["Sources/**/*.swift"]),
+ copts = ["-DSWIFT_PACKAGE"],
+ module_name = "SwiftFormat",
+)
+
+swift_binary(
+ name = "swiftformat",
+ srcs = glob(["CommandLineTool/**/*.swift"]),
+ copts = ["-DSWIFT_PACKAGE"],
+ module_name = "CommandLineTool",
+ deps = [":lib"],
+ visibility = ["//visibility:public"],
+)
+ """,
+ sha256 = "f831e8be2524de2b47cb5ddf059573d9813625bb172de123e5a106d9f4d2f7ea",
+ url = "https://github.com/nicklockwood/SwiftFormat/archive/refs/tags/0.52.9.tar.gz",
+ strip_prefix = "SwiftFormat-0.52.9",
+ )
diff --git a/bazel/config.bzl b/bazel/config.bzl
new file mode 100644
index 00000000..9370b57e
--- /dev/null
+++ b/bazel/config.bzl
@@ -0,0 +1,4 @@
+"""Shared configuration for things we don't want to duplicate"""
+
+MINIMUM_IOS_VERSION = "12.0"
+MINIMUM_IOS_VERSION_TESTS = "13.0"
diff --git a/bazel/framework_imports_extractor.bzl b/bazel/framework_imports_extractor.bzl
new file mode 100644
index 00000000..005fd7cf
--- /dev/null
+++ b/bazel/framework_imports_extractor.bzl
@@ -0,0 +1,64 @@
+"""
+This rule declares outputs for files from a distributable framework.
+This allows us to reproduce what it's like to import our distribution artifact
+within the same build. Ideally we could just propagate the directory so we
+didn't have to enumerate the files in the framework zip, but that isn't
+supported by 'apple_static_framework_import'.
+"""
+
+load(
+ "@build_bazel_rules_apple//apple/internal:transition_support.bzl",
+ "transition_support",
+)
+load("//bazel:config.bzl", "MINIMUM_IOS_VERSION")
+
+def _framework_imports_extractor(ctx):
+ outputs = [
+ ctx.actions.declare_file("Capture.framework/Capture"),
+ ctx.actions.declare_file("Capture.framework/Headers/Capture.h"),
+ ctx.actions.declare_file("Capture.framework/Modules/module.modulemap"),
+ ]
+ for arch in ctx.split_attr.framework.keys():
+ if not arch.startswith("ios_"):
+ fail("Unexpected arch: {}".format(arch))
+
+ arch = arch[4:]
+
+ # ios_sim_arm64 is a temporary special case for the M1.
+ if arch.startswith("sim_"):
+ arch = arch[4:]
+
+ outputs.extend([
+ ctx.actions.declare_file("Capture.framework/Modules/Capture.swiftmodule/{}.swiftdoc".format(arch)),
+ ctx.actions.declare_file("Capture.framework/Modules/Capture.swiftmodule/{}.swiftinterface".format(arch)),
+ ])
+
+ if len(ctx.attr.framework[0].files.to_list()) != 1:
+ fail("Expected exactly one framework zip, got {}".format(ctx.attr.framework[0].files))
+
+ framework_zip = ctx.attr.framework[0].files.to_list()[0]
+
+ ctx.actions.run_shell(
+ inputs = [framework_zip],
+ outputs = outputs,
+ # Workaround for https://github.com/bazelbuild/rules_apple/issues/1489
+ command = "unzip -o -qq {} -d {}".format(framework_zip.path, ctx.bin_dir.path),
+ progress_message = "Extracting framework",
+ )
+
+ return [DefaultInfo(files = depset(outputs))]
+
+framework_imports_extractor = rule(
+ attrs = {
+ "framework": attr.label(
+ mandatory = True,
+ cfg = transition_support.apple_platform_split_transition,
+ ),
+ "minimum_os_version": attr.string(default = MINIMUM_IOS_VERSION),
+ "platform_type": attr.string(default = "ios"),
+ "_allowlist_function_transition": attr.label(
+ default = "@bazel_tools//tools/allowlists/function_transition_allowlist",
+ ),
+ },
+ implementation = _framework_imports_extractor,
+)
diff --git a/bazel/ios/BUILD b/bazel/ios/BUILD
new file mode 100644
index 00000000..5bc82163
--- /dev/null
+++ b/bazel/ios/BUILD
@@ -0,0 +1,42 @@
+load("@build_bazel_rules_apple//apple:apple.bzl", "local_provisioning_profile")
+load(
+ "@rules_xcodeproj//xcodeproj:defs.bzl",
+ "xcode_provisioning_profile",
+)
+
+exports_files(["symbols_to_rewrite"])
+
+sh_binary(
+ name = "rewrite_symbols",
+ srcs = [
+ "rewrite_symbols.sh",
+ ],
+ visibility = ["//visibility:public"],
+)
+
+config_setting(
+ name = "produce_framework_plist",
+ values = {"define": "ios_produce_framework_plist=true"},
+)
+
+# Bitdrift team ID
+TEAM_ID = "33XQXT255C"
+
+# If needed, change to the name shown by clicking the (i) next to
+# "Xcode Managed Profile" in the "Signing and Capabilities" tab
+PROFILE_NAME = "iOS Team Provisioning Profile: *"
+
+xcode_provisioning_profile(
+ name = "ios_provisioning_profile",
+ managed_by_xcode = True,
+ provisioning_profile = ":xcode_managed_profile",
+ tags = ["manual"],
+ visibility = ["//visibility:public"],
+)
+
+local_provisioning_profile(
+ name = "xcode_managed_profile",
+ profile_name = PROFILE_NAME,
+ tags = ["manual"],
+ team_id = TEAM_ID,
+)
diff --git a/bazel/ios/hack.bzl b/bazel/ios/hack.bzl
new file mode 100644
index 00000000..bcd37001
--- /dev/null
+++ b/bazel/ios/hack.bzl
@@ -0,0 +1,35 @@
+"""
+This is a workaround to rename symbols coming from rust that conflict
+with libclang when linking into iOS apps that link using -all_load.
+
+See https://github.com/rust-lang/compiler-builtins/issues/420#issuecomment-1112269764
+"""
+
+def workaround_rust_symbols(name, xcframework, out, visibility = []):
+ native.genrule(
+ name = name,
+ srcs = [
+ xcframework,
+ "//bazel/ios:symbols_to_rewrite",
+ ],
+ # Ideally we would return Capture.xcframework in here as opposed to its zip but
+ # Bazel rules (pkg_zip) are not happy when passing directories as input arguments
+ # to them. For this reason, we return zip in here and unzip it later on
+ # as part of ios_release.sh script.
+ outs = [out],
+ cmd = """
+ TMP=$$(mktemp -d)
+ unzip -o $(location {0}) -d $$TMP
+ filename=$$(basename -- "$(location {0})" .zip)
+ echo $$filename
+ $(location //bazel/ios:rewrite_symbols) $(location //bazel/ios:symbols_to_rewrite) $$TMP/$$filename
+ (cd $$TMP && zip -r {1} $$filename)
+ mv $$TMP/{1} $@
+ """.format(xcframework, out),
+ tools = [
+ "//bazel/ios:rewrite_symbols",
+ ],
+ visibility = visibility,
+ stamp = True,
+ tags = ["local"],
+ )
diff --git a/bazel/ios/rewrite_symbols.sh b/bazel/ios/rewrite_symbols.sh
new file mode 100755
index 00000000..85cccebe
--- /dev/null
+++ b/bazel/ios/rewrite_symbols.sh
@@ -0,0 +1,59 @@
+#!/bin/bash
+
+set -euxo pipefail
+
+remove_rmeta () {
+ local -r bin="$1"
+
+ ar d "$bin" $(ar t "$bin"| grep "lib\.r")
+
+ # Do not exit on error.
+ set +e
+
+ # Look for a 'lib.rmeta' with 'e' character replaceed with either one of the
+ # following: new line, tab or a space character.
+ ar d "$bin" "$(echo "lib.rm\x0ata")" "$(echo "lib.rm\x09ta")" "$(echo "lib.rm\x20ta")"
+
+ if ar t "$bin"| grep "lib\.r"; then
+ # Method succeeded which means that it found
+ # one of the unexpected object references which means that
+ # we were not able to remove all of the revevant `lib.rmeta`
+ # file references and should exit with error.
+ echo "failed to remove 'lib.rmeta'-like reference(s) from '$bin'" >&2
+ exit 1;
+ fi
+
+ # Revert back to previous behavior: exit on error.
+ set -e
+
+ return 0
+}
+
+framework_to_rewrite="$2"
+framework_base=$(basename $framework_to_rewrite)
+framework_name=${framework_base%.*}
+
+if [ ! -d "$framework_to_rewrite" ];
+then
+ >&2 echo "Directory $framework_to_rewrite does not exist"
+ exit 1;
+fi
+
+for binary in $(find $framework_to_rewrite -type f -name $framework_name);
+do
+ if lipo -info $binary | grep -q x86_64; then
+ x86_slice=$(mktemp -d)/$framework_name
+ arm_slice=$(mktemp -d)/$framework_name
+ lipo -thin x86_64 "$binary" -output "$x86_slice"
+ lipo -thin arm64 "$binary" -output "$arm_slice"
+
+ remove_rmeta "$x86_slice"
+ remove_rmeta "$arm_slice"
+
+ lipo -create "$x86_slice" "$arm_slice" -output "$binary"
+ else
+ remove_rmeta "$binary"
+ fi
+
+ xcrun bitcode_strip -r "$binary" -o "$binary"
+done
diff --git a/bazel/ios/symbols_to_rewrite b/bazel/ios/symbols_to_rewrite
new file mode 100644
index 00000000..de84fd07
--- /dev/null
+++ b/bazel/ios/symbols_to_rewrite
@@ -0,0 +1,221 @@
+___aarch64_have_lse_atomics
+___absvdi2
+___absvsi2
+___adddf3
+___addsf3
+___addvdi3
+___addvsi3
+___ashldi3
+___ashlti3
+___ashrdi3
+___ashrti3
+___clzdi2
+___clzsi2
+___cmpdi2
+___ctzdi2
+___ctzsi2
+___divdc3
+___divdf3
+___divdi3
+___divmoddi4
+___divmodsi4
+___divmodti4
+___divsc3
+___divsf3
+___divsi3
+___divti3
+___eqdf2
+___eqsf2
+___extendhfsf2
+___extendsfdf2
+___fe_getround
+___fe_raise_inexact
+___fixdfdi
+___fixdfsi
+___fixdfti
+___fixsfdi
+___fixsfsi
+___fixsfti
+___fixunsdfdi
+___fixunsdfsi
+___fixunsdfti
+___fixunssfdi
+___fixunssfsi
+___fixunssfti
+___floatdidf
+___floatdisf
+___floatsidf
+___floatsisf
+___floattidf
+___floattisf
+___floatundidf
+___floatundisf
+___floatunsidf
+___floatunsisf
+___floatuntidf
+___floatuntisf
+___gedf2
+___gesf2
+___gnu_f2h_ieee
+___gnu_h2f_ieee
+___gtdf2
+___gtsf2
+___ledf2
+___lesf2
+___lshrdi3
+___lshrti3
+___ltdf2
+___ltsf2
+___moddi3
+___modsi3
+___modti3
+___muldc3
+___muldf3
+___muldi3
+___mulodi4
+___mulosi4
+___muloti4
+___mulsc3
+___mulsf3
+___multc3
+___multi3
+___mulvdi3
+___mulvsi3
+___nedf2
+___negdf2
+___negdi2
+___negsf2
+___negvdi2
+___negvsi2
+___nesf2
+___paritydi2
+___paritysi2
+___popcountdi2
+___popcountsi2
+___powidf2
+___powisf2
+___subdf3
+___subsf3
+___subvdi3
+___subvsi3
+___truncdfhf2
+___truncdfsf2
+___truncsfhf2
+___ucmpdi2
+___udivdi3
+___udivmoddi4
+___udivmodsi4
+___udivmodti4
+___udivsi3
+___udivti3
+___umoddi3
+___umodsi3
+___umodti3
+___unorddf2
+___unordsf2
+__aarch64_cas16_acq
+__aarch64_cas16_acq_rel
+__aarch64_cas16_rel
+__aarch64_cas16_relax
+__aarch64_cas1_acq
+__aarch64_cas1_acq_rel
+__aarch64_cas1_rel
+__aarch64_cas1_relax
+__aarch64_cas2_acq
+__aarch64_cas2_acq_rel
+__aarch64_cas2_rel
+__aarch64_cas2_relax
+__aarch64_cas4_acq
+__aarch64_cas4_acq_rel
+__aarch64_cas4_rel
+__aarch64_cas4_relax
+__aarch64_cas8_acq
+__aarch64_cas8_acq_rel
+__aarch64_cas8_rel
+__aarch64_cas8_relax
+__aarch64_ldadd1_acq
+__aarch64_ldadd1_acq_rel
+__aarch64_ldadd1_rel
+__aarch64_ldadd1_relax
+__aarch64_ldadd2_acq
+__aarch64_ldadd2_acq_rel
+__aarch64_ldadd2_rel
+__aarch64_ldadd2_relax
+__aarch64_ldadd4_acq
+__aarch64_ldadd4_acq_rel
+__aarch64_ldadd4_rel
+__aarch64_ldadd4_relax
+__aarch64_ldadd8_acq
+__aarch64_ldadd8_acq_rel
+__aarch64_ldadd8_rel
+__aarch64_ldadd8_relax
+__aarch64_ldclr1_acq
+__aarch64_ldclr1_acq_rel
+__aarch64_ldclr1_rel
+__aarch64_ldclr1_relax
+__aarch64_ldclr2_acq
+__aarch64_ldclr2_acq_rel
+__aarch64_ldclr2_rel
+__aarch64_ldclr2_relax
+__aarch64_ldclr4_acq
+__aarch64_ldclr4_acq_rel
+__aarch64_ldclr4_rel
+__aarch64_ldclr4_relax
+__aarch64_ldclr8_acq
+__aarch64_ldclr8_acq_rel
+__aarch64_ldclr8_rel
+__aarch64_ldclr8_relax
+__aarch64_ldeor1_acq
+__aarch64_ldeor1_acq_rel
+__aarch64_ldeor1_rel
+__aarch64_ldeor1_relax
+__aarch64_ldeor2_acq
+__aarch64_ldeor2_acq_rel
+__aarch64_ldeor2_rel
+__aarch64_ldeor2_relax
+__aarch64_ldeor4_acq
+__aarch64_ldeor4_acq_rel
+__aarch64_ldeor4_rel
+__aarch64_ldeor4_relax
+__aarch64_ldeor8_acq
+__aarch64_ldeor8_acq_rel
+__aarch64_ldeor8_rel
+__aarch64_ldeor8_relax
+__aarch64_ldset1_acq
+__aarch64_ldset1_acq_rel
+__aarch64_ldset1_rel
+__aarch64_ldset1_relax
+__aarch64_ldset2_acq
+__aarch64_ldset2_acq_rel
+__aarch64_ldset2_rel
+__aarch64_ldset2_relax
+__aarch64_ldset4_acq
+__aarch64_ldset4_acq_rel
+__aarch64_ldset4_rel
+__aarch64_ldset4_relax
+__aarch64_ldset8_acq
+__aarch64_ldset8_acq_rel
+__aarch64_ldset8_rel
+__aarch64_ldset8_relax
+__aarch64_swp1_acq
+__aarch64_swp1_acq_rel
+__aarch64_swp1_rel
+__aarch64_swp1_relax
+__aarch64_swp2_acq
+__aarch64_swp2_acq_rel
+__aarch64_swp2_rel
+__aarch64_swp2_relax
+__aarch64_swp4_acq
+__aarch64_swp4_acq_rel
+__aarch64_swp4_rel
+__aarch64_swp4_relax
+__aarch64_swp8_acq
+__aarch64_swp8_acq_rel
+__aarch64_swp8_rel
+__aarch64_swp8_relax
+_atomic_flag_clear
+_atomic_flag_clear_explicit
+_atomic_flag_test_and_set
+_atomic_flag_test_and_set_explicit
+_atomic_signal_fence
+_atomic_thread_fence
diff --git a/bazel/pgv.patch b/bazel/pgv.patch
new file mode 100644
index 00000000..1395d65c
--- /dev/null
+++ b/bazel/pgv.patch
@@ -0,0 +1,59 @@
+--- validate/BUILD
++++ validate/BUILD
+@@ -1,9 +1,3 @@
+-load("@com_google_protobuf//:protobuf.bzl", "py_proto_library")
+-load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library")
+-load("@rules_cc//cc:defs.bzl", "cc_library", "cc_proto_library")
+-load("@rules_java//java:defs.bzl", "java_proto_library")
+-load("@rules_proto//proto:defs.bzl", "proto_library")
+-load("@io_bazel_rules_go//go:def.bzl", "go_library")
+
+ package(
+ default_visibility =
+@@ -20,44 +14,9 @@ proto_library(
+ ],
+ )
+
+-cc_proto_library(
+- name = "validate_cc",
+- deps = [":validate_proto"],
+-)
+-
+-py_proto_library(
+- name = "validate_py",
++filegroup(
++ name = "validate_src",
+ srcs = ["validate.proto"],
+- deps = ["@com_google_protobuf//:protobuf_python"],
+-)
+-
+-go_proto_library(
+- name = "validate_go_proto",
+- importpath = "github.com/envoyproxy/protoc-gen-validate/validate",
+- proto = ":validate_proto",
+-)
+-
+-cc_library(
+- name = "cc_validate",
+- hdrs = ["validate.h"],
+-)
+-
+-go_library(
+- name = "validate_go",
+- embed = [":validate_go_proto"],
+- importpath = "github.com/envoyproxy/protoc-gen-validate/validate",
+-)
+-
+-java_proto_library(
+- name = "validate_java",
+- deps = [":validate_proto"],
+-)
+-
+-alias(
+- name = "go_default_library",
+- actual = ":validate_go",
+- deprecation = "Use :validate instead of :go_default_library. Details about the new naming convention: https://github.com/bazelbuild/bazel-gazelle/pull/863",
+- visibility = ["//visibility:public"],
+ )
+
+ # this alias allows build files generated with Gazelle in other repositories
diff --git a/bazel/platform_mappings b/bazel/platform_mappings
new file mode 100644
index 00000000..e862f5bd
--- /dev/null
+++ b/bazel/platform_mappings
@@ -0,0 +1,32 @@
+flags:
+ --cpu=arm64-v8a
+ //bazel:android_aarch64
+
+ --cpu=armeabi-v7a
+ //bazel:android_armeabi
+
+ --cpu=x86
+ //bazel:android_x86
+
+ --cpu=x86_64
+ //bazel:android_x86_64
+
+ --cpu=darwin_x86_64
+ --apple_platform_type=macos
+ //bazel:macos_x86_64
+
+ --cpu=darwin_arm64
+ --apple_platform_type=macos
+ //bazel:macos_arm64
+
+ --cpu=ios_x86_64
+ --apple_platform_type=ios
+ //bazel:ios_x86_64
+
+ --cpu=ios_sim_arm64
+ --apple_platform_type=ios
+ //bazel:ios_sim_arm64
+
+ --cpu=ios_arm64
+ --apple_platform_type=ios
+ //bazel:ios_arm64
diff --git a/bazel/pom_template.xml b/bazel/pom_template.xml
new file mode 100644
index 00000000..4f835c7a
--- /dev/null
+++ b/bazel/pom_template.xml
@@ -0,0 +1,48 @@
+
+
+ 4.0.0
+ io.bitdrift
+ capture
+ {pom_version}
+ aar
+ Capture
+ A dynamic observability SDK for mobile developers.
+ https://bitdrift.io
+
+ {generated_bzl_deps}
+
+
+
+ BITDRIFT SOFTWARE DEVELOPMENT KIT LICENSE AGREEMENT
+ https://dl.bitdrift.io/sdk/android-maven/io/bitdrift/capture/{pom_version}/LICENSE.txt
+ repo
+
+
+ NOTICE
+ https://dl.bitdrift.io/sdk/android-maven/io/bitdrift/capture/{pom_version}/NOTICE.txt
+ repo
+
+
+
+
+ bitdriftlabs
+ Bitdrift, Inc.
+ info@bitdrift.io
+ https://github.com/bitdriftlabs
+
+
+ Augustyniak
+ Rafał Augustyniak
+ rafal@bitdrift.io
+ https://github.com/Augustyniak
+
+
+ murki
+ Miguel Angel Juárez López
+ miguel@bitdrift.io
+ https://github.com/murki
+
+
+
diff --git a/bazel/swift_header_collector.bzl b/bazel/swift_header_collector.bzl
new file mode 100644
index 00000000..61b75ed1
--- /dev/null
+++ b/bazel/swift_header_collector.bzl
@@ -0,0 +1,27 @@
+"""
+Propagate the generated Swift header from a swift_library target
+This exists to work around https://github.com/bazelbuild/rules_swift/issues/291
+"""
+
+def _swift_header_collector(ctx):
+ headers = [
+ DefaultInfo(
+ files = ctx.attr.library[CcInfo].compilation_context.headers,
+ ),
+ ]
+
+ if len(headers[0].files.to_list()) != 1:
+ header_names = [header.basename for header in headers[0].files.to_list()]
+ fail("Expected exactly 1 '-Swift.h' header, got {}".format(header_names))
+
+ return headers
+
+swift_header_collector = rule(
+ attrs = dict(
+ library = attr.label(
+ mandatory = True,
+ providers = [CcInfo],
+ ),
+ ),
+ implementation = _swift_header_collector,
+)
diff --git a/bazel/third_party/BUILD b/bazel/third_party/BUILD
new file mode 100644
index 00000000..e69de29b
diff --git a/bazel/third_party/Difference.BUILD b/bazel/third_party/Difference.BUILD
new file mode 100644
index 00000000..3022fab7
--- /dev/null
+++ b/bazel/third_party/Difference.BUILD
@@ -0,0 +1,9 @@
+load("@build_bazel_rules_swift//swift:swift.bzl", "swift_library")
+
+swift_library(
+ name = "difference",
+ srcs = glob(["Sources/**/*.swift"]),
+ tags = ["manual"],
+ module_name = "Difference",
+ visibility = ["//visibility:public"],
+)
diff --git a/bazel/third_party/SwiftArgumentParser.BUILD b/bazel/third_party/SwiftArgumentParser.BUILD
new file mode 100644
index 00000000..1fede878
--- /dev/null
+++ b/bazel/third_party/SwiftArgumentParser.BUILD
@@ -0,0 +1,20 @@
+load("@build_bazel_rules_swift//swift:swift.bzl", "swift_library")
+
+swift_library(
+ name = "swift_argument_parser",
+ srcs = glob(["Sources/ArgumentParser/**/*.swift"]),
+ tags = ["manual"],
+ module_name = "ArgumentParser",
+ features = [
+ "swift.enable_library_evolution",
+ ],
+ visibility = ["//visibility:public"],
+ deps = [":swift_argument_parser_tool_info"],
+)
+
+swift_library(
+ name = "swift_argument_parser_tool_info",
+ srcs = glob(["Sources/ArgumentParserToolInfo/**/*.swift"]),
+ tags = ["manual"],
+ module_name = "ArgumentParserToolInfo",
+)
diff --git a/bazel/third_party/SwiftBenchmark.BUILD b/bazel/third_party/SwiftBenchmark.BUILD
new file mode 100644
index 00000000..69212940
--- /dev/null
+++ b/bazel/third_party/SwiftBenchmark.BUILD
@@ -0,0 +1,12 @@
+load("@build_bazel_rules_swift//swift:swift.bzl", "swift_library")
+
+swift_library(
+ name = "swift_benchmark",
+ srcs = glob(["Sources/Benchmark/**/*.swift"]),
+ tags = ["manual"],
+ module_name = "Benchmark",
+ visibility = ["//visibility:public"],
+ deps = [
+ "@SwiftArgumentParser//:swift_argument_parser",
+ ],
+)
diff --git a/bazelw b/bazelw
new file mode 100755
index 00000000..822c2750
--- /dev/null
+++ b/bazelw
@@ -0,0 +1,63 @@
+#!/bin/bash
+
+set -euo pipefail
+
+readonly bazelisk_version="1.19.0"
+
+if [[ $OSTYPE == darwin* ]]; then
+ readonly bazel_os="darwin"
+else
+ readonly bazel_os="linux"
+fi
+
+readonly raw_arch="$(uname -m)"
+if [[ "$raw_arch" == "aarch64" || "$raw_arch" == "arm64" ]]; then
+ readonly bazel_arch="arm64"
+else
+ readonly bazel_arch="amd64"
+fi
+
+bazel_platform="$bazel_os-$bazel_arch"
+case "$bazel_platform" in
+ darwin-arm64)
+ readonly bazel_version_sha="69fa21cd2ccffc2f0970c21aa3615484ba89e3553ecce1233a9d8ad9570d170e"
+ ;;
+ darwin-amd64)
+ readonly bazel_version_sha="f2ba5f721a995b54bab68c6b76a340719888aa740310e634771086b6d1528ecd"
+ ;;
+ linux-arm64)
+ readonly bazel_version_sha="861a16ba9979613e70bd3d2f9d9ab5e3b59fe79471c5753acdc9c431ab6c9d94"
+ ;;
+ linux-amd64)
+ readonly bazel_version_sha="d28b588ac0916abd6bf02defb5433f6eddf7cba35ffa808eabb65a44aab226f7"
+ ;;
+
+ *)
+ echo "Unsupported platform $OSTYPE $raw_arch" >&2
+ exit 1
+esac
+
+readonly bazel_version_url="https://github.com/bazelbuild/bazelisk/releases/download/v$bazelisk_version/bazelisk-$bazel_platform"
+script_root="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
+readonly bazelisk="$script_root/tmp/bazel/versions/bazelisk-$bazelisk_version-$bazel_platform"
+
+if [[ ! -x "$bazelisk" ]]; then
+ echo "Installing bazelisk..." >&2
+ mkdir -p "$(dirname "$bazelisk")"
+
+ download_bazelisk() {
+ curl --fail -L --retry 5 --retry-connrefused --silent --progress-bar \
+ --output "$bazelisk" "$bazel_version_url"
+ }
+
+ download_bazelisk || download_bazelisk
+ if echo "$bazel_version_sha $bazelisk" | shasum --check --status; then
+ chmod +x "$bazelisk"
+ else
+ echo "Bazelisk sha mismatch" >&2
+ rm -f "$bazelisk"
+ exit 1
+ fi
+fi
+
+exec ./tools/android_sdk_wrapper.sh "$bazelisk" "$@"
diff --git a/ci/BUILD.shared_libs b/ci/BUILD.shared_libs
new file mode 100644
index 00000000..fe24e68c
--- /dev/null
+++ b/ci/BUILD.shared_libs
@@ -0,0 +1,44 @@
+config_setting(
+ name = "macos_x86_64",
+ constraint_values = [
+ "@platforms//os:macos",
+ "@platforms//cpu:x86_64",
+ ],
+)
+
+config_setting(
+ name = "macos_arm64",
+ constraint_values = [
+ "@platforms//os:macos",
+ "@platforms//cpu:arm64",
+ ],
+)
+
+config_setting(
+ name = "macos",
+ values = {
+ "os": "macos",
+ },
+)
+
+alias(
+ name = "capture_dynamic_library",
+ actual = select({
+ "@platforms//os:macos": ":macos_dynamic_library",
+ "@platforms//os:linux": "libcapture.so",
+ }),
+ visibility = ["//visibility:public"],
+)
+
+genrule(
+ name = "macos_dynamic_library",
+ srcs = select({
+ ":macos_arm64": ["darwin_arm64/libcapture.dylib"],
+ ":macos_x86_64": ["darwin_x86_64/libcapture.dylib"],
+ }),
+ outs = ["libcapture.dylib"],
+ cmd = "cp $< \\$@",
+ visibility = ["//visibility:public"],
+)
+
+exports_files(["libcapture.so"])
diff --git a/ci/LICENSE.txt b/ci/LICENSE.txt
new file mode 100644
index 00000000..c9910a19
--- /dev/null
+++ b/ci/LICENSE.txt
@@ -0,0 +1,25 @@
+ BITDRIFT SOFTWARE DEVELOPMENT KIT LICENSE AGREEMENT
+
+PLEASE READ THESE TERMS AND CONDITIONS CAREFULLY BEFORE USING THE SOFTWARE OFFERED BY BITDRIFT, INC. (“BITDRIFT” OR “COMPANY”). BY DOWNLOADING, INSTALLING AND/OR USING THE SOFTWARE YOU AGREE TO THE TERMS AND CONDITIONS OF THIS SOFTWARE DEVELOPMENT KIT LICENSE AGREEMENT (THE “AGREEMENT”), AND YOU (“YOU” OR “CUSTOMER”) AGREE THAT YOU ARE BOUND BY THESE TERMS AND ARE A PARTY TO THIS AGREEMENT. YOUR USE OF THE SOFTWARE IS EXPRESSLY CONDITIONED ON YOUR ACCEPTANCE OF THE TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE TO ALL OF THE FOLLOWING, YOU MAY NOT USE OR ACCESS THE SOFTWARE IN ANY MANNER. IF THE TERMS OF THIS AGREEMENT ARE CONSIDERED AN OFFER, ACCEPTANCE IS EXPRESSLY LIMITED TO SUCH TERMS.
+
+1. Scope of This Agreement. This Agreement applies to the Software and Documentation made available by bitdrift hereunder to you. “Software” means the bitdrift software development kit software made available in connection with this Agreement, and any copies made by or on your behalf, and any updates, upgrades or other new features, functionality or enhancements to the Software made available to you by bitdrift. "Documentation" means any on-line read me, help files, or other related explanatory materials with respect to the Software.
+
+2. License. Subject to the terms and conditions of this Agreement, bitdrift hereby grants to Customer, and Customer hereby accepts from bitdrift, a limited, non-exclusive, non-transferable, non-assignable and non-sublicenseable license to: (a) run the Software solely to interact or communicate with the Service; and (b) distribute the Software solely as incorporated in, or as embedded (and not on a stand-alone basis) in the Company’s products or services, provided the Software is used solely to interact or communicate with the Service. “Service” means the bitdrift services made available by bitdrift as more fully described at the following URL: https://bitdrift.io.
+
+3. License Restrictions. Except with bitdrift’s prior written consent, Customer may not: (a) exceed the scope of the licenses granted in Section 2; (b) use the Software or any component thereof to run, or in connection with any system or service other than the Service; (c) reverse engineer, decompile, disassemble or otherwise attempt to learn the source code, structure or algorithms underlying the Software, except to the extent required to be permitted under applicable law; (d) modify, translate or create derivative works of the Software; (e) remove any copyright, trademark, patent or other proprietary notice that appears on the Software or copies thereof; or (f) combine or distribute any of the Software with any third party software that is licensed under terms that seek to require that any of the Software (or any associated intellectual property rights) be provided in source code form (e.g., as “open source”), or distributed without charge.
+
+4. Proprietary Rights. The Software is licensed and not sold to you. bitdrift and its licensors own and retain all right, title and interest in the Software, any design changes, improvements, enhancements, derivative works, and any related and associated intellectual property rights. You may provide suggestions and input regarding the Software or Documentation, including but not limited to improvements, modifications, and enhancements regarding the same (“Feedback”). You hereby grant to bitdrift a right to use, modify and distribute the Feedback in connection with bitdrift’s product and services.
+
+5. Term and Termination. This Agreement and your right to use the Software may be terminated by you or by bitdrift at any time upon written notice. Upon any expiration or termination of this Agreement, the license granted in Section 2 shall terminate immediately, and you shall (i) immediately cease use of all Software and Documentation, and (ii) return to bitdrift all Software and related Documentation and other materials and information provided by bitdrift and any copies thereof made by you.
+
+6. NO WARRANTY. CUSTOMER ACKNOWLEDGES AND AGREES THAT, THE SOFTWARE AND DOCUMENTATION ARE PROVIDED “AS IS”, AND THAT BITDRIFT MAKES NO EXPRESS OR IMPLIED REPRESENTATIONS OR WARRANTIES OF ANY KIND WITH RESPECT TO THE SOFTWARE OR DOCUMENTATION, OR THEIR CONDITION. BITDRIFT HEREBY EXPRESSLY EXCLUDES, ANY AND ALL OTHER EXPRESS OR IMPLIED REPRESENTATIONS OR WARRANTIES, WHETHER UNDER COMMON LAW, STATUTE OR OTHERWISE, INCLUDING WITHOUT LIMITATION ANY AND ALL WARRANTIES AS TO MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, SATISFACTORY QUALITY OR NON-INFRINGEMENT OF THIRD-PARTY RIGHTS. bitdrift does not represent or warrant that the operation of the Software (or any portion thereof) will be uninterrupted or error free, or that the Software (or any portion thereof) will operate in combination with other hardware, software, systems or data not provided by bitdrift.
+
+7. LIMITATION OF LIABILITY. IN NO EVENT SHALL BITDRIFT BE LIABLE IN AN ACTION UNDER TORT, CONTRACT, WARRANTY OR OTHERWISE FOR ANY: SPECIAL, INDIRECT, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES NOTWITHSTANDING ANYTHING TO THE CONTRARY IN THIS AGREEMENT, IN NO EVENT SHALL BITDRIFT’S TOTAL LIABILITY FOR DAMAGES, LOSSES OR LIABILITY OF ANY KIND EXCEED, EITHER CUMULATIVELY OR IN THE AGGREGATE, ONE THOUSAND US DOLLARS ($1,000).
+
+8. Injunctive Relief. You acknowledge and agree that your breach or threatened breach of this Agreement shall cause bitdrift irreparable damage for which recovery of money damages would be inadequate and that bitdrift therefore may obtain timely injunctive relief to protect its rights under this Agreement in addition to any and all other remedies available at law or in equity.
+
+9. Export Controls. The Software and Documentation and the underlying information and technology may not be downloaded or otherwise exported or re-exported (i) into (or to a national or resident of) any country to which the U.S. has embargoed goods; or (ii) to anyone on the U.S. Treasury Department’s list of Specially Designated Nationals or the U.S. Commerce Department’s Table of Deny Orders. By downloading or using the Software and/or Documentation, you are agreeing to the foregoing and you represent and warrant that you are not located in, under the control of, or a national or resident of any such country or on any such list and you agree to comply with all export laws and other applicable laws.
+
+10. U.S. Government End Users. The Software and Documentation each were developed by private financing and constitute “Commercial Items,” as that term is defined at 48 C.F.R. §2.101. The Software consists of “Commercial Computer Software” and “Commercial Computer Software Documentation,” as such terms are used in 48 C.F.R. §12.212. Consistent with 48 C.F.R. §12.212 and 48 C.F.R. §227.7202-1 through 227.7202-4, all U.S. Government End Users acquire only those rights in the Software and the Documentation that are specifically provided by this Agreement. Consistent with 48 C.F.R. §12.211, all U.S. Government End Users acquire only technical data and the rights in that data customarily as specifically provided in this Agreement.
+
+11. Miscellaneous. Except to the extent applicable law, if any, provides otherwise, this Agreement shall be governed by the laws of California, U.S.A., excluding its conflict of law provisions. You expressly agree that jurisdiction for any claim or dispute arising from the use of the bitdrift Software resides in the federal and state courts situated in the Santa Clara County, California, U.S.A., and you consent to the personal jurisdiction thereof. This Agreement shall not be governed by the United Nations Convention on Contracts for the International Sale of Goods. If any part of this Agreement is held invalid or unenforceable, that part shall be construed to reflect the parties' original intent, and the remaining portions remain in full force and effect, or bitdrift may at its option terminate this Agreement. A waiver by either party of any term or condition of this Agreement or any breach thereof, in any one instance, shall not waive such term or condition or any subsequent breach thereof. You may not assign or otherwise transfer by operation of law or otherwise this Agreement or any rights or obligations herein. bitdrift may assign this Agreement to any person or entity at its sole discretion. This Agreement shall be binding upon and shall inure to the benefit of the parties, their successors and permitted assigns.
diff --git a/ci/NOTICE.txt b/ci/NOTICE.txt
new file mode 100644
index 00000000..b7f03424
--- /dev/null
+++ b/ci/NOTICE.txt
@@ -0,0 +1,4 @@
+Capture
+Copyright BITDRIFT, INC.
+
+Licensed under BITDRIFT SOFTWARE DEVELOPMENT KIT LICENSE AGREEMENT. See LICENSE.txt for terms.
diff --git a/ci/capture_android_release.sh b/ci/capture_android_release.sh
new file mode 100755
index 00000000..d090e22f
--- /dev/null
+++ b/ci/capture_android_release.sh
@@ -0,0 +1,111 @@
+#!/bin/bash
+
+set -euo pipefail
+
+repo="$(pwd)"
+readonly sdk_repo="$repo"
+readonly remote_location_root_prefix="s3://bitdrift-public-dl/sdk/android-maven/io/bitdrift"
+
+readonly version="$1"
+readonly capture_archive="$2"
+readonly capture_timber_archive="$3"
+
+function upload_file() {
+ local -r location="$1"
+ local -r file="$2"
+
+ "$sdk_repo/ci/checksum.sh" md5 "$file"
+ "$sdk_repo/ci/checksum.sh" sha1 "$file"
+ "$sdk_repo/ci/checksum.sh" sha256 "$file"
+ "$sdk_repo/ci/checksum.sh" sha512 "$file"
+
+ for f in "$file" "$file.md5" "$file.sha1" "$file.sha256" "$file.sha512"; do
+ echo "Uploading $file..."
+ aws s3 cp "$f" "$location/$f" --region us-east-1
+ done
+}
+
+function generate_maven_file() {
+ local -r location="$1"
+
+ echo "+++ Generating maven-metadata.xml for '$location'"
+
+ releases=$(aws s3 ls "$location/" \
+ | grep -v 'maven-metadata.xml' \
+ | awk '{print $2}' \
+ | sed 's/^\///;s/\/$//')
+
+ python3 "$sdk_repo/ci/generate_maven_metadata.py" --releases "${releases//$'\n'/,}"
+
+ echo "+++ Generated maven-metadata.xml:"
+ cat maven-metadata.xml
+
+ upload_file "$remote_location_prefix" "maven-metadata.xml"
+}
+
+function release_capture_sdk() {
+ echo "+++ dl.bitdrift.io Android Capture SDK artifacts upload"
+
+ # We get a zip containing:
+ # * the artifacts named per Maven conventions
+ # * .tar symbols file containing symbols for the stripped release shared libraries.
+ # * shared dylib libraries
+
+ pushd "$(mktemp -d)"
+ unzip -o "$sdk_repo/$capture_archive"
+
+ echo "+++ Uploading artifacts to s3 bucket"
+
+ local -r remote_location_prefix="$remote_location_root_prefix/capture"
+ local -r name="capture-$version"
+
+ files=(\
+ "$sdk_repo/ci/LICENSE.txt" \
+ "$sdk_repo/ci/NOTICE.txt" \
+ "$name.pom" \
+ "$name-javadoc.jar" \
+ "$name-symbols.tar" \
+ "$name-dylib.tar" \
+ "$name.aar" \
+ )
+
+ for file in "${files[@]}"; do
+ upload_file "$remote_location_prefix/$version" "$file"
+ done
+
+ generate_maven_file "$remote_location_prefix"
+ popd
+}
+
+function release_capture_timber() {
+ echo "+++ dl.bitdrift.io Android Capture Timber artifacts upload"
+
+ # We get a zip containing the artifacts named per Maven conventions.
+
+ pushd "$(mktemp -d)"
+ unzip -o "$sdk_repo/$capture_timber_archive"
+
+ echo "+++ Uploading artifacts to s3 bucket"
+
+ local -r remote_location_prefix="$remote_location_root_prefix/capture-timber"
+ local -r name="capture-timber-$version"
+
+ files=(\
+ "$sdk_repo/ci/LICENSE.txt" \
+ "$sdk_repo/ci/NOTICE.txt" \
+ "$name.pom" \
+ "$name-javadoc.jar" \
+ "$name.module" \
+ "$name.aar" \
+ )
+
+ for file in "${files[@]}"; do
+ upload_file "$remote_location_prefix/$version" "$file"
+ done
+
+ generate_maven_file "$remote_location_prefix"
+ popd
+}
+
+release_capture_sdk
+release_capture_timber
diff --git a/ci/capture_ios_release.sh b/ci/capture_ios_release.sh
new file mode 100755
index 00000000..7eefc0b7
--- /dev/null
+++ b/ci/capture_ios_release.sh
@@ -0,0 +1,51 @@
+#!/bin/bash
+
+set -euo pipefail
+
+echo "+++ dl.bitdrift.io iOS artifacts upload"
+
+readonly version="$1"
+
+sdk_repo="$(pwd)"
+readonly sdk_repo="$sdk_repo"
+
+function upload_file() {
+ local -r library="$1"
+ local -r file="$2"
+
+ "$sdk_repo/ci/checksum.sh" sha256 "$file"
+
+ for f in "$file" "$file.sha256"; do
+ echo "+ Uploading $f..."
+ aws s3 cp "$f" "s3://bitdrift-public-dl/sdk/ios/$library-$version/$f" --region us-east-1
+ done
+}
+
+function prepare_and_upload_library_artifacts() {
+ local -r library="$1"
+ local -r archive="$library-$version.ios.zip"
+ # Change camelCase to snake_case with `_` replaced by "-".
+ local -r normalized_library=$(echo "$library" | sed 's/\([A-Z]\)/-\L\1/g;s/^-//')
+
+ echo "+++ Preparing $library artifacts"
+
+ pushd "$(mktemp -d)"
+ unzip -o "$sdk_repo/$archive"
+ cp "$sdk_repo/$archive" "$library.zip"
+
+ zip -r "$library.doccarchive.zip" "$library.doccarchive"
+
+ files=(\
+ "$library.doccarchive.zip" \
+ "$library.zip" \
+ )
+
+ echo "+++ Uploading $library artifacts to s3 bucket"
+
+ for file in "${files[@]}"; do
+ upload_file "$normalized_library" "$file"
+ done
+ popd
+}
+
+prepare_and_upload_library_artifacts "Capture"
diff --git a/ci/check_bazel.sh b/ci/check_bazel.sh
new file mode 100755
index 00000000..e7aad034
--- /dev/null
+++ b/ci/check_bazel.sh
@@ -0,0 +1,66 @@
+#!/bin/bash
+
+set -euo pipefail
+
+# Compares $GITHUB_HEAD_REF and $GITHUB_BASE_REF (PR branch + target branch, usually main) to
+# determine which Bazel targets have changed. This is done by analysizing the cache keys and
+# should be authoritive assuming the builds are hermietic.
+#
+# Usage ./ci/check_bazel.sh
+
+# Path to your Bazel WORKSPACE directory
+workspace_path=$(pwd)
+# Path to your Bazel executable
+bazel_path=$(pwd)/bazelw
+# Starting Revision SHA. We use the merge-base to better handle the case where HEAD is not ahead of main.
+base_sha=$(git rev-parse "origin/$GITHUB_BASE_REF")
+previous_revision=$(git merge-base "$base_sha" "origin/$GITHUB_HEAD_REF")
+# Final Revision SHA
+final_revision=$GITHUB_HEAD_REF
+
+starting_hashes_json="/tmp/starting_hashes.json"
+final_hashes_json="/tmp/final_hashes.json"
+impacted_targets_path="/tmp/impacted_targets.txt"
+bazel_diff="/tmp/bazel_diff"
+
+"$bazel_path" run :bazel-diff --script_path="$bazel_diff"
+
+git -C "$workspace_path" checkout "$previous_revision" --quiet
+
+$bazel_diff generate-hashes -w "$workspace_path" -b "$bazel_path" $starting_hashes_json
+
+git -C "$workspace_path" checkout "$final_revision" --quiet
+
+$bazel_diff generate-hashes -w "$workspace_path" -b "$bazel_path" $final_hashes_json
+
+$bazel_diff get-impacted-targets -sh $starting_hashes_json -fh $final_hashes_json -o $impacted_targets_path
+
+# First pretty print the targets for debugging
+
+impacted_targets=()
+IFS=$'\n' read -d '' -r -a impacted_targets < $impacted_targets_path || true
+formatted_impacted_targets="$(IFS=$'\n'; echo "${impacted_targets[*]}")"
+
+# Piping the output through to grep is flaky and will cause a broken pipe. Write the contents to a file
+# and grep the file to avoid this.
+echo "$formatted_impacted_targets" | tee /tmp/impacted_targets.txt
+
+# Look for the patterns provided as arguments to this script. $formatted_impacted_targets contains
+# a list of all the Bazel targets impacted by the changes between the two branches, so we just
+# check to see if any of the provided patterns appear in the list of targets.
+
+pattern_impacted() {
+ grep -q "$1" /tmp/impacted_targets.txt
+}
+
+for pattern in "$@"
+do
+ if pattern_impacted "$pattern"; then
+ echo "$pattern changed!"
+ exit 0
+ fi
+done
+
+# No relevant changes detected via Bazel.
+echo "Nothing changed"
+exit 1
diff --git a/ci/check_license.sh b/ci/check_license.sh
new file mode 100755
index 00000000..71a8bb3c
--- /dev/null
+++ b/ci/check_license.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+set -e
+
+python3 ./ci/license_header.py
+
+# Check if git repository is dirty
+if [[ -n $(git status -uno --porcelain) ]]; then
+ echo "Error: Git repository is dirty. Run ci/license_header.py to update license headers."
+ git status -uno --porcelain
+ exit 1
+fi
diff --git a/ci/check_result.sh b/ci/check_result.sh
new file mode 100755
index 00000000..101be281
--- /dev/null
+++ b/ci/check_result.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+
+set -euo pipefail
+
+# A simple script which returns true if success or skipped is provided as the first argument,
+# false otherwise. This is used to simplify checking the GA job status.
+
+case $1 in
+ "success")
+ exit 0
+ ;;
+
+ "skipped")
+ exit 0
+ ;;
+ *)
+ echo "result $1"
+ exit 1
+esac
+
diff --git a/ci/checksum.sh b/ci/checksum.sh
new file mode 100755
index 00000000..ef9415d6
--- /dev/null
+++ b/ci/checksum.sh
@@ -0,0 +1,54 @@
+#!/bin/bash
+
+set -euo pipefail
+
+function create_MD5_file() {
+ local -r file="$1"
+ echo "+ Generating MD5 checksum for $file"
+ echo "$(md5sum "$file" | awk '{print $1}')" > "$file.md5"
+ cat "$file.md5"
+}
+
+function create_SHA1_file() {
+ local -r file="$1"
+ echo "+ Generating SHA-1 checksum for $file"
+ echo "$(sha1sum "$file" | awk '{print $1}')" > "$file.sha1"
+ cat "$file.sha1"
+}
+
+function create_SHA256_file() {
+ local -r file="$1"
+ echo "+ Generating SHA256 checksum for $file"
+ echo "$(shasum -a 256 "$file" | awk '{print $1}')" > "$file.sha256"
+ cat "$file.sha256"
+}
+
+function create_SHA512_file() {
+ local -r file="$1"
+ echo "+ Generating SHA512 checksum for $file"
+ echo "$(shasum -a 512 "$file" | awk '{print $1}')" > "$file.sha512"
+ cat "$file.sha512"
+}
+
+# Introduce main function so that we can use local readonly variables inside of it (local -r).
+function main() {
+ local -r checksum_type="$1"
+ local -r file="$2"
+
+ case "$checksum_type" in
+ "md5")
+ create_MD5_file "$file"
+ ;;
+ "sha1")
+ create_SHA1_file "$file"
+ ;;
+ "sha256")
+ create_SHA256_file "$file"
+ ;;
+ "sha512")
+ create_SHA512_file "$file"
+ ;;
+ esac
+}
+
+main "$@"
diff --git a/ci/create_linux_java_so.sh b/ci/create_linux_java_so.sh
new file mode 100755
index 00000000..d488c5cb
--- /dev/null
+++ b/ci/create_linux_java_so.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+set -euo pipefail
+
+echo "+++ Building .so"
+
+CC=$(which clang) CXX=$(which clang++) ./bazelw build \
+ --announce_rc \
+ --config=ci \
+ --config=release-common \
+ //platform/jvm:capture
diff --git a/ci/files_changed.sh b/ci/files_changed.sh
new file mode 100755
index 00000000..edbd69a0
--- /dev/null
+++ b/ci/files_changed.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+# Checks whether the files in provided regex via the command line has changed when comparing the HEAD ref and
+# $GITHUB_BASE_REF, i.e. the target branch (usually main). Returns true if the current branch is main.
+#
+# Usage: ./ci/files_changed.sh
+
+set -e
+
+git rev-parse --abbrev-ref HEAD | grep -q ^main$ || git diff --name-only "origin/$GITHUB_BASE_REF" | grep -E "$1"
diff --git a/ci/generate_maven_metadata.py b/ci/generate_maven_metadata.py
new file mode 100755
index 00000000..6f4b9203
--- /dev/null
+++ b/ci/generate_maven_metadata.py
@@ -0,0 +1,65 @@
+#!/usr/bin/env python3
+
+import argparse
+import datetime
+from packaging import version
+
+maven_metadata_template = """
+
+ io.bitdrift
+ capture
+ {latest_version}
+
+ {latest_version}
+ {latest_version}
+
+{versions}
+
+ {last_updated}
+
+"""
+
+
+def generate_maven_metadata(releases):
+ if len(releases) == 0:
+ print("releases cannot be empty")
+ exit(1)
+
+ print(f"provided releases: '{releases}'")
+
+ releases = sorted(releases, key=lambda x: version.Version(x))
+ latest_release = releases[-1]
+ releases_tags = "\n".join(
+ [f" {release}" for release in releases]
+ )
+
+ maven_metadata = maven_metadata_template
+ maven_metadata = maven_metadata.replace("{latest_version}", latest_release)
+ maven_metadata = maven_metadata.replace(
+ "{last_updated}", datetime.datetime.now().strftime("%y%m%d%H%M%S")
+ )
+ maven_metadata = maven_metadata.replace("{versions}", releases_tags)
+
+ with open("maven-metadata.xml", "w") as f:
+ f.write(maven_metadata)
+
+
+# Define a custom argument type for a list of strings
+def list_of_strings(arg):
+ return arg.split(",")
+
+
+def _build_parser():
+ parser = argparse.ArgumentParser()
+ parser.add_argument(
+ "--releases",
+ help="The list of available SDK releases",
+ type=list_of_strings,
+ required=True,
+ )
+ return parser
+
+
+if __name__ == "__main__":
+ args = _build_parser().parse_args()
+ generate_maven_metadata(args.releases)
diff --git a/ci/gh_prepare_android_artifacts.sh b/ci/gh_prepare_android_artifacts.sh
new file mode 100755
index 00000000..2cc4fe5e
--- /dev/null
+++ b/ci/gh_prepare_android_artifacts.sh
@@ -0,0 +1,75 @@
+#!/bin/bash
+
+set -euo pipefail
+
+readonly version="$1"
+repo="$(pwd)"
+readonly sdk_repo="$repo"
+
+function prepare_capture_sdk() {
+ echo "+++ Preparing Android Capture SDK artifacts for '$version' version"
+
+ pushd "$(mktemp -d)"
+ local -r out_artifacts_dir="android-tmp"
+ readonly dylibs_dir="capture-$version-dylib"
+
+ mkdir "$out_artifacts_dir"
+ mkdir "$dylibs_dir/"
+ mkdir "$dylibs_dir/darwin_arm64/"
+ mkdir "$dylibs_dir/darwin_x86_64/"
+
+ echo "++ Creating shared dylibs"
+
+ mv "$sdk_repo/libcapture.dylib.arm64" "$dylibs_dir/darwin_arm64/libcapture.dylib"
+ mv "$sdk_repo/libcapture.dylib.x86_64" "$dylibs_dir/darwin_x86_64/libcapture.dylib"
+ mv "$sdk_repo/libcapture.so" "$dylibs_dir/"
+
+ cp "$sdk_repo/ci/BUILD.shared_libs" "$dylibs_dir"/BUILD
+
+ pushd "$dylibs_dir"
+ tar cvf "../$out_artifacts_dir/$dylibs_dir.tar" ./*
+ popd
+
+ echo "++ Unzipping Maven Android artifacts"
+
+ unzip "$sdk_repo/Capture.android.zip" -d "$out_artifacts_dir"
+
+ echo "++ Creating Android artifacts zip"
+
+ (cd "$out_artifacts_dir" && zip -r "$sdk_repo/Capture-$version.android.zip" ./*)
+ popd
+}
+
+function prepare_capture_timber() {
+ echo "+++ Preparing Android Capture Timber library artifacts for '$version' version"
+
+ pushd "$(mktemp -d)"
+ local -r out_artifacts_dir="capture-timber-out"
+
+ unzip "$sdk_repo/capture-timber.zip"
+
+ mkdir "$out_artifacts_dir"
+
+ local -r name="capture-timber-$version"
+
+ files=(\
+ "$name.aar" \
+ "$name.module" \
+ "$name.pom" \
+ "$name-javadoc.jar" \
+ "$name-sources.jar" \
+ "$sdk_repo/ci/LICENSE.txt" \
+ "$sdk_repo/ci/NOTICE.txt" \
+ )
+
+ for file in "${files[@]}"; do
+ filename=$(basename "$file")
+ mv "$file" "$out_artifacts_dir/$filename"
+ done
+
+ (cd "$out_artifacts_dir" && zip -r "$sdk_repo/capture-timber-$version.android.zip" ./*)
+ popd
+}
+
+prepare_capture_sdk
+prepare_capture_timber
diff --git a/ci/gh_prepare_ios_artifacts.sh b/ci/gh_prepare_ios_artifacts.sh
new file mode 100755
index 00000000..b7ddc0bc
--- /dev/null
+++ b/ci/gh_prepare_ios_artifacts.sh
@@ -0,0 +1,24 @@
+#!/bin/bash
+
+set -euo pipefail
+
+readonly version="$1"
+
+sdk_repo="$(pwd)"
+readonly sdk_repo="$sdk_repo"
+
+function prepare_library_artifacts() {
+ local -r library="$1"
+
+ echo "+++ Preparing $library.ios.zip"
+
+ pushd "$(mktemp -d)"
+ unzip -o "$sdk_repo"/$library.ios.zip -d tmp
+ unzip -o "tmp/$library.xcframework.zip" -d tmp
+ rm -rf "tmp/$library.xcframework.zip"
+
+ (cd tmp && zip -r "$sdk_repo/$library-$version.ios.zip" ./*)
+ popd
+}
+
+prepare_library_artifacts "Capture"
diff --git a/ci/install_clang_linux.sh b/ci/install_clang_linux.sh
new file mode 100755
index 00000000..1b99ce73
--- /dev/null
+++ b/ci/install_clang_linux.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+set -euo pipefail
+
+# Downloads and extracts the prebuilt llvm packages for use in CI.
+readonly llvm_version=14.0.0
+
+curl -L "https://github.com/llvm/llvm-project/releases/download/llvmorg-$llvm_version/clang+llvm-$llvm_version-x86_64-linux-gnu-ubuntu-18.04.tar.xz" -o llvm.tar.xz
+mkdir -p llvm/
+pushd llvm/
+ tar xfv ../llvm.tar.xz
+popd
diff --git a/ci/install_flatc.sh b/ci/install_flatc.sh
new file mode 100755
index 00000000..901a076c
--- /dev/null
+++ b/ci/install_flatc.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+
+set -e
+
+# Install flatc
+if ! flatc --version &> /dev/null; then
+ if [[ -z "$RUNNER_TEMP" ]]; then
+ echo "Not running in GHA. Install flatc in your path"
+ exit 1
+ fi
+
+ FLATC_VERSION=23.5.26
+ pushd .
+ cd "$RUNNER_TEMP"
+ curl -Lfs -o Linux.flatc.binary.clang++-12.zip https://github.com/google/flatbuffers/releases/download/v"${FLATC_VERSION}"/Linux.flatc.binary.clang++-12.zip
+ sudo unzip Linux.flatc.binary.clang++-12.zip
+ sudo mv flatc /usr/local/bin/flatc
+ sudo chmod +x /usr/local/bin/flatc
+ popd
+fi
\ No newline at end of file
diff --git a/ci/jdk_wrapper.sh b/ci/jdk_wrapper.sh
new file mode 100755
index 00000000..672b9e15
--- /dev/null
+++ b/ci/jdk_wrapper.sh
@@ -0,0 +1,71 @@
+#!/bin/bash
+
+set -euo pipefail
+
+readonly jdk_version=8.0.302
+readonly major_java_version=8
+
+if [[ "$OSTYPE" == "darwin"* ]]; then
+ arch="$(uname -m)"
+ if [[ "$arch" == arm64 ]]; then
+ readonly jdk_file_sha256="4482990c96e87519f52725b0bf3a6171510e3da268d55b793d1bf6eeb6485030"
+ readonly jdk_file_url="https://cdn.azul.com/zulu/bin/zulu8.56.0.23-ca-jdk$jdk_version-macosx_aarch64.tar.gz"
+ else
+ readonly jdk_file_sha256="497c1d6eae5f3943a1c5f74be7bb8a650d6b0dc3bf069973d6d04f45c3daaf88"
+ readonly jdk_file_url="https://cdn.azul.com/zulu/bin/zulu8.56.0.21-ca-jdk$jdk_version-macosx_x64.tar.gz"
+ fi
+elif [[ "$OSTYPE" == "linux-gnu" ]]; then
+ readonly jdk_file_sha256="f6e6946713575aeeadfb75bd2eb245669e59ce4f797880490beb53a6c5b7138a"
+ readonly jdk_file_url="https://cdn.azul.com/zulu/bin/zulu8.56.0.21-ca-jdk$jdk_version-linux_x64.tar.gz"
+else
+ echo "JDK 8 setup doesn't support this OS: $OSTYPE" >&2
+ exit 1
+fi
+
+readonly jdk_root_dir="$HOME/.androidbin/bitdrift-jdk/$jdk_version"
+readonly jdk_unarchived_dir="$jdk_root_dir/jdk-unarchived"
+readonly softlink_root_dir="/tmp/bitdrift-jdk/$jdk_version"
+readonly softlink_unarchived_dir="$softlink_root_dir/jdk-unarchived"
+readonly jdk_unpacked_success_marker_file="$jdk_unarchived_dir/unpacked-marker-$jdk_file_sha256"
+
+# $1 — Path to file to download to.
+# $2 - Directory to unarchive to.
+function download_and_unpack_jdk() {
+ local -r file="$1"
+ local -r unarchive_dir="$2"
+
+ curl -o "$file" --silent --fail "$jdk_file_url"
+ if ! echo "$jdk_file_sha256 $file" | shasum --check --status; then
+ echo "error: jdk download sha mismatch" >&2
+ exit 1
+ fi
+
+ mkdir -p "$unarchive_dir"
+ tar -xf "$file" -C "$unarchive_dir" --strip-components=1
+ touch "$jdk_unpacked_success_marker_file"
+ rm -f "$file"
+}
+
+if [[ ! -f "$jdk_unpacked_success_marker_file" ]]; then
+ rm -rf "$jdk_unarchived_dir"
+ jdk_file=$(mktemp)
+ download_and_unpack_jdk "$jdk_file" "$jdk_unarchived_dir"
+fi
+
+if [[ ! -d "$softlink_unarchived_dir" ]]; then
+ mkdir -p "$softlink_root_dir"
+fi
+
+rm -f "$softlink_unarchived_dir"
+if [[ "$OSTYPE" == "darwin"* ]]; then
+ ln -s "$jdk_unarchived_dir/zulu-$major_java_version.jdk/Contents/Home" "$softlink_unarchived_dir"
+elif [[ "$OSTYPE" == "linux-gnu" ]]; then
+ ln -s "$jdk_unarchived_dir" "$softlink_unarchived_dir"
+else
+ echo "JDK wrapper doesn't support this OS: $OSTYPE" >&2
+ exit 1
+fi
+
+readonly custom_java_home="$softlink_unarchived_dir"
+JAVA_HOME="$custom_java_home" \
+ "$@"
diff --git a/ci/license_header.py b/ci/license_header.py
new file mode 100644
index 00000000..2149e56d
--- /dev/null
+++ b/ci/license_header.py
@@ -0,0 +1,67 @@
+import os
+
+# Define the header you want to check for and insert
+header = """
+// capture-sdk - bitdrift's client SDK
+// Copyright Bitdrift, Inc. All rights reserved.
+//
+// Use of this source code is governed by a source available license that can be found in the
+// LICENSE file or at:
+// https://polyformproject.org/wp-content/uploads/2020/06/PolyForm-Shield-1.0.0.txt
+"""
+
+headers = {
+ '.rs': header,
+ '.kt': header,
+ '.java': header,
+ '.swift': header,
+}
+
+# TODO(mattklein123): Figure out if we want our license at the top of the generated proto files.
+# If so we need to build it into the generator.
+exclude_dirs = (
+ './.git',
+ './target/',
+)
+
+extensions_to_check = ('.rs', '.toml', '.kt', '.java', '.swift')
+
+
+def check_file(file_path):
+ for dir in exclude_dirs:
+ if file_path.startswith(dir):
+ return
+
+ _, ext = os.path.splitext(file_path)
+ if not ext in extensions_to_check:
+ return
+
+ print(f'Checking {file_path}')
+ with open(file_path, 'r+') as file:
+ content = file.read()
+
+ if (file_path.endswith('Cargo.toml') and
+ not file_path == './Cargo.toml' and
+ not 'license-file = "LICENSE"' in content):
+ raise Exception(
+ f'license-file = "LICENSE" not found in {file_path}')
+
+ header = headers.get(ext)
+ if not header:
+ return
+ header = header.lstrip()
+
+ if not content.startswith(header):
+ file.seek(0, 0)
+ file.write(header + '\n' + content)
+
+
+def iterate_over_files():
+ for root, _, files in os.walk('.'):
+ for file in files:
+ file_path = os.path.join(root, file)
+ check_file(file_path)
+
+
+# Run the script
+iterate_over_files()
diff --git a/ci/mac_ci_setup.sh b/ci/mac_ci_setup.sh
new file mode 100755
index 00000000..a812d5b1
--- /dev/null
+++ b/ci/mac_ci_setup.sh
@@ -0,0 +1,22 @@
+#!/bin/bash
+
+set -e
+
+# https://github.com/actions/runner-images/blob/main/images/macos/macos-14-Readme.md#xcode
+sudo xcode-select --switch /Applications/Xcode_15.4.app
+
+# workaround for https://github.com/actions/setup-python/issues/577#issuecomment-1365231818
+# homebrew fails to update python to 3.9.1.1 due to unlinking failure
+rm -f /usr/local/bin/2to3
+rm -f /usr/local/bin/2to3-3.11
+rm -f /usr/local/bin/idle3
+rm -f /usr/local/bin/idle3.11
+rm -f /usr/local/bin/pydoc3
+rm -f /usr/local/bin/pydoc3.11
+rm -f /usr/local/bin/python3
+rm -f /usr/local/bin/python3.11
+rm -f /usr/local/bin/python3-config
+rm -f /usr/local/bin/python3.11-config
+
+HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 brew install llvm
+echo "/opt/homebrew/opt/llvm/bin" >> $GITHUB_PATH
diff --git a/ci/prepare_example_apps_android.sh b/ci/prepare_example_apps_android.sh
new file mode 100755
index 00000000..da82f0ec
--- /dev/null
+++ b/ci/prepare_example_apps_android.sh
@@ -0,0 +1,27 @@
+#!/bin/bash
+
+set -euo pipefail
+
+echo "+++ Building Android Hello World Example App"
+
+pushd "platform/jvm"
+./gradlew gradle-test-app:assembleDebug --info
+popd
+
+mkdir -p dist
+
+sdk_repo="$(pwd)"
+output="$(mktemp -d)"
+
+pushd "$(mktemp -d)"
+ mv "$sdk_repo/platform/jvm/gradle-test-app/build/outputs/apk/debug/gradle-test-app-debug.apk" "$output/gradle-test-app-debug.apk"
+popd
+
+echo "+++ Bundling Android Example apps"
+
+pushd "$output"
+ zip -r android_example_apps.zip gradle-test-app-debug.apk
+popd
+
+rm -rf dist/android_example_apps.zip
+mv "$output"/android_example_apps.zip dist/example-apps.android.zip
diff --git a/ci/prepare_example_apps_ios.sh b/ci/prepare_example_apps_ios.sh
new file mode 100755
index 00000000..6c81c836
--- /dev/null
+++ b/ci/prepare_example_apps_ios.sh
@@ -0,0 +1,46 @@
+#!/bin/bash
+
+set -euo pipefail
+
+echo "+++ Building iOS Hello World Example App"
+
+mkdir -p dist
+
+./bazelw build \
+ --announce_rc \
+ --config=ci \
+ --config=dbg-ios \
+ //examples/swift/hello_world:hello_world_app --config=dbg-ios
+
+sdk_repo="$(pwd)"
+output="$(mktemp -d)"
+
+pushd "$(mktemp -d)"
+ unzip "$sdk_repo/bazel-bin/examples/swift/hello_world/hello_world_app.ipa"
+ mv "Payload/hello_world_app.app" "$output/ios_hello_world_app.app"
+popd
+
+echo "+++ Building iOS Session Replay Previos Example App"
+
+./bazelw build \
+ --announce_rc \
+ --config=ci \
+ --config=dbg-ios \
+ //examples/swift/session_replay_preview:session_replay_preview_app --config=dbg-ios
+
+sdk_repo="$(pwd)"
+pushd "$(mktemp -d)"
+ unzip "$sdk_repo/bazel-bin/examples/swift/session_replay_preview/session_replay_preview_app.ipa"
+ mv "Payload/session_replay_preview_app.app" "$output/ios_session_replay_preview_app.app"
+popd
+
+echo "+++ Bundling iOS Example apps"
+
+pushd "$output"
+zip -r ios_example_apps.zip \
+ ios_hello_world_app.app \
+ ios_session_replay_preview_app.app
+popd
+
+rm -rf dist/ios_example_apps.zip
+mv "$output"/ios_example_apps.zip dist/example-apps.ios.zip
diff --git a/ci/run_tests.sh b/ci/run_tests.sh
new file mode 100755
index 00000000..db850d2e
--- /dev/null
+++ b/ci/run_tests.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+
+set -euo pipefail
+
+echo "Tests will run"
+echo "run_tests=true" >> "$GITHUB_OUTPUT"
diff --git a/ci/setup_linux_format.sh b/ci/setup_linux_format.sh
new file mode 100755
index 00000000..e1825e24
--- /dev/null
+++ b/ci/setup_linux_format.sh
@@ -0,0 +1,27 @@
+#!/bin/bash
+
+set -euxo pipefail
+
+# buildifier is used for format .bzl / BUILD / WORKSPACE files.
+mkdir -p bin/
+curl -LSs https://github.com/bazelbuild/buildtools/releases/download/6.0.1/buildifier-linux-amd64 --output bin/buildifier
+chmod +x bin/buildifier
+
+# The binaries above dynamically link a library provided by Swift, so download Swift + update the
+# LD_LIBRARY_PATH tell the system how to find them.
+swift_archive_name="swift-5.7.3-RELEASE-ubuntu22.04"
+curl -OL "https://download.swift.org/swift-5.7.3-release/ubuntu2204/swift-5.7.3-RELEASE/$swift_archive_name.tar.gz"
+tar xf "$swift_archive_name.tar.gz"
+
+curl -OL "https://github.com/tamasfe/taplo/releases/download/0.8.1/taplo-linux-x86_64.gz"
+gzip -d "taplo-linux-x86_64.gz"
+mv "taplo-linux-x86_64" taplo
+chmod +x ./taplo
+
+echo "PATH=$(pwd):$(pwd)/$swift_archive_name/usr/bin:$PATH" >> "$GITHUB_ENV"
+echo "LD_LIBRARY_PATH=$(pwd)/$swift_archive_name/usr/lib" >> "@GITHUB_ENV"
+
+# Brings in clang-format and uses clang for C++ compilation
+sudo apt-get install -y clang
+echo "CC=$(which clang)" >> "$GITHUB_ENV"
+echo "CXX=$(which clang++)" >> "$GITHUB_ENV"
diff --git a/ci/verify_android.sh b/ci/verify_android.sh
new file mode 100755
index 00000000..fb67da52
--- /dev/null
+++ b/ci/verify_android.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+set -exuo pipefail
+
+adb uninstall io.bitdrift.capture.helloworld || true
+adb install android_app.apk
+adb shell am start -n io.bitdrift.capture.helloworld/.MainActivity
+
+while ! adb logcat -d | grep -q -e 'Capture Logger has been running for 15000 ms'; do
+ sleep 1
+done
diff --git a/core/.gitignore b/core/.gitignore
new file mode 100644
index 00000000..eb5a316c
--- /dev/null
+++ b/core/.gitignore
@@ -0,0 +1 @@
+target
diff --git a/core/BUILD b/core/BUILD
new file mode 100644
index 00000000..a07e3d99
--- /dev/null
+++ b/core/BUILD
@@ -0,0 +1,7 @@
+load("@rules_cc//cc:defs.bzl", "cc_library")
+
+cc_library(
+ name = "alloc",
+ srcs = ["alloc.cc"],
+ visibility = ["//visibility:public"],
+)
diff --git a/core/alloc.cc b/core/alloc.cc
new file mode 100644
index 00000000..13d51af8
--- /dev/null
+++ b/core/alloc.cc
@@ -0,0 +1,32 @@
+// Copied from
+// https://cs.github.com/chromium/chromium/blob/42bd3d0802e90ca093450a2683ff2a104e10e48a/build/rust/std/remap_alloc.cc
+#include
+#include
+#include
+
+extern "C" {
+
+void* __rdl_alloc(size_t, size_t);
+void __rdl_dealloc(void*);
+void* __rdl_realloc(void*, size_t, size_t, size_t);
+void* __rdl_alloc_zeroed(size_t, size_t);
+
+void* __attribute__((weak)) __rust_alloc(size_t a, size_t b) { return __rdl_alloc(a, b); }
+
+void __attribute__((weak)) __rust_dealloc(void* a) { __rdl_dealloc(a); }
+
+void* __attribute__((weak)) __rust_realloc(void* a, size_t b, size_t c, size_t d) {
+ return __rdl_realloc(a, b, c, d);
+}
+
+void* __attribute__((weak)) __rust_alloc_zeroed(size_t a, size_t b) {
+ return __rdl_alloc_zeroed(a, b);
+}
+
+void __attribute__((weak)) __rust_alloc_error_handler(size_t a, size_t b) { abort(); }
+
+uint8_t __attribute__((weak)) __rust_alloc_error_handler_should_panic = 0;
+
+uint8_t __attribute__((weak)) __rust_no_alloc_shim_is_unstable = 0;
+
+} // extern "C"
diff --git a/deny.toml b/deny.toml
new file mode 100644
index 00000000..e12b49ee
--- /dev/null
+++ b/deny.toml
@@ -0,0 +1,31 @@
+[graph]
+all-features = false
+no-default-features = false
+targets = []
+
+[output]
+feature-depth = 1
+
+[licenses]
+allow = [
+ "0BSD",
+ "Apache-2.0",
+ "BSD-3-Clause",
+ "BSL-1.0",
+ "ISC",
+ "MIT",
+ "MPL-2.0",
+ "OpenSSL",
+ "Unicode-DFS-2016",
+]
+confidence-threshold = 0.8
+exceptions = []
+
+[[licenses.clarify]]
+crate = "ring"
+expression = "MIT AND ISC AND OpenSSL"
+license-files = [{ path = "LICENSE", hash = 0xbd0eed23 }]
+
+[licenses.private]
+ignore = true
+registries = []
diff --git a/docs/images/android_local_dev_copy_external.png b/docs/images/android_local_dev_copy_external.png
new file mode 100644
index 00000000..f1e9b1b7
Binary files /dev/null and b/docs/images/android_local_dev_copy_external.png differ
diff --git a/docs/images/android_local_dev_finish.png b/docs/images/android_local_dev_finish.png
new file mode 100644
index 00000000..c6f466b2
Binary files /dev/null and b/docs/images/android_local_dev_finish.png differ
diff --git a/docs/images/android_local_dev_import_bazel_project.png b/docs/images/android_local_dev_import_bazel_project.png
new file mode 100644
index 00000000..a109856b
Binary files /dev/null and b/docs/images/android_local_dev_import_bazel_project.png differ
diff --git a/docs/images/android_local_dev_root_path.png b/docs/images/android_local_dev_root_path.png
new file mode 100644
index 00000000..0b436795
Binary files /dev/null and b/docs/images/android_local_dev_root_path.png differ
diff --git a/docs/images/android_local_gradle_error.png b/docs/images/android_local_gradle_error.png
new file mode 100644
index 00000000..df081675
Binary files /dev/null and b/docs/images/android_local_gradle_error.png differ
diff --git a/docs/images/android_local_gradle_ndk.png b/docs/images/android_local_gradle_ndk.png
new file mode 100644
index 00000000..6a75fe71
Binary files /dev/null and b/docs/images/android_local_gradle_ndk.png differ
diff --git a/docs/images/android_local_gradle_temp_fix.png b/docs/images/android_local_gradle_temp_fix.png
new file mode 100644
index 00000000..f657a716
Binary files /dev/null and b/docs/images/android_local_gradle_temp_fix.png differ
diff --git a/docs/images/releasing_bitdriftsdk_creating_release.png b/docs/images/releasing_bitdriftsdk_creating_release.png
new file mode 100644
index 00000000..56fa3c36
Binary files /dev/null and b/docs/images/releasing_bitdriftsdk_creating_release.png differ
diff --git a/docs/releasing.md b/docs/releasing.md
new file mode 100644
index 00000000..9762c15c
--- /dev/null
+++ b/docs/releasing.md
@@ -0,0 +1,55 @@
+# Releasing
+
+This document explains the process of releasing new versions of Bitdrift SDK.
+
+## Release process
+
+1. Go to `Actions` tab in GitHub Interface.
+1. Select `Update SKD Version` action from the side menu on the left.
+1. Hit `Run Workflow` button on the right.
+1. Keep `main` branch selection, enter version that follows formatting rules from [Version Formatting](#version-formatting).
+1. The CI job should open a PR named 'Update SDK version to 0.12.1-rc.4' ([example](https://github.com/bitdriftlabs/capture-sdk/pull/1637)).
+1. Approve the PR, wait for the PR to be merged.
+1. Look for `Release on SDK version change / Check for version change (push)` CI job started for the merge commit ([example](https://github.com/bitdriftlabs/capture-sdk/actions/runs/10206791724/job/28240351848)). Click `Details` to see how it progresses and approve public releases as needed.
+
+![](images/releasing_bitdriftsdk_creating_release.png)
+
+An example release can be found [here](https://github.com/bitdriftlabs/capture-sdk/releases/tag/v0.12.1-rc.5).
+
+## Version Formatting
+
+Public bitdrift SDK versions should follow the following format:
+
+```
+0.{x}.{y}(-rc.{z})?
+```
+
+Example 0.1.0.
+
+Please note that while officially our releases follow `0.x.y` format GitHub Releases use their "v" prefixed version (i.e., `v0.x.y`). That's because some tooling
+expects this to differentiate other git tags from versioned releases.
+
+Examples of correctly formatted versions:
+
+* 0.1.0
+* 0.1.12
+* 0.1.12-rc.1
+
+Examples of incorrectly formatted versions:
+
+* v0.1.0
+* v0.1.1.0
+* 0.1.12-rc.0
+* 0.1.12test
+
+### Release Candidates
+
+For increased development velocity and higher quality of stable SDK releases, we allow for the release of RC ("release candidate") versions of the SDK.
+
+The way it works is that for small iterative changes to the SDK (changes we don't want to communicate to our customers as they are too small or not ready) or changes that we want to test more thoroughly before releasing them to a wider audience, we release `0.x.y-rcx` versions of the SDK. Such releases should not be automatically picked up by dependency managers, but their existence will allow us to integrate, test, and monitor them in Lyft apps.
+
+Multiple release candidates can be released for a given SDK version, for example, `0.1.3-rc.1`, followed by `0.1.3-rc.2`, and so on. Once we reach a point where we want to share a given version with a wider audience, we cut a stable release, for instance, `0.1.3`.
+
+### Test Releases
+
+For increased developer velocity, the regex that CI uses to verify versions is more permissive compared to what we recommend the version string to look like for public releases. For example, a version such as `0.1.3-test.1` is allowed.
diff --git a/docs/session-replay.md b/docs/session-replay.md
new file mode 100644
index 00000000..dfa1a098
--- /dev/null
+++ b/docs/session-replay.md
@@ -0,0 +1,78 @@
+# Session Replay
+
+Session replay is a system that allows an app to send screen elements from the Loop SDKs in a compact binary form. It works by traversing the view hierarchy and sending the absolute position / size of every element. There are a few heuristics in place to pick the right views and position them correctly. This logic is described in the next section.
+
+## Heuristics on the client
+
+There are a few challenges we need to get right to get a meaningful representation of the screen:
+
+1. **Infer and tag the type of the views (e.g. Labels, Images, etc)**: The client tries to infer the type, mainly by looking at the class name as well as the class kind (eg. on iOS subclasses of UILabel will be tagged as labels). One important goal of this system is to make this task very generic as well as customizable.
+1. **Ignore views that do not provide any meaningful visualization**: Most of the views in the hierarchy do not actually provide any rendering content. Recognizing these cases can be tricky and the SDK tries to do a best effort to ignore them. As an example, it ignores views with no bitmap layers and transparent backgrounds.
+1. **Provide the right positioning and size depending on the type, not just the view rect**: When you have views like "labels" or "images", the position you really care about is the rendered content not the view itself (e.g. Think about a label that has the width of the full screen, its text alignment is `centered` and the text is ABC).
+1. **Masking the views for what's shown in the screen**: Parent views can mask child views so we want to clip the descendants recursively.
+1. **Serializing the information into a compact binary form**: Once the right views are recognized, the SDK packs the information into a binary format that at most takes 9 bytes per view and a minimum of 5.
+
+1. _TODO: Remove views that are completely covered by others._
+
+## Visualization Customization
+
+Customers can provide types for their custom views that are not necessarily infered by the SDK. At Lyft, for example, we want to assume that `MapboxMapView` is a map view and we want to ignore all subviews. In order to do this, one can do:
+
+```swift
+replay.add(knownClass: "MapboxMapView", type: AnnotatedViewType(.map, recurse: false))
+```
+
+Additionally, we support more complex customizations. The following example would tag all descendants of CenteredLabel as label and provide the right frame:
+
+```swift
+extension CenteredLabel: ReplayIdentifiable {
+ final func identify(frame: inout CGRect) -> AnnotatedViewType? {
+ guard let text = self.text, !text.isEmpty else {
+ return .ignored
+ }
+
+ frame.size = text.boundingRect(with: self.frame.size,
+ attributes: [.font: self.font],
+ context: nil).size
+
+ frame.origin.x += ((self.frame.size.width / 2) - (frame.size.width / 2)).rounded()
+ frame.origin.y += ((self.frame.size.height / 2) - (frame.size.height / 2)).rounded()
+ return AnnotatedViewType(.label, recurse: false)
+ }
+}
+```
+
+## Binary format
+
+The binary PDU is dynamic in size and defined as follows:
+
+- The first byte is used for the `type` and a bitmask which defines the size in bytes of the elements as follows:
+ - The 4 most significant bits are use to define if x, y, width, height (in that order) need to take 2 bytes (1) or just 1 (0).
+ - The 4 least significant bits are use for the view type. This means that the maximum type size is b1111 (ie 15 types)
+- The next byte (or two) is the x position relative to the axis of the window (not its superview)
+- The next byte (or two) is the y position relative to the axis of the window (not its superview)
+- The next byte (or two) is the width size
+- The next byte (or two) is the height size
+
+##### Example 1
+
+```
+(x, y) = (0, 0)
+(width, height) = (0, 0)
+type = 0 (label is id=0)
+
+| 0x00 | 0x00 | 0x00 | 0x00 | 0x00 |
+ type x y width height
+```
+
+##### Example 2
+
+
+```
+(x, y) = (256, 0) # Note `x` would be 0x100 in hex
+(width, height) = (0, 0)
+type = 0 (label is id=0)
+
+| 0x80 | 0x01 | 0x00 | 0x00 | 0x00 | 0x00 |
+ type x x y width height
+```
diff --git a/examples/README.md b/examples/README.md
new file mode 100644
index 00000000..90270109
--- /dev/null
+++ b/examples/README.md
@@ -0,0 +1,103 @@
+# Local Dev Setup
+
+## iOS
+
+### Running example apps on a device
+
+1. Go to https://developer.apple.com/account and log in using your Bitdrift Apple ID.
+1. Use Apple developer portal to add your device (using your device's UUID) to the list of known devices.
+1. Go To Xcode > Settings > Accounts.
+1. Make sure that you are logged in using your Bitdrift Apple ID.
+1. Select "Contrast Labs Inc" team and click "Download Manual Profiles".
+1. Use Xcode to build & run your application on your device.
+
+## Android
+
+### 1. Set up JDK
+
+Azul provides JDK releases that are ARM compatible (do not require Rosetta).
+
+Using Homebrew to setup your machine, you can run the following commands to get the correct Zulu JDKs installed.
+
+```console
+brew tap mdogan/zulu
+brew install --cask zulu-jdk8 zulu-jdk11 zulu-jdk-17
+```
+
+To install without Homebrew you can follow these instructions: [https://docs.azul.com/core/zulu-openjdk/install/macos](https://docs.azul.com/core/zulu-openjdk/install/macos)
+
+### 2. Import hello-world project into Android Studio
+
+To use Android Studio:
+- Install [Android Studio](https://developer.android.com/studio/archive/). The latest verified-to-work version is Android Studio Jellyfish | 2023.3.1 Patch 1. When asked to choose between default or custom installation selecting standard works fine.
+
+#### Opening Loop SDK project in Android Studio with Gradle
+
+Setup the environment, open Android Studio.
+
+1. Select `Open...` and select folder `/capture-sdk/platform/jvm`. This should automatically kick off the Gradle sync process.
+
+ - If you get an `NDK not installed` error:
+
+ ![](../docs/images/android_local_gradle_error.png)
+
+ - Go to Tools > SDK Manager > Android SDK > SDK Tools. Make sure that "Show Package Details" is checked and install the NDK version that is required by the project (currently `25.2.9519653`).
+
+ ![](../docs/images/android_local_gradle_ndk.png)
+
+ - If you get an error `Caused by: com.android.build.gradle.internal.crash.ExternalApiUsageException: org.gradle.api.UnknownTaskException: Task with name 'lintDebug' not found in project ':gradle-test-app'.`, this can be temporarily fixed by commenting out the `lint` task in the `/gradle-test-app/build.gradle.kts` file.
+
+ ![](../docs/images/android_local_gradle_temp_fix.png)
+
+2. Run/debug the test app either on an emulated or physical device
+
+ - If you receive a `cargo` error due to missing architectures, run:
+ ```shell
+ rustup update
+ rustup target add aarch64-linux-android
+ rustup target add x86_64-linux-android
+ ```
+
+
+
+#### Opening Loop SDK project in Android Studio with Bazel
+
+- Install [bazel plugin](https://plugins.jetbrains.com/plugin/9185-bazel-for-android-studio)
+
+Set up the environment, open Android Studio.
+
+1. Add a new bazel project:
+
+![](../docs/images/android_local_dev_import_bazel_project.png)
+
+2. Select your repository root path and hit Next:
+
+![](../docs/images/android_local_dev_root_path.png)
+
+3. Import the `.bazelproject` file from the root directory and hit Next:
+
+![](../docs/images/android_local_dev_copy_external.png)
+
+4. You will see a screen similar to the one below, hit Finish:
+
+![](../docs/images/android_local_dev_finish.png)
+
+5. Sync the project.
+
+![](../docs/images/android_local_dev_sync.png)
+
+#### Entering debugging session
+
+With the project ready, you can now start debugging with Android Studio.
+
+1. From Android Studio select one of the available configurations. Note: If you do not see any configuration available either restart Android Studio or click "Add configuration" and select a desired configuration.
+1. Hit the debug icon.
+1. Optionally you could create symbolic breakpoints before running by going to the Debugger tab.
+
+### 3. Install LLVM so you can run unit tests in Android Studio
+
+`brew install llvm`
+
+and add it to your path, e.g.
+
+`echo 'export PATH="/opt/homebrew/opt/llvm/bin:$PATH"' >> ~/.zshrc`
diff --git a/examples/android/.bazelproject b/examples/android/.bazelproject
new file mode 100644
index 00000000..f28f1473
--- /dev/null
+++ b/examples/android/.bazelproject
@@ -0,0 +1,32 @@
+workspace_type: android
+
+bazel_binary: bazelw
+
+directories:
+ -bazel-bin
+ -bazel-out
+ -bazel-testlogs
+ -build
+ examples/android
+ platform/jvm
+ test/platform/jvm
+
+import_run_configurations:
+ examples/android/run_configuration_example_debug_arm64.xml
+
+targets:
+ //examples/android:android_app
+ //platform/jvm/...
+ //test/platform/jvm/...
+
+test_sources:
+ test/platform/jvm/*
+
+build_flags:
+ --config=android
+
+additional_languages:
+ kotlin
+ java
+ android
+ c
diff --git a/examples/android/AndroidManifest.xml b/examples/android/AndroidManifest.xml
new file mode 100644
index 00000000..65c8db3b
--- /dev/null
+++ b/examples/android/AndroidManifest.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/android/BUILD b/examples/android/BUILD
new file mode 100644
index 00000000..864d4fab
--- /dev/null
+++ b/examples/android/BUILD
@@ -0,0 +1,46 @@
+load("@build_bazel_rules_android//android:rules.bzl", "aar_import", "android_binary")
+load("@io_bazel_rules_kotlin//kotlin:android.bzl", "kt_android_library")
+load("@rules_jvm_external//:defs.bzl", "artifact")
+
+aar_import(
+ name = "imported_capture_aar",
+ aar = "//:capture_aar",
+)
+
+kt_android_library(
+ name = "hello_world_kt",
+ srcs = [
+ "HelloWorldApp.kt",
+ "MainActivity.kt",
+ ],
+ custom_package = "io.bitdrift.capture.helloworld",
+ manifest = "AndroidManifest.xml",
+ plugins = ["//:jetpack_compose_compiler_plugin"],
+ resource_files = ["res/layout/android_main.xml"],
+ deps = [
+ ":imported_capture_aar",
+ artifact("com.google.code.findbugs:jsr305"),
+ artifact("com.squareup.okhttp3:okhttp"),
+ artifact("androidx.core:core"),
+ artifact("androidx.startup:startup-runtime"),
+ artifact("androidx.lifecycle:lifecycle-common"),
+ artifact("androidx.lifecycle:lifecycle-process"),
+ artifact("androidx.appcompat:appcompat"),
+ artifact("androidx.activity:activity-compose"),
+ artifact("androidx.compose.material:material"),
+ artifact("com.michael-bull.kotlin-result:kotlin-result-jvm"),
+ artifact("com.google.code.gson:gson"),
+ ],
+)
+
+android_binary(
+ name = "android_app",
+ custom_package = "io.bitdrift.capture.helloworld",
+ manifest = "AndroidManifest.xml",
+ manifest_values = {
+ "applicationId": "io.bitdrift.capture.helloworld",
+ },
+ proguard_specs = ["base.pro"],
+ visibility = ["//visibility:public"],
+ deps = [":hello_world_kt"],
+)
diff --git a/examples/android/HelloWorldApp.kt b/examples/android/HelloWorldApp.kt
new file mode 100644
index 00000000..35bf41cc
--- /dev/null
+++ b/examples/android/HelloWorldApp.kt
@@ -0,0 +1,62 @@
+// capture-sdk - bitdrift's client SDK
+// Copyright Bitdrift, Inc. All rights reserved.
+//
+// Use of this source code is governed by a source available license that can be found in the
+// LICENSE file or at:
+// https://polyformproject.org/wp-content/uploads/2020/06/PolyForm-Shield-1.0.0.txt
+
+package io.bitdrift.capture.helloworld
+
+import android.app.Application
+import android.os.Handler
+import android.os.Looper
+import android.util.Log
+import io.bitdrift.capture.Capture.Logger
+import io.bitdrift.capture.common.DefaultClock
+import io.bitdrift.capture.providers.FieldProvider
+import io.bitdrift.capture.providers.session.SessionStrategy
+import okhttp3.HttpUrl
+import java.util.UUID
+
+private const val bitdriftAPIKey = ""
+private val BITDRIFT_URL = HttpUrl.Builder().scheme("https").host("api.bitdrift.io").build()
+private val kLoggerRunningDurationThreshold = 15_000L
+
+class HelloWorldApp : Application() {
+
+ override fun onCreate() {
+ super.onCreate()
+
+ setupExampleCrashHandler()
+
+ val userID = UUID.randomUUID().toString();
+
+ Logger.configure(
+ apiKey = bitdriftAPIKey,
+ apiUrl = BITDRIFT_URL,
+ sessionStrategy = SessionStrategy.Fixed { UUID.randomUUID().toString() },
+ fieldProviders = listOf(
+ FieldProvider {
+ mapOf(
+ "foo" to "bar",
+ "user_id" to userID
+ )
+ }
+ )
+ )
+
+ Log.v("HelloWorldApp", "Android Bitdrift app launched with session url=${Logger.sessionUrl}")
+
+ Handler(Looper.getMainLooper()).postDelayed({
+ Log.i("HelloWorldApp", "Capture Logger has been running for $kLoggerRunningDurationThreshold ms")
+ }, kLoggerRunningDurationThreshold)
+ }
+
+ private fun setupExampleCrashHandler() {
+ val ogHandler = Thread.getDefaultUncaughtExceptionHandler()
+ Thread.setDefaultUncaughtExceptionHandler { thread, throwable ->
+ Log.w("HelloWorldApp", "Uncaught exception in thread ${thread.name}", throwable)
+ ogHandler?.uncaughtException(thread, throwable)
+ }
+ }
+}
diff --git a/examples/android/MainActivity.kt b/examples/android/MainActivity.kt
new file mode 100644
index 00000000..2e405376
--- /dev/null
+++ b/examples/android/MainActivity.kt
@@ -0,0 +1,239 @@
+// capture-sdk - bitdrift's client SDK
+// Copyright Bitdrift, Inc. All rights reserved.
+//
+// Use of this source code is governed by a source available license that can be found in the
+// LICENSE file or at:
+// https://polyformproject.org/wp-content/uploads/2020/06/PolyForm-Shield-1.0.0.txt
+
+package io.bitdrift.capture.helloworld
+
+import android.content.ClipData
+import android.content.ClipboardManager
+import android.content.Context
+import android.os.Bundle
+import android.util.Base64
+import android.util.Log
+import android.view.View
+import android.view.ViewGroup
+import android.view.ViewGroup.LayoutParams.MATCH_PARENT
+import android.widget.ArrayAdapter
+import android.widget.Button
+import android.widget.Spinner
+import android.widget.TextView
+import androidx.activity.ComponentActivity
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.material.Text
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.ComposeView
+import androidx.compose.ui.platform.testTag
+import com.github.michaelbull.result.onFailure
+import com.github.michaelbull.result.onSuccess
+import io.bitdrift.capture.Capture.Logger
+import io.bitdrift.capture.LogLevel
+import io.bitdrift.capture.common.ErrorHandler
+import io.bitdrift.capture.common.Runtime
+import io.bitdrift.capture.common.RuntimeFeature
+import io.bitdrift.capture.network.okhttp.CaptureOkHttpEventListenerFactory
+import io.bitdrift.capture.replay.ReplayLogger
+import io.bitdrift.capture.replay.ReplayModule
+import io.bitdrift.capture.replay.ReplayPreviewClient
+import io.bitdrift.capture.replay.SessionReplayConfiguration
+import io.bitdrift.capture.replay.internal.EncodedScreenMetrics
+import io.bitdrift.capture.replay.internal.FilteredCapture
+import okhttp3.Call
+import okhttp3.Callback
+import okhttp3.HttpUrl
+import okhttp3.OkHttpClient
+import okhttp3.Request
+import okhttp3.Response
+import java.io.IOException
+import kotlin.system.exitProcess
+
+class MainActivity : ComponentActivity() {
+
+ private val replayPreviewClient: ReplayPreviewClient by lazy {
+ ReplayPreviewClient(ReplayModule(
+ object: ErrorHandler {
+ override fun handleError(detail: String, e: Throwable?) {
+ Log.e("HelloWorldApp", "Replay handleError: $detail $e")
+ }
+ },
+ object: ReplayLogger {
+ override fun onScreenCaptured(
+ encodedScreen: ByteArray,
+ screen: FilteredCapture,
+ metrics: EncodedScreenMetrics
+ ) {
+ Log.i("HelloWorldApp", "Replay onScreenCaptured: took=${metrics.captureTimeMs}ms")
+ Log.i("HelloWorldApp", "Replay onScreenCaptured: screen=${screen}")
+ Log.i("HelloWorldApp", "Replay onScreenCaptured: encodedScreen=${Base64.encodeToString(encodedScreen, 0)}")
+ }
+
+ override fun logVerboseInternal(message: String, fields: Map?) {
+ Log.v("HelloWorldApp", message)
+ }
+
+ override fun logDebugInternal(message: String, fields: Map?) {
+ Log.d("HelloWorldApp", message)
+ }
+
+ override fun logErrorInternal(message: String, e: Throwable?, fields: Map?) {
+ Log.e("HelloWorldApp", message, e)
+ }
+ },
+ SessionReplayConfiguration(),
+ object: Runtime {
+ override fun isEnabled(feature: RuntimeFeature): Boolean {
+ return true
+ }
+ }
+ ), this.applicationContext)
+ }
+ private lateinit var clipboardManager: ClipboardManager
+ private lateinit var client: OkHttpClient
+ private lateinit var sessionIdTextView: TextView
+ private lateinit var deviceCodeTextView: TextView
+ private lateinit var logLevelSpinner: Spinner
+ private lateinit var appExitReasonSpinner: Spinner
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.android_main)
+ Log.v("HelloWorldApp", "MainActivity launched")
+
+ clipboardManager = applicationContext.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
+
+ sessionIdTextView = findViewById(R.id.session_id)
+ sessionIdTextView.text = Logger.sessionId
+
+ deviceCodeTextView = findViewById(R.id.device_code)
+
+ logLevelSpinner = findViewById(R.id.spinner)
+ logLevelSpinner.adapter = ArrayAdapter(this, android.R.layout.simple_spinner_item, LogLevel.values())
+ appExitReasonSpinner = findViewById(R.id.spinner2)
+ appExitReasonSpinner.adapter = ArrayAdapter(this, android.R.layout.simple_spinner_item, AppExitReason.values())
+
+ createComposeUI()
+
+ client = OkHttpClient.Builder()
+ .eventListenerFactory(CaptureOkHttpEventListenerFactory())
+ .build()
+
+ Logger.addField("field_container_field_key", "field_container_field_value")
+ Logger.logInfo(mapOf("key" to "value")) { "MainActivity onCreate called" }
+ }
+
+ private fun createComposeUI() {
+ // We have a container in our Activity layout so lets grab that so we can add our ComposeView.
+ val container = findViewById(R.id.compose_container)
+
+ // We create our new ComposeView to match the height and width of the container.
+ val composeView = ComposeView(this).apply {
+ layoutParams = ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT)
+
+ // The setContent call takes a Composable lambda extension which can render Composable UI.
+ setContent {
+ // We then render a simple Text component from Compose.
+ Text(
+ text = "Hello I am from Compose",
+ modifier = Modifier.fillMaxSize().testTag("my-custom-test-compose-view")
+ )
+ }
+ }
+
+ // Finally we add the ComposeView to the container to be rendered.
+ container.addView(composeView)
+ }
+
+ fun runLogger(@Suppress("UNUSED_PARAMETER") view: View) {
+ val selectedLogLevel = logLevelSpinner.selectedItem.toString()
+ Log.v("HelloWorldApp", "Calling Log method with level=$selectedLogLevel")
+ val myException = Exception("Fake Test Exception")
+ Logger.log(LogLevel.valueOf(selectedLogLevel), mapOf("key" to "value"), myException) { "$selectedLogLevel log sent from Hello World!!" }
+ }
+
+ fun makeOkHttpRequest(@Suppress("UNUSED_PARAMETER") view: View) {
+ val req = Request.Builder()
+ .url(HttpUrl.Builder().scheme("https").host("api-fe.bitdrift.io").addPathSegment("/fe/ping").build())
+ .method("GET", null)
+ .build()
+
+ val call = client.newCall(req)
+
+ call.enqueue(object : Callback {
+ override fun onResponse(call: Call, response: Response) {
+ Log.v("HelloWorldApp", "Http request completed with status code=${response.code}")
+ }
+
+ override fun onFailure(call: Call, e: IOException) {
+ Log.v("HelloWorldApp", "Http request failed with exception=${e.javaClass::class.simpleName}")
+ }
+ })
+ }
+
+ fun copySessionUrl(@Suppress("UNUSED_PARAMETER") view: View) {
+ val data = ClipData.newPlainText("sessionUrl", Logger.sessionUrl)
+ clipboardManager.setPrimaryClip(data)
+ }
+
+ fun startNewSession(@Suppress("UNUSED_PARAMETER") view: View) {
+ Logger.startNewSession()
+ sessionIdTextView.text = Logger.sessionId
+ }
+
+ fun generateTmpDeviceCode(view: View) {
+ Logger.createTemporaryDeviceCode(completion = { result ->
+ result.onSuccess {
+ updateDeviceCodeValue(it)
+ }
+ result.onFailure {
+ updateDeviceCodeValue(it.message)
+ }
+ })
+ }
+
+ private fun updateDeviceCodeValue(deviceCode: String) {
+ deviceCodeTextView.text = deviceCode
+ val data = ClipData.newPlainText("deviceCode", deviceCode)
+ clipboardManager.setPrimaryClip(data)
+ }
+
+
+ fun startReplayStream(@Suppress("UNUSED_PARAMETER") view: View) {
+ replayPreviewClient.connect()
+ replayPreviewClient.captureScreen()
+ findViewById