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