From c8553dc8c5ead99ad082c828d2e54d03f06f6ff2 Mon Sep 17 00:00:00 2001 From: funman300 Date: Tue, 28 Apr 2026 12:31:12 -0700 Subject: [PATCH] chore(deps): migrate to Bevy 0.16, axum 0.8, and other package updates MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Bump bevy 0.15 → 0.16; fixes all breaking API changes: ChildBuilder → ChildSpawnerCommands, Parent → ChildOf, despawn_descendants → despawn_related::(), despawn_recursive → despawn (now recursive by default), EventWriter::send → write, Query::{get_single,get_single_mut} → {single,single_mut}, ChildOf::get → parent() - Bump axum 0.7 → 0.8; remove axum::async_trait from FromRequestParts - Bump tower_governor 0.4 → 0.8; fix GovernorLayer::new() API - Bump jsonwebtoken 9 → 10 with rust_crypto feature only - Bump thiserror 1 → 2, dirs 5 → 6, bcrypt 0.15 → 0.19, reqwest 0.12 → 0.13 (rustls feature rename) - Regenerate .sqlx offline cache for sqlx compile-time query checks Co-Authored-By: Claude Sonnet 4.6 --- Cargo.lock | 1425 +++++++++++------ Cargo.toml | 16 +- solitaire_engine/src/achievement_plugin.rs | 10 +- solitaire_engine/src/animation_plugin.rs | 4 +- solitaire_engine/src/auto_complete_plugin.rs | 2 +- .../src/card_animation/interaction.rs | 10 +- solitaire_engine/src/card_plugin.rs | 26 +- solitaire_engine/src/challenge_plugin.rs | 8 +- solitaire_engine/src/cursor_plugin.rs | 4 +- .../src/daily_challenge_plugin.rs | 10 +- solitaire_engine/src/game_plugin.rs | 40 +- solitaire_engine/src/help_plugin.rs | 4 +- solitaire_engine/src/home_plugin.rs | 6 +- solitaire_engine/src/hud_plugin.rs | 24 +- solitaire_engine/src/input_plugin.rs | 56 +- solitaire_engine/src/leaderboard_plugin.rs | 18 +- solitaire_engine/src/onboarding_plugin.rs | 4 +- solitaire_engine/src/pause_plugin.rs | 8 +- solitaire_engine/src/profile_plugin.rs | 6 +- solitaire_engine/src/progress_plugin.rs | 4 +- solitaire_engine/src/selection_plugin.rs | 12 +- solitaire_engine/src/settings_plugin.rs | 50 +- solitaire_engine/src/stats_plugin.rs | 14 +- solitaire_engine/src/time_attack_plugin.rs | 8 +- solitaire_engine/src/weekly_goals_plugin.rs | 6 +- solitaire_engine/src/win_summary_plugin.rs | 10 +- solitaire_server/src/lib.rs | 4 +- solitaire_server/src/middleware.rs | 1 - 28 files changed, 1098 insertions(+), 692 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7bbf722..c27375d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,15 +4,15 @@ version = 4 [[package]] name = "accesskit" -version = "0.17.1" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3d3b8f9bae46a948369bc4a03e815d4ed6d616bd00de4051133a5019dc31c5a" +checksum = "becf0eb5215b6ecb0a739c31c21bd83c4f326524c9b46b7e882d77559b60a529" [[package]] name = "accesskit_consumer" -version = "0.26.0" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f47983a1084940ba9a39c077a8c63e55c619388be5476ac04c804cfbd1e63459" +checksum = "d0bf66a7bf0b7ea4fd7742d50b64782a88f99217cf246b3f93b4162528dde520" dependencies = [ "accesskit", "hashbrown 0.15.5", @@ -21,9 +21,9 @@ dependencies = [ [[package]] name = "accesskit_macos" -version = "0.18.1" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7329821f3bd1101e03a7d2e03bd339e3ac0dc64c70b4c9f9ae1949e3ba8dece1" +checksum = "09e230718177753b4e4ad9e1d9f6cfc2f4921212d4c1c480b253f526babb258d" dependencies = [ "accesskit", "accesskit_consumer", @@ -35,9 +35,9 @@ dependencies = [ [[package]] name = "accesskit_windows" -version = "0.24.1" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24fcd5d23d70670992b823e735e859374d694a3d12bfd8dd32bd3bd8bedb5d81" +checksum = "65178f3df98a51e4238e584fcb255cb1a4f9111820848eeddd37663be40a625f" dependencies = [ "accesskit", "accesskit_consumer", @@ -50,9 +50,9 @@ dependencies = [ [[package]] name = "accesskit_winit" -version = "0.23.1" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6a48dad5530b6deb9fc7a52cc6c3bf72cdd9eb8157ac9d32d69f2427a5e879" +checksum = "34d941bb8c414caba6e206de669c7dc0dbeb305640ea890772ee422a40e6b89f" dependencies = [ "accesskit", "accesskit_macos", @@ -78,20 +78,6 @@ dependencies = [ "cpufeatures 0.2.17", ] -[[package]] -name = "ahash" -version = "0.8.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" -dependencies = [ - "cfg-if", - "const-random", - "getrandom 0.3.4", - "once_cell", - "version_check", - "zerocopy", -] - [[package]] name = "aho-corasick" version = "1.1.4" @@ -233,6 +219,18 @@ dependencies = [ "futures-core", ] +[[package]] +name = "async-broadcast" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" +dependencies = [ + "event-listener 5.4.1", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + [[package]] name = "async-channel" version = "2.5.0" @@ -391,6 +389,9 @@ name = "async-task" version = "4.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" +dependencies = [ + "portable-atomic", +] [[package]] name = "async-trait" @@ -417,6 +418,9 @@ name = "atomic-waker" version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" +dependencies = [ + "portable-atomic", +] [[package]] name = "atomicow" @@ -435,14 +439,36 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] -name = "axum" -version = "0.7.9" +name = "aws-lc-rs" +version = "1.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f" +checksum = "0ec6fb3fe69024a75fa7e1bfb48aa6cf59706a101658ea01bfd33b2b248a038f" +dependencies = [ + "aws-lc-sys", + "zeroize", +] + +[[package]] +name = "aws-lc-sys" +version = "0.40.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f50037ee5e1e41e7b8f9d161680a725bd1626cb6f8c7e901f91f942850852fe7" +dependencies = [ + "cc", + "cmake", + "dunce", + "fs_extra", +] + +[[package]] +name = "axum" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31b698c5f9a010f6573133b09e0de5408834d0c82f8d7475a89fc1867a71cd90" dependencies = [ - "async-trait", "axum-core", "bytes", + "form_urlencoded", "futures-util", "http", "http-body", @@ -455,8 +481,7 @@ dependencies = [ "mime", "percent-encoding", "pin-project-lite", - "rustversion", - "serde", + "serde_core", "serde_json", "serde_path_to_error", "serde_urlencoded", @@ -470,25 +495,29 @@ dependencies = [ [[package]] name = "axum-core" -version = "0.4.5" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199" +checksum = "08c78f31d7b1291f7ee735c1c6780ccde7785daae9a9206026862dab7d8792d1" dependencies = [ - "async-trait", "bytes", - "futures-util", + "futures-core", "http", "http-body", "http-body-util", "mime", "pin-project-lite", - "rustversion", "sync_wrapper", "tower-layer", "tower-service", "tracing", ] +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + [[package]] name = "base64" version = "0.21.7" @@ -509,31 +538,31 @@ checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" [[package]] name = "bcrypt" -version = "0.15.1" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e65938ed058ef47d92cf8b346cc76ef48984572ade631927e9937b5ffc7662c7" +checksum = "523ab528ce3a7ada6597f8ccf5bd8d85ebe26d5edf311cad4d1d3cfb2d357ac6" dependencies = [ "base64 0.22.1", "blowfish", - "getrandom 0.2.17", + "getrandom 0.4.2", "subtle", "zeroize", ] [[package]] name = "bevy" -version = "0.15.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eaad7fe854258047680c51c3cacb804468553c04241912f6254c841c67c0198" +checksum = "4b8369c16b7c017437021341521f8b4a0d98e1c70113fb358c3258ae7d661d79" dependencies = [ "bevy_internal", ] [[package]] name = "bevy_a11y" -version = "0.15.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "245a938f754f70a380687b89f1c4dac75b62d58fae90ae969fcfb8ecd91ed879" +checksum = "ed3561712cf49074d89e9989bfc2e6c6add5d33288f689db9a0c333300d2d004" dependencies = [ "accesskit", "bevy_app", @@ -544,19 +573,19 @@ dependencies = [ [[package]] name = "bevy_animation" -version = "0.15.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41e2b3e4e6cb4df085b941b105f2c790901e34c8571e02342f8e96acdf7cf7d1" +checksum = "49796627726d0b9a722ad9a0127719e7c1868f474d6575ec0f411e8299c4d7bb" dependencies = [ "bevy_app", "bevy_asset", "bevy_color", - "bevy_core", "bevy_derive", "bevy_ecs", - "bevy_hierarchy", "bevy_log", "bevy_math", + "bevy_mesh", + "bevy_platform", "bevy_reflect", "bevy_render", "bevy_time", @@ -570,42 +599,49 @@ dependencies = [ "ron", "serde", "smallvec", + "thiserror 2.0.18", "thread_local", + "tracing", "uuid", ] [[package]] name = "bevy_app" -version = "0.15.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0ac033a388b8699d241499a43783a09e6a3bab2430f1297c6bd4974095efb3f" +checksum = "4491cc4c718ae76b4c6883df58b94cc88b32dcd894ea8d5b603c7c7da72ca967" dependencies = [ "bevy_derive", "bevy_ecs", + "bevy_platform", "bevy_reflect", "bevy_tasks", "bevy_utils", + "cfg-if", "console_error_panic_hook", "ctrlc", - "derive_more", "downcast-rs", + "log", + "thiserror 2.0.18", + "variadics_please", "wasm-bindgen", "web-sys", ] [[package]] name = "bevy_asset" -version = "0.15.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73fd901b3be016088c4dda2f628bda96b7cb578b9bc8ae684bbf30bec0a9483e" +checksum = "f56111d9b88d8649f331a667d9d72163fb26bd09518ca16476d238653823db1e" dependencies = [ - "async-broadcast", + "async-broadcast 0.7.2", "async-fs 2.2.0", "async-lock 3.4.2", "atomicow", "bevy_app", "bevy_asset_macros", "bevy_ecs", + "bevy_platform", "bevy_reflect", "bevy_tasks", "bevy_utils", @@ -624,6 +660,8 @@ dependencies = [ "ron", "serde", "stackfuture", + "thiserror 2.0.18", + "tracing", "uuid", "wasm-bindgen", "wasm-bindgen-futures", @@ -632,9 +670,9 @@ dependencies = [ [[package]] name = "bevy_asset_macros" -version = "0.15.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6725a785789ece8d8c73bba25fdac5e50494d959530e89565bbcea9f808b7181" +checksum = "a4cca3e67c0ec760d8889d42293d987ce5da92eaf9c592bf5d503728a63b276d" dependencies = [ "bevy_macro_utils", "proc-macro2", @@ -644,28 +682,27 @@ dependencies = [ [[package]] name = "bevy_audio" -version = "0.15.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30af4b6a91c8e08f623b0cdc53ce5b8f731c78af6ef728cdfc06dc61eda164c4" +checksum = "f2b4f6f2a5c6c0e7c6825e791d2a061c76c2d6784f114c8f24382163fabbfaaa" dependencies = [ "bevy_app", "bevy_asset", "bevy_derive", "bevy_ecs", - "bevy_hierarchy", "bevy_math", "bevy_reflect", "bevy_transform", - "bevy_utils", "cpal", "rodio", + "tracing", ] [[package]] name = "bevy_color" -version = "0.15.4" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a87b7137ffa9844ae542043769fb98c35efbf2f8a8429ff2a73d8ef30e58baaa" +checksum = "5c101cbe1e26b8d701eb77263b14346e2e0cbbd2a6e254b9b1aead814e5ca8d3" dependencies = [ "bevy_math", "bevy_reflect", @@ -673,55 +710,45 @@ dependencies = [ "derive_more", "encase", "serde", + "thiserror 2.0.18", "wgpu-types", ] -[[package]] -name = "bevy_core" -version = "0.15.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e9ce8da8e4016f63c1d361b52e61aaf4348c569829c74f1a5bbedfd8d3d57a3" -dependencies = [ - "bevy_app", - "bevy_ecs", - "bevy_reflect", - "bevy_tasks", - "bevy_utils", - "uuid", -] - [[package]] name = "bevy_core_pipeline" -version = "0.15.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee0ff0f4723f30a5a6578915dbfe0129f2befaec8438dde70ac1fb363aee01f5" +checksum = "59ed46363cad80dc00f08254c3015232bd6f640738403961c6d63e7ecfc61625" dependencies = [ "bevy_app", "bevy_asset", "bevy_color", - "bevy_core", "bevy_derive", + "bevy_diagnostic", "bevy_ecs", "bevy_image", "bevy_math", + "bevy_platform", "bevy_reflect", "bevy_render", "bevy_transform", "bevy_utils", "bevy_window", "bitflags 2.11.1", - "derive_more", + "bytemuck", "nonmax", "radsort", "serde", "smallvec", + "thiserror 2.0.18", + "tracing", ] [[package]] name = "bevy_derive" -version = "0.15.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57d94761ce947b0a2402fd949fe1e7a5b1535293130ba4cd9893be6295d4680a" +checksum = "1b837bf6c51806b10ebfa9edf1844ad80a3a0760d6c5fac4e90761df91a8901a" dependencies = [ "bevy_macro_utils", "quote", @@ -730,48 +757,55 @@ dependencies = [ [[package]] name = "bevy_diagnostic" -version = "0.15.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e83c65979f063b593917ab9b1d7328c5854dba4b6ddf1ab78156c0105831fdf" +checksum = "48797366f312a8f31e237d08ce3ee70162591282d2bfe7c5ad8be196fb263e55" dependencies = [ "bevy_app", - "bevy_core", "bevy_ecs", + "bevy_platform", "bevy_tasks", "bevy_time", "bevy_utils", "const-fnv1a-hash", + "log", + "serde", "sysinfo", ] [[package]] name = "bevy_ecs" -version = "0.15.4" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecb64e8f2fe95aa2f8b3e96d09acd23021257ce4a8c942f4c38dcbeaf721955c" +checksum = "3c2bf6521aae57a0ec3487c4bfb59e36c4a378e834b626a4bea6a885af2fdfe7" dependencies = [ "arrayvec", "bevy_ecs_macros", + "bevy_platform", "bevy_ptr", "bevy_reflect", "bevy_tasks", "bevy_utils", "bitflags 2.11.1", + "bumpalo", "concurrent-queue", "derive_more", "disqualified", - "fixedbitset 0.5.7", + "fixedbitset", + "indexmap", + "log", "nonmax", - "petgraph", "serde", "smallvec", + "thiserror 2.0.18", + "variadics_please", ] [[package]] name = "bevy_ecs_macros" -version = "0.15.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f453adf07712b39826bc5845e5b0887ce03204ee8359bbe6b40a9afda60564a1" +checksum = "38748d6f3339175c582d751f410fb60a93baf2286c3deb7efebb0878dce7f413" dependencies = [ "bevy_macro_utils", "proc-macro2", @@ -781,9 +815,9 @@ dependencies = [ [[package]] name = "bevy_encase_derive" -version = "0.15.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f37ad69d36bb9e8479a88d481ef9748f5d7ab676040531d751d3a44441dcede7" +checksum = "8148f4edee470a2ea5cad010184c492a4c94c36d7a7158ea28e134ea87f274ab" dependencies = [ "bevy_macro_utils", "encase_derive_impl", @@ -791,24 +825,26 @@ dependencies = [ [[package]] name = "bevy_gilrs" -version = "0.15.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a737451ccd6be5da68fbba5d984328b8a82eebd16c1fda0bec840090a3d454fd" +checksum = "97efef87c631949e67d06bb5d7dfd2a5f936b3b379afb6b1485b08edbb219b87" dependencies = [ "bevy_app", "bevy_ecs", "bevy_input", + "bevy_platform", "bevy_time", "bevy_utils", - "derive_more", "gilrs", + "thiserror 2.0.18", + "tracing", ] [[package]] name = "bevy_gizmos" -version = "0.15.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1614516d0922ad60e87cc39658422286ed684aaf4b3162d25051bc105eed814" +checksum = "7823154a9682128c261d8bddb3a4d7192a188490075c527af04520c2f0f8aad6" dependencies = [ "bevy_app", "bevy_asset", @@ -826,13 +862,14 @@ dependencies = [ "bevy_transform", "bevy_utils", "bytemuck", + "tracing", ] [[package]] name = "bevy_gizmos_macros" -version = "0.15.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0edb9e0dca64e0fc9d6b1d9e6e2178396e339e3e2b9f751e2504e3ea4ddf4508" +checksum = "f378f3b513218ddc78254bbe76536d9de59c1429ebd0c14f5d8f2a25812131ad" dependencies = [ "bevy_macro_utils", "proc-macro2", @@ -842,94 +879,106 @@ dependencies = [ [[package]] name = "bevy_gltf" -version = "0.15.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa8364f34bc08fe067ce32418e22ee96e177101dbf1bc00803aaeb2b262615be" +checksum = "10a080237c0b8842ccc15a06d3379302c68580eeea4497b1c7387e470eda1f07" dependencies = [ "base64 0.22.1", "bevy_animation", "bevy_app", "bevy_asset", "bevy_color", - "bevy_core", "bevy_core_pipeline", "bevy_ecs", - "bevy_hierarchy", "bevy_image", "bevy_math", + "bevy_mesh", "bevy_pbr", + "bevy_platform", "bevy_reflect", "bevy_render", "bevy_scene", "bevy_tasks", "bevy_transform", "bevy_utils", - "derive_more", + "fixedbitset", "gltf", + "itertools 0.14.0", "percent-encoding", "serde", "serde_json", "smallvec", -] - -[[package]] -name = "bevy_hierarchy" -version = "0.15.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19ced04e04437d0a439fe4722544c2a4678c1fe3412b57ee489d817c11884045" -dependencies = [ - "bevy_app", - "bevy_core", - "bevy_ecs", - "bevy_reflect", - "bevy_utils", - "disqualified", - "smallvec", + "thiserror 2.0.18", + "tracing", ] [[package]] name = "bevy_image" -version = "0.15.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b384d1ce9c87f6151292a76233897a628c2a50b3560487c4d74472225d49826" +checksum = "65e6e900cfecadbc3149953169e36b9e26f922ed8b002d62339d8a9dc6129328" dependencies = [ + "bevy_app", "bevy_asset", "bevy_color", "bevy_math", + "bevy_platform", "bevy_reflect", "bevy_utils", "bitflags 2.11.1", "bytemuck", - "derive_more", "futures-lite 2.6.1", + "guillotiere", + "half", "image", "ktx2", + "rectangle-pack", "ruzstd", "serde", - "wgpu", + "thiserror 2.0.18", + "tracing", + "wgpu-types", ] [[package]] name = "bevy_input" -version = "0.15.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52589939ca09695c69d629d166c5edf1759feaaf8f2078904aae9c33d08f5c3" +checksum = "18d6b6516433f6f7d680f648d04eb1866bb3927a1782d52f74831b62042f3cd1" dependencies = [ "bevy_app", - "bevy_core", "bevy_ecs", "bevy_math", + "bevy_platform", "bevy_reflect", "bevy_utils", "derive_more", + "log", "smol_str", + "thiserror 2.0.18", +] + +[[package]] +name = "bevy_input_focus" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e2d079fda74d1416e0a57dac29ea2b79ff77f420cd6b87f833d3aa29a46bc4d" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_input", + "bevy_math", + "bevy_reflect", + "bevy_window", + "log", + "thiserror 2.0.18", ] [[package]] name = "bevy_internal" -version = "0.15.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1e0c1d980d276e11558184d0627c8967ad8b70dab3e54a0f377bb53b98515b6" +checksum = "857da8785678fde537d02944cd20dec9cafb7d4c447efe15f898dc60e733cacd" dependencies = [ "bevy_a11y", "bevy_animation", @@ -937,7 +986,6 @@ dependencies = [ "bevy_asset", "bevy_audio", "bevy_color", - "bevy_core", "bevy_core_pipeline", "bevy_derive", "bevy_diagnostic", @@ -945,13 +993,14 @@ dependencies = [ "bevy_gilrs", "bevy_gizmos", "bevy_gltf", - "bevy_hierarchy", "bevy_image", "bevy_input", + "bevy_input_focus", "bevy_log", "bevy_math", "bevy_pbr", "bevy_picking", + "bevy_platform", "bevy_ptr", "bevy_reflect", "bevy_render", @@ -970,14 +1019,15 @@ dependencies = [ [[package]] name = "bevy_log" -version = "0.15.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b381a22e01f24af51536ef1eace94298dd555d06ffcf368125d16317f5f179cb" +checksum = "d7a61ee8aef17a974f5ca481dcedf0c2bd52670e231d4c4bc9ddef58328865f9" dependencies = [ "android_log-sys", "bevy_app", "bevy_ecs", "bevy_utils", + "tracing", "tracing-log", "tracing-oslog", "tracing-subscriber", @@ -986,10 +1036,11 @@ dependencies = [ [[package]] name = "bevy_macro_utils" -version = "0.15.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bb6ded1ddc124ea214f6a2140e47a78d1fe79b0638dad39419cdeef2e1133f1" +checksum = "052eeebcb8e7e072beea5031b227d9a290f8a7fbbb947573ab6ec81df0fb94be" dependencies = [ + "parking_lot", "proc-macro2", "quote", "syn 2.0.117", @@ -998,25 +1049,29 @@ dependencies = [ [[package]] name = "bevy_math" -version = "0.15.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c2650169161b64f9a93e41f13253701fdf971dc95265ed667d17bea6d2a334f" +checksum = "68553e0090fe9c3ba066c65629f636bd58e4ebd9444fdba097b91af6cd3e243f" dependencies = [ + "approx", "bevy_reflect", "derive_more", "glam", - "itertools", + "itertools 0.14.0", + "libm", "rand 0.8.6", "rand_distr", "serde", "smallvec", + "thiserror 2.0.18", + "variadics_please", ] [[package]] name = "bevy_mesh" -version = "0.15.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "760f3c41b4c61a5f0d956537f454c49f79b8ed0fd0781b1a879ead8e69d95283" +checksum = "b10399c7027001edbc0406d7d0198596b1f07206c1aae715274106ba5bdcac40" dependencies = [ "bevy_asset", "bevy_derive", @@ -1024,40 +1079,44 @@ dependencies = [ "bevy_image", "bevy_math", "bevy_mikktspace", + "bevy_platform", "bevy_reflect", "bevy_transform", "bevy_utils", "bitflags 2.11.1", "bytemuck", - "derive_more", "hexasphere", "serde", - "wgpu", + "thiserror 2.0.18", + "tracing", + "wgpu-types", ] [[package]] name = "bevy_mikktspace" -version = "0.15.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "226f663401069ded4352ed1472a85bb1f43e2b7305d6a50e53a4f6508168e380" +checksum = "8bb60c753b968a2de0fd279b76a3d19517695e771edb4c23575c7f92156315de" dependencies = [ "glam", ] [[package]] name = "bevy_pbr" -version = "0.15.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4d54c840d4352dac51f2a27cf915ac99b2f93db008d8fb1be8d23b09d522acf" +checksum = "d5e0b4eb871f364a0d217f70f6c41d7fdc6f9f931fa1abbf222180c03d0ae410" dependencies = [ "bevy_app", "bevy_asset", "bevy_color", "bevy_core_pipeline", "bevy_derive", + "bevy_diagnostic", "bevy_ecs", "bevy_image", "bevy_math", + "bevy_platform", "bevy_reflect", "bevy_render", "bevy_transform", @@ -1066,27 +1125,30 @@ dependencies = [ "bitflags 2.11.1", "bytemuck", "derive_more", - "fixedbitset 0.5.7", + "fixedbitset", "nonmax", + "offset-allocator", "radsort", "smallvec", "static_assertions", + "thiserror 2.0.18", + "tracing", ] [[package]] name = "bevy_picking" -version = "0.15.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2091a495c0f9c8962abb1e30f9d99696296c332b407e1f6fe1fe28aab96a8629" +checksum = "8ed04757938655ed8094ea1efb533f99063a8b22abffc22010c694d291522850" dependencies = [ "bevy_app", "bevy_asset", "bevy_derive", "bevy_ecs", - "bevy_hierarchy", "bevy_input", "bevy_math", "bevy_mesh", + "bevy_platform", "bevy_reflect", "bevy_render", "bevy_time", @@ -1094,22 +1156,42 @@ dependencies = [ "bevy_utils", "bevy_window", "crossbeam-channel", + "tracing", "uuid", ] [[package]] -name = "bevy_ptr" -version = "0.15.3" +name = "bevy_platform" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89fe0b0b919146939481a3a7c38864face2c6d0fd2c73ab3d430dc693ecd9b11" +checksum = "f7573dc824a1b08b4c93fdbe421c53e1e8188e9ca1dd74a414455fe571facb47" +dependencies = [ + "cfg-if", + "critical-section", + "foldhash 0.1.5", + "getrandom 0.2.17", + "hashbrown 0.15.5", + "portable-atomic", + "portable-atomic-util", + "serde", + "spin", + "web-time", +] + +[[package]] +name = "bevy_ptr" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df7370d0e46b60e071917711d0860721f5347bc958bf325975ae6913a5dfcf01" [[package]] name = "bevy_reflect" -version = "0.15.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ddbca0a39e88eff2c301dc794ee9d73a53f4b08d47b2c9b5a6aac182fae6217" +checksum = "daeb91a63a1a4df00aa58da8cc4ddbd4b9f16ab8bb647c5553eb156ce36fa8c2" dependencies = [ "assert_type_match", + "bevy_platform", "bevy_ptr", "bevy_reflect_derive", "bevy_utils", @@ -1117,19 +1199,23 @@ dependencies = [ "disqualified", "downcast-rs", "erased-serde", + "foldhash 0.1.5", "glam", "petgraph", "serde", "smallvec", "smol_str", + "thiserror 2.0.18", "uuid", + "variadics_please", + "wgpu-types", ] [[package]] name = "bevy_reflect_derive" -version = "0.15.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d62affb769db17d34ad0b75ff27eca94867e2acc8ea350c5eca97d102bd98709" +checksum = "40ddadc55fe16b45faaa54ab2f9cb00548013c74812e8b018aa172387103cce6" dependencies = [ "bevy_macro_utils", "proc-macro2", @@ -1140,23 +1226,22 @@ dependencies = [ [[package]] name = "bevy_render" -version = "0.15.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4aa9d7df5c2b65540093b8402aceec0a55d67b54606e57ce2969abe280b4c48" +checksum = "ef91fed1f09405769214b99ebe4390d69c1af5cdd27967deae9135c550eb1667" dependencies = [ "async-channel", "bevy_app", "bevy_asset", "bevy_color", - "bevy_core", "bevy_derive", "bevy_diagnostic", "bevy_ecs", "bevy_encase_derive", - "bevy_hierarchy", "bevy_image", "bevy_math", "bevy_mesh", + "bevy_platform", "bevy_reflect", "bevy_render_macros", "bevy_tasks", @@ -1164,13 +1249,16 @@ dependencies = [ "bevy_transform", "bevy_utils", "bevy_window", + "bitflags 2.11.1", "bytemuck", "codespan-reporting", "derive_more", "downcast-rs", "encase", + "fixedbitset", "futures-lite 2.6.1", "image", + "indexmap", "js-sys", "ktx2", "naga", @@ -1180,6 +1268,9 @@ dependencies = [ "send_wrapper", "serde", "smallvec", + "thiserror 2.0.18", + "tracing", + "variadics_please", "wasm-bindgen", "web-sys", "wgpu", @@ -1187,9 +1278,9 @@ dependencies = [ [[package]] name = "bevy_render_macros" -version = "0.15.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3469307d1b5ca5c37b7f9269be033845357412ebad33eace46826e59da592f66" +checksum = "abd42cf6c875bcf38da859f8e731e119a6aff190d41dd0a1b6000ad57cf2ed3d" dependencies = [ "bevy_macro_utils", "proc-macro2", @@ -1199,29 +1290,30 @@ dependencies = [ [[package]] name = "bevy_scene" -version = "0.15.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdfe819202aa97bbb206d79fef83504b34d45529810563aafc2fe02cc10e3ee4" +checksum = "5c52ca165200995fe8afd2a1a6c03e4ffee49198a1d4653d32240ea7f217d4ab" dependencies = [ "bevy_app", "bevy_asset", "bevy_derive", "bevy_ecs", - "bevy_hierarchy", + "bevy_platform", "bevy_reflect", "bevy_render", "bevy_transform", "bevy_utils", "derive_more", "serde", + "thiserror 2.0.18", "uuid", ] [[package]] name = "bevy_sprite" -version = "0.15.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27411a31704117002787c9e8cc1f2f89babf5e67572508aa029366d4643f8d01" +checksum = "6ccae7bab2cb956fb0434004c359e432a3a1a074a6ef4eb471f1fb099f0b620b" dependencies = [ "bevy_app", "bevy_asset", @@ -1232,6 +1324,7 @@ dependencies = [ "bevy_image", "bevy_math", "bevy_picking", + "bevy_platform", "bevy_reflect", "bevy_render", "bevy_transform", @@ -1240,32 +1333,33 @@ dependencies = [ "bitflags 2.11.1", "bytemuck", "derive_more", - "fixedbitset 0.5.7", - "guillotiere", + "fixedbitset", "nonmax", "radsort", - "rectangle-pack", + "tracing", ] [[package]] name = "bevy_state" -version = "0.15.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "243a72266f81452412f7a3859e5d11473952a25767dc29c8d285660330f007ba" +checksum = "155d3cd97b900539008cdcaa702f88b724d94b08977b8e591a32536ce66faa8c" dependencies = [ "bevy_app", "bevy_ecs", - "bevy_hierarchy", + "bevy_platform", "bevy_reflect", "bevy_state_macros", "bevy_utils", + "log", + "variadics_please", ] [[package]] name = "bevy_state_macros" -version = "0.15.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "022eb069dfd64090fd92ba4a7f235383e49aa1c0f4320dab4999b23f67843b36" +checksum = "2481c1304fd2a1851a0d4cb63a1ce6421ae40f3f0117cbc9882963ee4c9bb609" dependencies = [ "bevy_macro_utils", "proc-macro2", @@ -1275,33 +1369,41 @@ dependencies = [ [[package]] name = "bevy_tasks" -version = "0.15.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "028630ddc355563bd567df1076db3515858aa26715ddf7467d2086f9b40e5ab1" +checksum = "5b674242641cab680688fc3b850243b351c1af49d4f3417a576debd6cca8dcf5" dependencies = [ "async-channel", "async-executor", + "async-task", + "atomic-waker", + "bevy_platform", + "cfg-if", "concurrent-queue", + "crossbeam-queue", + "derive_more", "futures-channel", "futures-lite 2.6.1", + "heapless", "pin-project", "wasm-bindgen-futures", ] [[package]] name = "bevy_text" -version = "0.15.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "872b0b627cedf6d1bd97b75bc4d59c16f67afdd4f2fed8f7d808a258d6cb982e" +checksum = "1d76c85366159f5f54110f33321c76d8429cfd8f39638f26793a305dae568b60" dependencies = [ "bevy_app", "bevy_asset", "bevy_color", "bevy_derive", "bevy_ecs", - "bevy_hierarchy", "bevy_image", + "bevy_log", "bevy_math", + "bevy_platform", "bevy_reflect", "bevy_render", "bevy_sprite", @@ -1309,45 +1411,52 @@ dependencies = [ "bevy_utils", "bevy_window", "cosmic-text", - "derive_more", "serde", "smallvec", "sys-locale", + "thiserror 2.0.18", + "tracing", "unicode-bidi", ] [[package]] name = "bevy_time" -version = "0.15.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b2051ec56301b994f7c182a2a6eb1490038149ad46d95eee715e1a922acdfd9" +checksum = "bc98eb356c75be04fbbc77bb3d8ffa24c8bacd99f76111cee23d444be6ac8c9c" dependencies = [ "bevy_app", "bevy_ecs", + "bevy_platform", "bevy_reflect", - "bevy_utils", "crossbeam-channel", + "log", + "serde", ] [[package]] name = "bevy_transform" -version = "0.15.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8109b1234b0e58931f51df12bc8895daa69298575cf92da408848f79a4ce201" +checksum = "df218e440bb9a19058e1b80a68a031c887bcf7bd3a145b55f361359a2fa3100d" dependencies = [ "bevy_app", "bevy_ecs", - "bevy_hierarchy", + "bevy_log", "bevy_math", "bevy_reflect", + "bevy_tasks", + "bevy_utils", "derive_more", + "serde", + "thiserror 2.0.18", ] [[package]] name = "bevy_ui" -version = "0.15.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e534590222d044c875bf3511e5d0b3da78889bb21ad797953484ce011af77b46" +checksum = "ea4a4d2ba51865bc3039af29a26b4f52c48b54cc758369f52004caf4b6f03770" dependencies = [ "accesskit", "bevy_a11y", @@ -1357,11 +1466,11 @@ dependencies = [ "bevy_core_pipeline", "bevy_derive", "bevy_ecs", - "bevy_hierarchy", "bevy_image", "bevy_input", "bevy_math", "bevy_picking", + "bevy_platform", "bevy_reflect", "bevy_render", "bevy_sprite", @@ -1374,57 +1483,45 @@ dependencies = [ "nonmax", "smallvec", "taffy", + "thiserror 2.0.18", + "tracing", ] [[package]] name = "bevy_utils" -version = "0.15.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63c2174d43a0de99f863c98a472370047a2bfa7d1e5cec8d9d647fb500905d9d" +checksum = "94f7a8905a125d2017e8561beefb7f2f5e67e93ff6324f072ad87c5fd6ec3b99" dependencies = [ - "ahash", - "bevy_utils_proc_macros", - "getrandom 0.2.17", - "hashbrown 0.14.5", + "bevy_platform", "thread_local", - "tracing", - "web-time", -] - -[[package]] -name = "bevy_utils_proc_macros" -version = "0.15.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94847541f6dd2e28f54a9c2b0e857da5f2631e2201ebc25ce68781cdcb721391" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", ] [[package]] name = "bevy_window" -version = "0.15.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1e1e7c6713c04404a3e7cede48a9c47b76c30efc764664ec1246147f6fb9878" +checksum = "df7e8ad0c17c3cc23ff5566ae2905c255e6986037fb041f74c446216f5c38431" dependencies = [ "android-activity", - "bevy_a11y", "bevy_app", "bevy_ecs", "bevy_input", "bevy_math", + "bevy_platform", "bevy_reflect", "bevy_utils", + "log", "raw-window-handle", + "serde", "smol_str", ] [[package]] name = "bevy_winit" -version = "0.15.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e158a73d6d896b1600a61bc115017707ecb467d1a5ad49231c5e58294f6f6e13" +checksum = "6a5e7f00c6b3b6823df5ec2a5e9067273607208919bc8c211773ebb9643c87f0" dependencies = [ "accesskit", "accesskit_winit", @@ -1434,11 +1531,12 @@ dependencies = [ "bevy_asset", "bevy_derive", "bevy_ecs", - "bevy_hierarchy", "bevy_image", "bevy_input", + "bevy_input_focus", "bevy_log", "bevy_math", + "bevy_platform", "bevy_reflect", "bevy_tasks", "bevy_utils", @@ -1447,6 +1545,7 @@ dependencies = [ "cfg-if", "crossbeam-channel", "raw-window-handle", + "tracing", "wasm-bindgen", "web-sys", "wgpu-types", @@ -1462,7 +1561,7 @@ dependencies = [ "bitflags 2.11.1", "cexpr", "clang-sys", - "itertools", + "itertools 0.13.0", "log", "prettyplease", "proc-macro2", @@ -1482,7 +1581,7 @@ dependencies = [ "bitflags 2.11.1", "cexpr", "clang-sys", - "itertools", + "itertools 0.13.0", "proc-macro2", "quote", "regex", @@ -1715,12 +1814,6 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" -[[package]] -name = "cfg_aliases" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" - [[package]] name = "cfg_aliases" version = "0.2.1" @@ -1762,6 +1855,15 @@ dependencies = [ "libloading", ] +[[package]] +name = "cmake" +version = "0.1.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0f78a02292a74a88ac736019ab962ece0bc380e3f977bf72e376c5d78ff0678" +dependencies = [ + "cc", +] + [[package]] name = "codespan-reporting" version = "0.11.1" @@ -1789,6 +1891,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" dependencies = [ "crossbeam-utils", + "portable-atomic", ] [[package]] @@ -1813,26 +1916,6 @@ version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" -[[package]] -name = "const-random" -version = "0.1.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" -dependencies = [ - "const-random-macro", -] - -[[package]] -name = "const-random-macro" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" -dependencies = [ - "getrandom 0.2.17", - "once_cell", - "tiny-keccak", -] - [[package]] name = "const_panic" version = "0.2.15" @@ -1873,6 +1956,16 @@ dependencies = [ "libc", ] +[[package]] +name = "core-foundation" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "core-foundation-sys" version = "0.8.7" @@ -1886,7 +1979,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" dependencies = [ "bitflags 1.3.2", - "core-foundation", + "core-foundation 0.9.4", "core-graphics-types", "foreign-types", "libc", @@ -1899,7 +1992,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" dependencies = [ "bitflags 1.3.2", - "core-foundation", + "core-foundation 0.9.4", "libc", ] @@ -1925,18 +2018,18 @@ dependencies = [ [[package]] name = "cosmic-text" -version = "0.12.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59fd57d82eb4bfe7ffa9b1cec0c05e2fd378155b47f255a67983cb4afe0e80c2" +checksum = "e418dd4f5128c3e93eab12246391c54a20c496811131f85754dc8152ee207892" dependencies = [ "bitflags 2.11.1", "fontdb", "log", "rangemap", - "rayon", "rustc-hash 1.1.0", "rustybuzz", "self_cell", + "smol_str", "swash", "sys-locale", "ttf-parser 0.21.1", @@ -2011,6 +2104,12 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "critical-section" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" + [[package]] name = "crossbeam-channel" version = "0.5.15" @@ -2020,25 +2119,6 @@ dependencies = [ "crossbeam-utils", ] -[[package]] -name = "crossbeam-deque" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" -dependencies = [ - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" -dependencies = [ - "crossbeam-utils", -] - [[package]] name = "crossbeam-queue" version = "0.3.12" @@ -2060,6 +2140,18 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array", + "rand_core 0.6.4", + "subtle", + "zeroize", +] + [[package]] name = "crypto-common" version = "0.1.7" @@ -2088,12 +2180,40 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f27ae1dd37df86211c42e150270f82743308803d90a6f6e6651cd730d5e1732f" [[package]] -name = "dashmap" -version = "5.5.3" +name = "curve25519-dalek" +version = "4.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" dependencies = [ "cfg-if", + "cpufeatures 0.2.17", + "curve25519-dalek-derive", + "digest", + "fiat-crypto", + "rustc_version", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "dashmap" +version = "6.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" +dependencies = [ + "cfg-if", + "crossbeam-utils", "hashbrown 0.14.5", "lock_api", "once_cell", @@ -2123,15 +2243,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "deranged" -version = "0.5.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" -dependencies = [ - "powerfmt", -] - [[package]] name = "derivative" version = "2.2.0" @@ -2178,23 +2289,23 @@ dependencies = [ [[package]] name = "dirs" -version = "5.0.1" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" dependencies = [ "dirs-sys", ] [[package]] name = "dirs-sys" -version = "0.4.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" dependencies = [ "libc", "option-ext", "redox_users", - "windows-sys 0.48.0", + "windows-sys 0.61.2", ] [[package]] @@ -2258,9 +2369,9 @@ checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" [[package]] name = "downcast-rs" -version = "1.2.1" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" +checksum = "117240f60069e65410b3ae1bb213295bd828f707b5bec6596a1afc8793ce0cbc" [[package]] name = "dpi" @@ -2268,6 +2379,50 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest", + "elliptic-curve", + "rfc6979", + "signature", + "spki", +] + +[[package]] +name = "ed25519" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" +dependencies = [ + "pkcs8", + "signature", +] + +[[package]] +name = "ed25519-dalek" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9" +dependencies = [ + "curve25519-dalek", + "ed25519", + "serde", + "sha2", + "subtle", + "zeroize", +] + [[package]] name = "either" version = "1.15.0" @@ -2277,6 +2432,27 @@ dependencies = [ "serde", ] +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest", + "ff", + "generic-array", + "group", + "hkdf", + "pem-rfc7468", + "pkcs8", + "rand_core 0.6.4", + "sec1", + "subtle", + "zeroize", +] + [[package]] name = "encase" version = "0.10.0" @@ -2454,18 +2630,28 @@ dependencies = [ "simd-adler32", ] +[[package]] +name = "ff" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" +dependencies = [ + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "fiat-crypto" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" + [[package]] name = "find-msvc-tools" version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" -[[package]] -name = "fixedbitset" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" - [[package]] name = "fixedbitset" version = "0.5.7" @@ -2506,10 +2692,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" [[package]] -name = "font-types" -version = "0.7.3" +name = "foldhash" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3971f9a5ca983419cdc386941ba3b9e1feba01a0ab888adf78739feb2798492" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + +[[package]] +name = "font-types" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b38ad915f6dadd993ced50848a8291a543bd41ca62bc10740d5e64e2ab4cfd7" dependencies = [ "bytemuck", ] @@ -2584,19 +2776,10 @@ dependencies = [ ] [[package]] -name = "futures" -version = "0.3.32" +name = "fs_extra" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" [[package]] name = "futures-channel" @@ -2705,7 +2888,6 @@ version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" dependencies = [ - "futures-channel", "futures-core", "futures-io", "futures-macro", @@ -2724,6 +2906,7 @@ checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", + "zeroize", ] [[package]] @@ -2828,6 +3011,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8babf46d4c1c9d92deac9f7be466f76dfc4482b6452fc5024b5e8daf6ffeb3ee" dependencies = [ "bytemuck", + "libm", "mint", "rand 0.8.6", "serde", @@ -2841,9 +3025,9 @@ checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" [[package]] name = "glow" -version = "0.14.2" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d51fa363f025f5c111e03f13eda21162faeacb6911fe8caa0c0349f9cf0c4483" +checksum = "c5e5ea60d70410161c8bf5da3fdfeaa1c72ed2c15f8bbb9d19fe3a4fad085f08" dependencies = [ "js-sys", "slotmap", @@ -2898,22 +3082,25 @@ dependencies = [ [[package]] name = "governor" -version = "0.6.3" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68a7f542ee6b35af73b06abc0dad1c1bae89964e4e253bc4b587b91c9637867b" +checksum = "9efcab3c1958580ff1f25a2a41be1668f7603d849bb63af523b208a3cc1223b8" dependencies = [ "cfg-if", "dashmap", - "futures", + "futures-sink", "futures-timer", - "no-std-compat", + "futures-util", + "getrandom 0.3.4", + "hashbrown 0.16.1", "nonzero_ext", "parking_lot", "portable-atomic", "quanta", - "rand 0.8.6", + "rand 0.9.4", "smallvec", "spinning_top", + "web-time", ] [[package]] @@ -2969,9 +3156,20 @@ dependencies = [ [[package]] name = "grid" -version = "0.14.0" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be136d9dacc2a13cc70bb6c8f902b414fb2641f8db1314637c6b7933411a8f82" +checksum = "36119f3a540b086b4e436bb2b588cf98a68863470e0e880f4d0842f112a3183a" + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core 0.6.4", + "subtle", +] [[package]] name = "guillotiere" @@ -2983,16 +3181,50 @@ dependencies = [ "svg_fmt", ] +[[package]] +name = "h2" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "half" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" +dependencies = [ + "cfg-if", + "crunchy", + "zerocopy", +] + +[[package]] +name = "hash32" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606" +dependencies = [ + "byteorder", +] + [[package]] name = "hashbrown" version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" -dependencies = [ - "ahash", - "allocator-api2", - "serde", -] [[package]] name = "hashbrown" @@ -3002,7 +3234,19 @@ checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ "allocator-api2", "equivalent", - "foldhash", + "foldhash 0.1.5", + "serde", +] + +[[package]] +name = "hashbrown" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash 0.2.0", ] [[package]] @@ -3020,6 +3264,17 @@ dependencies = [ "hashbrown 0.15.5", ] +[[package]] +name = "heapless" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad" +dependencies = [ + "hash32", + "portable-atomic", + "stable_deref_trait", +] + [[package]] name = "heck" version = "0.5.0" @@ -3143,6 +3398,7 @@ dependencies = [ "bytes", "futures-channel", "futures-core", + "h2", "http", "http-body", "httparse", @@ -3167,7 +3423,19 @@ dependencies = [ "tokio", "tokio-rustls", "tower-service", - "webpki-roots 1.0.7", +] + +[[package]] +name = "hyper-timeout" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0" +dependencies = [ + "hyper", + "hyper-util", + "pin-project-lite", + "tokio", + "tower-service", ] [[package]] @@ -3441,6 +3709,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.18" @@ -3545,17 +3822,23 @@ dependencies = [ [[package]] name = "jsonwebtoken" -version = "9.3.1" +version = "10.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a87cc7a48537badeae96744432de36f4be2b4a34a05a5ef32e9dd8a1c169dde" +checksum = "0529410abe238729a60b108898784df8984c87f6054c9c4fcacc47e4803c1ce1" dependencies = [ "base64 0.22.1", + "ed25519-dalek", + "getrandom 0.2.17", + "hmac", "js-sys", - "pem", - "ring", + "p256", + "p384", + "rand 0.8.6", + "rsa", "serde", "serde_json", - "simple_asn1", + "sha2", + "signature", ] [[package]] @@ -3568,7 +3851,7 @@ dependencies = [ "lazy_static", "linux-keyutils", "secret-service", - "security-framework", + "security-framework 2.11.1", "windows-sys 0.52.0", ] @@ -3785,9 +4068,9 @@ dependencies = [ [[package]] name = "matchit" -version = "0.7.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" +checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" [[package]] name = "md-5" @@ -3834,9 +4117,9 @@ dependencies = [ [[package]] name = "metal" -version = "0.29.0" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ecfd3296f8c56b7c1f6fbac3c71cefa9d78ce009850c45000015f206dc7fa21" +checksum = "f569fb946490b5743ad69813cb19629130ce9374034abe31614a36402d18f99e" dependencies = [ "bitflags 2.11.1", "block", @@ -3898,14 +4181,14 @@ dependencies = [ [[package]] name = "naga" -version = "23.1.0" +version = "24.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "364f94bc34f61332abebe8cad6f6cd82a5b65cff22c828d05d0968911462ca4f" +checksum = "e380993072e52eef724eddfcde0ed013b0c023c3f0417336ed041aa9f076994e" dependencies = [ "arrayvec", "bit-set 0.8.0", "bitflags 2.11.1", - "cfg_aliases 0.1.1", + "cfg_aliases", "codespan-reporting", "hexf-parse", "indexmap", @@ -3913,16 +4196,17 @@ dependencies = [ "pp-rs", "rustc-hash 1.1.0", "spirv", + "strum", "termcolor", - "thiserror 1.0.69", + "thiserror 2.0.18", "unicode-xid", ] [[package]] name = "naga_oil" -version = "0.16.0" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31ea1f080bb359927cd5404d0af1e5e6758f4f2d82ecfbebb0a0c434764e40f1" +checksum = "f2464f7395decfd16bb4c33fb0cb3b2c645cc60d051bc7fb652d3720bfb20f18" dependencies = [ "bit-set 0.5.3", "codespan-reporting", @@ -4011,7 +4295,7 @@ checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ "bitflags 2.11.1", "cfg-if", - "cfg_aliases 0.2.1", + "cfg_aliases", "libc", ] @@ -4023,16 +4307,10 @@ checksum = "5d6d0705320c1e6ba1d912b5e37cf18071b6c2e9b7fa8215a1e8a7651966f5d3" dependencies = [ "bitflags 2.11.1", "cfg-if", - "cfg_aliases 0.2.1", + "cfg_aliases", "libc", ] -[[package]] -name = "no-std-compat" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c" - [[package]] name = "nom" version = "7.1.3" @@ -4128,12 +4406,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "num-conv" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967" - [[package]] name = "num-derive" version = "0.4.2" @@ -4497,6 +4769,12 @@ version = "1.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" +[[package]] +name = "openssl-probe" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" + [[package]] name = "option-ext" version = "0.2.0" @@ -4513,6 +4791,15 @@ dependencies = [ "libredox", ] +[[package]] +name = "ordered-float" +version = "4.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bb71e1b3fa6ca1c61f383464aaf2bb0e2f8e772a1f01d486832464de363b951" +dependencies = [ + "num-traits", +] + [[package]] name = "ordered-stream" version = "0.2.0" @@ -4523,6 +4810,30 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "p256" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2", +] + +[[package]] +name = "p384" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2", +] + [[package]] name = "parking" version = "2.2.1" @@ -4558,16 +4869,6 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" -[[package]] -name = "pem" -version = "3.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be" -dependencies = [ - "base64 0.22.1", - "serde_core", -] - [[package]] name = "pem-rfc7468" version = "0.7.0" @@ -4585,11 +4886,11 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "petgraph" -version = "0.6.5" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" +checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772" dependencies = [ - "fixedbitset 0.4.2", + "fixedbitset", "indexmap", "serde", "serde_derive", @@ -4732,12 +5033,6 @@ dependencies = [ "zerovec", ] -[[package]] -name = "powerfmt" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" - [[package]] name = "pp-rs" version = "0.2.1" @@ -4772,6 +5067,15 @@ dependencies = [ "syn 2.0.117", ] +[[package]] +name = "primeorder" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +dependencies = [ + "elliptic-curve", +] + [[package]] name = "proc-macro-crate" version = "1.3.1" @@ -4834,7 +5138,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" dependencies = [ "bytes", - "cfg_aliases 0.2.1", + "cfg_aliases", "pin-project-lite", "quinn-proto", "quinn-udp", @@ -4853,6 +5157,7 @@ version = "0.11.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098" dependencies = [ + "aws-lc-rs", "bytes", "getrandom 0.3.4", "lru-slab", @@ -4874,7 +5179,7 @@ version = "0.5.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" dependencies = [ - "cfg_aliases 0.2.1", + "cfg_aliases", "libc", "once_cell", "socket2 0.6.3", @@ -5005,31 +5310,11 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" -[[package]] -name = "rayon" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb39b166781f92d482534ef4b4b1b2568f42613b53e5b6c160e24cfbfa30926d" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" -dependencies = [ - "crossbeam-deque", - "crossbeam-utils", -] - [[package]] name = "read-fonts" -version = "0.22.7" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69aacb76b5c29acfb7f90155d39759a29496aebb49395830e928a9703d2eec2f" +checksum = "7b634fabf032fab15307ffd272149b622260f55974d9fad689292a5d33df02e5" dependencies = [ "bytemuck", "font-types", @@ -5070,13 +5355,13 @@ dependencies = [ [[package]] name = "redox_users" -version = "0.4.6" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" dependencies = [ "getrandom 0.2.17", "libredox", - "thiserror 1.0.69", + "thiserror 2.0.18", ] [[package]] @@ -5116,9 +5401,9 @@ checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" [[package]] name = "reqwest" -version = "0.12.28" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" +checksum = "04e9018c9d814e5f30cc16a0f03271aeab3571e609612d9fe78c1aa8d11c2f62" dependencies = [ "base64 0.22.1", "bytes", @@ -5135,10 +5420,11 @@ dependencies = [ "pin-project-lite", "quinn", "rustls", + "rustls-native-certs", "rustls-pki-types", + "rustls-platform-verifier", "serde", "serde_json", - "serde_urlencoded", "sync_wrapper", "tokio", "tokio-rustls", @@ -5149,7 +5435,16 @@ dependencies = [ "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "webpki-roots 1.0.7", +] + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac", + "subtle", ] [[package]] @@ -5177,13 +5472,12 @@ dependencies = [ [[package]] name = "rodio" -version = "0.19.0" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6006a627c1a38d37f3d3a85c6575418cfe34a5392d60a686d0071e1c8d427acb" +checksum = "e7ceb6607dd738c99bc8cb28eff249b7cd5c8ec88b9db96c0608c1480d140fb1" dependencies = [ "cpal", "lewton", - "thiserror 1.0.69", ] [[package]] @@ -5291,6 +5585,7 @@ version = "0.23.40" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef86cd5876211988985292b91c96a8f2d298df24e75989a43a3c73f2d4d8168b" dependencies = [ + "aws-lc-rs", "once_cell", "ring", "rustls-pki-types", @@ -5299,6 +5594,18 @@ dependencies = [ "zeroize", ] +[[package]] +name = "rustls-native-certs" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" +dependencies = [ + "openssl-probe", + "rustls-pki-types", + "schannel", + "security-framework 3.7.0", +] + [[package]] name = "rustls-pki-types" version = "1.14.1" @@ -5309,12 +5616,40 @@ dependencies = [ "zeroize", ] +[[package]] +name = "rustls-platform-verifier" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d99feebc72bae7ab76ba994bb5e121b8d83d910ca40b36e0921f53becc41784" +dependencies = [ + "core-foundation 0.10.1", + "core-foundation-sys", + "jni 0.21.1", + "log", + "once_cell", + "rustls", + "rustls-native-certs", + "rustls-platform-verifier-android", + "rustls-webpki", + "security-framework 3.7.0", + "security-framework-sys", + "webpki-root-certs", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustls-platform-verifier-android" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" + [[package]] name = "rustls-webpki" version = "0.103.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" dependencies = [ + "aws-lc-rs", "ring", "rustls-pki-types", "untrusted", @@ -5345,9 +5680,9 @@ dependencies = [ [[package]] name = "ruzstd" -version = "0.7.3" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fad02996bfc73da3e301efe90b1837be9ed8f4a462b6ed410aa35d00381de89f" +checksum = "e5ff0cc5e135c8870a775d3320910cd9b564ec036b4dc0b8741629020be63f01" dependencies = [ "twox-hash", ] @@ -5367,12 +5702,35 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "schannel" +version = "0.1.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939" +dependencies = [ + "windows-sys 0.61.2", +] + [[package]] name = "scopeguard" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array", + "pkcs8", + "subtle", + "zeroize", +] + [[package]] name = "secret-service" version = "3.1.0" @@ -5399,7 +5757,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ "bitflags 2.11.1", - "core-foundation", + "core-foundation 0.9.4", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework" +version = "3.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" +dependencies = [ + "bitflags 2.11.1", + "core-foundation 0.10.1", "core-foundation-sys", "libc", "security-framework-sys", @@ -5589,23 +5960,11 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" -[[package]] -name = "simple_asn1" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d585997b0ac10be3c5ee635f1bab02d512760d14b7c468801ac8a01d9ae5f1d" -dependencies = [ - "num-bigint", - "num-traits", - "thiserror 2.0.18", - "time", -] - [[package]] name = "skrifa" -version = "0.22.3" +version = "0.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e1c44ad1f6c5bdd4eefed8326711b7dbda9ea45dfd36068c427d332aa382cbe" +checksum = "7fbdfe3d2475fbd7ddd1f3e5cf8288a30eb3e5f95832829570cd88115a7434ac" dependencies = [ "bytemuck", "read-fonts", @@ -5684,7 +6043,7 @@ dependencies = [ "chrono", "rand 0.8.6", "serde", - "thiserror 1.0.69", + "thiserror 2.0.18", ] [[package]] @@ -5700,7 +6059,7 @@ dependencies = [ "serde_json", "solitaire_core", "solitaire_sync", - "thiserror 1.0.69", + "thiserror 2.0.18", "tokio", ] @@ -5741,7 +6100,7 @@ dependencies = [ "serde_json", "solitaire_sync", "sqlx", - "thiserror 1.0.69", + "thiserror 2.0.18", "tokio", "tower", "tower_governor", @@ -5757,7 +6116,7 @@ dependencies = [ "chrono", "serde", "serde_json", - "thiserror 1.0.69", + "thiserror 2.0.18", "uuid", ] @@ -5768,6 +6127,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" dependencies = [ "lock_api", + "portable-atomic", ] [[package]] @@ -6020,6 +6380,28 @@ dependencies = [ "unicode-properties", ] +[[package]] +name = "strum" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" +dependencies = [ + "strum_macros", +] + +[[package]] +name = "strum_macros" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.117", +] + [[package]] name = "subtle" version = "2.6.1" @@ -6034,9 +6416,9 @@ checksum = "0193cc4331cfd2f3d2011ef287590868599a2f33c3e69bc22c1a3d3acf9e02fb" [[package]] name = "swash" -version = "0.1.19" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbd59f3f359ddd2c95af4758c18270eddd9c730dde98598023cdabff472c2ca2" +checksum = "842f3cd369c2ba38966204f983eaa5e54a8e84a7d7159ed36ade2b6c335aae64" dependencies = [ "skrifa", "yazi", @@ -6217,26 +6599,25 @@ dependencies = [ [[package]] name = "sysinfo" -version = "0.32.1" +version = "0.34.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c33cd241af0f2e9e3b5c32163b873b29956890b5342e6745b917ce9d490f4af" +checksum = "a4b93974b3d3aeaa036504b8eefd4c039dced109171c1ae973f1dc63b2c7e4b2" dependencies = [ - "core-foundation-sys", "libc", "memchr", "ntapi", + "objc2-core-foundation", "windows 0.57.0", ] [[package]] name = "taffy" -version = "0.5.2" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cb893bff0f80ae17d3a57e030622a967b8dbc90e38284d9b4b1442e23873c94" +checksum = "ab4f4d046dd956a47a7e1a2947083d7ac3e6aa3cfaaead36173ceaa5ab11878c" dependencies = [ "arrayvec", "grid", - "num-traits", "serde", "slotmap", ] @@ -6312,46 +6693,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "time" -version = "0.3.47" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" -dependencies = [ - "deranged", - "itoa", - "num-conv", - "powerfmt", - "serde_core", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" - -[[package]] -name = "time-macros" -version = "0.2.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" -dependencies = [ - "num-conv", - "time-core", -] - -[[package]] -name = "tiny-keccak" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" -dependencies = [ - "crunchy", -] - [[package]] name = "tinystr" version = "0.8.3" @@ -6426,6 +6767,19 @@ dependencies = [ "tokio", ] +[[package]] +name = "tokio-util" +version = "0.7.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + [[package]] name = "toml_datetime" version = "0.6.11" @@ -6484,6 +6838,35 @@ dependencies = [ "winnow 1.0.2", ] +[[package]] +name = "tonic" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fec7c61a0695dc1887c1b53952990f3ad2e3a31453e1f49f10e75424943a93ec" +dependencies = [ + "async-trait", + "axum", + "base64 0.22.1", + "bytes", + "h2", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-timeout", + "hyper-util", + "percent-encoding", + "pin-project", + "socket2 0.6.3", + "sync_wrapper", + "tokio", + "tokio-stream", + "tower", + "tower-layer", + "tower-service", + "tracing", +] + [[package]] name = "tower" version = "0.5.3" @@ -6492,9 +6875,12 @@ checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" dependencies = [ "futures-core", "futures-util", + "indexmap", "pin-project-lite", + "slab", "sync_wrapper", "tokio", + "tokio-util", "tower-layer", "tower-service", "tracing", @@ -6532,16 +6918,17 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tower_governor" -version = "0.4.3" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aea939ea6cfa7c4880f3e7422616624f97a567c16df67b53b11f0d03917a8e46" +checksum = "44de9b94d849d3c46e06a883d72d408c2de6403367b39df2b1c9d9e7b6736fe6" dependencies = [ "axum", "forwarded-header-value", "governor", "http", "pin-project", - "thiserror 1.0.69", + "thiserror 2.0.18", + "tonic", "tower", "tracing", ] @@ -6663,13 +7050,9 @@ checksum = "2c591d83f69777866b9126b24c6dd9a18351f177e49d625920d19f989fd31cf8" [[package]] name = "twox-hash" -version = "1.6.3" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" -dependencies = [ - "cfg-if", - "static_assertions", -] +checksum = "9ea3136b675547379c4bd395ca6b938e5ad3c3d20fad76e7fe85f9e0d011419c" [[package]] name = "typeid" @@ -6795,12 +7178,14 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "uuid" -version = "1.12.1" +version = "1.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3758f5e68192bb96cc8f9b7e2c2cfdabb435499a28499a42f8f984092adad4b" +checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76" dependencies = [ - "getrandom 0.2.17", - "serde", + "getrandom 0.4.2", + "js-sys", + "serde_core", + "wasm-bindgen", ] [[package]] @@ -6809,6 +7194,17 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" +[[package]] +name = "variadics_please" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41b6d82be61465f97d42bd1d15bf20f3b0a3a0905018f38f9d6f6962055b0b5c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + [[package]] name = "vcpkg" version = "0.2.15" @@ -6991,6 +7387,15 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "webpki-root-certs" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31141ce3fc3e300ae89b78c0dd67f9708061d1d2eda54b8209346fd6be9a92c" +dependencies = [ + "rustls-pki-types", +] + [[package]] name = "webpki-roots" version = "0.26.11" @@ -7011,12 +7416,13 @@ dependencies = [ [[package]] name = "wgpu" -version = "23.0.1" +version = "24.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80f70000db37c469ea9d67defdc13024ddf9a5f1b89cb2941b812ad7cde1735a" +checksum = "6b0b3436f0729f6cdf2e6e9201f3d39dc95813fad61d826c1ed07918b4539353" dependencies = [ "arrayvec", - "cfg_aliases 0.1.1", + "bitflags 2.11.1", + "cfg_aliases", "document-features", "js-sys", "log", @@ -7036,14 +7442,14 @@ dependencies = [ [[package]] name = "wgpu-core" -version = "23.0.1" +version = "24.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d63c3c478de8e7e01786479919c8769f62a22eec16788d8c2ac77ce2c132778a" +checksum = "7f0aa306497a238d169b9dc70659105b4a096859a34894544ca81719242e1499" dependencies = [ "arrayvec", "bit-vec 0.8.0", "bitflags 2.11.1", - "cfg_aliases 0.1.1", + "cfg_aliases", "document-features", "indexmap", "log", @@ -7054,16 +7460,16 @@ dependencies = [ "raw-window-handle", "rustc-hash 1.1.0", "smallvec", - "thiserror 1.0.69", + "thiserror 2.0.18", "wgpu-hal", "wgpu-types", ] [[package]] name = "wgpu-hal" -version = "23.0.1" +version = "24.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89364b8a0b211adc7b16aeaf1bd5ad4a919c1154b44c9ce27838213ba05fd821" +checksum = "f112f464674ca69f3533248508ee30cb84c67cf06c25ff6800685f5e0294e259" dependencies = [ "android_system_properties", "arrayvec", @@ -7072,7 +7478,7 @@ dependencies = [ "bitflags 2.11.1", "block", "bytemuck", - "cfg_aliases 0.1.1", + "cfg_aliases", "core-graphics-types", "glow", "glutin_wgl_sys", @@ -7089,6 +7495,7 @@ dependencies = [ "ndk-sys 0.5.0+25.2.9519653", "objc", "once_cell", + "ordered-float", "parking_lot", "profiling", "range-alloc", @@ -7096,7 +7503,7 @@ dependencies = [ "renderdoc-sys", "rustc-hash 1.1.0", "smallvec", - "thiserror 1.0.69", + "thiserror 2.0.18", "wasm-bindgen", "web-sys", "wgpu-types", @@ -7106,12 +7513,14 @@ dependencies = [ [[package]] name = "wgpu-types" -version = "23.0.0" +version = "24.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "610f6ff27778148c31093f3b03abc4840f9636d58d597ca2f5977433acfe0068" +checksum = "50ac044c0e76c03a0378e7786ac505d010a873665e2d51383dcff8dd227dc69c" dependencies = [ "bitflags 2.11.1", "js-sys", + "log", + "serde", "web-sys", ] @@ -7712,9 +8121,9 @@ dependencies = [ "block2 0.5.1", "bytemuck", "calloop", - "cfg_aliases 0.2.1", + "cfg_aliases", "concurrent-queue", - "core-foundation", + "core-foundation 0.9.4", "core-graphics", "cursor-icon", "dpi", @@ -7940,9 +8349,9 @@ checksum = "3ae8337f8a065cfc972643663ea4279e04e7256de865aa66fe25cec5fb912d3f" [[package]] name = "yazi" -version = "0.1.6" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c94451ac9513335b5e23d7a8a2b61a7102398b8cca5160829d313e84c9d98be1" +checksum = "e01738255b5a16e78bbb83e7fbba0a1e7dd506905cfc53f4622d89015a03fbb5" [[package]] name = "yoke" @@ -7973,7 +8382,7 @@ version = "3.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "675d170b632a6ad49804c8cf2105d7c31eddd3312555cffd4b740e08e97c25e6" dependencies = [ - "async-broadcast", + "async-broadcast 0.5.1", "async-executor", "async-fs 1.6.0", "async-io 1.13.0", @@ -8035,9 +8444,9 @@ dependencies = [ [[package]] name = "zeno" -version = "0.2.3" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd15f8e0dbb966fd9245e7498c7e9e5055d9e5c8b676b95bd67091cd11a1e697" +checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524" [[package]] name = "zerocopy" diff --git a/Cargo.toml b/Cargo.toml index f14bc35..1b895d6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,27 +20,27 @@ serde = { version = "1", features = ["derive"] } serde_json = "1" uuid = { version = "1", features = ["v4", "serde"] } chrono = { version = "0.4", features = ["serde"] } -thiserror = "1" +thiserror = "2" rand = "0.8" async-trait = "0.1" tokio = { version = "1", features = ["full"] } -dirs = "5" +dirs = "6" keyring = "2" -reqwest = { version = "0.12", features = ["json", "rustls-tls"], default-features = false } +reqwest = { version = "0.13", features = ["json", "rustls", "rustls-native-certs"], default-features = false } solitaire_core = { path = "solitaire_core" } solitaire_sync = { path = "solitaire_sync" } solitaire_data = { path = "solitaire_data" } solitaire_engine = { path = "solitaire_engine" } -bevy = "0.15" +bevy = "0.16" kira = "0.9" -axum = "0.7" +axum = "0.8" sqlx = { version = "0.8", features = ["runtime-tokio-rustls", "sqlite", "macros", "migrate"] } -jsonwebtoken = "9" -bcrypt = "0.15" -tower_governor = "0.4" +jsonwebtoken = { version = "10", default-features = false, features = ["rust_crypto"] } +bcrypt = "0.19" +tower_governor = "0.8" tracing = "0.1" tracing-subscriber = { version = "0.3", features = ["env-filter"] } dotenvy = "0.15" diff --git a/solitaire_engine/src/achievement_plugin.rs b/solitaire_engine/src/achievement_plugin.rs index 5884a3b..c77e401 100644 --- a/solitaire_engine/src/achievement_plugin.rs +++ b/solitaire_engine/src/achievement_plugin.rs @@ -156,10 +156,10 @@ fn evaluate_on_win( } } Reward::BonusXp(amount) => { - xp_awarded.send(XpAwardedEvent { amount }); + xp_awarded.write(XpAwardedEvent { amount }); let prev_level = progress.0.add_xp(amount); if progress.0.leveled_up_from(prev_level) { - levelups.send(LevelUpEvent { + levelups.write(LevelUpEvent { previous_level: prev_level, new_level: progress.0.level, total_xp: progress.0.total_xp, @@ -173,7 +173,7 @@ fn evaluate_on_win( record.reward_granted = true; } - unlocks.send(AchievementUnlockedEvent(record.clone())); + unlocks.write(AchievementUnlockedEvent(record.clone())); } if achievements_changed { @@ -211,8 +211,8 @@ fn toggle_achievements_screen( if !keys.just_pressed(KeyCode::KeyA) { return; } - if let Ok(entity) = screens.get_single() { - commands.entity(entity).despawn_recursive(); + if let Ok(entity) = screens.single() { + commands.entity(entity).despawn(); } else { spawn_achievements_screen(&mut commands, &achievements.0); } diff --git a/solitaire_engine/src/animation_plugin.rs b/solitaire_engine/src/animation_plugin.rs index 9e5048a..fb26468 100644 --- a/solitaire_engine/src/animation_plugin.rs +++ b/solitaire_engine/src/animation_plugin.rs @@ -465,7 +465,7 @@ fn drive_toast_display( active.timer -= dt; if active.timer <= 0.0 { // Despawn the toast entity and clear the active slot. - commands.entity(entity).despawn_recursive(); + commands.entity(entity).despawn(); active.entity = None; active.timer = 0.0; } @@ -532,7 +532,7 @@ fn tick_toasts( for (entity, mut timer) in &mut toasts { timer.0 -= dt; if timer.0 <= 0.0 { - commands.entity(entity).despawn_recursive(); + commands.entity(entity).despawn(); } } } diff --git a/solitaire_engine/src/auto_complete_plugin.rs b/solitaire_engine/src/auto_complete_plugin.rs index 0c32f03..6c12623 100644 --- a/solitaire_engine/src/auto_complete_plugin.rs +++ b/solitaire_engine/src/auto_complete_plugin.rs @@ -122,7 +122,7 @@ fn drive_auto_complete( return; }; - moves.send(MoveRequestEvent { from, to, count: 1 }); + moves.write(MoveRequestEvent { from, to, count: 1 }); state.cooldown = STEP_INTERVAL; } diff --git a/solitaire_engine/src/card_animation/interaction.rs b/solitaire_engine/src/card_animation/interaction.rs index 8d2d54b..1f9f3dd 100644 --- a/solitaire_engine/src/card_animation/interaction.rs +++ b/solitaire_engine/src/card_animation/interaction.rs @@ -236,13 +236,13 @@ pub(crate) fn drain_input_buffer( } match buffer.queue.pop_front() { Some(BufferedInput::Move { from }) => { - move_events.send(from); + move_events.write(from); } Some(BufferedInput::Draw) => { - draw_events.send(DrawRequestEvent); + draw_events.write(DrawRequestEvent); } Some(BufferedInput::Undo) => { - undo_events.send(UndoRequestEvent); + undo_events.write(UndoRequestEvent); } None => {} } @@ -259,9 +259,9 @@ fn cursor_world( windows: &Query<&Window, With>, cameras: &Query<(&Camera, &GlobalTransform)>, ) -> Option { - let window = windows.get_single().ok()?; + let window = windows.single().ok()?; let cursor = window.cursor_position()?; - let (camera, camera_transform) = cameras.get_single().ok()?; + let (camera, camera_transform) = cameras.single().ok()?; camera.viewport_to_world_2d(camera_transform, cursor).ok() } diff --git a/solitaire_engine/src/card_plugin.rs b/solitaire_engine/src/card_plugin.rs index fce5e63..e0a4a65 100644 --- a/solitaire_engine/src/card_plugin.rs +++ b/solitaire_engine/src/card_plugin.rs @@ -187,7 +187,7 @@ fn resync_cards_on_settings_change( mut state_events: EventWriter, ) { if setting_events.read().next().is_some() { - state_events.send(StateChangedEvent); + state_events.write(StateChangedEvent); } } @@ -256,7 +256,7 @@ fn sync_cards( // Despawn any entity whose card is no longer tracked. for (card_id, (entity, _)) in &existing { if !live_ids.contains(card_id) { - commands.entity(*entity).despawn_recursive(); + commands.entity(*entity).despawn(); } } @@ -443,7 +443,7 @@ fn update_card_entity( // Despawn the old label child and respawn a fresh one, so rank/suit/ // colour/visibility all stay in sync with the card's current state. - commands.entity(entity).despawn_descendants(); + commands.entity(entity).despawn_related::(); commands.entity(entity).with_children(|b| { b.spawn(( CardLabel, @@ -558,7 +558,7 @@ fn tick_flip_anim( transform.scale.x = 0.0; // Fire the reveal event exactly once, at the phase transition, // so the flip sound is synchronised with the visual face reveal. - reveal_events.send(CardFaceRevealedEvent(card_entity.card_id)); + reveal_events.write(CardFaceRevealedEvent(card_entity.card_id)); } } FlipPhase::ScalingUp => { @@ -592,7 +592,7 @@ fn update_drag_shadow( if drag.is_idle() { // No drag in progress — remove shadow if it exists. if let Some(e) = shadow.take() { - commands.entity(e).despawn_recursive(); + commands.entity(e).despawn(); } return; } @@ -847,9 +847,9 @@ fn cursor_world_pos( windows: &Query<&Window, With>, cameras: &Query<(&Camera, &GlobalTransform)>, ) -> Option { - let window = windows.get_single().ok()?; + let window = windows.single().ok()?; let cursor = window.cursor_position()?; - let (camera, camera_transform) = cameras.get_single().ok()?; + let (camera, camera_transform) = cameras.single().ok()?; camera.viewport_to_world_2d(camera_transform, cursor).ok() } @@ -911,7 +911,7 @@ fn apply_stock_empty_indicator( commands: &mut Commands, game: &GameState, pile_markers: &mut Query<(Entity, &PileMarker, &mut Sprite)>, - label_children: &Query<(Entity, &Parent), With>, + label_children: &Query<(Entity, &ChildOf), With>, layout: &Layout, ) { let stock_empty = game @@ -931,7 +931,7 @@ fn apply_stock_empty_indicator( // Spawn the "↺" label only if one does not already exist. let already_has_label = label_children .iter() - .any(|(_, parent)| parent.get() == entity); + .any(|(_, parent)| parent.parent() == entity); if !already_has_label { let font_size = layout.card_size.x * 0.4; commands.entity(entity).with_children(|b| { @@ -950,8 +950,8 @@ fn apply_stock_empty_indicator( // Despawn any existing "↺" label children. for (label_entity, parent) in label_children.iter() { - if parent.get() == entity { - commands.entity(label_entity).despawn_recursive(); + if parent.parent() == entity { + commands.entity(label_entity).despawn(); } } } @@ -965,7 +965,7 @@ fn update_stock_empty_indicator_startup( game: Res, layout: Option>, mut pile_markers: Query<(Entity, &PileMarker, &mut Sprite)>, - label_children: Query<(Entity, &Parent), With>, + label_children: Query<(Entity, &ChildOf), With>, ) { let Some(layout) = layout else { return }; apply_stock_empty_indicator( @@ -985,7 +985,7 @@ fn update_stock_empty_indicator( game: Res, layout: Option>, mut pile_markers: Query<(Entity, &PileMarker, &mut Sprite)>, - label_children: Query<(Entity, &Parent), With>, + label_children: Query<(Entity, &ChildOf), With>, ) { if events.read().next().is_none() { return; diff --git a/solitaire_engine/src/challenge_plugin.rs b/solitaire_engine/src/challenge_plugin.rs index a8cb33c..6f5f255 100644 --- a/solitaire_engine/src/challenge_plugin.rs +++ b/solitaire_engine/src/challenge_plugin.rs @@ -59,8 +59,8 @@ fn advance_on_challenge_win( } // Human-readable level is 1-based (index 0 → "Challenge 1"). let level_number = prev.saturating_add(1); - toast.send(InfoToastEvent(format!("Challenge {level_number} complete!"))); - advanced.send(ChallengeAdvancedEvent { + toast.write(InfoToastEvent(format!("Challenge {level_number} complete!"))); + advanced.write(ChallengeAdvancedEvent { previous_index: prev, new_index: progress.0.challenge_index, }); @@ -77,7 +77,7 @@ fn handle_start_challenge_request( return; } if progress.0.level < CHALLENGE_UNLOCK_LEVEL { - info_toast.send(InfoToastEvent(format!( + info_toast.write(InfoToastEvent(format!( "Challenge mode unlocks at level {CHALLENGE_UNLOCK_LEVEL}" ))); return; @@ -86,7 +86,7 @@ fn handle_start_challenge_request( warn!("challenge seed list is empty"); return; }; - new_game.send(NewGameRequestEvent { + new_game.write(NewGameRequestEvent { seed: Some(seed), mode: Some(GameMode::Challenge), }); diff --git a/solitaire_engine/src/cursor_plugin.rs b/solitaire_engine/src/cursor_plugin.rs index 84c02bd..db8ec28 100644 --- a/solitaire_engine/src/cursor_plugin.rs +++ b/solitaire_engine/src/cursor_plugin.rs @@ -52,7 +52,7 @@ fn update_cursor_icon( game: Option>, mut commands: Commands, ) { - let Ok((win_entity, window)) = windows.get_single() else { return }; + let Ok((win_entity, window)) = windows.single() else { return }; if !drag.is_idle() { commands @@ -63,7 +63,7 @@ fn update_cursor_icon( let hovering = (|| { let cursor = window.cursor_position()?; - let (camera, cam_xf) = cameras.get_single().ok()?; + let (camera, cam_xf) = cameras.single().ok()?; let world = camera.viewport_to_world_2d(cam_xf, cursor).ok()?; let layout = layout.as_ref()?.0.clone(); let game = game.as_ref()?; diff --git a/solitaire_engine/src/daily_challenge_plugin.rs b/solitaire_engine/src/daily_challenge_plugin.rs index c5d9e92..5b2814b 100644 --- a/solitaire_engine/src/daily_challenge_plugin.rs +++ b/solitaire_engine/src/daily_challenge_plugin.rs @@ -174,17 +174,17 @@ fn handle_daily_completion( continue; } progress.0.add_xp(DAILY_BONUS_XP); - xp_awarded.send(XpAwardedEvent { amount: DAILY_BONUS_XP }); + xp_awarded.write(XpAwardedEvent { amount: DAILY_BONUS_XP }); if let Some(target) = &path.0 { if let Err(e) = save_progress_to(target, &progress.0) { warn!("failed to save progress after daily completion: {e}"); } } - completed.send(DailyChallengeCompletedEvent { + completed.write(DailyChallengeCompletedEvent { date: daily.date, streak: progress.0.daily_challenge_streak, }); - toast.send(InfoToastEvent("Daily challenge complete! +100 XP".to_string())); + toast.write(InfoToastEvent("Daily challenge complete! +100 XP".to_string())); } } @@ -195,7 +195,7 @@ fn handle_start_daily_request( mut announce: EventWriter, ) { if keys.just_pressed(KeyCode::KeyC) { - new_game.send(NewGameRequestEvent { + new_game.write(NewGameRequestEvent { seed: Some(daily.seed), mode: None, }); @@ -203,7 +203,7 @@ fn handle_start_daily_request( .goal_description .clone() .unwrap_or_else(|| "Daily Challenge".to_string()); - announce.send(DailyGoalAnnouncementEvent(desc)); + announce.write(DailyGoalAnnouncementEvent(desc)); } } diff --git a/solitaire_engine/src/game_plugin.rs b/solitaire_engine/src/game_plugin.rs index ffe312d..901b9ba 100644 --- a/solitaire_engine/src/game_plugin.rs +++ b/solitaire_engine/src/game_plugin.rs @@ -169,7 +169,7 @@ fn handle_new_game( if needs_confirm && !confirm_already_open { // Despawn any stale game-over overlay before showing confirm dialog. for entity in &game_over_screens { - commands.entity(entity).despawn_recursive(); + commands.entity(entity).despawn(); } spawn_confirm_dialog(&mut commands, *ev); continue; @@ -177,10 +177,10 @@ fn handle_new_game( // Despawn confirm and game-over overlays before starting the new game. for entity in &confirm_screens { - commands.entity(entity).despawn_recursive(); + commands.entity(entity).despawn(); } for entity in &game_over_screens { - commands.entity(entity).despawn_recursive(); + commands.entity(entity).despawn(); } let seed = ev.seed.unwrap_or_else(seed_from_system_time); @@ -199,7 +199,7 @@ fn handle_new_game( warn!("game_state: failed to delete saved game: {e}"); } } - changed.send(StateChangedEvent); + changed.write(StateChangedEvent); } } @@ -289,7 +289,7 @@ fn handle_confirm_input( screens: Query<(Entity, &OriginalNewGameRequest), With>, mut new_game: EventWriter, ) { - let Ok((entity, original)) = screens.get_single() else { + let Ok((entity, original)) = screens.single() else { return; }; let Some(keys) = keys else { @@ -300,16 +300,16 @@ fn handle_confirm_input( let cancelled = keys.just_pressed(KeyCode::KeyN) || keys.just_pressed(KeyCode::Escape); if confirmed { - commands.entity(entity).despawn_recursive(); + commands.entity(entity).despawn(); // Re-send with move_count already 0 would bypass the dialog next time. // We fire the event — handle_new_game will skip the dialog because // the screen is despawned before the next read. - new_game.send(NewGameRequestEvent { + new_game.write(NewGameRequestEvent { seed: original.0.seed, mode: original.0.mode, }); } else if cancelled { - commands.entity(entity).despawn_recursive(); + commands.entity(entity).despawn(); } } @@ -347,9 +347,9 @@ fn handle_draw( Ok(()) => { // Fire a flip event for each card that moved from stock to waste. for id in drawn_ids { - flipped.send(CardFlippedEvent(id)); + flipped.write(CardFlippedEvent(id)); } - changed.send(StateChangedEvent); + changed.write(StateChangedEvent); } Err(e) => warn!("draw rejected: {e}"), } @@ -385,12 +385,12 @@ fn handle_move( .and_then(|p| p.cards.last()) .is_some_and(|c| c.id == fid && c.face_up) { - flipped.send(crate::events::CardFlippedEvent(fid)); + flipped.write(crate::events::CardFlippedEvent(fid)); } } - changed.send(StateChangedEvent); + changed.write(StateChangedEvent); if !was_won && game.0.is_won { - won.send(GameWonEvent { + won.write(GameWonEvent { score: game.0.score, time_seconds: game.0.elapsed_seconds, }); @@ -418,10 +418,10 @@ fn handle_undo( for _ in undos.read() { match game.0.undo() { Ok(()) => { - changed.send(StateChangedEvent); + changed.write(StateChangedEvent); } Err(MoveError::UndoStackEmpty) => { - toast.send(InfoToastEvent("Nothing to undo".to_string())); + toast.write(InfoToastEvent("Nothing to undo".to_string())); } Err(e) => warn!("undo rejected: {e}"), } @@ -523,7 +523,7 @@ fn check_no_moves( let moves_ok = has_legal_moves(&game.0); if moves_ok || game.0.is_won { for entity in &game_over_screens { - commands.entity(entity).despawn_recursive(); + commands.entity(entity).despawn(); } } @@ -532,7 +532,7 @@ fn check_no_moves( } if !moves_ok && !*already_fired { - toast.send(InfoToastEvent( + toast.write(InfoToastEvent( "No moves available \u{2014} press D to draw or N for a new game".to_string(), )); *already_fired = true; @@ -639,12 +639,12 @@ fn handle_game_over_input( }; if keys.just_pressed(KeyCode::KeyN) || keys.just_pressed(KeyCode::Escape) { - new_game.send(NewGameRequestEvent::default()); + new_game.write(NewGameRequestEvent::default()); } else if keys.just_pressed(KeyCode::KeyU) { for entity in &screens { - commands.entity(entity).despawn_recursive(); + commands.entity(entity).despawn(); } - undo.send(UndoRequestEvent); + undo.write(UndoRequestEvent); } } diff --git a/solitaire_engine/src/help_plugin.rs b/solitaire_engine/src/help_plugin.rs index 6a2bdef..aca979c 100644 --- a/solitaire_engine/src/help_plugin.rs +++ b/solitaire_engine/src/help_plugin.rs @@ -25,8 +25,8 @@ fn toggle_help_screen( if !keys.just_pressed(KeyCode::F1) { return; } - if let Ok(entity) = screens.get_single() { - commands.entity(entity).despawn_recursive(); + if let Ok(entity) = screens.single() { + commands.entity(entity).despawn(); } else { spawn_help_screen(&mut commands); } diff --git a/solitaire_engine/src/home_plugin.rs b/solitaire_engine/src/home_plugin.rs index 1d307a4..fb52ad2 100644 --- a/solitaire_engine/src/home_plugin.rs +++ b/solitaire_engine/src/home_plugin.rs @@ -31,8 +31,8 @@ fn toggle_home_screen( if !keys.just_pressed(KeyCode::KeyM) { return; } - if let Ok(entity) = screens.get_single() { - commands.entity(entity).despawn_recursive(); + if let Ok(entity) = screens.single() { + commands.entity(entity).despawn(); } else { spawn_home_screen(&mut commands, &game); } @@ -139,7 +139,7 @@ fn spawn_home_screen(commands: &mut Commands, game: &GameStateResource) { }); } -fn spawn_shortcut_row(parent: &mut ChildBuilder, key: &str, action: &str) { +fn spawn_shortcut_row(parent: &mut ChildSpawnerCommands, key: &str, action: &str) { parent .spawn(Node { flex_direction: FlexDirection::Row, diff --git a/solitaire_engine/src/hud_plugin.rs b/solitaire_engine/src/hud_plugin.rs index 2485242..c697c8f 100644 --- a/solitaire_engine/src/hud_plugin.rs +++ b/solitaire_engine/src/hud_plugin.rs @@ -325,7 +325,7 @@ fn update_hud( if game.is_changed() { let g = &game.0; let is_zen = g.mode == GameMode::Zen; - if let Ok(mut t) = score_q.get_single_mut() { + if let Ok(mut t) = score_q.single_mut() { // Zen mode suppresses score display per spec ("No score display"). **t = if is_zen { String::new() @@ -333,10 +333,10 @@ fn update_hud( format!("Score: {}", g.score) }; } - if let Ok(mut t) = moves_q.get_single_mut() { + if let Ok(mut t) = moves_q.single_mut() { **t = format!("Moves: {}", g.move_count); } - if let Ok(mut t) = mode_q.get_single_mut() { + if let Ok(mut t) = mode_q.single_mut() { **t = match g.mode { GameMode::Classic => match g.draw_mode { DrawMode::DrawOne => String::new(), @@ -349,7 +349,7 @@ fn update_hud( } // --- Daily challenge constraint (with time-low colour warning) --- - if let Ok((mut t, mut color)) = challenge_q.get_single_mut() { + if let Ok((mut t, mut color)) = challenge_q.single_mut() { if g.is_won { **t = String::new(); } else if let Some(dc) = daily.as_deref() { @@ -364,7 +364,7 @@ fn update_hud( } // --- Undo count --- - if let Ok((mut t, mut color)) = undos_q.get_single_mut() { + if let Ok((mut t, mut color)) = undos_q.single_mut() { let count = g.undo_count; if count == 0 { **t = String::new(); @@ -377,7 +377,7 @@ fn update_hud( } // --- Recycle counter (both modes, hidden until first recycle) --- - if let Ok(mut t) = recycles_q.get_single_mut() { + if let Ok(mut t) = recycles_q.single_mut() { **t = if g.recycle_count > 0 { format!("Recycles: {}", g.recycle_count) } else { @@ -386,7 +386,7 @@ fn update_hud( } // --- Draw-cycle indicator (Draw-Three mode only) --- - if let Ok(mut t) = draw_cycle_q.get_single_mut() { + if let Ok(mut t) = draw_cycle_q.single_mut() { **t = if g.is_won || g.draw_mode != DrawMode::DrawThree { // Hide when not in Draw-Three or after the game is won. String::new() @@ -405,7 +405,7 @@ fn update_hud( let is_zen = game.0.mode == GameMode::Zen; let update_time = (ta_active || game.is_changed()) && !is_zen; if update_time { - if let Ok(mut t) = time_q.get_single_mut() { + if let Ok(mut t) = time_q.single_mut() { if let Some(ta) = time_attack.as_ref().filter(|ta| ta.active) { let remaining = ta.remaining_secs.max(0.0) as u64; let m = remaining / 60; @@ -422,7 +422,7 @@ fn update_hud( // Clear the time display immediately whenever Zen mode is active — // do not guard on game.is_changed() so it clears on the same frame // the player presses Z, before any move is made. - if let Ok(mut t) = time_q.get_single_mut() { + if let Ok(mut t) = time_q.single_mut() { **t = String::new(); } } @@ -432,7 +432,7 @@ fn update_hud( let ac_active = auto_complete.as_ref().is_some_and(|ac| ac.active); let ac_changed = auto_complete.as_ref().is_some_and(|ac| ac.is_changed()); if ac_changed || game.is_changed() { - if let Ok(mut t) = auto_q.get_single_mut() { + if let Ok(mut t) = auto_q.single_mut() { **t = if ac_active { "AUTO".to_string() } else { @@ -451,7 +451,7 @@ fn update_selection_hud( selection: Option>, mut q: Query<&mut Text, With>, ) { - let Ok(mut t) = q.get_single_mut() else { return }; + let Ok(mut t) = q.single_mut() else { return }; let label = match selection.as_deref().and_then(|s| s.selected_pile.as_ref()) { None => String::new(), Some(PileType::Waste) => "▶ Waste".to_string(), @@ -480,7 +480,7 @@ fn announce_auto_complete( ) { let now_active = auto_complete.as_ref().is_some_and(|ac| ac.active); if now_active && !*was_active { - toast.send(InfoToastEvent("Auto-completing...".to_string())); + toast.write(InfoToastEvent("Auto-completing...".to_string())); } *was_active = now_active; } diff --git a/solitaire_engine/src/input_plugin.rs b/solitaire_engine/src/input_plugin.rs index d93a128..896e1b9 100644 --- a/solitaire_engine/src/input_plugin.rs +++ b/solitaire_engine/src/input_plugin.rs @@ -126,7 +126,7 @@ fn handle_keyboard( // Countdown expired without a second N press — notify the player. if *confirm_pending { *confirm_pending = false; - ev.info_toast.send(InfoToastEvent("New game cancelled".to_string())); + ev.info_toast.write(InfoToastEvent("New game cancelled".to_string())); } } } @@ -140,7 +140,7 @@ fn handle_keyboard( if keys.just_pressed(KeyCode::KeyU) { if *forfeit_countdown > 0.0 { *forfeit_countdown = 0.0; } - ev.undo.send(UndoRequestEvent); + ev.undo.write(UndoRequestEvent); } if keys.just_pressed(KeyCode::KeyN) { // If a Time Attack session is running, cancel it and start a Classic game. @@ -148,8 +148,8 @@ fn handle_keyboard( if session.active { session.active = false; session.remaining_secs = 0.0; - ev.info_toast.send(InfoToastEvent("Time Attack ended".to_string())); - ev.new_game.send(NewGameRequestEvent { + ev.info_toast.write(InfoToastEvent("Time Attack ended".to_string())); + ev.new_game.write(NewGameRequestEvent { seed: None, mode: Some(solitaire_core::game_state::GameMode::Classic), }); @@ -162,19 +162,19 @@ fn handle_keyboard( let shift_held = keys.pressed(KeyCode::ShiftLeft) || keys.pressed(KeyCode::ShiftRight); if shift_held || !active_game { // Shift+N or no active game — start immediately, no confirmation. - ev.new_game.send(NewGameRequestEvent::default()); + ev.new_game.write(NewGameRequestEvent::default()); *confirm_countdown = 0.0; *confirm_pending = false; } else if *confirm_countdown > 0.0 { // Second press within the window — confirmed. - ev.new_game.send(NewGameRequestEvent::default()); + ev.new_game.write(NewGameRequestEvent::default()); *confirm_countdown = 0.0; *confirm_pending = false; } else { // First press on an active game — require confirmation. *confirm_countdown = NEW_GAME_CONFIRM_WINDOW; *confirm_pending = true; - ev.confirm_event.send(NewGameConfirmEvent); + ev.confirm_event.write(NewGameConfirmEvent); } } if keys.just_pressed(KeyCode::KeyZ) { @@ -183,19 +183,19 @@ fn handle_keyboard( // X is gated separately by ChallengePlugin. let level = progress.as_ref().map_or(0, |p| p.0.level); if level >= CHALLENGE_UNLOCK_LEVEL { - ev.new_game.send(NewGameRequestEvent { + ev.new_game.write(NewGameRequestEvent { seed: None, mode: Some(solitaire_core::game_state::GameMode::Zen), }); } else { - ev.info_toast.send(InfoToastEvent(format!( + ev.info_toast.write(InfoToastEvent(format!( "Zen mode unlocks at level {CHALLENGE_UNLOCK_LEVEL}" ))); } } if keys.just_pressed(KeyCode::KeyD) || keys.just_pressed(KeyCode::Space) { if *forfeit_countdown > 0.0 { *forfeit_countdown = 0.0; } - ev.draw.send(DrawRequestEvent); + ev.draw.write(DrawRequestEvent); } // H — cycle through all available hints on each press, highlighting the // source card yellow for 1.5 s. The index wraps around once all hints have @@ -204,13 +204,13 @@ fn handle_keyboard( if *forfeit_countdown > 0.0 { *forfeit_countdown = 0.0; } if let Some(ref g) = game { if g.0.is_won { - ev.info_toast.send(InfoToastEvent( + ev.info_toast.write(InfoToastEvent( "Game won! Press N for a new game".to_string(), )); } else if let Some(ref layout_res) = layout { let hints = all_hints(&g.0); if hints.is_empty() { - ev.info_toast.send(InfoToastEvent("No hints available".to_string())); + ev.info_toast.write(InfoToastEvent("No hints available".to_string())); } else { // Pick the hint at the current cycle index (wrapping) and advance. let idx = hint_cycle.0 % hints.len(); @@ -229,7 +229,7 @@ fn handle_keyboard( } else { "Hint: draw from stock (D)".to_string() }; - ev.info_toast.send(InfoToastEvent(msg)); + ev.info_toast.write(InfoToastEvent(msg)); } else { // Find the top face-up card in the source pile and highlight it. let top_card_id = g.0.piles.get(from) @@ -251,7 +251,7 @@ fn handle_keyboard( } // Emit HintVisualEvent so the destination pile // marker is also tinted gold for 2 s. - ev.hint_visual.send(HintVisualEvent { + ev.hint_visual.write(HintVisualEvent { source_card_id: card_id, dest_pile: to.clone(), }); @@ -273,7 +273,7 @@ fn handle_keyboard( } _ => "Hint: move card".to_string(), }; - ev.info_toast.send(InfoToastEvent(msg)); + ev.info_toast.write(InfoToastEvent(msg)); } } } @@ -287,12 +287,12 @@ fn handle_keyboard( if active_game { if *forfeit_countdown > 0.0 { // Second press within the confirmation window — confirmed. - ev.forfeit.send(ForfeitEvent); + ev.forfeit.write(ForfeitEvent); *forfeit_countdown = 0.0; } else { // First press — start the countdown and warn the player. *forfeit_countdown = FORFEIT_CONFIRM_WINDOW; - ev.info_toast.send(InfoToastEvent("Press G again to forfeit".to_string())); + ev.info_toast.write(InfoToastEvent("Press G again to forfeit".to_string())); } } } @@ -327,7 +327,7 @@ fn handle_fullscreen( if !keys.just_pressed(KeyCode::F11) { return; } - let Ok(mut window) = windows.get_single_mut() else { return }; + let Ok(mut window) = windows.single_mut() else { return }; let new_mode = match window.mode { WindowMode::Windowed => WindowMode::BorderlessFullscreen(MonitorSelection::Current), _ => WindowMode::Windowed, @@ -337,7 +337,7 @@ fn handle_fullscreen( WindowMode::Windowed => "Fullscreen: off", _ => "Fullscreen: on", }; - toast.send(InfoToastEvent(label.to_string())); + toast.write(InfoToastEvent(label.to_string())); } fn handle_stock_click( @@ -366,7 +366,7 @@ fn handle_stock_click( return; }; if point_in_rect(world, stock_pos, layout.0.card_size) { - draw.send(DrawRequestEvent); + draw.write(DrawRequestEvent); } } @@ -517,14 +517,14 @@ fn end_drag( _ => false, }; if ok { - moves.send(MoveRequestEvent { + moves.write(MoveRequestEvent { from: origin.clone(), to: target.clone(), count, }); fired = true; } else { - rejected.send(MoveRejectedEvent { + rejected.write(MoveRejectedEvent { from: origin.clone(), to: target.clone(), count, @@ -552,7 +552,7 @@ fn end_drag( // Either the move succeeded (GamePlugin will also fire StateChangedEvent) // or it didn't — in both cases we emit one so cards resync to the current // game state. Duplicate events are harmless. - changed.send(StateChangedEvent); + changed.write(StateChangedEvent); let _ = fired; } @@ -564,9 +564,9 @@ fn cursor_world( windows: &Query<&Window, With>, cameras: &Query<(&Camera, &GlobalTransform)>, ) -> Option { - let window = windows.get_single().ok()?; + let window = windows.single().ok()?; let cursor = window.cursor_position()?; - let (camera, camera_transform) = cameras.get_single().ok()?; + let (camera, camera_transform) = cameras.single().ok()?; camera.viewport_to_world_2d(camera_transform, cursor).ok() } @@ -844,7 +844,7 @@ fn handle_double_click( // Priority 1: move the single top card (foundation preferred, then tableau). if let Some(dest) = best_destination(top_card, &game.0) { - moves.send(MoveRequestEvent { + moves.write(MoveRequestEvent { from: pile, to: dest, count: 1, @@ -864,7 +864,7 @@ fn handle_double_click( &game.0, card_ids.len(), ) { - moves.send(MoveRequestEvent { + moves.write(MoveRequestEvent { from: pile, to: dest, count, @@ -874,7 +874,7 @@ fn handle_double_click( // sound and shake the source pile cards as feedback. // `MoveRejectedEvent` with `from == to` routes the shake to // the source pile (which `start_shake_anim` reads from `ev.to`). - rejected.send(MoveRejectedEvent { + rejected.write(MoveRejectedEvent { from: pile.clone(), to: pile, count: card_ids.len(), diff --git a/solitaire_engine/src/leaderboard_plugin.rs b/solitaire_engine/src/leaderboard_plugin.rs index 823aadd..bb8dd68 100644 --- a/solitaire_engine/src/leaderboard_plugin.rs +++ b/solitaire_engine/src/leaderboard_plugin.rs @@ -112,8 +112,8 @@ fn toggle_leaderboard_screen( if !keys.just_pressed(KeyCode::KeyL) { return; } - if let Ok(entity) = screens.get_single() { - commands.entity(entity).despawn_recursive(); + if let Ok(entity) = screens.single() { + commands.entity(entity).despawn(); closed_flag.0 = true; return; } @@ -174,7 +174,7 @@ fn update_leaderboard_panel( return; } for entity in &screens { - commands.entity(entity).despawn_recursive(); + commands.entity(entity).despawn(); spawn_leaderboard_screen(&mut commands, data.0.as_deref()); } } @@ -225,11 +225,11 @@ fn poll_opt_in_task( task_res.0 = None; match result { Ok(()) => { - toast.send(InfoToastEvent("Opted in to leaderboard".to_string())); + toast.write(InfoToastEvent("Opted in to leaderboard".to_string())); } Err(e) => { warn!("leaderboard opt-in failed: {e}"); - toast.send(InfoToastEvent("Leaderboard update failed".to_string())); + toast.write(InfoToastEvent("Leaderboard update failed".to_string())); } } } @@ -265,11 +265,11 @@ fn poll_opt_out_task( task_res.0 = None; match result { Ok(()) => { - toast.send(InfoToastEvent("Opted out of leaderboard".to_string())); + toast.write(InfoToastEvent("Opted out of leaderboard".to_string())); } Err(e) => { warn!("leaderboard opt-out failed: {e}"); - toast.send(InfoToastEvent("Leaderboard update failed".to_string())); + toast.write(InfoToastEvent("Leaderboard update failed".to_string())); } } } @@ -454,7 +454,7 @@ fn spawn_leaderboard_screen(commands: &mut Commands, entries: Option<&[Leaderboa }); } -fn header_cell(parent: &mut ChildBuilder, text: &str, width: f32) { +fn header_cell(parent: &mut ChildSpawnerCommands, text: &str, width: f32) { parent.spawn(( Text::new(text.to_string()), TextFont { font_size: 13.0, ..default() }, @@ -463,7 +463,7 @@ fn header_cell(parent: &mut ChildBuilder, text: &str, width: f32) { )); } -fn data_cell(parent: &mut ChildBuilder, text: &str, width: f32, color: Color) { +fn data_cell(parent: &mut ChildSpawnerCommands, text: &str, width: f32, color: Color) { parent.spawn(( Text::new(text.to_string()), TextFont { font_size: 15.0, ..default() }, diff --git a/solitaire_engine/src/onboarding_plugin.rs b/solitaire_engine/src/onboarding_plugin.rs index d263d02..d1d12ed 100644 --- a/solitaire_engine/src/onboarding_plugin.rs +++ b/solitaire_engine/src/onboarding_plugin.rs @@ -59,7 +59,7 @@ fn dismiss_on_any_input( path: Option>, screens: Query>, ) { - let Ok(entity) = screens.get_single() else { + let Ok(entity) = screens.single() else { return; }; let pressed = keys.get_just_pressed().next().is_some() @@ -67,7 +67,7 @@ fn dismiss_on_any_input( if !pressed { return; } - commands.entity(entity).despawn_recursive(); + commands.entity(entity).despawn(); settings.0.first_run_complete = true; persist(path.as_deref().map(|p| &p.0), &settings.0); } diff --git a/solitaire_engine/src/pause_plugin.rs b/solitaire_engine/src/pause_plugin.rs index b7d84aa..df6c700 100644 --- a/solitaire_engine/src/pause_plugin.rs +++ b/solitaire_engine/src/pause_plugin.rs @@ -90,12 +90,12 @@ fn toggle_pause( if let Some(ref mut d) = drag { if !d.is_idle() { d.clear(); - changed.send(StateChangedEvent); + changed.write(StateChangedEvent); return; } } - if let Ok(entity) = screens.get_single() { - commands.entity(entity).despawn_recursive(); + if let Ok(entity) = screens.single() { + commands.entity(entity).despawn(); paused.0 = false; } else { // Snapshot current level and streak at pause time. @@ -146,7 +146,7 @@ fn handle_pause_draw_toggle( } } } - changed.send(SettingsChangedEvent(settings.0.clone())); + changed.write(SettingsChangedEvent(settings.0.clone())); } } diff --git a/solitaire_engine/src/profile_plugin.rs b/solitaire_engine/src/profile_plugin.rs index 8df357a..9d74326 100644 --- a/solitaire_engine/src/profile_plugin.rs +++ b/solitaire_engine/src/profile_plugin.rs @@ -42,8 +42,8 @@ fn toggle_profile_screen( if !keys.just_pressed(KeyCode::KeyP) { return; } - if let Ok(entity) = screens.get_single() { - commands.entity(entity).despawn_recursive(); + if let Ok(entity) = screens.single() { + commands.entity(entity).despawn(); } else { spawn_profile_screen( &mut commands, @@ -246,7 +246,7 @@ fn spawn_profile_screen( } /// Spawn a fixed-height vertical spacer node. -fn spawn_spacer(parent: &mut ChildBuilder, height_px: f32) { +fn spawn_spacer(parent: &mut ChildSpawnerCommands, height_px: f32) { parent.spawn(Node { height: Val::Px(height_px), ..default() diff --git a/solitaire_engine/src/progress_plugin.rs b/solitaire_engine/src/progress_plugin.rs index dc13cf4..bb83876 100644 --- a/solitaire_engine/src/progress_plugin.rs +++ b/solitaire_engine/src/progress_plugin.rs @@ -88,9 +88,9 @@ fn award_xp_on_win( let used_undo = game.0.undo_count > 0; let amount = xp_for_win(ev.time_seconds, used_undo); let prev_level = progress.0.add_xp(amount); - xp_awarded.send(XpAwardedEvent { amount }); + xp_awarded.write(XpAwardedEvent { amount }); if progress.0.leveled_up_from(prev_level) { - levelups.send(LevelUpEvent { + levelups.write(LevelUpEvent { previous_level: prev_level, new_level: progress.0.level, total_xp: progress.0.total_xp, diff --git a/solitaire_engine/src/selection_plugin.rs b/solitaire_engine/src/selection_plugin.rs index 7f46557..a37e415 100644 --- a/solitaire_engine/src/selection_plugin.rs +++ b/solitaire_engine/src/selection_plugin.rs @@ -200,11 +200,11 @@ fn handle_selection_keys( if keys.just_pressed(KeyCode::Tab) { let next = cycle_next_pile(&available, selection.selected_pile.as_ref()); if next.is_none() { - info_toast.send(InfoToastEvent("No cards to select".to_string())); + info_toast.write(InfoToastEvent("No cards to select".to_string())); } else if selection.selected_pile.is_some() && did_wrap(&available, selection.selected_pile.as_ref(), next.as_ref()) { - info_toast.send(InfoToastEvent("Back to first card".to_string())); + info_toast.write(InfoToastEvent("Back to first card".to_string())); } selection.selected_pile = next; return; @@ -236,7 +236,7 @@ fn handle_selection_keys( // --- Priority 1: foundation move (single card) --- let foundation_dest = try_foundation_dest(card, &game.0); if let Some(dest) = foundation_dest { - moves.send(MoveRequestEvent { + moves.write(MoveRequestEvent { from: pile.clone(), to: dest, count: 1, @@ -260,7 +260,7 @@ fn handle_selection_keys( if let Some((dest, count)) = best_tableau_destination_for_stack(bottom, pile, &game.0, run_len) { - moves.send(MoveRequestEvent { + moves.write(MoveRequestEvent { from: pile.clone(), to: dest, count, @@ -274,7 +274,7 @@ fn handle_selection_keys( // Covers non-tableau sources (Waste, Foundation) that have no // stack-move logic. if let Some(dest) = best_destination(card, &game.0) { - moves.send(MoveRequestEvent { + moves.write(MoveRequestEvent { from: pile.clone(), to: dest, count: 1, @@ -343,7 +343,7 @@ fn update_selection_highlight( ) { // Always despawn any existing highlight first. for entity in &highlights { - commands.entity(entity).despawn_recursive(); + commands.entity(entity).despawn(); } let Some(ref pile) = selection.selected_pile else { diff --git a/solitaire_engine/src/settings_plugin.rs b/solitaire_engine/src/settings_plugin.rs index a79ed47..3828b3c 100644 --- a/solitaire_engine/src/settings_plugin.rs +++ b/solitaire_engine/src/settings_plugin.rs @@ -203,7 +203,7 @@ fn handle_volume_keys( return; } persist(&path, &settings.0); - changed.send(SettingsChangedEvent(settings.0.clone())); + changed.write(SettingsChangedEvent(settings.0.clone())); } /// Opens or closes the Settings panel when `O` is pressed. @@ -256,11 +256,11 @@ fn sync_settings_panel_visibility( } } else { // Save the current scroll offset before despawning the panel. - if let Ok(sp) = scroll_nodes.get_single() { + if let Ok(sp) = scroll_nodes.single() { scroll_pos.0 = sp.offset_y; } for entity in &panels { - commands.entity(entity).despawn_recursive(); + commands.entity(entity).despawn(); } } } @@ -402,8 +402,8 @@ fn handle_settings_buttons( let after = settings.0.adjust_sfx_volume(-SFX_STEP); if (before - after).abs() > f32::EPSILON { persist(&path, &settings.0); - changed.send(SettingsChangedEvent(settings.0.clone())); - if let Ok(mut t) = sfx_text.get_single_mut() { + changed.write(SettingsChangedEvent(settings.0.clone())); + if let Ok(mut t) = sfx_text.single_mut() { **t = format!("{:.2}", after); } } @@ -413,8 +413,8 @@ fn handle_settings_buttons( let after = settings.0.adjust_sfx_volume(SFX_STEP); if (before - after).abs() > f32::EPSILON { persist(&path, &settings.0); - changed.send(SettingsChangedEvent(settings.0.clone())); - if let Ok(mut t) = sfx_text.get_single_mut() { + changed.write(SettingsChangedEvent(settings.0.clone())); + if let Ok(mut t) = sfx_text.single_mut() { **t = format!("{:.2}", after); } } @@ -424,8 +424,8 @@ fn handle_settings_buttons( let after = settings.0.adjust_music_volume(-SFX_STEP); if (before - after).abs() > f32::EPSILON { persist(&path, &settings.0); - changed.send(SettingsChangedEvent(settings.0.clone())); - if let Ok(mut t) = music_text.get_single_mut() { + changed.write(SettingsChangedEvent(settings.0.clone())); + if let Ok(mut t) = music_text.single_mut() { **t = format!("{:.2}", after); } } @@ -435,8 +435,8 @@ fn handle_settings_buttons( let after = settings.0.adjust_music_volume(SFX_STEP); if (before - after).abs() > f32::EPSILON { persist(&path, &settings.0); - changed.send(SettingsChangedEvent(settings.0.clone())); - if let Ok(mut t) = music_text.get_single_mut() { + changed.write(SettingsChangedEvent(settings.0.clone())); + if let Ok(mut t) = music_text.single_mut() { **t = format!("{:.2}", after); } } @@ -447,8 +447,8 @@ fn handle_settings_buttons( DrawMode::DrawThree => DrawMode::DrawOne, }; persist(&path, &settings.0); - changed.send(SettingsChangedEvent(settings.0.clone())); - if let Ok(mut t) = draw_text.get_single_mut() { + changed.write(SettingsChangedEvent(settings.0.clone())); + if let Ok(mut t) = draw_text.single_mut() { **t = draw_mode_label(&settings.0.draw_mode); } } @@ -459,8 +459,8 @@ fn handle_settings_buttons( AnimSpeed::Instant => AnimSpeed::Normal, }; persist(&path, &settings.0); - changed.send(SettingsChangedEvent(settings.0.clone())); - if let Ok(mut t) = anim_speed_text.get_single_mut() { + changed.write(SettingsChangedEvent(settings.0.clone())); + if let Ok(mut t) = anim_speed_text.single_mut() { **t = anim_speed_label(&settings.0.animation_speed); } } @@ -471,31 +471,31 @@ fn handle_settings_buttons( Theme::Dark => Theme::Green, }; persist(&path, &settings.0); - changed.send(SettingsChangedEvent(settings.0.clone())); - if let Ok(mut t) = theme_text.get_single_mut() { + changed.write(SettingsChangedEvent(settings.0.clone())); + if let Ok(mut t) = theme_text.single_mut() { **t = theme_label(&settings.0.theme); } } SettingsButton::ToggleColorBlind => { settings.0.color_blind_mode = !settings.0.color_blind_mode; persist(&path, &settings.0); - changed.send(SettingsChangedEvent(settings.0.clone())); - if let Ok(mut t) = color_blind_text.get_single_mut() { + changed.write(SettingsChangedEvent(settings.0.clone())); + if let Ok(mut t) = color_blind_text.single_mut() { **t = color_blind_label(settings.0.color_blind_mode); } } SettingsButton::SelectCardBack(idx) => { settings.0.selected_card_back = *idx; persist(&path, &settings.0); - changed.send(SettingsChangedEvent(settings.0.clone())); + changed.write(SettingsChangedEvent(settings.0.clone())); } SettingsButton::SelectBackground(idx) => { settings.0.selected_background = *idx; persist(&path, &settings.0); - changed.send(SettingsChangedEvent(settings.0.clone())); + changed.write(SettingsChangedEvent(settings.0.clone())); } SettingsButton::SyncNow => { - manual_sync.send(ManualSyncRequestEvent); + manual_sync.write(ManualSyncRequestEvent); } SettingsButton::Done => { screen.0 = false; @@ -880,7 +880,7 @@ fn spawn_settings_panel( }); } -fn section_label(parent: &mut ChildBuilder, title: &str) { +fn section_label(parent: &mut ChildSpawnerCommands, title: &str) { parent.spawn(( Text::new(title), TextFont { @@ -893,7 +893,7 @@ fn section_label(parent: &mut ChildBuilder, title: &str) { /// Generic volume row: `Label 0.80 [−] [+]` fn volume_row( - parent: &mut ChildBuilder, + parent: &mut ChildSpawnerCommands, label: &str, value: f32, marker: Marker, @@ -924,7 +924,7 @@ fn volume_row( }); } -fn icon_button(parent: &mut ChildBuilder, label: &str, action: SettingsButton) { +fn icon_button(parent: &mut ChildSpawnerCommands, label: &str, action: SettingsButton) { parent .spawn(( action, diff --git a/solitaire_engine/src/stats_plugin.rs b/solitaire_engine/src/stats_plugin.rs index 0fdd013..a82e668 100644 --- a/solitaire_engine/src/stats_plugin.rs +++ b/solitaire_engine/src/stats_plugin.rs @@ -137,7 +137,7 @@ fn update_stats_on_new_game( stats.0.record_abandoned(); persist(&path, &stats.0, "abandoned game"); if streak > 1 { - toast.send(InfoToastEvent(format!("Streak of {streak} broken!"))); + toast.write(InfoToastEvent(format!("Streak of {streak} broken!"))); } } } @@ -163,7 +163,7 @@ fn handle_forfeit( stats.0.record_abandoned(); persist(&path, &stats.0, "forfeit"); if streak > 1 { - toast.send(InfoToastEvent(format!("Streak of {streak} broken!"))); + toast.write(InfoToastEvent(format!("Streak of {streak} broken!"))); } } // Reset auto-complete so the badge and chime don't carry over to the @@ -171,8 +171,8 @@ fn handle_forfeit( if let Some(ref mut ac) = auto_complete { **ac = AutoCompleteState::default(); } - toast.send(InfoToastEvent("Game forfeited".to_string())); - new_game.send(NewGameRequestEvent::default()); + toast.write(InfoToastEvent("Game forfeited".to_string())); + new_game.write(NewGameRequestEvent::default()); } } @@ -187,8 +187,8 @@ fn toggle_stats_screen( if !keys.just_pressed(KeyCode::KeyS) { return; } - if let Ok(entity) = screens.get_single() { - commands.entity(entity).despawn_recursive(); + if let Ok(entity) = screens.single() { + commands.entity(entity).despawn(); } else { spawn_stats_screen( &mut commands, @@ -349,7 +349,7 @@ fn spawn_stats_screen( /// Spawn a single stat cell: a large value label on top and a small grey /// descriptor below, inside a fixed-width column node with a [`StatsCell`] marker. -fn spawn_stat_cell(parent: &mut ChildBuilder, value: &str, label: &str) { +fn spawn_stat_cell(parent: &mut ChildSpawnerCommands, value: &str, label: &str) { parent .spawn(( StatsCell, diff --git a/solitaire_engine/src/time_attack_plugin.rs b/solitaire_engine/src/time_attack_plugin.rs index d3e0fd4..ecd9106 100644 --- a/solitaire_engine/src/time_attack_plugin.rs +++ b/solitaire_engine/src/time_attack_plugin.rs @@ -60,7 +60,7 @@ fn handle_start_time_attack_request( return; } if progress.0.level < CHALLENGE_UNLOCK_LEVEL { - info_toast.send(InfoToastEvent(format!( + info_toast.write(InfoToastEvent(format!( "Time Attack unlocks at level {CHALLENGE_UNLOCK_LEVEL}" ))); return; @@ -70,7 +70,7 @@ fn handle_start_time_attack_request( remaining_secs: TIME_ATTACK_DURATION_SECS, wins: 0, }; - new_game.send(NewGameRequestEvent { + new_game.write(NewGameRequestEvent { seed: None, mode: Some(GameMode::TimeAttack), }); @@ -93,7 +93,7 @@ fn advance_time_attack( let wins = session.wins; session.active = false; session.remaining_secs = 0.0; - ended.send(TimeAttackEndedEvent { wins }); + ended.write(TimeAttackEndedEvent { wins }); } } @@ -108,7 +108,7 @@ fn auto_deal_on_time_attack_win( continue; } session.wins = session.wins.saturating_add(1); - new_game.send(NewGameRequestEvent { + new_game.write(NewGameRequestEvent { seed: None, mode: Some(GameMode::TimeAttack), }); diff --git a/solitaire_engine/src/weekly_goals_plugin.rs b/solitaire_engine/src/weekly_goals_plugin.rs index adcd9ba..40e7a80 100644 --- a/solitaire_engine/src/weekly_goals_plugin.rs +++ b/solitaire_engine/src/weekly_goals_plugin.rs @@ -92,7 +92,7 @@ fn evaluate_weekly_goals( any_change = true; if just_completed { bonus_xp = bonus_xp.saturating_add(WEEKLY_GOAL_XP); - completions.send(WeeklyGoalCompletedEvent { + completions.write(WeeklyGoalCompletedEvent { goal_id: def.id.to_string(), description: def.description.to_string(), }); @@ -101,10 +101,10 @@ fn evaluate_weekly_goals( } if bonus_xp > 0 { - xp_awarded.send(XpAwardedEvent { amount: bonus_xp }); + xp_awarded.write(XpAwardedEvent { amount: bonus_xp }); let prev_level = progress.0.add_xp(bonus_xp); if progress.0.leveled_up_from(prev_level) { - levelups.send(LevelUpEvent { + levelups.write(LevelUpEvent { previous_level: prev_level, new_level: progress.0.level, total_xp: progress.0.total_xp, diff --git a/solitaire_engine/src/win_summary_plugin.rs b/solitaire_engine/src/win_summary_plugin.rs index 62a24e2..390e1ae 100644 --- a/solitaire_engine/src/win_summary_plugin.rs +++ b/solitaire_engine/src/win_summary_plugin.rs @@ -255,7 +255,7 @@ fn cache_win_data( pending.challenge_level = challenge_level; if is_new_record { - toast.send(InfoToastEvent("New Record!".to_string())); + toast.write(InfoToastEvent("New Record!".to_string())); } } for ev in xp.read() { @@ -321,7 +321,7 @@ fn spawn_win_summary_after_delay( *delay = Some(WIN_SUMMARY_DELAY_SECS); // Clear any stale overlay from a previous win. for entity in &overlays { - commands.entity(entity).despawn_recursive(); + commands.entity(entity).despawn(); } } @@ -362,9 +362,9 @@ fn handle_win_summary_buttons( WinSummaryButton::PlayAgain => { // Despawn the modal. for entity in &overlays { - commands.entity(entity).despawn_recursive(); + commands.entity(entity).despawn(); } - new_game.send(NewGameRequestEvent::default()); + new_game.write(NewGameRequestEvent::default()); } } } @@ -543,7 +543,7 @@ const MAX_ACHIEVEMENTS_SHOWN: usize = 3; /// Shows at most [`MAX_ACHIEVEMENTS_SHOWN`] names. When more achievements were /// unlocked than the cap, appends a "...and N more" line so the player knows /// there are additional unlocks visible on the achievements screen. -fn spawn_achievements_section(card: &mut ChildBuilder, names: &[String]) { +fn spawn_achievements_section(card: &mut ChildSpawnerCommands, names: &[String]) { card.spawn(( Text::new("Achievements Unlocked"), TextFont { font_size: 18.0, ..default() }, diff --git a/solitaire_server/src/lib.rs b/solitaire_server/src/lib.rs index 0084016..a5f483c 100644 --- a/solitaire_server/src/lib.rs +++ b/solitaire_server/src/lib.rs @@ -64,9 +64,7 @@ fn build_router_inner(pool: SqlitePool, rate_limit: bool) -> Router { .finish() .expect("invalid governor config"), ); - auth_routes.layer(GovernorLayer { - config: governor_conf, - }) + auth_routes.layer(GovernorLayer::new(governor_conf)) } else { auth_routes }; diff --git a/solitaire_server/src/middleware.rs b/solitaire_server/src/middleware.rs index 31f6bea..0cae1f5 100644 --- a/solitaire_server/src/middleware.rs +++ b/solitaire_server/src/middleware.rs @@ -100,7 +100,6 @@ pub fn validate_refresh_token(token: &str, secret: &str) -> Result FromRequestParts for AuthenticatedUser where S: Send + Sync,