diff --git a/.cargo/config.toml b/.cargo/config.toml
new file mode 100644
index 000000000..434c79fa3
--- /dev/null
+++ b/.cargo/config.toml
@@ -0,0 +1,2 @@
+[alias]
+xtask = "run --package xtask --target-dir target/xtask -- "
diff --git a/.config/hakari.toml b/.config/hakari.toml
index 3d049eb80..900c2bc75 100644
--- a/.config/hakari.toml
+++ b/.config/hakari.toml
@@ -25,3 +25,12 @@ platforms = [
# Write out exact versions rather than a semver range. (Defaults to false.)
# exact-versions = true
+[traversal-excludes]
+workspace-members = [
+ "xtask",
+]
+
+[final-excludes]
+workspace-members = [
+ "xtask",
+]
diff --git a/.config/nextest.toml b/.config/nextest.toml
index 76fd74b5d..6a109e171 100644
--- a/.config/nextest.toml
+++ b/.config/nextest.toml
@@ -1,2 +1,5 @@
+[profile.ci]
+fail-fast = false
+
[profile.ci.junit]
path = "junit.xml"
diff --git a/.github/workflows/audit.yaml b/.github/workflows/audit.yaml
new file mode 100644
index 000000000..402f3e470
--- /dev/null
+++ b/.github/workflows/audit.yaml
@@ -0,0 +1,22 @@
+name: Security audit
+on:
+ push:
+ paths:
+ - '.github/workflows/audit.yaml'
+ - '**/Cargo.toml'
+ - '**/Cargo.lock'
+ - 'deny.toml'
+ schedule:
+ - cron: '0 0 * * *'
+jobs:
+ audit:
+ runs-on: ubuntu-latest
+ permissions:
+ contents: read
+ issues: write
+ steps:
+ - uses: actions/checkout@v4
+
+ - uses: EmbarkStudios/cargo-deny-action@v1
+ with:
+ rust-version: "stable"
diff --git a/.github/workflows/cargo.yaml b/.github/workflows/ci.yaml
similarity index 80%
rename from .github/workflows/cargo.yaml
rename to .github/workflows/ci.yaml
index a421c01f7..b93334c0f 100644
--- a/.github/workflows/cargo.yaml
+++ b/.github/workflows/ci.yaml
@@ -1,10 +1,17 @@
-name: cargo
+name: ci
on:
push:
branches:
- main
- pull_request: {}
+
+ pull_request:
+ workflow_dispatch:
+ merge_group:
+
+concurrency:
+ group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }}
+ cancel-in-progress: true
jobs:
pre-job:
@@ -30,8 +37,6 @@ jobs:
if: ${{ needs.pre-job.outputs.should_skip != 'true' }}
steps:
- uses: actions/checkout@v4
- with:
- ref: ${{ github.event.pull_request.head.sha }}
- uses: awalsh128/cache-apt-pkgs-action@latest
with:
@@ -48,14 +53,8 @@ jobs:
prefix-key: "v0-rust-${{ steps.setup-rust.outputs.cachekey }}"
key: clippy
- - uses: cargo-bins/cargo-binstall@main
-
- - uses: taiki-e/install-action@v2
- with:
- tool: just
-
- name: Make sure code is linted
- run: just ci clippy
+ run: cargo +nightly xtask powerset clippy
fmt:
name: Fmt
@@ -66,8 +65,6 @@ jobs:
checks: write
steps:
- uses: actions/checkout@v4
- with:
- ref: ${{ github.event.pull_request.head.sha }}
- uses: dtolnay/rust-toolchain@stable
id: setup-rust
@@ -75,14 +72,8 @@ jobs:
toolchain: nightly
components: rustfmt
- - uses: cargo-bins/cargo-binstall@main
-
- - uses: taiki-e/install-action@v2
- with:
- tool: just
-
- name: Make sure code is formatted
- run: just ci fmt
+ run: cargo +nightly fmt --check
hakari:
name: Hakari
@@ -91,8 +82,6 @@ jobs:
if: ${{ needs.pre-job.outputs.should_skip != 'true' }}
steps:
- uses: actions/checkout@v4
- with:
- ref: ${{ github.event.pull_request.head.sha }}
- uses: dtolnay/rust-toolchain@stable
id: setup-rust
@@ -103,10 +92,15 @@ jobs:
- uses: taiki-e/install-action@v2
with:
- tool: cargo-hakari,just
+ tool: cargo-hakari
- name: Make sure Hakari is up-to-date
- run: just ci hakari
+ run: |
+ set -xeo pipefail
+
+ cargo hakari manage-deps --dry-run
+ cargo hakari generate --diff
+ cargo hakari verify
test:
name: Test
@@ -115,8 +109,6 @@ jobs:
if: ${{ needs.pre-job.outputs.should_skip != 'true' }}
steps:
- uses: actions/checkout@v4
- with:
- ref: ${{ github.event.pull_request.head.sha }}
- uses: awalsh128/cache-apt-pkgs-action@latest
with:
@@ -137,9 +129,12 @@ jobs:
- uses: taiki-e/install-action@v2
with:
- tool: cargo-nextest,cargo-llvm-cov,just
+ tool: cargo-nextest,cargo-llvm-cov
- - run: just ci test
+ # Note; we don't run the powerset here because it's very slow on CI
+ # Perhaps we should consider it at some point.
+ - name: Run tests
+ run: cargo +nightly llvm-cov nextest --branch --no-fail-fast --all-features --lcov --output-path ./lcov.info --profile ci
- uses: codecov/codecov-action@v5
with:
diff --git a/.github/workflows/gh-cache.yaml b/.github/workflows/gh-cache.yaml
new file mode 100644
index 000000000..1d082437d
--- /dev/null
+++ b/.github/workflows/gh-cache.yaml
@@ -0,0 +1,28 @@
+name: gh-cache
+
+on:
+ pull_request:
+ types:
+ - closed
+
+jobs:
+ cleanup:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Cleanup
+ run: |
+ echo "Fetching list of cache key"
+ cacheKeysForPR=$(gh cache list --ref $BRANCH --limit 100 --json id --jq '.[].id')
+
+ ## Setting this to not fail the workflow while deleting cache keys.
+ set +e
+ echo "Deleting caches..."
+ for cacheKey in $cacheKeysForPR
+ do
+ gh cache delete $cacheKey
+ done
+ echo "Done"
+ env:
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ GH_REPO: ${{ github.repository }}
+ BRANCH: refs/pull/${{ github.event.pull_request.number }}/merge
diff --git a/.gitignore b/.gitignore
index c8c6b5e7a..36565efdc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,3 +9,5 @@ node_modules/
lcov.info
local/
coverage/
+benchmark.txt
+.aliases
diff --git a/Cargo.lock b/Cargo.lock
index b7881b71e..093ed09db 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -76,13 +76,10 @@ dependencies = [
]
[[package]]
-name = "ansi_term"
-version = "0.11.0"
+name = "anes"
+version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
-dependencies = [
- "winapi",
-]
+checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299"
[[package]]
name = "anstream"
@@ -135,9 +132,9 @@ dependencies = [
[[package]]
name = "anyhow"
-version = "1.0.93"
+version = "1.0.94"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4c95c10ba0b00a02636238b814946408b1322d5ac4760326e6fb8ec956d85775"
+checksum = "c1fd03a028ef38ba2276dce7e33fcd6369c158a1bca17946c4b1b701891c1ff7"
[[package]]
name = "arbitrary"
@@ -202,7 +199,7 @@ dependencies = [
"thiserror 1.0.69",
"time",
"tokio",
- "tokio-rustls 0.26.0",
+ "tokio-rustls 0.26.1",
"tokio-util",
"tokio-websockets",
"tracing",
@@ -282,7 +279,7 @@ dependencies = [
"aws-sdk-sts",
"aws-smithy-async",
"aws-smithy-http",
- "aws-smithy-json",
+ "aws-smithy-json 0.60.7",
"aws-smithy-runtime",
"aws-smithy-runtime-api",
"aws-smithy-types",
@@ -339,9 +336,9 @@ dependencies = [
[[package]]
name = "aws-runtime"
-version = "1.4.3"
+version = "1.4.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a10d5c055aa540164d9561a0e2e74ad30f0dcf7393c3a92f6733ddf9c5762468"
+checksum = "b5ac934720fbb46206292d2c75b57e67acfc56fe7dfd34fb9a02334af08409ea"
dependencies = [
"aws-credential-types",
"aws-sigv4",
@@ -365,9 +362,9 @@ dependencies = [
[[package]]
name = "aws-sdk-s3"
-version = "1.64.0"
+version = "1.65.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "35fe5e7f71b1cc6274e905d3bcc7daf94099ac2d4cba83447ffb959b5b27b3c1"
+checksum = "d3ba2c5c0f2618937ce3d4a5ad574b86775576fa24006bcb3128c6e2cbf3c34e"
dependencies = [
"aws-credential-types",
"aws-runtime",
@@ -376,7 +373,7 @@ dependencies = [
"aws-smithy-checksums",
"aws-smithy-eventstream",
"aws-smithy-http",
- "aws-smithy-json",
+ "aws-smithy-json 0.61.1",
"aws-smithy-runtime",
"aws-smithy-runtime-api",
"aws-smithy-types",
@@ -399,15 +396,15 @@ dependencies = [
[[package]]
name = "aws-sdk-sso"
-version = "1.49.0"
+version = "1.50.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "09677244a9da92172c8dc60109b4a9658597d4d298b188dd0018b6a66b410ca4"
+checksum = "05ca43a4ef210894f93096039ef1d6fa4ad3edfabb3be92b80908b9f2e4b4eab"
dependencies = [
"aws-credential-types",
"aws-runtime",
"aws-smithy-async",
"aws-smithy-http",
- "aws-smithy-json",
+ "aws-smithy-json 0.61.1",
"aws-smithy-runtime",
"aws-smithy-runtime-api",
"aws-smithy-types",
@@ -421,15 +418,15 @@ dependencies = [
[[package]]
name = "aws-sdk-ssooidc"
-version = "1.50.0"
+version = "1.51.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "81fea2f3a8bb3bd10932ae7ad59cc59f65f270fc9183a7e91f501dc5efbef7ee"
+checksum = "abaf490c2e48eed0bb8e2da2fb08405647bd7f253996e0f93b981958ea0f73b0"
dependencies = [
"aws-credential-types",
"aws-runtime",
"aws-smithy-async",
"aws-smithy-http",
- "aws-smithy-json",
+ "aws-smithy-json 0.61.1",
"aws-smithy-runtime",
"aws-smithy-runtime-api",
"aws-smithy-types",
@@ -443,15 +440,15 @@ dependencies = [
[[package]]
name = "aws-sdk-sts"
-version = "1.50.0"
+version = "1.51.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6ada54e5f26ac246dc79727def52f7f8ed38915cb47781e2a72213957dc3a7d5"
+checksum = "b68fde0d69c8bfdc1060ea7da21df3e39f6014da316783336deff0a9ec28f4bf"
dependencies = [
"aws-credential-types",
"aws-runtime",
"aws-smithy-async",
"aws-smithy-http",
- "aws-smithy-json",
+ "aws-smithy-json 0.61.1",
"aws-smithy-query",
"aws-smithy-runtime",
"aws-smithy-runtime-api",
@@ -466,9 +463,9 @@ dependencies = [
[[package]]
name = "aws-sigv4"
-version = "1.2.5"
+version = "1.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5619742a0d8f253be760bfbb8e8e8368c69e3587e4637af5754e488a611499b1"
+checksum = "7d3820e0c08d0737872ff3c7c1f21ebbb6693d832312d6152bf18ef50a5471c2"
dependencies = [
"aws-credential-types",
"aws-smithy-eventstream",
@@ -481,7 +478,7 @@ dependencies = [
"hex",
"hmac",
"http 0.2.12",
- "http 1.1.0",
+ "http 1.2.0",
"once_cell",
"p256",
"percent-encoding",
@@ -566,6 +563,15 @@ dependencies = [
"aws-smithy-types",
]
+[[package]]
+name = "aws-smithy-json"
+version = "0.61.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee4e69cc50921eb913c6b662f8d909131bb3e6ad6cb6090d3a39b66fc5c52095"
+dependencies = [
+ "aws-smithy-types",
+]
+
[[package]]
name = "aws-smithy-query"
version = "0.60.7"
@@ -578,9 +584,9 @@ dependencies = [
[[package]]
name = "aws-smithy-runtime"
-version = "1.7.3"
+version = "1.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "be28bd063fa91fd871d131fc8b68d7cd4c5fa0869bea68daca50dcb1cbd76be2"
+checksum = "9f20685047ca9d6f17b994a07f629c813f08b5bce65523e47124879e60103d45"
dependencies = [
"aws-smithy-async",
"aws-smithy-http",
@@ -613,7 +619,7 @@ dependencies = [
"aws-smithy-types",
"bytes",
"http 0.2.12",
- "http 1.1.0",
+ "http 1.2.0",
"pin-project-lite",
"tokio",
"tracing",
@@ -631,7 +637,7 @@ dependencies = [
"bytes-utils",
"futures-core",
"http 0.2.12",
- "http 1.1.0",
+ "http 1.2.0",
"http-body 0.4.6",
"http-body 1.0.1",
"http-body-util",
@@ -679,7 +685,7 @@ dependencies = [
"axum-core",
"bytes",
"futures-util",
- "http 1.1.0",
+ "http 1.2.0",
"http-body 1.0.1",
"http-body-util",
"hyper 1.5.1",
@@ -712,7 +718,7 @@ dependencies = [
"async-trait",
"bytes",
"futures-util",
- "http 1.1.0",
+ "http 1.2.0",
"http-body 1.0.1",
"http-body-util",
"mime",
@@ -956,14 +962,20 @@ dependencies = [
"semver",
"serde",
"serde_json",
- "thiserror 2.0.3",
+ "thiserror 2.0.5",
]
+[[package]]
+name = "cast"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5"
+
[[package]]
name = "cc"
-version = "1.2.2"
+version = "1.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f34d93e62b03caf570cccc334cbc6c2fceca82f39211051345108adcba3eebdc"
+checksum = "27f657647bcff5394bf56c7317665bbf790a137a50eaaa5c6bfbb9e27a518f2d"
dependencies = [
"jobserver",
"libc",
@@ -991,7 +1003,7 @@ version = "0.15.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02"
dependencies = [
- "smallvec 1.13.2",
+ "smallvec",
"target-lexicon",
]
@@ -1022,6 +1034,33 @@ dependencies = [
"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 = "clang-sys"
version = "1.8.1"
@@ -1035,18 +1074,19 @@ dependencies = [
[[package]]
name = "clap"
-version = "4.5.21"
+version = "4.5.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fb3b4b9e5a7c7514dfa52869339ee98b3156b0bfb4e8a77c4ff4babb64b1604f"
+checksum = "3135e7ec2ef7b10c6ed8950f0f792ed96ee093fa088608f1c76e569722700c84"
dependencies = [
"clap_builder",
+ "clap_derive",
]
[[package]]
name = "clap_builder"
-version = "4.5.21"
+version = "4.5.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b17a95aa67cc7b5ebd32aa5370189aa0d79069ef1c64ce893bd30fb24bff20ec"
+checksum = "30582fc632330df2bd26877bde0c1f4470d57c582bbc070376afcd04d8cb4838"
dependencies = [
"anstream",
"anstyle",
@@ -1054,11 +1094,23 @@ dependencies = [
"strsim",
]
+[[package]]
+name = "clap_derive"
+version = "4.5.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.90",
+]
+
[[package]]
name = "clap_lex"
-version = "0.7.3"
+version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "afb84c814227b90d6895e01398aee0d8033c00e7466aca416fb6a8e0eb19d8a7"
+checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6"
[[package]]
name = "cmake"
@@ -1208,6 +1260,44 @@ 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",
+ "futures",
+ "is-terminal",
+ "itertools 0.10.5",
+ "num-traits",
+ "once_cell",
+ "oorandom",
+ "plotters",
+ "rayon",
+ "regex",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "tinytemplate",
+ "tokio",
+ "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-channel"
version = "0.5.13"
@@ -1621,9 +1711,9 @@ checksum = "486f806e73c5707928240ddc295403b1b93c96a02038563881c4a2fd84b81ac4"
[[package]]
name = "fdeflate"
-version = "0.3.6"
+version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "07c6f4c64c1d33a3111c4466f7365ebdcc37c5bd1ea0d62aae2e3d722aacbedb"
+checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c"
dependencies = [
"simd-adler32",
]
@@ -1724,9 +1814,9 @@ dependencies = [
[[package]]
name = "fred"
-version = "10.0.0"
+version = "10.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9dfdd0e46d87d0e8fc1e6636a5dd3b9a5c708722e9662df289ba62a8c198a721"
+checksum = "0f5fbcd7118f15ce0ed032105c91137efa563996788a76a770e2fd928ddb243a"
dependencies = [
"arc-swap",
"async-trait",
@@ -1989,7 +2079,7 @@ dependencies = [
"fnv",
"futures-core",
"futures-sink",
- "http 1.1.0",
+ "http 1.2.0",
"indexmap 2.7.0",
"slab",
"tokio",
@@ -2006,7 +2096,7 @@ dependencies = [
"bytes",
"fastrand",
"futures-util",
- "http 1.1.0",
+ "http 1.2.0",
"pin-project-lite",
"tokio",
]
@@ -2025,6 +2115,16 @@ dependencies = [
"tokio-util",
]
+[[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.12.3"
@@ -2073,6 +2173,12 @@ 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 = "hex"
version = "0.4.3"
@@ -2118,7 +2224,7 @@ dependencies = [
"parking_lot",
"rand",
"resolv-conf",
- "smallvec 1.13.2",
+ "smallvec",
"thiserror 1.0.69",
"tokio",
"tracing",
@@ -2166,9 +2272,9 @@ dependencies = [
[[package]]
name = "http"
-version = "1.1.0"
+version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258"
+checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea"
dependencies = [
"bytes",
"fnv",
@@ -2193,7 +2299,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184"
dependencies = [
"bytes",
- "http 1.1.0",
+ "http 1.2.0",
]
[[package]]
@@ -2204,7 +2310,7 @@ checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f"
dependencies = [
"bytes",
"futures-util",
- "http 1.1.0",
+ "http 1.2.0",
"http-body 1.0.1",
"pin-project-lite",
]
@@ -2271,13 +2377,13 @@ dependencies = [
"futures-channel",
"futures-util",
"h2 0.4.7",
- "http 1.1.0",
+ "http 1.2.0",
"http-body 1.0.1",
"httparse",
"httpdate",
"itoa",
"pin-project-lite",
- "smallvec 1.13.2",
+ "smallvec",
"tokio",
"want",
]
@@ -2305,13 +2411,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333"
dependencies = [
"futures-util",
- "http 1.1.0",
+ "http 1.2.0",
"hyper 1.5.1",
"hyper-util",
"rustls 0.23.19",
"rustls-pki-types",
"tokio",
- "tokio-rustls 0.26.0",
+ "tokio-rustls 0.26.1",
"tower-service",
"webpki-roots 0.26.7",
]
@@ -2338,7 +2444,7 @@ dependencies = [
"bytes",
"futures-channel",
"futures-util",
- "http 1.1.0",
+ "http 1.2.0",
"http-body 1.0.1",
"hyper 1.5.1",
"pin-project-lite",
@@ -2427,7 +2533,7 @@ dependencies = [
"icu_normalizer_data",
"icu_properties",
"icu_provider",
- "smallvec 1.13.2",
+ "smallvec",
"utf16_iter",
"utf8_iter",
"write16",
@@ -2512,7 +2618,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e"
dependencies = [
"idna_adapter",
- "smallvec 1.13.2",
+ "smallvec",
"utf8_iter",
]
@@ -2596,12 +2702,32 @@ version = "2.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708"
+[[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 = "is_terminal_polyfill"
version = "1.70.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf"
+[[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.12.1"
@@ -2657,9 +2783,9 @@ dependencies = [
[[package]]
name = "js-sys"
-version = "0.3.74"
+version = "0.3.76"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a865e038f7f6ed956f788f0d7d60c541fff74c7bd74272c5d4cf15c63743e705"
+checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7"
dependencies = [
"once_cell",
"wasm-bindgen",
@@ -2821,15 +2947,6 @@ version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4"
-[[package]]
-name = "matchers"
-version = "0.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f099785f7595cc4b4553a174ce30dd7589ef93391ff414dbb67f62392b9e0ce1"
-dependencies = [
- "regex-automata 0.1.10",
-]
-
[[package]]
name = "matchers"
version = "0.1.0"
@@ -2854,12 +2971,6 @@ dependencies = [
"cfg-if",
]
-[[package]]
-name = "maybe-uninit"
-version = "2.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00"
-
[[package]]
name = "md-5"
version = "0.10.6"
@@ -3133,7 +3244,7 @@ version = "1.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
dependencies = [
- "hermit-abi",
+ "hermit-abi 0.3.9",
"libc",
]
@@ -3152,6 +3263,12 @@ version = "1.20.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775"
+[[package]]
+name = "oorandom"
+version = "11.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b410bbe7e14ab526a0e86877eb47c6996a2bd7746f027ba551028c925390e4e9"
+
[[package]]
name = "openssl-probe"
version = "0.1.5"
@@ -3181,7 +3298,7 @@ dependencies = [
"opentelemetry",
"tracing",
"tracing-core",
- "tracing-subscriber 0.3.19",
+ "tracing-subscriber",
]
[[package]]
@@ -3192,11 +3309,11 @@ checksum = "91cf61a1868dacc576bf2b2a1c3e9ab150af7272909e80085c3173384fe11f76"
dependencies = [
"async-trait",
"futures-core",
- "http 1.1.0",
+ "http 1.2.0",
"opentelemetry",
"opentelemetry-proto",
"opentelemetry_sdk",
- "prost 0.13.3",
+ "prost 0.13.4",
"thiserror 1.0.69",
"tokio",
"tonic",
@@ -3211,7 +3328,7 @@ checksum = "a6e05acbfada5ec79023c85368af14abd0b307c015e9064d249b2a950ef459a6"
dependencies = [
"opentelemetry",
"opentelemetry_sdk",
- "prost 0.13.3",
+ "prost 0.13.4",
"tonic",
]
@@ -3293,15 +3410,6 @@ version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
-[[package]]
-name = "owning_ref"
-version = "0.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6ff55baddef9e4ad00f88b6c743a2a8062d4c6ade126c2a528644b8e444d52ce"
-dependencies = [
- "stable_deref_trait",
-]
-
[[package]]
name = "p256"
version = "0.11.1"
@@ -3338,7 +3446,7 @@ dependencies = [
"cfg-if",
"libc",
"redox_syscall",
- "smallvec 1.13.2",
+ "smallvec",
"windows-targets 0.52.6",
]
@@ -3372,8 +3480,8 @@ checksum = "6eea3058763d6e656105d1403cb04e0a41b7bbac6362d413e7c33be0c32279c9"
dependencies = [
"heck",
"itertools 0.13.0",
- "prost 0.13.3",
- "prost-types 0.13.3",
+ "prost 0.13.4",
+ "prost-types 0.13.4",
]
[[package]]
@@ -3402,20 +3510,20 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
[[package]]
name = "pest"
-version = "2.7.14"
+version = "2.7.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "879952a81a83930934cbf1786752d6dedc3b1f29e8f8fb2ad1d0a36f377cf442"
+checksum = "8b7cafe60d6cf8e62e1b9b2ea516a089c008945bb5a275416789e7db0bc199dc"
dependencies = [
"memchr",
- "thiserror 1.0.69",
+ "thiserror 2.0.5",
"ucd-trie",
]
[[package]]
name = "pest_derive"
-version = "2.7.14"
+version = "2.7.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d214365f632b123a47fd913301e14c946c61d1c183ee245fa76eb752e59a02dd"
+checksum = "816518421cfc6887a0d62bf441b6ffb4536fcc926395a69e1a85852d4363f57e"
dependencies = [
"pest",
"pest_generator",
@@ -3423,9 +3531,9 @@ dependencies = [
[[package]]
name = "pest_generator"
-version = "2.7.14"
+version = "2.7.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eb55586734301717aea2ac313f50b2eb8f60d2fc3dc01d190eefa2e625f60c4e"
+checksum = "7d1396fd3a870fc7838768d171b4616d5c91f6cc25e377b673d714567d99377b"
dependencies = [
"pest",
"pest_meta",
@@ -3436,9 +3544,9 @@ dependencies = [
[[package]]
name = "pest_meta"
-version = "2.7.14"
+version = "2.7.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b75da2a70cf4d9cb76833c990ac9cd3923c9a8905a8929789ce347c84564d03d"
+checksum = "e1e58089ea25d717bfd31fb534e4f3afcc2cc569c70de3e239778991ea3b7dea"
dependencies = [
"once_cell",
"pest",
@@ -3513,11 +3621,39 @@ version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2"
+[[package]]
+name = "plotters"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aeb6f403d7a4911efb1e33402027fc44f29b5bf6def3effcc22d7bb75f2b747"
+dependencies = [
+ "num-traits",
+ "plotters-backend",
+ "plotters-svg",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "plotters-backend"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df42e13c12958a16b3f7f4386b9ab1f3e7933914ecea48da7139435263a4172a"
+
+[[package]]
+name = "plotters-svg"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51bae2ac328883f7acdfea3d66a7c35751187f870bc81f94563733a154d7a670"
+dependencies = [
+ "plotters-backend",
+]
+
[[package]]
name = "png"
-version = "0.17.14"
+version = "0.17.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "52f9d46a34a05a6a57566bc2bfae066ef07585a6e3fa30fbbdff5936380623f0"
+checksum = "b67582bd5b65bdff614270e2ea89a1cf15bef71245cc1e5f7ea126977144211d"
dependencies = [
"bitflags 1.3.2",
"crc32fast",
@@ -3572,7 +3708,7 @@ dependencies = [
"prost-build 0.12.6",
"prost-derive 0.12.6",
"sha2",
- "smallvec 1.13.2",
+ "smallvec",
"symbolic-demangle",
"tempfile",
"thiserror 1.0.69",
@@ -3660,12 +3796,12 @@ dependencies = [
[[package]]
name = "prost"
-version = "0.13.3"
+version = "0.13.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7b0487d90e047de87f984913713b85c601c05609aad5b0df4b4573fbf69aa13f"
+checksum = "2c0fef6c4230e4ccf618a35c59d7ede15dea37de8427500f50aff708806e42ec"
dependencies = [
"bytes",
- "prost-derive 0.13.3",
+ "prost-derive 0.13.4",
]
[[package]]
@@ -3691,11 +3827,10 @@ dependencies = [
[[package]]
name = "prost-build"
-version = "0.13.3"
+version = "0.13.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0c1318b19085f08681016926435853bbf7858f9c082d0999b80550ff5d9abe15"
+checksum = "d0f3e5beed80eb580c68e2c600937ac2c4eedabdfd5ef1e5b7ea4f3fba84497b"
dependencies = [
- "bytes",
"heck",
"itertools 0.13.0",
"log",
@@ -3703,8 +3838,8 @@ dependencies = [
"once_cell",
"petgraph",
"prettyplease",
- "prost 0.13.3",
- "prost-types 0.13.3",
+ "prost 0.13.4",
+ "prost-types 0.13.4",
"regex",
"syn 2.0.90",
"tempfile",
@@ -3725,9 +3860,9 @@ dependencies = [
[[package]]
name = "prost-derive"
-version = "0.13.3"
+version = "0.13.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e9552f850d5f0964a4e4d0bf306459ac29323ddfbae05e35a7c0d35cb0803cc5"
+checksum = "157c5a9d7ea5c2ed2d9fb8f495b64759f7816c7eaea54ba3978f0d63000162e3"
dependencies = [
"anyhow",
"itertools 0.13.0",
@@ -3747,11 +3882,11 @@ dependencies = [
[[package]]
name = "prost-types"
-version = "0.13.3"
+version = "0.13.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4759aa0d3a6232fb8dbdb97b61de2c20047c68aca932c7ed76da9d788508d670"
+checksum = "cc2f1e56baa61e93533aebc21af4d2134b70f66275e0fcdf3cbe43d77ff7e8fc"
dependencies = [
- "prost 0.13.3",
+ "prost 0.13.4",
]
[[package]]
@@ -3786,7 +3921,7 @@ dependencies = [
"rustc-hash 2.1.0",
"rustls 0.23.19",
"socket2",
- "thiserror 2.0.3",
+ "thiserror 2.0.5",
"tokio",
"tracing",
]
@@ -3806,7 +3941,7 @@ dependencies = [
"rustls-pki-types",
"rustls-platform-verifier",
"slab",
- "thiserror 2.0.3",
+ "thiserror 2.0.5",
"tinyvec",
"tracing",
"web-time",
@@ -4011,7 +4146,7 @@ dependencies = [
"bytes",
"futures-core",
"futures-util",
- "http 1.1.0",
+ "http 1.2.0",
"http-body 1.0.1",
"http-body-util",
"hyper 1.5.1",
@@ -4033,7 +4168,7 @@ dependencies = [
"serde_urlencoded",
"sync_wrapper 1.0.2",
"tokio",
- "tokio-rustls 0.26.0",
+ "tokio-rustls 0.26.1",
"tower-service",
"url",
"wasm-bindgen",
@@ -4367,6 +4502,8 @@ dependencies = [
name = "scuffle-batching"
version = "0.0.2"
dependencies = [
+ "criterion",
+ "futures",
"scuffle-workspace-hack",
"tokio",
"tokio-util",
@@ -4419,7 +4556,7 @@ dependencies = [
"serde_derive",
"smart-default",
"tracing",
- "tracing-subscriber 0.3.19",
+ "tracing-subscriber",
]
[[package]]
@@ -4428,7 +4565,7 @@ version = "0.0.2"
dependencies = [
"anyhow",
"bytes",
- "http 1.1.0",
+ "http 1.2.0",
"http-body 1.0.1",
"http-body-util",
"opentelemetry",
@@ -4441,7 +4578,7 @@ dependencies = [
"scuffle-http",
"scuffle-pprof",
"scuffle-workspace-hack",
- "thiserror 2.0.3",
+ "thiserror 2.0.5",
"tokio",
"tracing",
"tracing-opentelemetry",
@@ -4479,7 +4616,7 @@ dependencies = [
"bytes",
"futures-util",
"h3",
- "http 1.1.0",
+ "http 1.2.0",
"pin-project-lite",
"scuffle-workspace-hack",
"tokio",
@@ -4490,14 +4627,13 @@ name = "scuffle-http"
version = "0.0.2"
dependencies = [
"async-trait",
- "axum",
"axum-core",
"bytes",
"derive_more 1.0.0",
"futures",
"h3",
"h3-quinn",
- "http 1.1.0",
+ "http 1.2.0",
"http-body 1.0.1",
"httpdate",
"hyper 1.5.1",
@@ -4511,16 +4647,13 @@ dependencies = [
"scuffle-context",
"scuffle-h3-webtransport",
"scuffle-workspace-hack",
- "smallvec 1.13.2",
+ "smallvec",
"spin",
- "thiserror 2.0.3",
+ "thiserror 2.0.5",
"tokio",
- "tokio-rustls 0.26.0",
- "tokio-stream",
+ "tokio-rustls 0.26.1",
"tower-service",
"tracing",
- "tracing-fmt",
- "tracing-subscriber 0.3.19",
]
[[package]]
@@ -4528,14 +4661,14 @@ name = "scuffle-http-examples"
version = "0.0.0"
dependencies = [
"bytes",
- "http 1.1.0",
+ "http 1.2.0",
"http-body 1.0.1",
"http-body-util",
"scuffle-http",
"scuffle-workspace-hack",
"tokio",
"tracing",
- "tracing-subscriber 0.3.19",
+ "tracing-subscriber",
]
[[package]]
@@ -4557,7 +4690,7 @@ dependencies = [
"file-format",
"fred",
"gifski",
- "http 1.1.0",
+ "http 1.2.0",
"humantime-serde",
"imgref",
"libavif-sys",
@@ -4566,7 +4699,7 @@ dependencies = [
"opentelemetry-otlp",
"opentelemetry_sdk",
"png",
- "prost 0.13.3",
+ "prost 0.13.4",
"reqwest",
"rgb",
"scuffle-bootstrap",
@@ -4583,11 +4716,11 @@ dependencies = [
"serde_json",
"smart-default",
"strfmt",
- "thiserror 2.0.3",
+ "thiserror 2.0.5",
"tokio",
"tonic",
"tracing",
- "tracing-subscriber 0.3.19",
+ "tracing-subscriber",
"url",
]
@@ -4608,8 +4741,8 @@ version = "0.0.1"
dependencies = [
"pbjson",
"pbjson-build",
- "prost 0.13.3",
- "prost-build 0.13.3",
+ "prost 0.13.4",
+ "prost-build 0.13.4",
"scuffle-workspace-hack",
"serde",
"tonic",
@@ -4660,7 +4793,7 @@ dependencies = [
"flate2",
"pprof",
"scuffle-workspace-hack",
- "thiserror 2.0.3",
+ "thiserror 2.0.5",
]
[[package]]
@@ -4684,10 +4817,7 @@ dependencies = [
"scuffle-bootstrap",
"scuffle-workspace-hack",
"serde",
- "serde_derive",
- "thiserror 2.0.3",
- "tracing",
- "tracing-subscriber 0.3.19",
+ "thiserror 2.0.5",
]
[[package]]
@@ -4726,6 +4856,8 @@ dependencies = [
"bytes",
"cc",
"chrono",
+ "clap",
+ "clap_builder",
"config",
"crossbeam-utils",
"either",
@@ -4756,7 +4888,7 @@ dependencies = [
"opentelemetry",
"opentelemetry_sdk",
"proc-macro2",
- "prost 0.13.3",
+ "prost 0.13.4",
"quote",
"rand",
"regex",
@@ -4770,21 +4902,21 @@ dependencies = [
"serde",
"serde_json",
"simd-adler32",
- "smallvec 1.13.2",
+ "smallvec",
"socket2",
"spin",
"subtle",
"syn 2.0.90",
"sync_wrapper 1.0.2",
"tokio",
- "tokio-rustls 0.26.0",
+ "tokio-rustls 0.26.1",
"tokio-stream",
"tokio-util",
"tower 0.5.1",
"tracing",
"tracing-core",
- "tracing-log 0.2.0",
- "tracing-subscriber 0.3.19",
+ "tracing-log",
+ "tracing-subscriber",
"uuid",
"zerocopy",
]
@@ -5085,15 +5217,6 @@ dependencies = [
"autocfg",
]
-[[package]]
-name = "smallvec"
-version = "0.6.14"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b97fcaeba89edba30f044a10c6a3cc39df9c3f17d7cd829dd1446cab35f890e0"
-dependencies = [
- "maybe-uninit",
-]
-
[[package]]
name = "smallvec"
version = "1.13.2"
@@ -5317,11 +5440,11 @@ dependencies = [
[[package]]
name = "thiserror"
-version = "2.0.3"
+version = "2.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c006c85c7651b3cf2ada4584faa36773bd07bac24acfb39f3c431b36d7e667aa"
+checksum = "643caef17e3128658ff44d85923ef2d28af81bb71e0d67bbfe1d76f19a73e053"
dependencies = [
- "thiserror-impl 2.0.3",
+ "thiserror-impl 2.0.5",
]
[[package]]
@@ -5337,9 +5460,9 @@ dependencies = [
[[package]]
name = "thiserror-impl"
-version = "2.0.3"
+version = "2.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f077553d607adc1caf65430528a576c757a71ed73944b66ebb58ef2bbd243568"
+checksum = "995d0bbc9995d1f19d28b7215a9352b0fc3cd3a2d2ec95c2cadc485cdedbcdde"
dependencies = [
"proc-macro2",
"quote",
@@ -5358,9 +5481,9 @@ dependencies = [
[[package]]
name = "time"
-version = "0.3.36"
+version = "0.3.37"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885"
+checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21"
dependencies = [
"deranged",
"itoa",
@@ -5379,9 +5502,9 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
[[package]]
name = "time-macros"
-version = "0.2.18"
+version = "0.2.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf"
+checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de"
dependencies = [
"num-conv",
"time-core",
@@ -5406,6 +5529,16 @@ dependencies = [
"zerovec",
]
+[[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 = "tinyvec"
version = "1.8.0"
@@ -5423,9 +5556,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
[[package]]
name = "tokio"
-version = "1.41.1"
+version = "1.42.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "22cfb5bee7a6a52939ca9224d6ac897bb669134078daa8735560897f69de4d33"
+checksum = "5cec9b21b0450273377fc97bd4c33a8acffc8c996c987a7c5b319a0083707551"
dependencies = [
"backtrace",
"bytes",
@@ -5462,20 +5595,19 @@ dependencies = [
[[package]]
name = "tokio-rustls"
-version = "0.26.0"
+version = "0.26.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4"
+checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37"
dependencies = [
"rustls 0.23.19",
- "rustls-pki-types",
"tokio",
]
[[package]]
name = "tokio-stream"
-version = "0.1.16"
+version = "0.1.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1"
+checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047"
dependencies = [
"futures-core",
"pin-project-lite",
@@ -5484,9 +5616,9 @@ dependencies = [
[[package]]
name = "tokio-util"
-version = "0.7.12"
+version = "0.7.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a"
+checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078"
dependencies = [
"bytes",
"futures-core",
@@ -5506,14 +5638,14 @@ dependencies = [
"bytes",
"futures-core",
"futures-sink",
- "http 1.1.0",
+ "http 1.2.0",
"httparse",
"rand",
"ring",
"rustls-native-certs 0.8.1",
"rustls-pki-types",
"tokio",
- "tokio-rustls 0.26.0",
+ "tokio-rustls 0.26.1",
"tokio-util",
]
@@ -5563,7 +5695,7 @@ dependencies = [
"base64 0.22.1",
"bytes",
"h2 0.4.7",
- "http 1.1.0",
+ "http 1.2.0",
"http-body 1.0.1",
"http-body-util",
"hyper 1.5.1",
@@ -5571,7 +5703,7 @@ dependencies = [
"hyper-util",
"percent-encoding",
"pin-project",
- "prost 0.13.3",
+ "prost 0.13.4",
"socket2",
"tokio",
"tokio-stream",
@@ -5589,8 +5721,8 @@ checksum = "9557ce109ea773b399c9b9e5dca39294110b74f1f342cb347a80d1fce8c26a11"
dependencies = [
"prettyplease",
"proc-macro2",
- "prost-build 0.13.3",
- "prost-types 0.13.3",
+ "prost-build 0.13.4",
+ "prost-types 0.13.4",
"quote",
"syn 2.0.90",
]
@@ -5676,26 +5808,6 @@ dependencies = [
"valuable",
]
-[[package]]
-name = "tracing-fmt"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "880547feb88739526e322a366be2411c41c797f0dabcddfe99a3216e5a664f71"
-dependencies = [
- "tracing-subscriber 0.1.6",
-]
-
-[[package]]
-name = "tracing-log"
-version = "0.1.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2"
-dependencies = [
- "log",
- "once_cell",
- "tracing-core",
-]
-
[[package]]
name = "tracing-log"
version = "0.2.0"
@@ -5717,11 +5829,11 @@ dependencies = [
"once_cell",
"opentelemetry",
"opentelemetry_sdk",
- "smallvec 1.13.2",
+ "smallvec",
"tracing",
"tracing-core",
- "tracing-log 0.2.0",
- "tracing-subscriber 0.3.19",
+ "tracing-log",
+ "tracing-subscriber",
"web-time",
]
@@ -5735,41 +5847,24 @@ dependencies = [
"tracing-core",
]
-[[package]]
-name = "tracing-subscriber"
-version = "0.1.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "192ca16595cdd0661ce319e8eede9c975f227cdaabc4faaefdc256f43d852e45"
-dependencies = [
- "ansi_term",
- "chrono",
- "lazy_static",
- "matchers 0.0.1",
- "owning_ref",
- "regex",
- "smallvec 0.6.14",
- "tracing-core",
- "tracing-log 0.1.4",
-]
-
[[package]]
name = "tracing-subscriber"
version = "0.3.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008"
dependencies = [
- "matchers 0.1.0",
+ "matchers",
"nu-ansi-term",
"once_cell",
"regex",
"serde",
"serde_json",
"sharded-slab",
- "smallvec 1.13.2",
+ "smallvec",
"thread_local",
"tracing",
"tracing-core",
- "tracing-log 0.2.0",
+ "tracing-log",
"tracing-serde",
]
@@ -5966,9 +6061,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
[[package]]
name = "wasm-bindgen"
-version = "0.2.97"
+version = "0.2.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d15e63b4482863c109d70a7b8706c1e364eb6ea449b201a76c5b89cedcec2d5c"
+checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396"
dependencies = [
"cfg-if",
"once_cell",
@@ -5977,13 +6072,12 @@ dependencies = [
[[package]]
name = "wasm-bindgen-backend"
-version = "0.2.97"
+version = "0.2.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8d36ef12e3aaca16ddd3f67922bc63e48e953f126de60bd33ccc0101ef9998cd"
+checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79"
dependencies = [
"bumpalo",
"log",
- "once_cell",
"proc-macro2",
"quote",
"syn 2.0.90",
@@ -5992,9 +6086,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-futures"
-version = "0.4.47"
+version = "0.4.49"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9dfaf8f50e5f293737ee323940c7d8b08a66a95a419223d9f41610ca08b0833d"
+checksum = "38176d9b44ea84e9184eff0bc34cc167ed044f816accfe5922e54d84cf48eca2"
dependencies = [
"cfg-if",
"js-sys",
@@ -6005,9 +6099,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro"
-version = "0.2.97"
+version = "0.2.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "705440e08b42d3e4b36de7d66c944be628d579796b8090bfa3471478a2260051"
+checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
@@ -6015,9 +6109,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro-support"
-version = "0.2.97"
+version = "0.2.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "98c9ae5a76e46f4deecd0f0255cc223cfa18dc9b261213b8aa0c7b36f61b3f1d"
+checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2"
dependencies = [
"proc-macro2",
"quote",
@@ -6028,15 +6122,15 @@ dependencies = [
[[package]]
name = "wasm-bindgen-shared"
-version = "0.2.97"
+version = "0.2.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6ee99da9c5ba11bd675621338ef6fa52296b76b83305e9b6e5c77d4c286d6d49"
+checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6"
[[package]]
name = "web-sys"
-version = "0.3.74"
+version = "0.3.76"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a98bc3c33f0fe7e59ad7cd041b89034fa82a7c2d4365ca538dda6cdaf513863c"
+checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc"
dependencies = [
"js-sys",
"wasm-bindgen",
@@ -6364,6 +6458,18 @@ version = "0.13.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "66fee0b777b0f5ac1c69bb06d361268faafa61cd4682ae064a171c16c433e9e4"
+[[package]]
+name = "xtask"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "cargo_metadata",
+ "clap",
+ "serde",
+ "serde_derive",
+ "serde_json",
+]
+
[[package]]
name = "yaml-rust2"
version = "0.8.1"
diff --git a/Cargo.toml b/Cargo.toml
index f348b1eb4..217a8c2fc 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -25,6 +25,7 @@ members = [
"apps/image-processor/proto",
"apps/image-processor/examples",
"crates/workspace-hack",
+ "dev-tools/xtask",
]
resolver = "2"
diff --git a/Justfile b/Justfile
index 38ea2e733..569859062 100644
--- a/Justfile
+++ b/Justfile
@@ -1,4 +1,13 @@
-mod ci 'just/ci.just'
+# An alias for cargo +nightly xtask check
+powerset *args:
+ cargo +nightly xtask powerset {{args}}
+
+# An alias for cargo +nightly fmt --all
+fmt *args:
+ cargo +nightly fmt --all {{args}}
+
+lint *args:
+ cargo +nightly clippy --fix --allow-dirty --all-targets --all-features --allow-staged {{args}}
test *args:
#!/bin/bash
@@ -15,12 +24,9 @@ test *args:
cargo llvm-cov report --html
cargo llvm-cov report --lcov --output-path ./lcov.info
-hakari:
- cargo +nightly hakari generate
- cargo +nightly hakari manage-deps
-
-clippy:
- cargo +nightly clippy --fix --allow-dirty --all-targets --all-features
+deny *args:
+ cargo deny {{args}} --all-features check
-fmt:
- cargo +nightly fmt --all
+workspace-hack:
+ cargo hakari manage-deps
+ cargo hakari generate
diff --git a/README.md b/README.md
index b813fc5f6..4b702a7c2 100644
--- a/README.md
+++ b/README.md
@@ -4,13 +4,18 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/image-processor/Cargo.toml b/apps/image-processor/Cargo.toml
index 614fa302c..f516b8648 100644
--- a/apps/image-processor/Cargo.toml
+++ b/apps/image-processor/Cargo.toml
@@ -26,17 +26,17 @@ file-format = "0.26.0"
rgb = "0.8"
imgref = "1.10"
libavif-sys = { version = "0.17.0", features = ["codec-dav1d", "codec-rav1e"], default-features = false }
-libwebp-sys2 = { version = "0.1", features = ["1_2", "demux", "mux", "static"] }
+libwebp-sys2 = { version = "0.1.9", features = ["1_2", "demux", "mux", "static"] }
gifski = { version = "1.13", default-features = false, features = ["gifsicle"] }
png = "0.17"
-bytes = "1.0"
+bytes = "1"
reqwest = { version = "0.12", default-features = false, features = ["rustls-tls", "json"] }
fast_image_resize = "5.0.0"
chrono = { version = "0.4", features = ["serde"] }
url = { version = "2", features = ["serde"] }
http = "1"
humantime-serde = "1"
-smart-default = "0.7.1"
+smart-default = "0.7"
axum = { version = "0.7" }
tracing-subscriber = { version = "0.3", features = ["env-filter", "json"] }
mongodb = { version = "3" }
diff --git a/apps/image-processor/proto/Cargo.toml b/apps/image-processor/proto/Cargo.toml
index 578f077eb..96bd803ce 100644
--- a/apps/image-processor/proto/Cargo.toml
+++ b/apps/image-processor/proto/Cargo.toml
@@ -31,3 +31,11 @@ serde = [
"pbjson",
]
+[package.metadata.xtask]
+# Even though these features effect the build.rs they are additive because they do not
+# effect each other.
+addative-features = [
+ "server",
+ "client",
+ "serde",
+]
diff --git a/codecov.yml b/codecov.yml
index 349530758..d513377bc 100644
--- a/codecov.yml
+++ b/codecov.yml
@@ -20,6 +20,9 @@ comment:
require_head: no
require_base: no
+ignore:
+ - "dev-tools/**"
+
component_management:
individual_components:
- component_id: scuffle-batching
diff --git a/crates/batching/Cargo.toml b/crates/batching/Cargo.toml
index fe1725a68..fbcacb890 100644
--- a/crates/batching/Cargo.toml
+++ b/crates/batching/Cargo.toml
@@ -10,7 +10,24 @@ license = "MIT OR Apache-2.0"
description = "Optimized batching and dataloading for external services."
keywords = ["batching", "dataloading", "external", "services", "async"]
+[[bench]]
+name = "scuffle-batching-batcher"
+harness = false
+path = "benchmarks/batcher.rs"
+
+[[bench]]
+name = "scuffle-batching-dataloader"
+harness = false
+path = "benchmarks/dataloader.rs"
+
+[lints.rust]
+unexpected_cfgs = { level = "warn", check-cfg = ['cfg(coverage_nightly)'] }
+
[dependencies]
tokio = { version = "1", default-features = false, features = ["time", "sync", "rt"] }
tokio-util = "0.7"
scuffle-workspace-hack.workspace = true
+
+[dev-dependencies]
+criterion = { version = "0.5.1", features = ["async_tokio"] }
+futures = "0.3"
diff --git a/crates/batching/benchmarks/batcher.rs b/crates/batching/benchmarks/batcher.rs
new file mode 100644
index 000000000..a749ad611
--- /dev/null
+++ b/crates/batching/benchmarks/batcher.rs
@@ -0,0 +1,109 @@
+use std::future::Future;
+use std::marker::PhantomData;
+use std::sync::Arc;
+
+use criterion::{black_box, criterion_group, criterion_main, BenchmarkId, Criterion};
+use scuffle_batching::batch::BatchResponse;
+
+struct DataloaderImpl(F, PhantomData);
+
+impl DataloaderImpl {
+ fn new(f: F) -> Self {
+ Self(f, PhantomData)
+ }
+}
+
+impl scuffle_batching::BatchExecutor for DataloaderImpl
+where
+ F: Fn(Vec<(usize, BatchResponse)>) -> Fut + Send + Sync,
+ Fut: Future