diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 7668637e..5b415c7d 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -93,13 +93,26 @@ jobs: test: runs-on: ubuntu-latest + strategy: + matrix: + # nextest always seems to run out of space when compiling: + # + # so we'll run tests for individual crates + # hopefully then we won't run out of space + package: + - "aeronet_io" + - "aeronet_transport" + - "aeronet_channel" + # - "aeronet_steam" # has no tests + - "aeronet_websocket" + - "aeronet_webtransport" steps: - uses: actions/checkout@v5 - uses: dtolnay/rust-toolchain@stable - uses: ./.github/actions/install-bevy-deps - uses: cargo-bins/cargo-binstall@main - run: cargo binstall --no-confirm cargo-nextest - - run: cargo nextest run --workspace --all-features + - run: cargo nextest run --package '${{ matrix.package }}' --all-features # `cargo nextest` currently doesn't support doctests: test-doc: diff --git a/Cargo.lock b/Cargo.lock index 6495b80c..929cb25e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -26,9 +26,9 @@ checksum = "cf203f9d3bd8f29f98833d1fbef628df18f759248a547e7e01cfbf63cda36a99" [[package]] name = "accesskit_consumer" -version = "0.30.1" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdd06f5fea9819250fffd4debf926709f3593ac22f8c1541a2573e5ee0ca01cd" +checksum = "db81010a6895d8707f9072e6ce98070579b43b717193d2614014abd5cb17dd43" dependencies = [ "accesskit", "hashbrown 0.15.5", @@ -36,9 +36,9 @@ dependencies = [ [[package]] name = "accesskit_macos" -version = "0.22.1" +version = "0.22.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fbaf15815f39084e0cb24950c232f0e3634702c2dfbf182ae3b4919a4a1d45" +checksum = "a0089e5c0ac0ca281e13ea374773898d9354cc28d15af9f0f7394d44a495b575" dependencies = [ "accesskit", "accesskit_consumer", @@ -50,9 +50,9 @@ dependencies = [ [[package]] name = "accesskit_windows" -version = "0.29.1" +version = "0.29.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "792991159fa9ba57459de59e12e918bb90c5346fea7d40ac1a11f8632b41e63a" +checksum = "d2d63dd5041e49c363d83f5419a896ecb074d309c414036f616dc0b04faca971" dependencies = [ "accesskit", "accesskit_consumer", @@ -64,9 +64,9 @@ dependencies = [ [[package]] name = "accesskit_winit" -version = "0.29.1" +version = "0.29.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd9db0ea66997e3f4eae4a5f2c6b6486cf206642639ee629dbbb860ace1dec87" +checksum = "c8cfabe59d0eaca7412bfb1f70198dd31e3b0496fee7e15b066f9c36a1a140a0" dependencies = [ "accesskit", "accesskit_macos", @@ -263,9 +263,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" dependencies = [ "memchr", ] @@ -277,7 +277,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed7572b7ba83a31e20d1b48970ee402d2e3e0537dcfe0a3ff4d6eb7508617d43" dependencies = [ "alsa-sys", - "bitflags 2.9.4", + "bitflags 2.10.0", "cfg-if", "libc", ] @@ -299,7 +299,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046" dependencies = [ "android-properties", - "bitflags 2.9.4", + "bitflags 2.10.0", "cc", "cesu8", "jni", @@ -366,22 +366,22 @@ dependencies = [ [[package]] name = "anstyle-query" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" +checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" dependencies = [ - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] name = "anstyle-wincon" -version = "3.0.10" +version = "3.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" +checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -601,9 +601,9 @@ checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "aws-lc-rs" -version = "1.14.1" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879b6c89592deb404ba4dc0ae6b58ffd1795c78991cbb5b8bc441c48a070440d" +checksum = "6b5ce75405893cd713f9ab8e297d8e438f624dde7d706108285f7e17a25a180f" dependencies = [ "aws-lc-sys", "zeroize", @@ -611,11 +611,10 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.32.3" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "107a4e9d9cab9963e04e84bb8dee0e25f2a987f9a8bad5ed054abd439caa8f8c" +checksum = "179c3777a8b5e70e90ea426114ffc565b2c1a9f82f6c4a0c5a34aa6ef5e781b6" dependencies = [ - "bindgen", "cc", "cmake", "dunce", @@ -630,24 +629,24 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "base64ct" -version = "1.8.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" +checksum = "0e050f626429857a27ddccb31e0aca21356bfa709c04041aefddac081a8f068a" [[package]] name = "bevy" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "342f7e9335416dc98642d5747c4ed8a6ad9f7244a36d5b2b7a1b7910e4d8f524" +checksum = "76d3ee8652fe0577fd8a99054e147740850140d530be8e044a9be4e23a3e8a24" dependencies = [ "bevy_internal", ] [[package]] name = "bevy_a11y" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3917cd35096fb2fe176632740b68a4b53cb61006cfff13d66ef47ee2c2478d53" +checksum = "6702a82db1b383641fc7c503451847cdafb57076c203cd3bfe549d3eeef474c3" dependencies = [ "accesskit", "bevy_app", @@ -658,18 +657,18 @@ dependencies = [ [[package]] name = "bevy_android" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2a9dd9488c77fa2ea31b5da2f978aab7f1cc82e6d2c3be0adf637d9fd7cb6c8" +checksum = "42b2d9435e9fe8d7107bb795a6140277872ad5b992cb3934f8d28cfd11040f6f" dependencies = [ "android-activity", ] [[package]] name = "bevy_animation" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00d2eadb9c20d87ab3a5528a8df483492d5b8102d3f2d61c7b1ed23f40a79166" +checksum = "bfaf3ea6d435f4736b3deb60958270443501f5795c7964b1b504abd3be970b4f" dependencies = [ "bevy_animation_macros", "bevy_app", @@ -700,9 +699,9 @@ dependencies = [ [[package]] name = "bevy_animation_macros" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aec80b84926f730f6df81b9bc07255c120f57aaf7ac577f38d12dd8e1a0268ad" +checksum = "d577eae7246a1cda461df1b63188619fc6a3c619adba2a8e5a79e9aa51f64671" dependencies = [ "bevy_macro_utils", "quote", @@ -711,9 +710,9 @@ dependencies = [ [[package]] name = "bevy_anti_alias" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38c1adb85fe0956d6c3b6f90777b829785bb7e29a48f58febeeefd2bad317713" +checksum = "15820535cc88bc280f55635eb3ea58df2703a434a0cc2343472eaa7e607fb27b" dependencies = [ "bevy_app", "bevy_asset", @@ -733,9 +732,9 @@ dependencies = [ [[package]] name = "bevy_app" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f582409b4ed3850d9b66ee94e71a0e2c20e7068121d372530060c4dfcba66fa" +checksum = "8e4fc5dfe9d1d9b8233e1878353b5e66a3f5910c2131d3abf68f9a4116b2d433" dependencies = [ "bevy_derive", "bevy_ecs", @@ -756,9 +755,9 @@ dependencies = [ [[package]] name = "bevy_asset" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e6ee42e74a64a46ab91bd1c0155f8abe5b732bdb948a9b26e541456cc7940e5" +checksum = "357787dbfaba3f73fd185e15d6df70605bddaa774f2ebbcab1aaa031f21fb6c2" dependencies = [ "async-broadcast", "async-fs", @@ -772,7 +771,7 @@ dependencies = [ "bevy_reflect", "bevy_tasks", "bevy_utils", - "bitflags 2.9.4", + "bitflags 2.10.0", "blake3", "crossbeam-channel", "derive_more", @@ -796,9 +795,9 @@ dependencies = [ [[package]] name = "bevy_asset_macros" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d03711d2c087227f64ba85dd38a99d4d6893f80d2475c2e77fb90a883760a055" +checksum = "afa09271d4ca0bf31fda3a9ad57273775d448a05c4046d9367f71d29968d85b4" dependencies = [ "bevy_macro_utils", "proc-macro2", @@ -808,9 +807,9 @@ dependencies = [ [[package]] name = "bevy_audio" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f83620c82f281848c02ed4b65133a0364512b4eca2b39cd21a171e50e2986d89" +checksum = "d79e56e072001524100b00e38cfdea302d9fdabbff48109fc67b528b27a237bb" dependencies = [ "bevy_app", "bevy_asset", @@ -826,9 +825,9 @@ dependencies = [ [[package]] name = "bevy_camera" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b70d79ccbd8bfefc79f33a104dfd82ae2f5276ce04d6df75787bfa3edc4c4c1a" +checksum = "8af1d5a57fde6e577e7b1db58996afb381618294be75a37b3070a20d309678b0" dependencies = [ "bevy_app", "bevy_asset", @@ -852,9 +851,9 @@ dependencies = [ [[package]] name = "bevy_color" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94dc78477c1c208c0cd221c64e907aba8ba165f39bebb72adc6180e1a13e8938" +checksum = "49504fac6b9897f03b4bdc0189c04ef1ba0a9b37926343aa520a71619e90e116" dependencies = [ "bevy_math", "bevy_reflect", @@ -868,9 +867,9 @@ dependencies = [ [[package]] name = "bevy_core_pipeline" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c866a2fe33ec27a612d883223d30f1857aa852766b21a9603628735dace632f" +checksum = "6af7e735685a652a8dba41b886f1330faeb57d4c61398917b7e49b09a7a1c3c1" dependencies = [ "bevy_app", "bevy_asset", @@ -887,7 +886,7 @@ dependencies = [ "bevy_transform", "bevy_utils", "bevy_window", - "bitflags 2.9.4", + "bitflags 2.10.0", "nonmax", "radsort", "smallvec", @@ -897,9 +896,9 @@ dependencies = [ [[package]] name = "bevy_derive" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8c733807158f8fcac68e23222e69ed91a6492ae9410fc2c145b9bb182cfd63e" +checksum = "f9396b256b366a43d7f61d1f230cdab0a512fb4712cbf7d688f3d6fce4c5ea8a" dependencies = [ "bevy_macro_utils", "quote", @@ -908,9 +907,9 @@ dependencies = [ [[package]] name = "bevy_diagnostic" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f12fa32312818c08aa4035bebe9fb3f62aaf7efae33688e718dd6ee6c0147493" +checksum = "d1cdb0ed0c8423570fbbb7c4fc2719a203dd40928fefff45f76ef0889685a446" dependencies = [ "atomic-waker", "bevy_app", @@ -926,9 +925,9 @@ dependencies = [ [[package]] name = "bevy_ecs" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69d929d32190cfcde6efd2df493601c4dbc18a691fd9775a544c951c3c112e1a" +checksum = "a7dd5229dd00d00e70ac6b2fc0a139961252f6ce07d3d268cfcac0da86d5bde4" dependencies = [ "arrayvec", "bevy_ecs_macros", @@ -937,7 +936,7 @@ dependencies = [ "bevy_reflect", "bevy_tasks", "bevy_utils", - "bitflags 2.9.4", + "bitflags 2.10.0", "bumpalo", "concurrent-queue", "derive_more", @@ -954,9 +953,9 @@ dependencies = [ [[package]] name = "bevy_ecs_macros" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6eeddfb80a2e000663e87be9229c26b4da92bddbc06c8776bc0d1f4a7f679079" +checksum = "c4d83bdd2285af4867e76c691406e0a4b55611b583d0c45b6ac7bcec1b45fd48" dependencies = [ "bevy_macro_utils", "proc-macro2", @@ -1012,9 +1011,9 @@ dependencies = [ [[package]] name = "bevy_encase_derive" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7449e5903594a00f007732ba232af0c527ad4e6e3d29bc3e195ec78dbd20c8b2" +checksum = "7179e985f3f1b99265cb87fe194db3b00aee8e2914888d621ff9826e1417ee19" dependencies = [ "bevy_macro_utils", "encase_derive_impl", @@ -1022,9 +1021,9 @@ dependencies = [ [[package]] name = "bevy_gilrs" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28ff35087f25406006338e6d57f31f313a60f3a5e09990ab7c7b5203b0b55077" +checksum = "a39dd8fdfe93314d47355ab3c58da40b648908a368bc536872f75fad4e8f3755" dependencies = [ "bevy_app", "bevy_ecs", @@ -1038,9 +1037,9 @@ dependencies = [ [[package]] name = "bevy_gizmos" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d3f174faa13041634060dd99f6f59c29997fd62f40252f0466c2ebea8603d4d" +checksum = "7ebb9e3ca4938b48e5111151ce4b08f0e6fc207b854db08fa2d8de15ecabe8f8" dependencies = [ "bevy_app", "bevy_asset", @@ -1067,9 +1066,9 @@ dependencies = [ [[package]] name = "bevy_gizmos_macros" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714273aa7f285c0aaa874b7fbe37fe4e6e45355e3e6f3321aefa1b78cda259e0" +checksum = "92c4b3c3aac86f0db85d4f708883ebdc735c3f88ac5b84c033874fcdd3540a9d" dependencies = [ "bevy_macro_utils", "quote", @@ -1078,9 +1077,9 @@ dependencies = [ [[package]] name = "bevy_gltf" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13d67e954b20551818f7cdb33f169ab4db64506ada66eb4d60d3cb8861103411" +checksum = "3479fbaf897320a3ee30c1626b4a1bee0be874ca27699c3b2f3494891d103d9b" dependencies = [ "base64", "bevy_animation", @@ -1113,9 +1112,9 @@ dependencies = [ [[package]] name = "bevy_image" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168de8239b2aedd2eeef9f76ae1909b2fdf859b11dcdb4d4d01b93f5f2c771be" +checksum = "d546bbe2486bfa14971517e7ef427a9384749817c201d3afc60de0325cf52f11" dependencies = [ "bevy_app", "bevy_asset", @@ -1125,7 +1124,7 @@ dependencies = [ "bevy_platform", "bevy_reflect", "bevy_utils", - "bitflags 2.9.4", + "bitflags 2.10.0", "bytemuck", "futures-lite", "guillotiere", @@ -1142,9 +1141,9 @@ dependencies = [ [[package]] name = "bevy_input" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cf4074b2d0d6680b4deb308ded7b4e8b1b99181c0502e2632e78af815b26f01" +checksum = "8ca955b99f4dc2059e9c8574f8d95a5dd5002809fda80d062a94a553c571a467" dependencies = [ "bevy_app", "bevy_ecs", @@ -1159,9 +1158,9 @@ dependencies = [ [[package]] name = "bevy_input_focus" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70761eba0f616a1caa761457bff2b8ae80c9916f39d167fab8c2d5c98d2b8951" +checksum = "de4d1d0e833e31beba1f28a77152b35f946e8c45df364ec4969d58788ab9de7f" dependencies = [ "bevy_app", "bevy_ecs", @@ -1176,9 +1175,9 @@ dependencies = [ [[package]] name = "bevy_internal" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43985739584f3a5d43026aa1edd772f064830be46c497518f05f7dfbc886bba" +checksum = "8f5e645f9e1a24c9667c768b6233beaf4e241739d8ca4fbba59435cc27aabad5" dependencies = [ "bevy_a11y", "bevy_android", @@ -1228,9 +1227,9 @@ dependencies = [ [[package]] name = "bevy_light" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cad00ab66d1e93edb928be66606a71066f3b1cbc9f414720e290ef5361eb6237" +checksum = "47093733280976ebd595f6e25f76603d5067ca4eb7544e59ecb0dd2fc5147810" dependencies = [ "bevy_app", "bevy_asset", @@ -1249,9 +1248,9 @@ dependencies = [ [[package]] name = "bevy_log" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae217a035714a37b779487f82edc4c7c1223f7088d7ad94054f29f524d61c51" +checksum = "b1a2d4ea086ac4663ab9dfb056c7b85eee39e18f7e3e9a4ae6e39897eaa155c5" dependencies = [ "android_log-sys", "bevy_app", @@ -1267,9 +1266,9 @@ dependencies = [ [[package]] name = "bevy_macro_utils" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17dbc3f8948da58b3c17767d20fd3cd35fe4721ed19a9a3204a6f1d6c9951bdd" +checksum = "62d984f9f8bd0f0d9fb020492a955e641e30e7a425f3588bf346cb3e61fec3c3" dependencies = [ "parking_lot", "proc-macro2", @@ -1280,9 +1279,9 @@ dependencies = [ [[package]] name = "bevy_math" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7a41e368ffa95ae2a353197d1ae3993f4d3d471444d80b65c932db667ea7b9e" +checksum = "5fa74ae5d968749cc073da991757d3c7e3504ac6dbaac5f8c2a54b9d19b0b7ed" dependencies = [ "approx", "bevy_reflect", @@ -1300,9 +1299,9 @@ dependencies = [ [[package]] name = "bevy_mesh" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6255244b71153b305fddb4e6f827cb97ed51f276b6e632f5fc46538647948f6" +checksum = "cd9a0ea86abbd17655bc6f9f8d94461dfcd0322431f752fc03748df8b335eff2" dependencies = [ "bevy_app", "bevy_asset", @@ -1314,7 +1313,7 @@ dependencies = [ "bevy_platform", "bevy_reflect", "bevy_transform", - "bitflags 2.9.4", + "bitflags 2.10.0", "bytemuck", "derive_more", "hexasphere", @@ -1331,9 +1330,9 @@ checksum = "7ef8e4b7e61dfe7719bb03c884dc270cd46a82efb40f93e9933b990c5c190c59" [[package]] name = "bevy_pbr" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf8c76337a6ae9d73d50be168aeee974d05fdeda9129a413eaff719e3b7b5fea" +checksum = "4c514b950cda849aa64e9b076a235913577370275125a34a478758505a19d776" dependencies = [ "bevy_app", "bevy_asset", @@ -1353,7 +1352,7 @@ dependencies = [ "bevy_shader", "bevy_transform", "bevy_utils", - "bitflags 2.9.4", + "bitflags 2.10.0", "bytemuck", "derive_more", "fixedbitset", @@ -1367,9 +1366,9 @@ dependencies = [ [[package]] name = "bevy_picking" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a232a8ea4dc9b83c08226f56b868acb1ead06946a95d8b9c8cbbcc860cd8090" +checksum = "b371779713b40dea83b24cdb95054fe999fe8372351a317c4fb768859ac5f010" dependencies = [ "bevy_app", "bevy_asset", @@ -1391,15 +1390,15 @@ dependencies = [ [[package]] name = "bevy_platform" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10cf8cda162688c95250e74cffaa1c3a04597f105d4ca35554106f107308ea57" +checksum = "4691af6d7cfd1b5deb2fc926a43a180a546cdc3fe1e5a013fcee60db9bb2c81f" dependencies = [ "critical-section", "foldhash 0.2.0", "futures-channel", "getrandom 0.3.4", - "hashbrown 0.16.0", + "hashbrown 0.16.1", "js-sys", "portable-atomic", "portable-atomic-util", @@ -1412,9 +1411,9 @@ dependencies = [ [[package]] name = "bevy_post_process" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26ee8ab6043f8bbe43e9c16bbdde0c5e7289b99e62cd8aad1a2a4166a7f2bce6" +checksum = "6b857972f5d56b43b0dce2c843b75b64d5fbbd0f6177f6ecccd75e7e41f72deb" dependencies = [ "bevy_app", "bevy_asset", @@ -1432,7 +1431,7 @@ dependencies = [ "bevy_transform", "bevy_utils", "bevy_window", - "bitflags 2.9.4", + "bitflags 2.10.0", "nonmax", "radsort", "smallvec", @@ -1442,15 +1441,15 @@ dependencies = [ [[package]] name = "bevy_ptr" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28ab4074e7b781bab84e9b0a41ede245d673d1f75646ce0db27643aedcfb3a85" +checksum = "17d24d7906c7de556033168b3485de36c59049fbaef0c2c44c715a23e0329b10" [[package]] name = "bevy_reflect" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "333df3f5947b7e62728eb5c0b51d679716b16c7c5283118fed4563f13230954e" +checksum = "b5472b91928c0f3e4e3988c0d036b00719f19520f53a0c3f8c2af72f00e693c5" dependencies = [ "assert_type_match", "bevy_platform", @@ -1476,9 +1475,9 @@ dependencies = [ [[package]] name = "bevy_reflect_derive" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0205dce9c5a4d8d041b263bcfd96e9d9d6f3d49416e12db347ab5778b3071fe1" +checksum = "083784255162fa39960aa3cf3c23af0e515db2daa7f2e796ae34df993f4d3f6c" dependencies = [ "bevy_macro_utils", "indexmap", @@ -1490,9 +1489,9 @@ dependencies = [ [[package]] name = "bevy_render" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70d6a5d47ebb247e4ecaaf4a3b0310b7c518728ff2362c69f4220d0d3228e17d" +checksum = "44117cbc9448b5a3118eb9c65bd9ec4c574be996148793be2443257daae6eb05" dependencies = [ "async-channel", "bevy_app", @@ -1515,7 +1514,7 @@ dependencies = [ "bevy_transform", "bevy_utils", "bevy_window", - "bitflags 2.9.4", + "bitflags 2.10.0", "bytemuck", "derive_more", "downcast-rs 2.0.2", @@ -1539,9 +1538,9 @@ dependencies = [ [[package]] name = "bevy_render_macros" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7e8b553adf0a4f9f059c5c2dcb52d9ac09abede1c322a92b43b9f4bb11c3843" +checksum = "f9557b7b6b06b1b70c147581f4f410c2de73b6f6f0e82915887020f953bacb5a" dependencies = [ "bevy_macro_utils", "proc-macro2", @@ -1551,18 +1550,19 @@ dependencies = [ [[package]] name = "bevy_replicon" -version = "0.36.1" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7abe4bb7d0140f2472dd7ecbb40dfeb1c4ee53109a7a17eb057f9bb0ab4b7e61" +checksum = "767b7d52e86bc9fd2a0ddb5a0c8a240ec63bfc83ac4bbbe155b63f34518ef11a" dependencies = [ "bevy", - "bitflags 2.9.4", + "bitflags 2.10.0", "bytes", "deterministic-hash", "log", "petgraph", "postcard", "serde", + "smallbitvec", "typeid", "variadics_please", "xxhash-rust", @@ -1570,9 +1570,9 @@ dependencies = [ [[package]] name = "bevy_scene" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e601ffeebbdaba1193f823dbdc9fc8787a24cf83225a72fee4def5c27a18778a" +checksum = "7fcf6efd31fdd1e05724c95900bb1055716c8e3633b05fa731ee75db4241c17d" dependencies = [ "bevy_app", "bevy_asset", @@ -1591,9 +1591,9 @@ dependencies = [ [[package]] name = "bevy_shader" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cef8f8e53776d286eb62bb60164f30671f07005ff407e94ec1176e9426d1477" +checksum = "a655de9f64e113a6e37be76401fb0d6cb84ed7cc4f891e70af4e39d26e9080c3" dependencies = [ "bevy_asset", "bevy_platform", @@ -1608,9 +1608,9 @@ dependencies = [ [[package]] name = "bevy_sprite" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74bb52fa52caa1cc8d95acf45e52efc0c72b59755c2f0801a30fdab367921db0" +checksum = "52b9a80aadf102ef0b012ceba5326253638c891994c303479e9973092e4e1c8b" dependencies = [ "bevy_app", "bevy_asset", @@ -1633,9 +1633,9 @@ dependencies = [ [[package]] name = "bevy_sprite_render" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31bb90a9139b04568bd30b2492ba61234092d95a7f7e3c84b55369b16d7e261b" +checksum = "5eec49a2a9185526f9828559a40b6f66d4c2dbae2df8ea2936d88ba449a5e86a" dependencies = [ "bevy_app", "bevy_asset", @@ -1655,7 +1655,7 @@ dependencies = [ "bevy_text", "bevy_transform", "bevy_utils", - "bitflags 2.9.4", + "bitflags 2.10.0", "bytemuck", "derive_more", "fixedbitset", @@ -1665,9 +1665,9 @@ dependencies = [ [[package]] name = "bevy_state" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe4e955f36cdc7b31556e4619a653dcf65d46967d90d36fb788f746c8e89257e" +checksum = "05e8556a55d548844fc067fac6657b62f8073c94bd7e13c86aa7573f4c2a67b3" dependencies = [ "bevy_app", "bevy_ecs", @@ -1681,9 +1681,9 @@ dependencies = [ [[package]] name = "bevy_state_macros" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c3e4e32b1b96585740a2b447661af7db1b9d688db5e4d96da50461cd8f5ce63" +checksum = "bcda45913b1d6470c6b751656e72fb3f25ca6b5b7b2ee055b294aaed1eb7e5ba" dependencies = [ "bevy_macro_utils", "quote", @@ -1692,9 +1692,9 @@ dependencies = [ [[package]] name = "bevy_tasks" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18839182775f30d26f0f84d9de85d25361bb593c99517a80b64ede6cbaf41adc" +checksum = "bcbbfa5a58a16c4228434d3018c23fde3d78dcd76ec5f5b2b482a21f4b158dd3" dependencies = [ "async-channel", "async-executor", @@ -1711,9 +1711,9 @@ dependencies = [ [[package]] name = "bevy_text" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc1b759cf2ed8992132bd541ebb9ffcfa777d2faf3596d418fb25984bc6677d8" +checksum = "fc144cc6a30ed44a88e342c22d9e3a66a0993a74f792ae07ba79318efb41a86d" dependencies = [ "bevy_app", "bevy_asset", @@ -1737,9 +1737,9 @@ dependencies = [ [[package]] name = "bevy_time" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a52edd3d30ed94074f646ba1c9914e407af9abe5b6fb7a4322c855341a536cc" +checksum = "32835c3dbe082fbbe7d4f2f37f655073421f2882d4320ac2d59f922474260de4" dependencies = [ "bevy_app", "bevy_ecs", @@ -1752,9 +1752,9 @@ dependencies = [ [[package]] name = "bevy_transform" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7995ae14430b1a268d1e4f098ab770e8af880d2df5e4e37161b47d8d9e9625bd" +checksum = "b41fabfeaa53f51ff5ccf4d87e66836293159d50d21f6d3e16c93efb7c30f969" dependencies = [ "bevy_app", "bevy_ecs", @@ -1770,9 +1770,9 @@ dependencies = [ [[package]] name = "bevy_ui" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc999815a67a6b2fc911df9eea27af703ff656aed6fd31d8606dced701f07fd6" +checksum = "aa0fe27b8c641c2537480774dfd9198d56779371b04dd76618db39da4e7c7483" dependencies = [ "accesskit", "bevy_a11y", @@ -1803,9 +1803,9 @@ dependencies = [ [[package]] name = "bevy_ui_render" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adae9770089e04339d003afe7abe7153fe71600d81c828f964c7ac329b04d5b9" +checksum = "d1d2e783bb5f0b748e6360a0055421d5c934b43830b205a84996a75e54330cd7" dependencies = [ "bevy_app", "bevy_asset", @@ -1834,9 +1834,9 @@ dependencies = [ [[package]] name = "bevy_utils" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "080254083c74d5f6eb0649d7cd6181bda277e8fe3c509ec68990a5d56ec23f24" +checksum = "789d04f88c764877a4552e07745b402dbc45f5d0545e6d102558f2f1752a1d89" dependencies = [ "bevy_platform", "disqualified", @@ -1845,9 +1845,9 @@ dependencies = [ [[package]] name = "bevy_window" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f582478606d6b6e5c53befbe7612f038fdfb73f8a27f7aae644406637347acd4" +checksum = "8ae54ec7a0fc344278592a688a01b57b32182abc3ca7d47040773c4cbc2e15e0" dependencies = [ "bevy_app", "bevy_asset", @@ -1864,9 +1864,9 @@ dependencies = [ [[package]] name = "bevy_winit" -version = "0.17.2" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb0ccf2faca4b4c156a26284d1bbf90a8cac8568a273adcd6c1a270c1342f3df" +checksum = "feeaa46d3c4480323e690de8a4ca7f914c074af1f5f70ee3246392992dbf4a0c" dependencies = [ "accesskit", "accesskit_winit", @@ -1888,6 +1888,7 @@ dependencies = [ "bevy_window", "bytemuck", "cfg-if", + "js-sys", "tracing", "wasm-bindgen", "web-sys", @@ -1901,12 +1902,10 @@ version = "0.72.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "cexpr", "clang-sys", "itertools 0.13.0", - "log", - "prettyplease", "proc-macro2", "quote", "regex", @@ -1938,12 +1937,12 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.4" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" dependencies = [ "bytemuck", - "serde", + "serde_core", ] [[package]] @@ -1971,7 +1970,7 @@ version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "generic-array 0.14.9", + "generic-array 0.14.7", ] [[package]] @@ -1983,6 +1982,15 @@ dependencies = [ "objc2 0.5.2", ] +[[package]] +name = "block2" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" +dependencies = [ + "objc2 0.6.3", +] + [[package]] name = "blocking" version = "1.6.2" @@ -2036,9 +2044,9 @@ checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" [[package]] name = "bytes" -version = "1.10.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" +checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" dependencies = [ "portable-atomic", ] @@ -2049,7 +2057,7 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "log", "polling", "rustix 0.38.44", @@ -2071,9 +2079,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.41" +version = "1.2.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac9fe6cdbb24b6ade63616c0a0688e45bb56732262c158df3c0c4bea4ca47cb7" +checksum = "90583009037521a116abf44494efecd645ba48b6622457080f080b85544e2215" dependencies = [ "find-msvc-tools", "jobserver", @@ -2121,9 +2129,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.49" +version = "4.5.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4512b90fa68d3a9932cea5184017c5d200f5921df706d45e853537dea51508f" +checksum = "c9e340e012a1bf4935f5282ed1436d1489548e8f72308207ea5df0e23d2d03f8" dependencies = [ "clap_builder", "clap_derive", @@ -2131,9 +2139,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.49" +version = "4.5.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0025e98baa12e766c67ba13ff4695a887a1eba19569aad00a472546795bd6730" +checksum = "d76b5d13eaa18c901fd2f7fca939fefe3a0727a953561fefdf3b2922b8569d00" dependencies = [ "anstream", "anstyle", @@ -2275,6 +2283,15 @@ dependencies = [ "const_soft_float", ] +[[package]] +name = "convert_case" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "633458d4ef8c78b72454de2d54fd6ab2e60f9e02be22f3c6104cdc8a4e0fceb9" +dependencies = [ + "unicode-segmentation", +] + [[package]] name = "core-foundation" version = "0.9.4" @@ -2331,7 +2348,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "core-foundation 0.10.1", "libc", ] @@ -2362,7 +2379,7 @@ version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da46a9d5a8905cc538a4a5bceb6a4510de7a51049c5588c0114efce102bcbbe8" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "fontdb", "log", "rangemap", @@ -2458,21 +2475,21 @@ checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] name = "crypto-common" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" dependencies = [ - "generic-array 0.14.9", + "generic-array 0.14.7", "typenum", ] [[package]] name = "ctrlc" -version = "3.5.0" +version = "3.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "881c5d0a13b2f1498e2306e82cbada78390e152d4b1378fb28a84f4dcd0dc4f3" +checksum = "73736a89c4aff73035ba2ed2e565061954da00d4970fc9ac25dcc85a2a20d790" dependencies = [ - "dispatch", + "dispatch2", "nix", "windows-sys 0.61.2", ] @@ -2535,9 +2552,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.5.4" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a41953f86f8a05768a6cda24def994fd2f424b04ec5c719cf89989779f199071" +checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" dependencies = [ "powerfmt", ] @@ -2555,21 +2572,23 @@ dependencies = [ [[package]] name = "derive_more" -version = "2.0.1" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" +checksum = "10b768e943bed7bf2cab53df09f4bc34bfd217cdb57d971e769874c9a6710618" dependencies = [ "derive_more-impl", ] [[package]] name = "derive_more-impl" -version = "2.0.1" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" +checksum = "6d286bfdaf75e988b4a78e013ecd79c581e06399ab53fbacd2d916c2f904f30b" dependencies = [ + "convert_case", "proc-macro2", "quote", + "rustc_version", "syn", "unicode-xid", ] @@ -2602,7 +2621,9 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", + "block2 0.6.2", + "libc", "objc2 0.6.3", ] @@ -2634,9 +2655,9 @@ dependencies = [ [[package]] name = "document-features" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" +checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" dependencies = [ "litrs", ] @@ -2682,7 +2703,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d5d0306cd61ca75e29682926d71f2390160247f135965242e904a636f51c0dc" dependencies = [ "ahash", - "bitflags 2.9.4", + "bitflags 2.10.0", "emath", "epaint", "nohash-hasher", @@ -2780,9 +2801,9 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "erased-serde" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "259d404d09818dec19332e31d94558aeb442fea04c817006456c24b5460bbd4b" +checksum = "89e8918065695684b2b0702da20382d5ae6065cf3327bc2d6436bd49a71ce9f3" dependencies = [ "serde", "serde_core", @@ -2888,9 +2909,9 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" +checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844" [[package]] name = "fixedbitset" @@ -2906,9 +2927,9 @@ checksum = "b7ac824320a75a52197e8f2d787f6a38b6718bb6897a35142d749af3c0e8f4fe" [[package]] name = "flate2" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc5a4e564e38c699f2880d3fda590bedc2e69f3f84cd48b457bd892ce61d0aa9" +checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb" dependencies = [ "crc32fast", "miniz_oxide", @@ -2946,9 +2967,9 @@ checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" [[package]] name = "font-types" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "511e2c18a516c666d27867d2f9821f76e7d591f762e9fc41dd6cc5c90fe54b0b" +checksum = "39a654f404bbcbd48ea58c617c2993ee91d1cb63727a37bf2323a4edeed1b8c5" dependencies = [ "bytemuck", ] @@ -3131,9 +3152,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.9" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", @@ -3223,9 +3244,9 @@ dependencies = [ [[package]] name = "glam" -version = "0.30.8" +version = "0.30.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e12d847aeb25f41be4c0ec9587d624e9cd631bc007a8fd7ce3f5851e064c6460" +checksum = "bd47b05dddf0005d850e5644cae7f2b14ac3df487979dbfff3b56f20b1a6ae46" dependencies = [ "bytemuck", "libm", @@ -3314,7 +3335,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "gpu-alloc-types", ] @@ -3324,7 +3345,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", ] [[package]] @@ -3345,7 +3366,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "gpu-descriptor-types", "hashbrown 0.15.5", ] @@ -3356,7 +3377,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", ] [[package]] @@ -3407,12 +3428,13 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.16.0" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" dependencies = [ "equivalent", "serde", + "serde_core", ] [[package]] @@ -3463,12 +3485,11 @@ checksum = "1a9fcbcc408c5526c3ab80d534e5c86e7967c1fb7aa0a8c76abd1edc27deb877" [[package]] name = "http" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" +checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" dependencies = [ "bytes", - "fnv", "itoa", ] @@ -3480,9 +3501,9 @@ checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] name = "icu_collections" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" +checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" dependencies = [ "displaydoc", "potential_utf", @@ -3493,9 +3514,9 @@ dependencies = [ [[package]] name = "icu_locale_core" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" +checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" dependencies = [ "displaydoc", "litemap", @@ -3506,11 +3527,10 @@ dependencies = [ [[package]] name = "icu_normalizer" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" +checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" dependencies = [ - "displaydoc", "icu_collections", "icu_normalizer_data", "icu_properties", @@ -3521,42 +3541,38 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" +checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" [[package]] name = "icu_properties" -version = "2.0.1" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" +checksum = "e93fcd3157766c0c8da2f8cff6ce651a31f0810eaa1c51ec363ef790bbb5fb99" dependencies = [ - "displaydoc", "icu_collections", "icu_locale_core", "icu_properties_data", "icu_provider", - "potential_utf", "zerotrie", "zerovec", ] [[package]] name = "icu_properties_data" -version = "2.0.1" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" +checksum = "02845b3647bb045f1100ecd6480ff52f34c35f82d9880e029d329c21d1054899" [[package]] name = "icu_provider" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" +checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" dependencies = [ "displaydoc", "icu_locale_core", - "stable_deref_trait", - "tinystr", "writeable", "yoke", "zerofrom", @@ -3587,9 +3603,9 @@ dependencies = [ [[package]] name = "image" -version = "0.25.8" +version = "0.25.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "529feb3e6769d234375c4cf1ee2ce713682b8e76538cb13f9fc23e1400a591e7" +checksum = "e6506c6c10786659413faa717ceebcb8f70731c0a60cbae39795fdf114519c1a" dependencies = [ "bytemuck", "byteorder-lite", @@ -3601,12 +3617,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.11.4" +version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" +checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2" dependencies = [ "equivalent", - "hashbrown 0.16.0", + "hashbrown 0.16.1", "serde", "serde_core", ] @@ -3623,7 +3639,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f37dccff2791ab604f9babef0ba14fbe0be30bd368dc541e2b08d07c8aa908f3" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "inotify-sys", "libc", ] @@ -3658,9 +3674,9 @@ dependencies = [ [[package]] name = "is_terminal_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" [[package]] name = "itertools" @@ -3720,9 +3736,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.81" +version = "0.3.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" +checksum = "464a3709c7f55f1f721e5389aa6ea4e3bc6aba669353300af094b29ffbdde1d8" dependencies = [ "once_cell", "wasm-bindgen", @@ -3751,7 +3767,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff7f53bdf698e7aa7ec916411bbdc8078135da11b66db5182675b2227f6c0d07" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", ] [[package]] @@ -3773,9 +3789,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.177" +version = "0.2.178" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" +checksum = "37c93d8daa9d8a012fd8ab92f088405fb202ea0b6ab73ee2482ae66af4f42091" [[package]] name = "libloading" @@ -3799,7 +3815,7 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "libc", "redox_syscall 0.5.18", ] @@ -3828,15 +3844,15 @@ checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" [[package]] name = "litemap" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" +checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" [[package]] name = "litrs" -version = "0.4.2" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed" +checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" [[package]] name = "lock_api" @@ -3849,9 +3865,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.28" +version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" [[package]] name = "lru-slab" @@ -3894,9 +3910,9 @@ checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" [[package]] name = "memmap2" -version = "0.9.8" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843a98750cd611cc2965a8213b53b43e715f13c37a9e096c6408e69990961db7" +checksum = "744133e4a0e0a658e1374cf3bf8e415c4052a15a111acd372764c55b4177d490" dependencies = [ "libc", ] @@ -3907,7 +3923,7 @@ version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00c15a6f673ff72ddcc22394663290f870fb224c1bfce55734a75c414150e605" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "block", "core-graphics-types 0.2.0", "foreign-types", @@ -3934,9 +3950,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" +checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" dependencies = [ "libc", "wasi", @@ -3945,9 +3961,9 @@ dependencies = [ [[package]] name = "moxcms" -version = "0.7.7" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c588e11a3082784af229e23e8e4ecf5bcc6fbe4f69101e0421ce8d79da7f0b40" +checksum = "80986bbbcf925ebd3be54c26613d861255284584501595cf418320c078945608" dependencies = [ "num-traits", "pxfm", @@ -3961,7 +3977,7 @@ checksum = "916cbc7cb27db60be930a4e2da243cf4bc39569195f22fd8ee419cd31d5b662c" dependencies = [ "arrayvec", "bit-set", - "bitflags 2.9.4", + "bitflags 2.10.0", "cfg-if", "cfg_aliases", "codespan-reporting", @@ -4012,7 +4028,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2076a31b7010b17a38c01907c45b945e8f11495ee4dd588309718901b1f7a5b7" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "jni-sys", "log", "ndk-sys 0.5.0+25.2.9519653", @@ -4026,7 +4042,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "jni-sys", "log", "ndk-sys 0.6.0+11769913", @@ -4065,7 +4081,7 @@ version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "cfg-if", "cfg_aliases", "libc", @@ -4204,9 +4220,9 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a973b4e44ce6cad84ce69d797acf9a044532e4184c4f267913d1b546a0727b7a" +checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c" dependencies = [ "num_enum_derive", "rustversion", @@ -4214,9 +4230,9 @@ dependencies = [ [[package]] name = "num_enum_derive" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d" +checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -4264,8 +4280,8 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" dependencies = [ - "bitflags 2.9.4", - "block2", + "bitflags 2.10.0", + "block2 0.5.1", "libc", "objc2 0.5.2", "objc2-core-data", @@ -4280,7 +4296,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "objc2 0.6.3", "objc2-core-graphics", "objc2-foundation 0.3.2", @@ -4292,8 +4308,8 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" dependencies = [ - "bitflags 2.9.4", - "block2", + "bitflags 2.10.0", + "block2 0.5.1", "objc2 0.5.2", "objc2-core-location", "objc2-foundation 0.2.2", @@ -4305,7 +4321,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889" dependencies = [ - "block2", + "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", ] @@ -4316,8 +4332,8 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" dependencies = [ - "bitflags 2.9.4", - "block2", + "bitflags 2.10.0", + "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", ] @@ -4328,7 +4344,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "dispatch2", "objc2 0.6.3", ] @@ -4339,7 +4355,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "dispatch2", "objc2 0.6.3", "objc2-core-foundation", @@ -4352,7 +4368,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" dependencies = [ - "block2", + "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", "objc2-metal", @@ -4364,7 +4380,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781" dependencies = [ - "block2", + "block2 0.5.1", "objc2 0.5.2", "objc2-contacts", "objc2-foundation 0.2.2", @@ -4382,8 +4398,8 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ - "bitflags 2.9.4", - "block2", + "bitflags 2.10.0", + "block2 0.5.1", "dispatch", "libc", "objc2 0.5.2", @@ -4395,7 +4411,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "objc2 0.6.3", "objc2-core-foundation", ] @@ -4416,7 +4432,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "objc2 0.6.3", "objc2-core-foundation", ] @@ -4427,7 +4443,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398" dependencies = [ - "block2", + "block2 0.5.1", "objc2 0.5.2", "objc2-app-kit 0.2.2", "objc2-foundation 0.2.2", @@ -4439,8 +4455,8 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ - "bitflags 2.9.4", - "block2", + "bitflags 2.10.0", + "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", ] @@ -4451,8 +4467,8 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ - "bitflags 2.9.4", - "block2", + "bitflags 2.10.0", + "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", "objc2-metal", @@ -4474,8 +4490,8 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" dependencies = [ - "bitflags 2.9.4", - "block2", + "bitflags 2.10.0", + "block2 0.5.1", "objc2 0.5.2", "objc2-cloud-kit", "objc2-core-data", @@ -4495,7 +4511,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe" dependencies = [ - "block2", + "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", ] @@ -4506,8 +4522,8 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" dependencies = [ - "bitflags 2.9.4", - "block2", + "bitflags 2.10.0", + "block2 0.5.1", "objc2 0.5.2", "objc2-core-location", "objc2-foundation 0.2.2", @@ -4538,9 +4554,9 @@ dependencies = [ [[package]] name = "octets" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4df8e8352f73465f015867c7ab24d2c46511bb8148e7177fe823e88f4f1f9765" +checksum = "2ba5d98c13e549f6f26f7d70808688ab85c6b42eb350ba2524d96c24ebde27e9" [[package]] name = "octs" @@ -4587,9 +4603,9 @@ checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "once_cell_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "oneshot" @@ -4605,9 +4621,9 @@ checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "orbclient" -version = "0.3.48" +version = "0.3.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba0b26cec2e24f08ed8bb31519a9333140a6599b867dac464bb150bdb796fd43" +checksum = "247ad146e19b9437f8604c21f8652423595cf710ad108af40e77d3ae6e96b827" dependencies = [ "libredox", ] @@ -4764,7 +4780,7 @@ version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97baced388464909d42d89643fe4361939af9b7ce7a31ee32a168f832a70f2a0" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "crc32fast", "fdeflate", "flate2", @@ -4824,9 +4840,9 @@ dependencies = [ [[package]] name = "potential_utf" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" +checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" dependencies = [ "zerovec", ] @@ -4861,16 +4877,6 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" -[[package]] -name = "prettyplease" -version = "0.2.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" -dependencies = [ - "proc-macro2", - "syn", -] - [[package]] name = "proc-macro-crate" version = "3.4.0" @@ -4882,9 +4888,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.101" +version = "1.0.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" +checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" dependencies = [ "unicode-ident", ] @@ -4897,9 +4903,9 @@ checksum = "3eb8486b569e12e2c32ad3e204dbaba5e4b5b216e9367044f25f1dba42341773" [[package]] name = "pxfm" -version = "0.1.25" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3cbdf373972bf78df4d3b518d07003938e2c7d1fb5891e55f9cb6df57009d84" +checksum = "7186d3822593aa4393561d186d1393b3923e9d6163d3fbfd6e825e3e6cf3e6a8" dependencies = [ "num-traits", ] @@ -4976,9 +4982,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.41" +version = "1.0.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" +checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" dependencies = [ "proc-macro2", ] @@ -5042,9 +5048,9 @@ checksum = "c3d6831663a5098ea164f89cff59c6284e95f4e3c76ce9848d4529f5ccca9bde" [[package]] name = "rangemap" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93e7e49bb0bf967717f7bd674458b3d6b0c5f48ec7e3038166026a69fc22223" +checksum = "acbbbbea733ec66275512d0b9694f34102e7d5406fdbe2ad8d21b28dce92887c" [[package]] name = "raw-window-handle" @@ -5096,7 +5102,7 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", ] [[package]] @@ -5176,7 +5182,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "beceb6f7bf81c73e73aeef6dd1356d9a1b2b4909e1f0fc3e59b034f9572d7b7f" dependencies = [ "base64", - "bitflags 2.9.4", + "bitflags 2.10.0", "serde", "serde_derive", "unicode-ident", @@ -5200,6 +5206,15 @@ version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + [[package]] name = "rusticata-macros" version = "4.1.0" @@ -5215,7 +5230,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "errno", "libc", "linux-raw-sys 0.4.15", @@ -5228,7 +5243,7 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "errno", "libc", "linux-raw-sys 0.11.0", @@ -5237,9 +5252,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.33" +version = "0.23.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "751e04a496ca00bb97a5e043158d23d66b5aabf2e1d5aa2a0aaebb1aafe6f82c" +checksum = "533f54bc6a7d4f647e46ad909549eda97bf5afc1585190ef692b4286b198bd8f" dependencies = [ "aws-lc-rs", "log", @@ -5274,9 +5289,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.12.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" +checksum = "708c0f9d5f54ba0272468c1d306a52c495b31fa155e91bc25371e6df7996908c" dependencies = [ "web-time", "zeroize", @@ -5284,9 +5299,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.7" +version = "0.103.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10b3f4191e8a80e6b43eebabfac91e5dcecebb27a71f04e820c47ec41d314bf" +checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52" dependencies = [ "aws-lc-rs", "ring", @@ -5306,7 +5321,7 @@ version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfb9cf8877777222e4a3bc7eb247e398b56baba500c38c1c46842431adc8b55c" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "bytemuck", "libm", "smallvec", @@ -5319,9 +5334,9 @@ dependencies = [ [[package]] name = "ruzstd" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3640bec8aad418d7d03c72ea2de10d5c646a598f9883c7babc160d91e3c1b26c" +checksum = "e5ff0cc5e135c8870a775d3320910cd9b564ec036b4dc0b8741629020be63f01" dependencies = [ "twox-hash", ] @@ -5381,7 +5396,7 @@ version = "3.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "core-foundation 0.10.1", "core-foundation-sys", "libc", @@ -5400,9 +5415,15 @@ dependencies = [ [[package]] name = "self_cell" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f7d95a54511e0c7be3f51e8867aa8cf35148d7b9445d44de2f943e2b206e749" +checksum = "16c2f82143577edb4921b71ede051dac62ca3c16084e918bf7b40c96ae10eb33" + +[[package]] +name = "semver" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" [[package]] name = "send_wrapper" @@ -5492,9 +5513,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "simd-adler32" -version = "0.3.7" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" +checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" [[package]] name = "size_format" @@ -5524,13 +5545,19 @@ checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" [[package]] name = "slotmap" -version = "1.0.7" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" +checksum = "bdd58c3c93c3d278ca835519292445cb4b0d4dc59ccfdf7ceadaab3f8aeb4038" dependencies = [ "version_check", ] +[[package]] +name = "smallbitvec" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d31d263dd118560e1a492922182ab6ca6dc1d03a3bf54e7699993f31a4150e3f" + [[package]] name = "smallvec" version = "1.15.1" @@ -5543,7 +5570,7 @@ version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "calloop", "calloop-wayland-source", "cursor-icon", @@ -5615,7 +5642,7 @@ version = "0.3.0+sdk-1.3.268.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", ] [[package]] @@ -5637,9 +5664,12 @@ checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "stackfuture" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6eae92052b72ef70dafa16eddbabffc77e5ca3574be2f7bc1127b36f0a7ad7f2" +checksum = "115beb9c69db2393ff10b75a1b8587a51716e5551d015001e55320ed279d32f9" +dependencies = [ + "const_panic", +] [[package]] name = "static_assertions" @@ -5653,7 +5683,7 @@ version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "722f54c70818b8debdc25b18618b77a0a69fa280012c29e7904d32f9136299fc" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "paste", "steamworks-sys", "thiserror 2.0.17", @@ -5702,9 +5732,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.106" +version = "2.0.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" +checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87" dependencies = [ "proc-macro2", "quote", @@ -5899,9 +5929,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" +checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" dependencies = [ "displaydoc", "zerovec", @@ -6006,9 +6036,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.23.7" +version = "0.23.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" +checksum = "5d7cbc3b4b49633d57a0509303158ca50de80ae32c265093b24c414705807832" dependencies = [ "indexmap", "toml_datetime", @@ -6027,9 +6057,9 @@ dependencies = [ [[package]] name = "tracing" -version = "0.1.41" +version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +checksum = "2d15d90a0b5c19378952d479dc858407149d7bb45a14de0142f6c534b16fc647" dependencies = [ "pin-project-lite", "tracing-attributes", @@ -6038,9 +6068,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.30" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", @@ -6049,9 +6079,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.34" +version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" +checksum = "7a04e24fab5c89c6a36eb8558c9656f30d81de51dfa4d3b45f26b21d61fa0a6c" dependencies = [ "once_cell", "valuable", @@ -6082,9 +6112,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.20" +version = "0.3.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" +checksum = "2f30143827ddab0d256fd843b7a66d164e9f271cfa0dde49142c5ca0ca291f1e" dependencies = [ "matchers", "nu-ansi-term", @@ -6210,9 +6240,9 @@ checksum = "1df77b101bcc4ea3d78dafc5ad7e4f58ceffe0b2b16bf446aeb50b6cb4157656" [[package]] name = "unicode-ident" -version = "1.0.19" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" +checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" [[package]] name = "unicode-linebreak" @@ -6222,15 +6252,15 @@ checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" [[package]] name = "unicode-properties" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" +checksum = "7df058c713841ad818f1dc5d3fd88063241cc61f49f5fbea4b951e8cf5a8d71d" [[package]] name = "unicode-script" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb421b350c9aff471779e262955939f565ec18b86c15364e6bdf0d662ca7c1f" +checksum = "383ad40bb927465ec0ce7720e033cb4ca06912855fc35db31b5755d0de75b1ee" [[package]] name = "unicode-segmentation" @@ -6288,13 +6318,13 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.18.1" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" +checksum = "e2e054861b4bd027cd373e18e8d8d8e6548085000e41290d95ce0c373a654b4a" dependencies = [ "getrandom 0.3.4", "js-sys", - "serde", + "serde_core", "wasm-bindgen", ] @@ -6354,9 +6384,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.104" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" +checksum = "0d759f433fa64a2d763d1340820e46e111a7a5ab75f993d1852d70b03dbb80fd" dependencies = [ "cfg-if", "once_cell", @@ -6365,25 +6395,11 @@ dependencies = [ "wasm-bindgen-shared", ] -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.104" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" -dependencies = [ - "bumpalo", - "log", - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-shared", -] - [[package]] name = "wasm-bindgen-futures" -version = "0.4.54" +version = "0.4.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c" +checksum = "836d9622d604feee9e5de25ac10e3ea5f2d65b41eac0d9ce72eb5deae707ce7c" dependencies = [ "cfg-if", "js-sys", @@ -6394,9 +6410,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.104" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" +checksum = "48cb0d2638f8baedbc542ed444afc0644a29166f1595371af4fecf8ce1e7eeb3" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -6404,22 +6420,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.104" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" +checksum = "cefb59d5cd5f92d9dcf80e4683949f15ca4b511f4ac0a6e14d4e1ac60c6ecd40" dependencies = [ + "bumpalo", "proc-macro2", "quote", "syn", - "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.104" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" +checksum = "cbc538057e648b67f72a982e708d485b2efa771e1ac05fec311f9f63e5800db4" dependencies = [ "unicode-ident", ] @@ -6444,7 +6460,7 @@ version = "0.31.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c66a47e840dc20793f2264eb4b3e4ecb4b75d91c0dd4af04b456128e0bdd449d" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "rustix 1.1.2", "wayland-backend", "wayland-scanner", @@ -6456,7 +6472,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "cursor-icon", "wayland-backend", ] @@ -6478,7 +6494,7 @@ version = "0.32.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "efa790ed75fbfd71283bd2521a1cfdc022aabcc28bdcff00851f9e4ae88d9901" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "wayland-backend", "wayland-client", "wayland-scanner", @@ -6490,7 +6506,7 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a07a14257c077ab3279987c4f8bb987851bf57081b93710381daea94f2c2c032" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "wayland-backend", "wayland-client", "wayland-protocols", @@ -6503,7 +6519,7 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "efd94963ed43cf9938a090ca4f7da58eb55325ec8200c3848963e98dc25b78ec" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "wayland-backend", "wayland-client", "wayland-protocols", @@ -6534,9 +6550,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.81" +version = "0.3.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120" +checksum = "9b32828d774c412041098d182a8b38b16ea816958e07cf40eec2bc080ae137ac" dependencies = [ "js-sys", "wasm-bindgen", @@ -6608,9 +6624,9 @@ dependencies = [ [[package]] name = "weezl" -version = "0.1.10" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a751b3277700db47d3e574514de2eced5e54dc8a5436a3bf7a0b248b2cee16f3" +checksum = "a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88" [[package]] name = "wgpu" @@ -6619,7 +6635,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70b6ff82bbf6e9206828e1a3178e851f8c20f1c9028e74dd3a8090741ccd5798" dependencies = [ "arrayvec", - "bitflags 2.9.4", + "bitflags 2.10.0", "cfg-if", "cfg_aliases", "document-features", @@ -6648,7 +6664,7 @@ dependencies = [ "arrayvec", "bit-set", "bit-vec", - "bitflags 2.9.4", + "bitflags 2.10.0", "cfg_aliases", "document-features", "hashbrown 0.15.5", @@ -6699,15 +6715,15 @@ dependencies = [ [[package]] name = "wgpu-hal" -version = "26.0.4" +version = "26.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7df2c64ac282a91ad7662c90bc4a77d4a2135bc0b2a2da5a4d4e267afc034b9e" +checksum = "a8d0e67224cc7305b3b4eb2cc57ca4c4c3afc665c1d1bee162ea806e19c47bdd" dependencies = [ "android_system_properties", "arrayvec", "ash", "bit-set", - "bitflags 2.9.4", + "bitflags 2.10.0", "block", "bytemuck", "cfg-if", @@ -6751,7 +6767,7 @@ version = "26.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eca7a8d8af57c18f57d393601a1fb159ace8b2328f1b6b5f80893f7d672c9ae2" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "bytemuck", "js-sys", "log", @@ -7323,8 +7339,8 @@ dependencies = [ "ahash", "android-activity", "atomic-waker", - "bitflags 2.9.4", - "block2", + "bitflags 2.10.0", + "block2 0.5.1", "bytemuck", "calloop", "cfg_aliases", @@ -7368,9 +7384,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.7.13" +version = "0.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" +checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829" dependencies = [ "memchr", ] @@ -7383,9 +7399,9 @@ checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" [[package]] name = "writeable" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" +checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" [[package]] name = "wtransport" @@ -7497,7 +7513,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "dlib", "log", "once_cell", @@ -7512,9 +7528,9 @@ checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" [[package]] name = "xml-rs" -version = "0.8.27" +version = "0.8.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fd8403733700263c6eb89f192880191f1b83e332f7a20371ddcf421c4a337c7" +checksum = "3ae8337f8a065cfc972643663ea4279e04e7256de865aa66fe25cec5fb912d3f" [[package]] name = "xwt-core" @@ -7574,11 +7590,10 @@ checksum = "e01738255b5a16e78bbb83e7fbba0a1e7dd506905cfc53f4622d89015a03fbb5" [[package]] name = "yoke" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" +checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" dependencies = [ - "serde", "stable_deref_trait", "yoke-derive", "zerofrom", @@ -7586,9 +7601,9 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" +checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", @@ -7604,18 +7619,18 @@ checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524" [[package]] name = "zerocopy" -version = "0.8.27" +version = "0.8.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" +checksum = "fd74ec98b9250adb3ca554bdde269adf631549f51d8a8f8f0a10b50f1cb298c3" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.27" +version = "0.8.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" +checksum = "d8a8d209fdf45cf5138cbb5a506f6b52522a25afccc534d1475dad8e31105c6a" dependencies = [ "proc-macro2", "quote", @@ -7665,9 +7680,9 @@ dependencies = [ [[package]] name = "zerotrie" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" dependencies = [ "displaydoc", "yoke", @@ -7676,9 +7691,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.4" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" +checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" dependencies = [ "yoke", "zerofrom", @@ -7687,9 +7702,9 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.11.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" +checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index 9d13fa47..81e4499c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -26,7 +26,7 @@ bevy_ecs = { version = "0.17.2", default-features = false } bevy_egui = { version = "0.37.0" } bevy_platform = { version = "0.17.2", default-features = false } bevy_reflect = { version = "0.17.2", default-features = false } -bevy_replicon = { version = "0.36.0", default-features = false } +bevy_replicon = { version = "0.37.0", default-features = false } bevy_state = { version = "0.17.2", default-features = false } bevy_time = { version = "0.17.2", default-features = false } bevy_winit = { version = "0.17.2", default-features = false } @@ -91,8 +91,3 @@ unexpected_cfgs = { level = "warn", check-cfg = [ "cfg(fuzzing)", "cfg(docsrs_aeronet)" ] } - -[workspace.metadata.cargo-shear] -ignored = [ - "bevy_winit", # see `aeronet_transport` feature `document-features` -] diff --git a/crates/aeronet_io/src/connection.rs b/crates/aeronet_io/src/connection.rs index c6733403..7a7acda3 100644 --- a/crates/aeronet_io/src/connection.rs +++ b/crates/aeronet_io/src/connection.rs @@ -213,7 +213,7 @@ fn on_disconnected(trigger: On, mut commands: Commands) { debug!("{entity} disconnected by peer: {reason}"); } DisconnectReason::ByError(err) => { - debug!("{entity} disconnected due to error: {err:?}"); + debug!("{entity} disconnected due to error: {err:#}"); } } diff --git a/crates/aeronet_io/src/packet.rs b/crates/aeronet_io/src/packet.rs index 67f9d3d2..7520f9c6 100644 --- a/crates/aeronet_io/src/packet.rs +++ b/crates/aeronet_io/src/packet.rs @@ -55,8 +55,18 @@ impl Plugin for PacketPlugin { fn build(&self, app: &mut App) { app.register_type::() .register_type::() - .add_systems(PreUpdate, clear_recv_buffers.before(IoSystems::Poll)) - .add_systems(PostUpdate, clear_send_buffers.after(IoSystems::Flush)); + .add_systems( + PreUpdate, + clear_recv_buffers + .before(IoSystems::Poll) + .run_if(not(resource_exists::)), + ) + .add_systems( + PostUpdate, + clear_send_buffers + .after(IoSystems::Flush) + .run_if(not(resource_exists::)), + ); } } @@ -127,6 +137,16 @@ pub struct PacketStats { #[doc(alias = "ping", alias = "latency")] pub struct PacketRtt(pub Duration); +/// Marker resource to indicate that the IO layer should not clear buffers. +/// +/// Normally, [`clear_recv_buffers`] and [`clear_send_buffers`] are ran on every +/// update to clear buffers of IO sessions, if they are not already empty. In +/// some cases, like for testing purposes, this may be undesirable. If this +/// resource is present in the world, these systems will not run. +#[derive(Debug, Clone, Copy, Default, Resource, Reflect)] +#[reflect(Resource)] +pub struct NoClearBuffers; + /// Clears all [`Session::recv`] buffers, emitting warnings if there were any /// packets left in the buffer. pub fn clear_recv_buffers(mut sessions: Query<(Entity, &mut Session)>) { diff --git a/crates/aeronet_io/src/server.rs b/crates/aeronet_io/src/server.rs index a6c67d8c..fca91b0b 100644 --- a/crates/aeronet_io/src/server.rs +++ b/crates/aeronet_io/src/server.rs @@ -230,7 +230,7 @@ fn on_closed(trigger: On, children: Query<&Children>, mut commands: Comm } } CloseReason::ByError(err) => { - debug!("{target} closed due to error: {err:?}"); + debug!("{target} closed due to error: {err:#}"); } } diff --git a/crates/aeronet_replicon/src/client.rs b/crates/aeronet_replicon/src/client.rs index 4e8eb949..a975f8f2 100644 --- a/crates/aeronet_replicon/src/client.rs +++ b/crates/aeronet_replicon/src/client.rs @@ -14,7 +14,7 @@ use { bevy_replicon::prelude::*, bevy_state::state::NextState, core::{num::Saturating, time::Duration}, - log::warn, + log::{trace, warn}, }; /// Provides a [`bevy_replicon`] client backend using [`Session`]s for @@ -224,13 +224,23 @@ fn update_state( fn poll( mut client_msgs: ResMut, - mut clients: Query<&mut Transport, With>, + mut clients: Query<(Entity, &mut Transport), With>, ) { - for mut transport in &mut clients { + for (client, mut transport) in &mut clients { + let mut msgs_recv = Saturating(0usize); + let mut bytes_recv = Saturating(0usize); for msg in transport.recv.msgs.drain() { + msgs_recv += 1; + bytes_recv += msg.payload.len(); + let channel_id = convert::to_channel_id(msg.lane); client_msgs.insert_received(channel_id, msg.payload); } + if msgs_recv.0 > 0 || bytes_recv.0 > 0 { + trace!( + "Client {client} received {msgs_recv} messages ({bytes_recv} bytes) from server" + ); + } for _ in transport.recv.acks.drain() { // we don't use the acks for anything @@ -248,6 +258,11 @@ fn flush( warn!("Channel {channel_id} is too large to convert to a lane index"); continue; }; + + trace!( + "Sent 1 message ({} bytes) along all clients to all servers", + msg.len() + ); for mut transport in &mut clients { _ = transport.send.push(lane_index, msg.clone(), now); } diff --git a/crates/aeronet_replicon/src/server.rs b/crates/aeronet_replicon/src/server.rs index e2e076d4..bcf194c3 100644 --- a/crates/aeronet_replicon/src/server.rs +++ b/crates/aeronet_replicon/src/server.rs @@ -16,7 +16,8 @@ use { bevy_reflect::Reflect, bevy_replicon::{prelude::*, server::ServerSystems}, bevy_state::state::NextState, - log::warn, + core::num::Saturating, + log::{trace, warn}, }; /// Provides a [`bevy_replicon`] server backend using [`Server`]s and @@ -190,10 +191,21 @@ fn poll( continue; } + let mut msgs_recv = Saturating(0usize); + let mut bytes_recv = Saturating(0usize); for msg in transport.recv.msgs.drain() { + msgs_recv += 1; + bytes_recv += msg.payload.len(); + let channel_id = convert::to_channel_id(msg.lane); server_msgs.insert_received(client, channel_id, msg.payload); } + if msgs_recv.0 > 0 || bytes_recv.0 > 0 { + trace!( + "Server {server} received {msgs_recv} messages ({bytes_recv} bytes) from client \ + {client}" + ); + } for _ in transport.recv.acks.drain() { // we don't use the acks for anything @@ -235,6 +247,7 @@ fn flush(mut server_msgs: ResMut, mut clients: Query<&mut Transp continue; }; + trace!("Sent 1 message ({} bytes) to client {client}", msg.len()); _ = transport.send.push(lane_index, msg, now); } } diff --git a/crates/aeronet_steam/examples/steam_client.rs b/crates/aeronet_steam/examples/steam_client.rs index 8494733f..55b6cb6c 100644 --- a/crates/aeronet_steam/examples/steam_client.rs +++ b/crates/aeronet_steam/examples/steam_client.rs @@ -85,7 +85,7 @@ fn on_disconnected(trigger: On, names: Query<&Name>, mut log: ResM format!("{name} disconnected by peer: {reason}") } DisconnectReason::ByError(err) => { - format!("{name} disconnected due to error: {err:?}") + format!("{name} disconnected due to error: {err:#}") } }); } diff --git a/crates/aeronet_steam/examples/steam_server.rs b/crates/aeronet_steam/examples/steam_server.rs index 3a6d2f7a..9e6b6d9e 100644 --- a/crates/aeronet_steam/examples/steam_server.rs +++ b/crates/aeronet_steam/examples/steam_server.rs @@ -116,7 +116,7 @@ fn on_disconnected(trigger: On, clients: Query<&ChildOf>) { info!("{client} disconnected from {server} by peer: {reason}"); } DisconnectReason::ByError(err) => { - warn!("{client} disconnected from {server} due to error: {err:?}"); + warn!("{client} disconnected from {server} due to error: {err:#}"); } } } diff --git a/crates/aeronet_transport/Cargo.toml b/crates/aeronet_transport/Cargo.toml index 39918576..10e6789f 100644 --- a/crates/aeronet_transport/Cargo.toml +++ b/crates/aeronet_transport/Cargo.toml @@ -14,11 +14,6 @@ all-features = true rustdoc-args = ["--cfg=docsrs_aeronet"] targets = ["x86_64-unknown-linux-gnu", "wasm32-unknown-unknown"] -[package.metadata.cargo-shear] -ignored = [ - "bevy_winit", # see `document-features` -] - [dependencies] aeronet_io = { workspace = true } arbitrary = { workspace = true, optional = true } diff --git a/crates/aeronet_transport/fuzz/Cargo.lock b/crates/aeronet_transport/fuzz/Cargo.lock index 52b464af..45204b30 100644 --- a/crates/aeronet_transport/fuzz/Cargo.lock +++ b/crates/aeronet_transport/fuzz/Cargo.lock @@ -4,7 +4,7 @@ version = 4 [[package]] name = "aeronet_io" -version = "0.14.0-rc.1" +version = "0.17.2" dependencies = [ "anyhow", "bevy_app", @@ -12,13 +12,13 @@ dependencies = [ "bevy_platform", "bevy_reflect", "bytes", - "derive_more 2.0.1", + "derive_more", "log", ] [[package]] name = "aeronet_transport" -version = "0.14.0-rc.1" +version = "0.17.2" dependencies = [ "aeronet_io", "arbitrary", @@ -28,7 +28,7 @@ dependencies = [ "bevy_reflect", "bevy_time", "bit-vec", - "derive_more 2.0.1", + "derive_more", "either", "log", "octs", @@ -71,6 +71,18 @@ dependencies = [ "syn", ] +[[package]] +name = "async-channel" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + [[package]] name = "async-task" version = "4.7.1" @@ -97,9 +109,9 @@ checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "bevy_app" -version = "0.16.0-rc.5" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4bca06008ce3fdd611c16f212895c9fb082d1cadc6ffda068a30de6088d93cd" +checksum = "8e4fc5dfe9d1d9b8233e1878353b5e66a3f5910c2131d3abf68f9a4116b2d433" dependencies = [ "bevy_derive", "bevy_ecs", @@ -116,9 +128,9 @@ dependencies = [ [[package]] name = "bevy_derive" -version = "0.16.0-rc.5" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6462921371b9471c66e6837ac26306408067006eb4d18289af0b34b34185ec35" +checksum = "f9396b256b366a43d7f61d1f230cdab0a512fb4712cbf7d688f3d6fce4c5ea8a" dependencies = [ "bevy_macro_utils", "quote", @@ -127,9 +139,9 @@ dependencies = [ [[package]] name = "bevy_ecs" -version = "0.16.0-rc.5" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d727ac7bd70932af794e09c4e7362e85b794359fb052f23ae57424d44f4a80d" +checksum = "a7dd5229dd00d00e70ac6b2fc0a139961252f6ce07d3d268cfcac0da86d5bde4" dependencies = [ "bevy_ecs_macros", "bevy_platform", @@ -140,12 +152,12 @@ dependencies = [ "bitflags", "bumpalo", "concurrent-queue", - "derive_more 1.0.0", - "disqualified", + "derive_more", "fixedbitset", "indexmap", "log", "nonmax", + "slotmap", "smallvec", "thiserror", "variadics_please", @@ -153,9 +165,9 @@ dependencies = [ [[package]] name = "bevy_ecs_macros" -version = "0.16.0-rc.5" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "682888510b5886d633a9ee1bb87835573358ea169fa860cc293adfbe1528acd3" +checksum = "c4d83bdd2285af4867e76c691406e0a4b55611b583d0c45b6ac7bcec1b45fd48" dependencies = [ "bevy_macro_utils", "proc-macro2", @@ -165,9 +177,9 @@ dependencies = [ [[package]] name = "bevy_macro_utils" -version = "0.16.0-rc.5" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5a6b2dcfeeccf05dc333f07b75f0622efbc7bb9363ff3bd302fe1a03da3231f" +checksum = "62d984f9f8bd0f0d9fb020492a955e641e30e7a425f3588bf346cb3e61fec3c3" dependencies = [ "parking_lot", "proc-macro2", @@ -178,53 +190,41 @@ dependencies = [ [[package]] name = "bevy_platform" -version = "0.16.0-rc.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "496a76c6ef0cff43681b66f4391a839150879e9e9913d0b6270a4b16dab886a4" -dependencies = [ - "cfg-if", - "foldhash", - "hashbrown", - "portable-atomic", - "portable-atomic-util", - "serde", - "spin", -] - -[[package]] -name = "bevy_platform" -version = "0.16.0-rc.4" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e07dae2ae4e79ae57147d7fe90362af18fbace134f66c537a45a8315f4855d53" +checksum = "4691af6d7cfd1b5deb2fc926a43a180a546cdc3fe1e5a013fcee60db9bb2c81f" dependencies = [ - "cfg-if", "critical-section", "foldhash", + "futures-channel", "hashbrown", + "js-sys", "portable-atomic", "portable-atomic-util", "serde", "spin", + "wasm-bindgen", + "wasm-bindgen-futures", ] [[package]] name = "bevy_ptr" -version = "0.16.0-rc.5" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e675d019ae9274a337f955d39c6cdabe1cd7cac4dc1d4d9186d9727ce04ae79d" +checksum = "17d24d7906c7de556033168b3485de36c59049fbaef0c2c44c715a23e0329b10" [[package]] name = "bevy_reflect" -version = "0.16.0-rc.5" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ff6c3632f0f519c70968dc2fc11f4450fb58bba825c36e0ec22cce71cccc325" +checksum = "b5472b91928c0f3e4e3988c0d036b00719f19520f53a0c3f8c2af72f00e693c5" dependencies = [ "assert_type_match", "bevy_platform", "bevy_ptr", "bevy_reflect_derive", "bevy_utils", - "derive_more 1.0.0", + "derive_more", "disqualified", "downcast-rs", "erased-serde", @@ -237,11 +237,12 @@ dependencies = [ [[package]] name = "bevy_reflect_derive" -version = "0.16.0-rc.5" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9faad34ff682b7ea9746bf11799c75100eccc308bb27b339aba9dbd2099bc79" +checksum = "083784255162fa39960aa3cf3c23af0e515db2daa7f2e796ae34df993f4d3f6c" dependencies = [ "bevy_macro_utils", + "indexmap", "proc-macro2", "quote", "syn", @@ -250,25 +251,26 @@ dependencies = [ [[package]] name = "bevy_tasks" -version = "0.16.0-rc.5" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3990bb6b1f48611e2617b57822dc00f7889962d91e84f0abafbc5f3b4d652f75" +checksum = "bcbbfa5a58a16c4228434d3018c23fde3d78dcd76ec5f5b2b482a21f4b158dd3" dependencies = [ + "async-channel", "async-task", "atomic-waker", "bevy_platform", - "cfg-if", "crossbeam-queue", - "derive_more 1.0.0", + "derive_more", "futures-lite", "heapless", + "pin-project", ] [[package]] name = "bevy_time" -version = "0.16.0-rc.5" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f916caf4898ae18343662e85bb5a5cc66c683f160284fad1e511b85b3a46d7e0" +checksum = "32835c3dbe082fbbe7d4f2f37f655073421f2882d4320ac2d59f922474260de4" dependencies = [ "bevy_app", "bevy_ecs", @@ -278,11 +280,12 @@ dependencies = [ [[package]] name = "bevy_utils" -version = "0.16.0-rc.5" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb01925d2d238e965b25fb6ce259fe43cb7d753f669554536f658e29f8c04c17" +checksum = "789d04f88c764877a4552e07745b402dbc45f5d0545e6d102558f2f1752a1d89" dependencies = [ "bevy_platform", + "disqualified", ] [[package]] @@ -377,34 +380,13 @@ dependencies = [ "syn", ] -[[package]] -name = "derive_more" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" -dependencies = [ - "derive_more-impl 1.0.0", -] - [[package]] name = "derive_more" version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" dependencies = [ - "derive_more-impl 2.0.1", -] - -[[package]] -name = "derive_more-impl" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "unicode-xid", + "derive_more-impl", ] [[package]] @@ -453,6 +435,26 @@ dependencies = [ "typeid", ] +[[package]] +name = "event-listener" +version = "5.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" +dependencies = [ + "concurrent-queue", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" +dependencies = [ + "event-listener", + "pin-project-lite", +] + [[package]] name = "fixedbitset" version = "0.5.7" @@ -461,9 +463,18 @@ checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" [[package]] name = "foldhash" -version = "0.1.5" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", +] [[package]] name = "futures-core" @@ -481,18 +492,6 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "getrandom" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" -dependencies = [ - "cfg-if", - "libc", - "r-efi", - "wasi", -] - [[package]] name = "hash32" version = "0.3.1" @@ -504,12 +503,13 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.2" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" dependencies = [ "equivalent", "serde", + "serde_core", ] [[package]] @@ -525,9 +525,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.7.0" +version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" +checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2" dependencies = [ "equivalent", "hashbrown", @@ -544,9 +544,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.76" +version = "0.3.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" +checksum = "464a3709c7f55f1f721e5389aa6ea4e3bc6aba669353300af094b29ffbdde1d8" dependencies = [ "once_cell", "wasm-bindgen", @@ -634,6 +634,26 @@ dependencies = [ "windows-targets", ] +[[package]] +name = "pin-project" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "pin-project-lite" version = "0.2.15" @@ -673,12 +693,6 @@ dependencies = [ "proc-macro2", ] -[[package]] -name = "r-efi" -version = "5.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" - [[package]] name = "redox_syscall" version = "0.5.10" @@ -699,6 +713,12 @@ dependencies = [ "portable-atomic-util", ] +[[package]] +name = "rustversion" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" + [[package]] name = "scopeguard" version = "1.2.0" @@ -707,18 +727,27 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "serde" -version = "1.0.216" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", +] + +[[package]] +name = "serde_core" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b9781016e935a97e8beecf0c933758c97a5520d32930e460142b4cd80c6338e" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.216" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46f859dbbf73865c6627ed570e78961cd3ac92407a2d117204c49232485da55e" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", @@ -731,6 +760,15 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "slotmap" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdd58c3c93c3d278ca835519292445cb4b0d4dc59ccfdf7ceadaab3f8aeb4038" +dependencies = [ + "version_check", +] + [[package]] name = "smallvec" version = "1.13.2" @@ -739,9 +777,9 @@ checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "spin" -version = "0.9.8" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +checksum = "d5fe4ccb98d9c292d56fec89a5e07da7fc4cf0dc11e156b41793132775d3e591" dependencies = [ "portable-atomic", ] @@ -785,18 +823,31 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.6.8" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" +dependencies = [ + "serde_core", +] [[package]] name = "toml_edit" -version = "0.22.22" +version = "0.23.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" +checksum = "5d7cbc3b4b49633d57a0509303158ca50de80ae32c265093b24c414705807832" dependencies = [ "indexmap", "toml_datetime", + "toml_parser", + "winnow", +] + +[[package]] +name = "toml_parser" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" +dependencies = [ "winnow", ] @@ -844,7 +895,6 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "458f7a779bf54acc9f347480ac654f68407d3aab21269a6e3c9f922acd9e2da9" dependencies = [ - "getrandom", "js-sys", "wasm-bindgen", ] @@ -861,44 +911,42 @@ dependencies = [ ] [[package]] -name = "wasi" -version = "0.14.2+wasi-0.2.4" +name = "version_check" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" -dependencies = [ - "wit-bindgen-rt", -] +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "wasm-bindgen" -version = "0.2.99" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" +checksum = "0d759f433fa64a2d763d1340820e46e111a7a5ab75f993d1852d70b03dbb80fd" dependencies = [ "cfg-if", "once_cell", + "rustversion", "wasm-bindgen-macro", + "wasm-bindgen-shared", ] [[package]] -name = "wasm-bindgen-backend" -version = "0.2.99" +name = "wasm-bindgen-futures" +version = "0.4.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" +checksum = "836d9622d604feee9e5de25ac10e3ea5f2d65b41eac0d9ce72eb5deae707ce7c" dependencies = [ - "bumpalo", - "log", - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-shared", + "cfg-if", + "js-sys", + "once_cell", + "wasm-bindgen", + "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.99" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" +checksum = "48cb0d2638f8baedbc542ed444afc0644a29166f1595371af4fecf8ce1e7eeb3" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -906,22 +954,35 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.99" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" +checksum = "cefb59d5cd5f92d9dcf80e4683949f15ca4b511f4ac0a6e14d4e1ac60c6ecd40" dependencies = [ + "bumpalo", "proc-macro2", "quote", "syn", - "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.99" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" +checksum = "cbc538057e648b67f72a982e708d485b2efa771e1ac05fec311f9f63e5800db4" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "web-sys" +version = "0.3.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b32828d774c412041098d182a8b38b16ea816958e07cf40eec2bc080ae137ac" +dependencies = [ + "js-sys", + "wasm-bindgen", +] [[package]] name = "windows-targets" @@ -989,18 +1050,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.6.20" +version = "0.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" +checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829" dependencies = [ "memchr", ] - -[[package]] -name = "wit-bindgen-rt" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" -dependencies = [ - "bitflags", -] diff --git a/crates/aeronet_transport/fuzz/fuzz_targets/round_trip.rs b/crates/aeronet_transport/fuzz/fuzz_targets/round_trip.rs index e29b8e4f..efa5e5d3 100644 --- a/crates/aeronet_transport/fuzz/fuzz_targets/round_trip.rs +++ b/crates/aeronet_transport/fuzz/fuzz_targets/round_trip.rs @@ -2,7 +2,7 @@ use { aeronet_transport::{ - Transport, + Transport, TransportConfig, io::{Session, bytes::Bytes}, lane::{LaneIndex, LaneKind}, }, @@ -29,8 +29,9 @@ fuzz_target!(|input: (LaneKind, &[u8])| { let msg = Bytes::from(msg.to_vec()); _ = transport.send.push(lane_index, msg, now).unwrap(); - let packets = aeronet_transport::send::fuzz_flush_on(&mut transport, MTU).collect::>(); + let packets = aeronet_transport::send::flush_on(&mut transport, now, MTU).collect::>(); for packet in packets { - aeronet_transport::recv::fuzz_recv_on(&mut transport, &packet).unwrap(); + aeronet_transport::recv::recv_on(&mut transport, &TransportConfig::default(), now, &packet) + .unwrap(); } }); diff --git a/crates/aeronet_transport/fuzz/fuzz_targets/transport_recv.rs b/crates/aeronet_transport/fuzz/fuzz_targets/transport_recv.rs index c1ac9278..d14a4dbf 100644 --- a/crates/aeronet_transport/fuzz/fuzz_targets/transport_recv.rs +++ b/crates/aeronet_transport/fuzz/fuzz_targets/transport_recv.rs @@ -1,7 +1,7 @@ #![no_main] use { - aeronet_transport::{Transport, io::Session, lane::LaneKind}, + aeronet_transport::{Transport, TransportConfig, io::Session, lane::LaneKind}, libfuzzer_sys::fuzz_target, std::time::Instant, }; @@ -18,5 +18,5 @@ fuzz_target!(|packet: &[u8]| { let now = Instant::now(); let session = Session::new(now, MTU); let mut transport = Transport::new(&session, RECV_LANES, [], now).unwrap(); - _ = aeronet_transport::recv::fuzz_recv_on(&mut transport, packet); + _ = aeronet_transport::recv::recv_on(&mut transport, &TransportConfig::default(), now, packet); }); diff --git a/crates/aeronet_transport/src/lane.rs b/crates/aeronet_transport/src/lane.rs index 0664dcd8..46d55158 100644 --- a/crates/aeronet_transport/src/lane.rs +++ b/crates/aeronet_transport/src/lane.rs @@ -32,6 +32,7 @@ use { crate::size::MinSize, bevy_reflect::prelude::*, + derive_more::Display, octs::{BufTooShortOr, Decode, Encode, EncodeLen, FixedEncodeLenHint, Read, Write}, typesize::derive::TypeSize, }; @@ -140,7 +141,7 @@ pub enum LaneReliability { /// Index of a [lane] on either the sender or receiver side. /// /// [lane]: crate::lane -#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, TypeSize, Reflect)] +#[derive(Debug, Display, Clone, Copy, PartialEq, Eq, Hash, TypeSize, Reflect)] #[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] pub struct LaneIndex(pub MinSize); diff --git a/crates/aeronet_transport/src/lib.rs b/crates/aeronet_transport/src/lib.rs index 0f3e83e4..73dd7ac5 100644 --- a/crates/aeronet_transport/src/lib.rs +++ b/crates/aeronet_transport/src/lib.rs @@ -3,6 +3,9 @@ //! //! ## Feature flags #![cfg_attr(feature = "document-features", doc = document_features::document_features!())] +// we can't use plain `#![no_std]` here, +// because the `derive(arbitrary::Arbitrary)` macro breaks without `std` +// so we just have to be more careful with using `std` prelude items #![cfg_attr(not(feature = "std"), no_std)] extern crate alloc; diff --git a/crates/aeronet_transport/src/packet/frag.rs b/crates/aeronet_transport/src/packet/frag.rs index 36e63f51..e1f563fc 100644 --- a/crates/aeronet_transport/src/packet/frag.rs +++ b/crates/aeronet_transport/src/packet/frag.rs @@ -10,6 +10,12 @@ use { // `FragmentPosition` impl FragmentPosition { + /// Position for the first fragment in a message, which is not the last. + pub const ZERO_NON_LAST: Self = Self(MinSize(0)); + + /// Position for the first fragment in a message, which is also the last. + pub const ZERO_LAST: Self = Self(MinSize(1)); + /// Creates a position for a fragment which is *not* the last one in the /// message. /// diff --git a/crates/aeronet_transport/src/packet/mod.rs b/crates/aeronet_transport/src/packet/mod.rs index c246298e..c3790d7d 100644 --- a/crates/aeronet_transport/src/packet/mod.rs +++ b/crates/aeronet_transport/src/packet/mod.rs @@ -193,7 +193,7 @@ pub struct FragmentHeader { } /// Single fragment of a message. -#[derive(Debug, Clone)] +#[derive(Debug, Clone, PartialEq, Eq)] pub struct Fragment { /// Fragment metadata. pub header: FragmentHeader, diff --git a/crates/aeronet_transport/src/recv.rs b/crates/aeronet_transport/src/recv.rs index effc6958..0ccdab33 100644 --- a/crates/aeronet_transport/src/recv.rs +++ b/crates/aeronet_transport/src/recv.rs @@ -190,34 +190,41 @@ pub(crate) fn poll(mut sessions: Query<(Entity, &mut Session, &mut Transport, &T } } +/// Why a packet could not be received by a [`Transport`]. #[derive(Debug, Display, Error)] -enum RecvError { +pub enum RecvError { + /// Packet was too short to contain a packet header. #[display("not enough bytes to read header")] ReadHeader, + /// Packet was too short to contain a fragment header. #[display("not enough bytes to read fragment")] ReadFragment, + /// Packet specified that it is a message on a lane that we don't have. #[display("invalid lane {lane:?}")] - InvalidLane { lane: LaneIndex }, + InvalidLane { + /// Lane that the message claims it was sent on. + lane: LaneIndex, + }, + /// Failed to reassemble the packet's fragments into a message. #[display("failed to reassemble fragment")] Reassemble(ReassembleError), } -/// Exposes `recv_on` for fuzz tests. -#[cfg(fuzzing)] -pub fn fuzz_recv_on( - transport: &mut Transport, - packet: &[u8], -) -> Result<(), Box> { - recv_on( - transport, - &TransportConfig::default(), - Instant::now(), - packet, - ) - .map_err(|err| Box::new(err) as Box<_>) -} - -fn recv_on( +/// Forces a [`Transport`] to receive a packet, attempting to decode it into a +/// message and buffer it. +/// +/// This function is advanced and has the potential to screw up the transport +/// state - only use it if you know what you're doing! +/// +/// Every update, for all [`Session`] with an associated [`Transport`], the +/// session's buffered received packets are passed to this function along with +/// the paired transport. +/// +/// # Errors +/// +/// Errors if the packet could not be received, decoded, and made available to +/// the transport. Errors are non-fatal. +pub fn recv_on( transport: &mut Transport, config: &TransportConfig, recv_at: Instant, @@ -432,3 +439,92 @@ fn recv_on_lane( } .into_iter() } + +#[cfg(test)] +mod tests { + use { + crate::{ + Transport, TransportConfig, + lane::{LaneIndex, LaneKind}, + packet::{ + Acknowledge, Fragment, FragmentHeader, FragmentPayload, FragmentPosition, + MessageSeq, PacketHeader, PacketSeq, + }, + }, + aeronet_io::Session, + bevy_platform::time::Instant, + octs::{Bytes, Write}, + }; + + const LANES: [LaneKind; 1] = [LaneKind::ReliableOrdered]; + const LANE: LaneIndex = LaneIndex::new(0); + + #[test] + fn recv_one_frag() { + let now = Instant::now(); + let session = Session::new(now, 1024); + let mut transport = Transport::new(&session, LANES, LANES, now).unwrap(); + + let mut packet = Vec::::new(); + packet + .write(&PacketHeader { + seq: PacketSeq::new(0), + acks: Acknowledge::default(), + }) + .unwrap(); + packet + .write(&Fragment { + header: FragmentHeader { + lane: LANE, + seq: MessageSeq::new(0), + position: FragmentPosition::last(0u16).unwrap(), + }, + payload: FragmentPayload(Bytes::from_static(b"hello world")), + }) + .unwrap(); + + super::recv_on( + &mut transport, + &TransportConfig::default(), + Instant::now(), + &packet, + ) + .unwrap(); + + { + let mut msgs = transport.recv.msgs.drain(); + assert!(msgs.next().is_some()); + assert!(msgs.next().is_none()); + } + } + + #[test] + fn recv_no_frags() { + let now = Instant::now(); + let session = Session::new(now, 1024); + let mut transport = Transport::new(&session, LANES, LANES, now).unwrap(); + + let mut packet = Vec::::new(); + packet + .write(&PacketHeader { + seq: PacketSeq::new(0), + acks: Acknowledge::default(), + }) + .unwrap(); + // we don't write a fragment here + // so we must not receive a message + + super::recv_on( + &mut transport, + &TransportConfig::default(), + Instant::now(), + &packet, + ) + .unwrap(); + + { + let mut msgs = transport.recv.msgs.drain(); + assert!(msgs.next().is_none()); + } + } +} diff --git a/crates/aeronet_transport/src/send.rs b/crates/aeronet_transport/src/send.rs index f3d89dbd..d3a1767d 100644 --- a/crates/aeronet_transport/src/send.rs +++ b/crates/aeronet_transport/src/send.rs @@ -82,7 +82,7 @@ impl TransportSend { next_msg_seq: MessageSeq::default(), }) .collect(), - bytes_bucket: TokenBucket::new(0), + bytes_bucket: TokenBucket::new(usize::MAX), next_packet_seq: PacketSeq::default(), error: None, } @@ -177,18 +177,47 @@ impl TransportSend { return Err(TransportSendError::TooManyMessages); }; - let frags = frag::split(self.max_frag_len, msg)?; + let frags = frag::split(self.max_frag_len, msg)? + .map(|(position, payload)| SentFragment { + position, + payload, + sent_at: now, + next_flush_at: now, + }) + .collect::>(); + + // if the message is empty, we will generate no fragments. + // + // this is unacceptable, because when we send this message out in a + // packet, it will have no fragment header, so will never be + // received and acked by the peer - consequently, we will never be + // told that the peer has acked this message. + // even if a message is empty, it's still an important object to + // track. + // + // we also can't just say in the sending logic, "if this message has + // no frags, just make one up on the spot when sending", because at + // that point we may also take out that fragment. and if a message + // has no fragments (`SentMessage::frags` are all `None`s), then it + // gets removed. + // therefore, if we add a message with all `None` frags, then it + // will immediately be dropped! + // + // in summary, we must add a synthetic fragment specifically here. + // this is checked by the test `send_no_data`. + let frags = if frags.is_empty() { + alloc::vec![SentFragment { + position: FragmentPosition::ZERO_LAST, + payload: Bytes::new(), + sent_at: now, + next_flush_at: now, + }] + } else { + frags + }; + entry.insert(SentMessage { - frags: frags - .map(|(position, payload)| { - Some(SentFragment { - position, - payload, - sent_at: now, - next_flush_at: now, - }) - }) - .collect(), + frags: frags.into_iter().map(Some).collect(), }); lane.next_msg_seq += MessageSeq::new(1); @@ -271,19 +300,22 @@ pub(crate) fn flush(mut sessions: Query<(&mut Session, &mut Transport)>) { .par_iter_mut() .for_each(|(mut session, mut transport)| { let packet_mtu = session.mtu(); - session - .send - .extend(flush_on(&mut transport, now, packet_mtu)); + let packets = flush_on(&mut transport, now, packet_mtu); + session.send.extend(packets); }); } -/// Exposes `flush_on` for fuzz tests. -#[cfg(fuzzing)] -pub fn fuzz_flush_on(transport: &mut Transport, mtu: usize) -> impl Iterator + '_ { - flush_on(transport, Instant::now(), mtu) -} - -fn flush_on( +/// Forces a [`Transport`] to flush out its pending messages, by building up +/// packets from pending fragments. +/// +/// This function is advanced and has the potential to screw up the transport +/// state - only use it if you know what you're doing! +/// +/// Every update, for all [`Session`]s with an associated [`Transport`], this +/// function is used to build packets from the transport's fragments pending +/// for sending, and those packets are pushed into the session's send buffer. +#[expect(clippy::missing_panics_doc, reason = "shouldn't panic")] +pub fn flush_on( transport: &mut Transport, now: Instant, mtu: usize, @@ -476,3 +508,69 @@ fn write_frag_at_path( Ok(()) } + +#[cfg(test)] +mod tests { + use { + crate::{ + Transport, + lane::{LaneIndex, LaneKind}, + packet::{ + Acknowledge, Fragment, FragmentHeader, FragmentPayload, FragmentPosition, + MessageSeq, PacketHeader, PacketSeq, + }, + }, + aeronet_io::Session, + bevy_platform::time::Instant, + octs::{Bytes, Read}, + }; + + const LANES: [LaneKind; 1] = [LaneKind::ReliableOrdered]; + const LANE: LaneIndex = LaneIndex::new(0); + + #[test] + fn send_some_data() { + round_trip(b"hello world"); + } + + // if we're forming a packet, empty messages *must* also be included as + // fragments + #[test] + fn send_no_data() { + round_trip(b""); + } + + fn round_trip(msg: &'static [u8]) { + let now = Instant::now(); + let session = Session::new(now, 1024); + let mut transport = Transport::new(&session, LANES, LANES, now).unwrap(); + transport + .send + .push(LANE, Bytes::from_static(msg), now) + .unwrap(); + assert_eq!(1, transport.send.lanes().first().unwrap().num_queued_msgs()); + + let mut packets = super::flush_on(&mut transport, now, 1024); + let mut packet = packets.next().unwrap(); + assert!(packets.next().is_none()); + + assert_eq!( + packet.read::().unwrap(), + PacketHeader { + seq: PacketSeq::new(0), + acks: Acknowledge::default(), + }, + ); + assert_eq!( + packet.read::().unwrap(), + Fragment { + header: FragmentHeader { + lane: LANE, + position: FragmentPosition::last(0u16).unwrap(), + seq: MessageSeq::new(0), + }, + payload: FragmentPayload(Bytes::from_static(msg)) + } + ); + } +} diff --git a/crates/aeronet_transport/src/size.rs b/crates/aeronet_transport/src/size.rs index 807ab8b1..ef784a94 100644 --- a/crates/aeronet_transport/src/size.rs +++ b/crates/aeronet_transport/src/size.rs @@ -8,6 +8,7 @@ use { bevy_reflect::Reflect, bit_vec::BitVec, core::num::TryFromIntError, + derive_more::Display, octs::{BufTooShortOr, Decode, Encode, EncodeLen, FixedEncodeLenHint, Read, VarInt, Write}, typesize::{TypeSize, derive::TypeSize}, }; @@ -26,7 +27,7 @@ compile_error!("`aeronet_transport` cannot safely compile for a 16-bit platform" /// any platforms where `usize` is smaller than [`u32`]. /// /// This value is always encoded as a [`VarInt`] on the wire. -#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, TypeSize, Reflect)] +#[derive(Debug, Display, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, TypeSize, Reflect)] #[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] pub struct MinSize(pub u32); diff --git a/crates/aeronet_transport/tests/exchange.rs b/crates/aeronet_transport/tests/exchange.rs new file mode 100644 index 00000000..0b9d6b31 --- /dev/null +++ b/crates/aeronet_transport/tests/exchange.rs @@ -0,0 +1,72 @@ +#![expect(missing_docs, reason = "testing")] +#![cfg(test)] + +use { + aeronet_io::{ + AeronetIoPlugin, Session, + packet::{NoClearBuffers, RecvPacket}, + }, + aeronet_transport::{ + AeronetTransportPlugin, Transport, + lane::{LaneIndex, LaneKind}, + }, + bevy_app::prelude::*, + bevy_platform::time::Instant, + bevy_time::TimePlugin, + octs::Bytes, +}; + +const LANES: [LaneKind; 1] = [LaneKind::ReliableOrdered]; +const LANE: LaneIndex = LaneIndex::new(0); + +#[test] +fn simple() { + round_trip(b"hello world"); +} + +#[test] +fn empty() { + round_trip(b""); +} + +fn round_trip(msg: &'static [u8]) { + let mut app = App::new(); + app.add_plugins((TimePlugin, AeronetIoPlugin, AeronetTransportPlugin)) + .insert_resource(NoClearBuffers); + + let now = Instant::now(); + let session = Session::new(now, 1024); + let mut transport = Transport::new(&session, LANES, LANES, now).unwrap(); + transport + .send + .push(LANE, Bytes::from_static(msg), now) + .unwrap(); + assert_eq!(1, transport.send.lanes().first().unwrap().num_queued_msgs()); + let entity = app.world_mut().spawn((session, transport)).id(); + + app.update(); + + // transport message has been flushed to session + // take the sent packet and re-insert it as a received packet + let transport = app.world().get::(entity).unwrap(); + assert_eq!(0, transport.send.lanes().first().unwrap().num_queued_msgs()); + + let mut session = app.world_mut().get_mut::(entity).unwrap(); + assert_eq!(1, session.send.len()); + let mut packets = session.send.drain(..); + let packet = packets.next().unwrap(); + + assert!(packets.next().is_none()); + drop(packets); + session.recv.push(RecvPacket { + recv_at: now, + payload: packet, + }); + + app.update(); + + let mut transport = app.world_mut().get_mut::(entity).unwrap(); + let mut msgs = transport.recv.msgs.drain(); + assert!(msgs.next().is_some()); + assert!(msgs.next().is_none()); +} diff --git a/crates/aeronet_websocket/examples/websocket_client.rs b/crates/aeronet_websocket/examples/websocket_client.rs index 0a962d89..9e8ae44c 100644 --- a/crates/aeronet_websocket/examples/websocket_client.rs +++ b/crates/aeronet_websocket/examples/websocket_client.rs @@ -67,7 +67,7 @@ fn on_disconnected(trigger: On, names: Query<&Name>, mut log: ResM format!("{name} disconnected by peer: {reason}") } DisconnectReason::ByError(err) => { - format!("{name} disconnected due to error: {err:?}") + format!("{name} disconnected due to error: {err:#}") } }); } diff --git a/crates/aeronet_websocket/examples/websocket_server.rs b/crates/aeronet_websocket/examples/websocket_server.rs index bf8dfd56..c5c1742d 100644 --- a/crates/aeronet_websocket/examples/websocket_server.rs +++ b/crates/aeronet_websocket/examples/websocket_server.rs @@ -92,7 +92,7 @@ fn on_disconnected(trigger: On, clients: Query<&ChildOf>) { info!("{client} disconnected from {server} by peer: {reason}"); } DisconnectReason::ByError(err) => { - warn!("{client} disconnected from {server} due to error: {err:?}"); + warn!("{client} disconnected from {server} due to error: {err:#}"); } } } diff --git a/crates/aeronet_websocket/tests/exchange.rs b/crates/aeronet_websocket/tests/exchange.rs new file mode 100644 index 00000000..3fb9f738 --- /dev/null +++ b/crates/aeronet_websocket/tests/exchange.rs @@ -0,0 +1,92 @@ +#![expect(missing_docs, reason = "testing")] +#![cfg(test)] +#![cfg(not(target_family = "wasm"))] + +use { + aeronet_io::Session, + aeronet_websocket::{ + client::{ClientConfig, WebSocketClient, WebSocketClientPlugin}, + server::{ServerConfig, WebSocketServer, WebSocketServerPlugin}, + }, + bevy::prelude::*, + bytes::Bytes, +}; + +#[test] +fn exchange_string() { + test_exchange(29001, b"hello world"); +} + +#[test] +fn exchange_empty() { + test_exchange(29002, b""); +} + +fn test_exchange(port: u16, msg: &'static [u8]) { + let mut server_app = { + let mut app = App::new(); + app.add_plugins((MinimalPlugins, WebSocketServerPlugin)) + .add_systems( + Update, + move |mut sessions: Query<&mut Session>, mut exit: MessageWriter| { + for mut session in &mut sessions { + if let Some(packet) = session.recv.drain(..).next() { + assert_eq!(&packet.payload, msg); + exit.write(AppExit::Success); + } + } + }, + ) + .add_observer( + |trigger: On, mut session: Query<&mut Session>| { + let mut session = session.get_mut(trigger.entity).unwrap(); + session.send.push(Bytes::new()); + }, + ); + + let entity = app.world_mut().spawn_empty(); + WebSocketServer::open( + ServerConfig::builder() + .with_bind_default(port) + .with_no_encryption(), + ) + .apply(entity); + + app + }; + + let mut client_app = { + let mut app = App::new(); + app.add_plugins((MinimalPlugins, WebSocketClientPlugin)); + + let mut entity = app.world_mut().spawn_empty(); + + // send packet on connect + entity.observe( + move |trigger: On, mut session: Query<&mut Session>| { + let mut session = session.get_mut(trigger.entity).unwrap(); + session.send.push(Bytes::from_static(msg)); + }, + ); + + // connect to server + WebSocketClient::connect( + ClientConfig::builder().with_no_encryption(), + format!("ws://[::1]:{port}"), + ) + .apply(entity); + + app + }; + + for _ in 0..10_000 { + server_app.update(); + client_app.update(); + + if server_app.should_exit() == Some(AppExit::Success) { + return; + } + } + + panic!("took too long to complete"); +} diff --git a/crates/aeronet_webtransport/Cargo.toml b/crates/aeronet_webtransport/Cargo.toml index abacad6b..44140ace 100644 --- a/crates/aeronet_webtransport/Cargo.toml +++ b/crates/aeronet_webtransport/Cargo.toml @@ -26,7 +26,6 @@ required-features = ["server", "self-signed"] [dependencies] aeronet_io = { workspace = true } -anyhow = { workspace = true } base64 = { workspace = true } bevy_app = { workspace = true } bevy_ecs = { workspace = true } @@ -47,6 +46,7 @@ tracing = { workspace = true } xwt-core = { workspace = true } [dev-dependencies] +anyhow = { workspace = true } bevy = { workspace = true } bevy_egui = { workspace = true } diff --git a/crates/aeronet_webtransport/examples/webtransport_client.rs b/crates/aeronet_webtransport/examples/webtransport_client.rs index 918f2c4a..8ae1ea50 100644 --- a/crates/aeronet_webtransport/examples/webtransport_client.rs +++ b/crates/aeronet_webtransport/examples/webtransport_client.rs @@ -76,7 +76,7 @@ fn on_disconnected(trigger: On, names: Query<&Name>, mut log: ResM format!("{name} disconnected by peer: {reason}") } DisconnectReason::ByError(err) => { - format!("{name} disconnected due to error: {err:?}") + format!("{name} disconnected due to error: {err:#}") } }); } diff --git a/crates/aeronet_webtransport/examples/webtransport_server.rs b/crates/aeronet_webtransport/examples/webtransport_server.rs index 66287747..6ff2b0b2 100644 --- a/crates/aeronet_webtransport/examples/webtransport_server.rs +++ b/crates/aeronet_webtransport/examples/webtransport_server.rs @@ -120,7 +120,7 @@ fn on_disconnected(trigger: On, clients: Query<&ChildOf>) { info!("{client} disconnected from {server} by peer: {reason}"); } DisconnectReason::ByError(err) => { - warn!("{client} disconnected from {server} due to error: {err:?}"); + warn!("{client} disconnected from {server} due to error: {err:#}"); } } } diff --git a/examples/src/bin/echo_client.rs b/examples/src/bin/echo_client.rs index 2c468f6f..67009ff4 100644 --- a/examples/src/bin/echo_client.rs +++ b/examples/src/bin/echo_client.rs @@ -175,7 +175,7 @@ fn on_disconnected(trigger: On) { match &trigger.reason { DisconnectReason::ByUser(reason) => info!("{entity} disconnected by user: {reason}"), DisconnectReason::ByPeer(reason) => info!("{entity} disconnected by peer: {reason}"), - DisconnectReason::ByError(err) => warn!("{entity} disconnected due to error: {err:?}"), + DisconnectReason::ByError(err) => warn!("{entity} disconnected due to error: {err:#}"), } } diff --git a/examples/src/bin/echo_server.rs b/examples/src/bin/echo_server.rs index 7f45ec9a..e0f57e0e 100644 --- a/examples/src/bin/echo_server.rs +++ b/examples/src/bin/echo_server.rs @@ -148,7 +148,7 @@ fn on_disconnected(trigger: On, clients: Query<&ChildOf>) { info!("{client} disconnected from {server} by peer: {reason}"); } DisconnectReason::ByError(err) => { - warn!("{client} disconnected from {server} due to error: {err:?}"); + warn!("{client} disconnected from {server} due to error: {err:#}"); } } } diff --git a/examples/src/bin/move_box_client.rs b/examples/src/bin/move_box_client.rs index 490c4499..4c9c128f 100644 --- a/examples/src/bin/move_box_client.rs +++ b/examples/src/bin/move_box_client.rs @@ -45,7 +45,7 @@ fn main() -> AppExit { .init_resource::() .init_resource::() .init_resource::() - .add_systems(Startup, (setup_ui, setup_level)) + .add_systems(Startup, setup_ui) .add_systems( Update, (draw_boxes, handle_inputs).run_if(in_state(GameState::Playing)), @@ -81,10 +81,6 @@ fn setup_ui(mut commands: Commands) { commands.spawn(Camera2d); } -fn setup_level(mut commands: Commands) { - commands.spawn(Camera2d); -} - fn on_connecting( trigger: On, names: Query<&Name>, @@ -151,7 +147,7 @@ fn on_disconnected( format!("{name} disconnected by peer: {reason}") } DisconnectReason::ByError(err) => { - format!("{name} disconnected due to error: {err:?}") + format!("{name} disconnected due to error: {err:#}") } }); game_state.set(GameState::None); diff --git a/examples/src/bin/move_box_server.rs b/examples/src/bin/move_box_server.rs index 36261fa5..7e930757 100644 --- a/examples/src/bin/move_box_server.rs +++ b/examples/src/bin/move_box_server.rs @@ -214,7 +214,7 @@ fn on_disconnected(trigger: On, clients: Query<&ChildOf>) { info!("{client} disconnected from {server} by peer: {reason}"); } DisconnectReason::ByError(err) => { - warn!("{client} disconnected from {server} due to error: {err:?}"); + warn!("{client} disconnected from {server} due to error: {err:#}"); } } }