From d43a9588c9ebf7ce463d86d78442ff4c4f782e69 Mon Sep 17 00:00:00 2001 From: x1a0b0 Date: Mon, 13 Oct 2025 11:29:48 +0800 Subject: [PATCH 1/3] Update deps Signed-off-by: x1a0b0 --- packages/client-rust/.gitignore | 2 + packages/client-rust/Cargo.lock | 355 +++++++++++++++++++------------- packages/client-rust/Cargo.toml | 8 +- 3 files changed, 214 insertions(+), 151 deletions(-) create mode 100644 packages/client-rust/.gitignore diff --git a/packages/client-rust/.gitignore b/packages/client-rust/.gitignore new file mode 100644 index 0000000..face8bf --- /dev/null +++ b/packages/client-rust/.gitignore @@ -0,0 +1,2 @@ +.idea +.clwb diff --git a/packages/client-rust/Cargo.lock b/packages/client-rust/Cargo.lock index 8306e78..b9eb713 100644 --- a/packages/client-rust/Cargo.lock +++ b/packages/client-rust/Cargo.lock @@ -4,30 +4,24 @@ version = 4 [[package]] name = "addr2line" -version = "0.24.2" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b" dependencies = [ "gimli", ] [[package]] name = "adler2" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" - -[[package]] -name = "autocfg" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] name = "backtrace" -version = "0.3.74" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" dependencies = [ "addr2line", "cfg-if", @@ -35,14 +29,14 @@ dependencies = [ "miniz_oxide", "object", "rustc-demangle", - "windows-targets", + "windows-link", ] [[package]] name = "bitflags" -version = "2.9.0" +version = "2.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" +checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" [[package]] name = "block-buffer" @@ -53,6 +47,12 @@ dependencies = [ "generic-array", ] +[[package]] +name = "bumpalo" +version = "3.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" + [[package]] name = "bytes" version = "1.10.1" @@ -61,9 +61,9 @@ checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" [[package]] name = "cfg-if" -version = "1.0.0" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" [[package]] name = "cpufeatures" @@ -86,9 +86,9 @@ dependencies = [ [[package]] name = "data-encoding" -version = "2.8.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "575f75dfd25738df5b91b8e43e14d44bda14637a58fae779fd2b064f8bf3e010" +checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" [[package]] name = "digest" @@ -197,9 +197,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.7" +version = "0.14.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +checksum = "1dc8f7d2ded5f9209535e4b3fd4d39c002f30902ff5ce9f64e2c33d549576500" dependencies = [ "typenum", "version_check", @@ -207,21 +207,21 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" +checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" dependencies = [ "cfg-if", "libc", "r-efi", - "wasi 0.14.2+wasi-0.2.4", + "wasi 0.14.7+wasi-0.2.4", ] [[package]] name = "gimli" -version = "0.31.1" +version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" +checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" [[package]] name = "http" @@ -240,6 +240,17 @@ version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" +[[package]] +name = "io-uring" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b" +dependencies = [ + "bitflags", + "cfg-if", + "libc", +] + [[package]] name = "itoa" version = "1.0.15" @@ -247,62 +258,68 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] -name = "libc" -version = "0.2.171" +name = "js-sys" +version = "0.3.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" - -[[package]] -name = "lock_api" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" dependencies = [ - "autocfg", - "scopeguard", + "once_cell", + "wasm-bindgen", ] [[package]] -name = "log" -version = "0.4.27" +name = "libc" +version = "0.2.177" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" +checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" + +[[package]] +name = "log" +version = "0.4.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" [[package]] name = "memchr" -version = "2.7.4" +version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" [[package]] name = "miniz_oxide" -version = "0.8.7" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff70ce3e48ae43fa075863cef62e8b43b71a4f2382229920e0df362592919430" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ "adler2", ] [[package]] name = "mio" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" +checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" dependencies = [ "libc", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi 0.11.1+wasi-snapshot-preview1", "windows-sys", ] [[package]] name = "object" -version = "0.36.7" +version = "0.37.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" dependencies = [ "memchr", ] +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + [[package]] name = "open-xiaoai" version = "1.0.0" @@ -316,29 +333,6 @@ dependencies = [ "uuid", ] -[[package]] -name = "parking_lot" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-targets", -] - [[package]] name = "pin-project-lite" version = "0.2.16" @@ -362,33 +356,33 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.94" +version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" +checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.40" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" dependencies = [ "proc-macro2", ] [[package]] name = "r-efi" -version = "5.2.0" +version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" [[package]] name = "rand" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ "rand_chacha", "rand_core", @@ -414,19 +408,16 @@ dependencies = [ ] [[package]] -name = "redox_syscall" -version = "0.5.11" +name = "rustc-demangle" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2f103c6d277498fbceb16e84d317e2a400f160f46904d5f5410848c829511a3" -dependencies = [ - "bitflags", -] +checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" [[package]] -name = "rustc-demangle" -version = "0.1.24" +name = "rustversion" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "ryu" @@ -435,25 +426,29 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] -name = "scopeguard" -version = "1.2.0" +name = "serde" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] [[package]] -name = "serde" -version = "1.0.219" +name = "serde_core" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.219" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", @@ -462,14 +457,15 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.140" +version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" dependencies = [ "itoa", "memchr", "ryu", "serde", + "serde_core", ] [[package]] @@ -485,33 +481,24 @@ dependencies = [ [[package]] name = "signal-hook-registry" -version = "1.4.2" +version = "1.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" dependencies = [ "libc", ] [[package]] name = "slab" -version = "0.4.9" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] - -[[package]] -name = "smallvec" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" [[package]] name = "socket2" -version = "0.5.9" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef" +checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" dependencies = [ "libc", "windows-sys", @@ -519,9 +506,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.100" +version = "2.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" +checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" dependencies = [ "proc-macro2", "quote", @@ -530,18 +517,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.12" +version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "2.0.12" +version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" +checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", @@ -550,17 +537,18 @@ dependencies = [ [[package]] name = "tokio" -version = "1.44.2" +version = "1.47.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6b88822cbe49de4185e3a4cbf8321dd487cf5fe0c5c65695fef6346371e9c48" +checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038" dependencies = [ "backtrace", "bytes", + "io-uring", "libc", "mio", - "parking_lot", "pin-project-lite", "signal-hook-registry", + "slab", "socket2", "tokio-macros", "windows-sys", @@ -608,15 +596,15 @@ dependencies = [ [[package]] name = "typenum" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" [[package]] name = "unicode-ident" -version = "1.0.18" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" [[package]] name = "utf-8" @@ -626,11 +614,13 @@ checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" [[package]] name = "uuid" -version = "1.16.0" +version = "1.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "458f7a779bf54acc9f347480ac654f68407d3aab21269a6e3c9f922acd9e2da9" +checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" dependencies = [ "getrandom", + "js-sys", + "wasm-bindgen", ] [[package]] @@ -641,24 +631,98 @@ checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" +version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasi" -version = "0.14.2+wasi-0.2.4" +version = "0.14.7+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +checksum = "883478de20367e224c0090af9cf5f9fa85bed63a95c1abf3afc5c083ebc06e8c" dependencies = [ - "wit-bindgen-rt", + "wasip2", ] [[package]] -name = "windows-sys" -version = "0.52.0" +name = "wasip2" +version = "1.0.1+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" +dependencies = [ + "bumpalo", + "log", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" dependencies = [ "windows-targets", ] @@ -728,28 +792,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] -name = "wit-bindgen-rt" -version = "0.39.0" +name = "wit-bindgen" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" -dependencies = [ - "bitflags", -] +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" [[package]] name = "zerocopy" -version = "0.8.24" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2586fea28e186957ef732a5f8b3be2da217d65c5969d4b1e17f973ebbe876879" +checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.24" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a996a8f63c5c4448cd959ac1bab0aaa3306ccfd060472f85943ee0750f0169be" +checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" dependencies = [ "proc-macro2", "quote", diff --git a/packages/client-rust/Cargo.toml b/packages/client-rust/Cargo.toml index b61b831..08b1e23 100644 --- a/packages/client-rust/Cargo.toml +++ b/packages/client-rust/Cargo.toml @@ -16,9 +16,9 @@ image = "ghcr.io/cross-rs/armv7-unknown-linux-gnueabihf:0.2.5" [dependencies] futures = "0.3.31" -tokio = { version = "1.0", features = ["full"] } -tokio-tungstenite = "0.26.2" +rand = "0.9.2" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" -uuid = { version = "1.15.1", features = ["v4"] } -rand = "0.9.1" +tokio = { version = "1.47", features = ["fs", "macros", "process", "rt-multi-thread", "sync", "time"] } +tokio-tungstenite = "0.26.2" +uuid = { version = "1.18.1", features = ["v4"] } From 61943b16acdfed3fa45cb57a5331e6f8fd6e14da Mon Sep 17 00:00:00 2001 From: x1a0b0 Date: Mon, 13 Oct 2025 11:34:44 +0800 Subject: [PATCH 2/3] Apply clippy lint Signed-off-by: x1a0b0 --- packages/client-rust/src/bin/client.rs | 9 +++------ packages/client-rust/src/bin/monitor.rs | 2 +- packages/client-rust/src/services/audio/play.rs | 2 +- packages/client-rust/src/utils/event.rs | 5 +---- packages/client-rust/src/utils/mod.rs | 2 +- packages/client-rust/src/utils/task.rs | 2 +- 6 files changed, 8 insertions(+), 14 deletions(-) diff --git a/packages/client-rust/src/bin/client.rs b/packages/client-rust/src/bin/client.rs index 38b4b90..532ef13 100644 --- a/packages/client-rust/src/bin/client.rs +++ b/packages/client-rust/src/bin/client.rs @@ -147,12 +147,9 @@ async fn on_event(event: Event) -> Result<(), AppError> { async fn on_stream(stream: Stream) -> Result<(), AppError> { let Stream { tag, bytes, .. } = stream; - match tag.as_str() { - "play" => { - // 播放接收到的音频流 - let _ = AudioPlayer::instance().play(bytes).await; - } - _ => {} + if tag.as_str() == "play" { + // 播放接收到的音频流 + let _ = AudioPlayer::instance().play(bytes).await; } Ok(()) } diff --git a/packages/client-rust/src/bin/monitor.rs b/packages/client-rust/src/bin/monitor.rs index efcba17..69c6dac 100644 --- a/packages/client-rust/src/bin/monitor.rs +++ b/packages/client-rust/src/bin/monitor.rs @@ -29,7 +29,7 @@ async fn on_keyword(_keyword: String) { .split("\n") .filter(|line| !line.trim().is_empty()) .collect::>(); - if replies.len() > 0 { + if !replies.is_empty() { wakeup_sounds.clear(); wakeup_sounds.extend(replies.iter().map(|s| s.to_string())); } diff --git a/packages/client-rust/src/services/audio/play.rs b/packages/client-rust/src/services/audio/play.rs index d12321d..90d8919 100644 --- a/packages/client-rust/src/services/audio/play.rs +++ b/packages/client-rust/src/services/audio/play.rs @@ -39,7 +39,7 @@ impl AudioPlayer { } if let Some(task) = self.player_task.lock().await.take() { - let _ = task.abort(); + task.abort(); } if let Some(mut write_thread) = self.write_thread.lock().await.take() { diff --git a/packages/client-rust/src/utils/event.rs b/packages/client-rust/src/utils/event.rs index dde5000..d02e634 100644 --- a/packages/client-rust/src/utils/event.rs +++ b/packages/client-rust/src/utils/event.rs @@ -73,9 +73,6 @@ impl EventBus { async fn get_callbacks(&self, event: &str) -> Option> { let subscribers = self.subscribers.lock().await; - match subscribers.get(event) { - Some(callbacks) => Some(callbacks.clone()), - None => None, - } + subscribers.get(event).cloned() } } diff --git a/packages/client-rust/src/utils/mod.rs b/packages/client-rust/src/utils/mod.rs index 24ba16a..de6c9d6 100644 --- a/packages/client-rust/src/utils/mod.rs +++ b/packages/client-rust/src/utils/mod.rs @@ -1,4 +1,4 @@ pub mod event; +pub mod rand; pub mod shell; pub mod task; -pub mod rand; \ No newline at end of file diff --git a/packages/client-rust/src/utils/task.rs b/packages/client-rust/src/utils/task.rs index 2bb9c0d..a881784 100644 --- a/packages/client-rust/src/utils/task.rs +++ b/packages/client-rust/src/utils/task.rs @@ -35,7 +35,7 @@ impl TaskManager { let mut tasks = self.tasks.lock().await; if let Some(handles) = tasks.remove(tag) { for handle in handles { - let _ = handle.abort(); + handle.abort(); } } } From 7b473ad86a1913c6f15858d5904a2339698d90f5 Mon Sep 17 00:00:00 2001 From: x1a0b0 Date: Mon, 13 Oct 2025 14:20:11 +0800 Subject: [PATCH 3/3] Eliminate several singletons just for better lifecycle management Signed-off-by: x1a0b0 --- packages/client-rust/src/bin/client.rs | 75 +++++++++++-------- packages/client-rust/src/bin/monitor.rs | 17 +++-- .../client-rust/src/services/monitor/file.rs | 40 +++++----- .../src/services/monitor/instruction.rs | 26 +++++-- .../client-rust/src/services/monitor/kws.rs | 37 ++++++--- .../src/services/monitor/playing.rs | 29 +++++-- 6 files changed, 144 insertions(+), 80 deletions(-) diff --git a/packages/client-rust/src/bin/client.rs b/packages/client-rust/src/bin/client.rs index 532ef13..1da81a2 100644 --- a/packages/client-rust/src/bin/client.rs +++ b/packages/client-rust/src/bin/client.rs @@ -16,33 +16,45 @@ use open_xiaoai::services::connect::rpc::RPC; use open_xiaoai::services::monitor::instruction::InstructionMonitor; use open_xiaoai::services::monitor::playing::PlayingMonitor; -struct AppClient; +struct AppClient { + kws_monitor: KwsMonitor, + instruction_monitor: InstructionMonitor, + playing_monitor: PlayingMonitor, +} impl AppClient { - pub async fn connect(url: &str) -> Result { + pub fn new() -> Self { + Self { + kws_monitor: KwsMonitor::new(), + instruction_monitor: InstructionMonitor::new(), + playing_monitor: PlayingMonitor::new(), + } + } + + pub async fn connect(&self, url: &str) -> Result { let (ws_stream, _) = connect_async(url).await?; Ok(WsStream::Client(ws_stream)) } - pub async fn run() { + pub async fn run(&mut self) { let url = std::env::args().nth(1).expect("❌ 请输入服务器地址"); println!("✅ 已启动"); loop { - let Ok(ws_stream) = AppClient::connect(&url).await else { + let Ok(ws_stream) = self.connect(&url).await else { sleep(Duration::from_secs(1)).await; continue; }; println!("✅ 已连接: {:?}", url); - AppClient::init(ws_stream).await; + self.init(ws_stream).await; if let Err(e) = MessageManager::instance().process_messages().await { eprintln!("❌ 消息处理异常: {}", e); } - AppClient::dispose().await; + self.dispose().await; eprintln!("❌ 已断开连接"); } } - async fn init(ws_stream: WsStream) { + async fn init(&mut self, ws_stream: WsStream) { MessageManager::instance().init(ws_stream).await; MessageHandler::::instance() .set_handler(on_event) @@ -59,35 +71,38 @@ impl AppClient { rpc.add_command("start_recording", start_recording).await; rpc.add_command("stop_recording", stop_recording).await; - InstructionMonitor::start(|event| async move { - MessageManager::instance() - .send_event("instruction", Some(json!(event))) - .await - }) - .await; + self.instruction_monitor + .start(|event| async move { + MessageManager::instance() + .send_event("instruction", Some(json!(event))) + .await + }) + .await; - PlayingMonitor::start(|event| async move { - MessageManager::instance() - .send_event("playing", Some(json!(event))) - .await - }) - .await; + self.playing_monitor + .start(|event| async move { + MessageManager::instance() + .send_event("playing", Some(json!(event))) + .await + }) + .await; - KwsMonitor::start(|event| async move { - MessageManager::instance() - .send_event("kws", Some(json!(event))) - .await - }) - .await; + self.kws_monitor + .start(|event| async move { + MessageManager::instance() + .send_event("kws", Some(json!(event))) + .await + }) + .await; } - async fn dispose() { + async fn dispose(&mut self) { MessageManager::instance().dispose().await; let _ = AudioPlayer::instance().stop().await; let _ = AudioRecorder::instance().stop_recording().await; - InstructionMonitor::stop().await; - PlayingMonitor::stop().await; - KwsMonitor::stop().await; + self.instruction_monitor.stop().await; + self.playing_monitor.stop().await; + self.kws_monitor.stop().await; } } @@ -156,5 +171,5 @@ async fn on_stream(stream: Stream) -> Result<(), AppError> { #[tokio::main] async fn main() { - AppClient::run().await; + AppClient::new().run().await; } diff --git a/packages/client-rust/src/bin/monitor.rs b/packages/client-rust/src/bin/monitor.rs index 69c6dac..5befc9d 100644 --- a/packages/client-rust/src/bin/monitor.rs +++ b/packages/client-rust/src/bin/monitor.rs @@ -53,14 +53,15 @@ async fn main() { on_started().await; } - KwsMonitor::start(|event| async move { - match event { - KwsMonitorEvent::Started => on_started().await, - KwsMonitorEvent::Keyword(keyword) => on_keyword(keyword).await, - } - Ok(()) - }) - .await; + KwsMonitor::new() + .start(|event| async move { + match event { + KwsMonitorEvent::Started => on_started().await, + KwsMonitorEvent::Keyword(keyword) => on_keyword(keyword).await, + } + Ok(()) + }) + .await; loop { tokio::time::sleep(std::time::Duration::from_secs(1)).await; diff --git a/packages/client-rust/src/services/monitor/file.rs b/packages/client-rust/src/services/monitor/file.rs index 3c3bb90..c735e87 100644 --- a/packages/client-rust/src/services/monitor/file.rs +++ b/packages/client-rust/src/services/monitor/file.rs @@ -1,13 +1,12 @@ use serde::{Deserialize, Serialize}; use std::future::Future; use std::path::Path; -use std::sync::LazyLock; use tokio::fs::OpenOptions; use tokio::io::{AsyncBufReadExt, AsyncSeekExt, BufReader, SeekFrom}; +use tokio::task::JoinHandle; use tokio::time::{sleep, Duration}; use crate::base::AppError; -use crate::utils::task::TaskManager; #[derive(Debug, Serialize, Deserialize)] pub enum FileMonitorEvent { @@ -15,20 +14,22 @@ pub enum FileMonitorEvent { NewLine(String), } -pub struct FileMonitor; +pub struct FileMonitor { + task_holder: Option>, +} -static INSTANCE: LazyLock = LazyLock::new(FileMonitor::new); +impl Default for FileMonitor { + fn default() -> Self { + Self::new() + } +} impl FileMonitor { - fn new() -> Self { - Self {} + pub fn new() -> Self { + Self { task_holder: None } } - pub fn instance() -> &'static Self { - &INSTANCE - } - - pub async fn start(&self, file_path: &str, on_update: F) + pub async fn start(&mut self, file_path: &str, on_update: F) where F: Fn(FileMonitorEvent) -> Fut + Send + Sync + 'static, Fut: Future> + Send + 'static, @@ -36,18 +37,19 @@ impl FileMonitor { let file_path_clone = file_path.to_string(); let monitor = tokio::spawn(async move { - let _ = FileMonitor::start_monitor(file_path_clone.as_str(), on_update).await; + let _ = Self::start_monitor(file_path_clone.as_str(), on_update).await; }); - TaskManager::instance() - .add(&format!("FileMonitor-{}", file_path), monitor) - .await; + if let Some(old_task) = self.task_holder.replace(monitor) { + println!("Aborting old file monitor task"); + old_task.abort(); + } } - pub async fn stop(&self, file_path: &str) { - TaskManager::instance() - .dispose(&format!("FileMonitor-{}", file_path)) - .await; + pub async fn stop(&mut self) { + if let Some(handle) = self.task_holder.take() { + handle.abort(); + } } async fn start_monitor(file_path: &str, on_update: F) -> Result<(), AppError> diff --git a/packages/client-rust/src/services/monitor/instruction.rs b/packages/client-rust/src/services/monitor/instruction.rs index d1d5a50..40bf2e6 100644 --- a/packages/client-rust/src/services/monitor/instruction.rs +++ b/packages/client-rust/src/services/monitor/instruction.rs @@ -6,23 +6,37 @@ use crate::base::AppError; use super::file::{FileMonitor, FileMonitorEvent}; -pub struct InstructionMonitor; - static INSTRUCTION_FILE_PATH: &str = "/tmp/mico_aivs_lab/instruction.log"; +pub struct InstructionMonitor { + file_monitor: FileMonitor, +} + +impl Default for InstructionMonitor { + fn default() -> Self { + Self::new() + } +} + impl InstructionMonitor { - pub async fn start(on_update: F) + pub fn new() -> Self { + Self { + file_monitor: FileMonitor::new(), + } + } + + pub async fn start(&mut self, on_update: F) where F: Fn(FileMonitorEvent) -> Fut + Send + Sync + 'static, Fut: Future> + Send + 'static, { - FileMonitor::instance() + self.file_monitor .start(INSTRUCTION_FILE_PATH, on_update) .await; } - pub async fn stop() { - FileMonitor::instance().stop(INSTRUCTION_FILE_PATH).await; + pub async fn stop(&mut self) { + self.file_monitor.stop().await; } } diff --git a/packages/client-rust/src/services/monitor/kws.rs b/packages/client-rust/src/services/monitor/kws.rs index e7f3bba..66d80ca 100644 --- a/packages/client-rust/src/services/monitor/kws.rs +++ b/packages/client-rust/src/services/monitor/kws.rs @@ -8,36 +8,52 @@ use crate::base::AppError; use super::file::{FileMonitor, FileMonitorEvent}; +pub static KWS_FILE_PATH: &str = "/tmp/open-xiaoai/kws.log"; + #[derive(Debug, Serialize, Deserialize)] pub enum KwsMonitorEvent { Started, Keyword(String), } -pub struct KwsMonitor; +pub struct KwsMonitor { + file_monitor: FileMonitor, +} -pub static KWS_FILE_PATH: &str = "/tmp/open-xiaoai/kws.log"; - -static LAST_TIMESTAMP: AtomicU64 = AtomicU64::new(0); +impl Default for KwsMonitor { + fn default() -> Self { + Self::new() + } +} impl KwsMonitor { - pub async fn start(on_update: F) + pub fn new() -> Self { + Self { + file_monitor: FileMonitor::new(), + } + } + + pub async fn start(&mut self, on_update: F) where F: Fn(KwsMonitorEvent) -> Fut + Send + Sync + 'static, Fut: Future> + Send + 'static, { let on_update = Arc::new(on_update); - FileMonitor::instance() + let last_ts_store = Arc::new(AtomicU64::new(0)); + + self.file_monitor .start(KWS_FILE_PATH, move |event| { let on_update = Arc::clone(&on_update); + let last_ts_store = Arc::clone(&last_ts_store); + async move { if let FileMonitorEvent::NewLine(content) = event { let data = content.split('@').collect::>(); let timestamp = data[0].parse::().unwrap(); let keyword = data[1].to_string(); - let last_timestamp = LAST_TIMESTAMP.load(Ordering::Relaxed); + let last_timestamp = last_ts_store.load(Ordering::Relaxed); if timestamp != last_timestamp { - LAST_TIMESTAMP.store(timestamp, Ordering::Relaxed); + last_ts_store.store(timestamp, Ordering::Relaxed); let kws_event = if keyword == "__STARTED__" { KwsMonitorEvent::Started } else { @@ -52,8 +68,7 @@ impl KwsMonitor { .await; } - pub async fn stop() { - LAST_TIMESTAMP.store(0, Ordering::Relaxed); - FileMonitor::instance().stop(KWS_FILE_PATH).await; + pub async fn stop(&mut self) { + self.file_monitor.stop().await; } } diff --git a/packages/client-rust/src/services/monitor/playing.rs b/packages/client-rust/src/services/monitor/playing.rs index e5e293c..3789241 100644 --- a/packages/client-rust/src/services/monitor/playing.rs +++ b/packages/client-rust/src/services/monitor/playing.rs @@ -1,10 +1,10 @@ use serde::{Deserialize, Serialize}; use std::future::Future; +use tokio::task::JoinHandle; use tokio::time::{sleep, Duration}; use crate::base::AppError; use crate::utils::shell::run_shell; -use crate::utils::task::TaskManager; #[derive(Debug, Serialize, Deserialize, PartialEq, Clone)] pub enum PlayingMonitorEvent { @@ -13,10 +13,22 @@ pub enum PlayingMonitorEvent { Idle, } -pub struct PlayingMonitor; +pub struct PlayingMonitor { + task_holder: Option>, +} + +impl Default for PlayingMonitor { + fn default() -> Self { + Self::new() + } +} impl PlayingMonitor { - pub async fn start(on_update: F) + pub fn new() -> Self { + Self { task_holder: None } + } + + pub async fn start(&mut self, on_update: F) where F: Fn(PlayingMonitorEvent) -> Fut + Send + Sync + 'static, Fut: Future> + Send + 'static, @@ -25,11 +37,16 @@ impl PlayingMonitor { let _ = PlayingMonitor::start_monitor(on_update).await; }); - TaskManager::instance().add("PlayingMonitor", monitor).await; + if let Some(old_task) = self.task_holder.replace(monitor) { + println!("Aborting old playing monitor task"); + old_task.abort(); + }; } - pub async fn stop() { - TaskManager::instance().dispose("PlayingMonitor").await; + pub async fn stop(&mut self) { + if let Some(handle) = self.task_holder.take() { + handle.abort(); + } } async fn start_monitor(on_update: F) -> Result<(), AppError>