diff --git a/Cargo.lock b/Cargo.lock index 0bb85d5..fa374df 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10,9 +10,9 @@ checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] name = "aho-corasick" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" dependencies = [ "memchr", ] @@ -42,7 +42,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f2a1bb052857d5dd49572219344a7332b31b76405648eabac5bc68978251bcd" dependencies = [ "android-properties", - "bitflags 2.11.1", + "bitflags 2.13.2", "cc", "jni", "libc", @@ -51,7 +51,7 @@ dependencies = [ "ndk-context", "ndk-sys", "num_enum", - "thiserror 2.0.18", + "thiserror 2.0.20", ] [[package]] @@ -71,9 +71,9 @@ checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" [[package]] name = "anyhow" -version = "1.0.102" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" [[package]] name = "arbitrary" @@ -83,9 +83,9 @@ checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" [[package]] name = "arc-swap" -version = "1.9.1" +version = "1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a3a1fd6f75306b68087b831f025c712524bcb19aad54e557b1129cfa0a2b207" +checksum = "c049c0be4daef0b145cb3555416b3b8ef5b7888a38aea1a3a155801fe7b0810b" dependencies = [ "rustversion", ] @@ -98,7 +98,7 @@ checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -109,9 +109,9 @@ checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" [[package]] name = "arrayvec" -version = "0.7.6" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" +checksum = "d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56" [[package]] name = "as-raw-xcb-connection" @@ -134,7 +134,7 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" dependencies = [ - "event-listener 5.4.1", + "event-listener 5.4.2", "event-listener-strategy", "futures-core", "pin-project-lite", @@ -160,7 +160,7 @@ checksum = "c96bf972d85afc50bf5ab8fe2d54d1586b4e0b46c97c50a0c9e71e2f7bcd812a" dependencies = [ "async-task", "concurrent-queue", - "fastrand 2.4.1", + "fastrand 2.5.0", "futures-lite 2.6.1", "pin-project-lite", "slab", @@ -222,7 +222,7 @@ version = "3.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "290f7f2596bd5b78a9fec8088ccd89180d7f9f55b94b0576823bbbdc72ee8311" dependencies = [ - "event-listener 5.4.1", + "event-listener 5.4.2", "event-listener-strategy", "pin-project-lite", ] @@ -251,7 +251,7 @@ dependencies = [ "async-task", "blocking", "cfg-if", - "event-listener 5.4.1", + "event-listener 5.4.2", "futures-lite 2.6.1", "rustix 1.1.4", ] @@ -264,7 +264,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -293,13 +293,13 @@ checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[package]] name = "async-trait" -version = "0.1.89" +version = "0.1.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" +checksum = "82f6aeea286b8eb4dd3431a1be1b59d290ace00f5bfd8e2a159bc2a05e2c1667" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.5", ] [[package]] @@ -329,7 +329,7 @@ dependencies = [ "num-traits", "pastey", "rayon", - "thiserror 2.0.18", + "thiserror 2.0.20", "v_frame", "y4m", ] @@ -359,9 +359,9 @@ dependencies = [ [[package]] name = "base62" -version = "2.2.4" +version = "2.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd637ac531c60eb7fbc4684dc061c2d7d90d73d758181aa02eeff0464b9eee4b" +checksum = "a3a647dce9631f152a99ec16cfc09267ae55fe280d5dc288964027d458076323" [[package]] name = "bit-set" @@ -392,9 +392,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.11.1" +version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" [[package]] name = "bitstream-io" @@ -425,9 +425,9 @@ dependencies = [ [[package]] name = "blocking" -version = "1.6.2" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21" +checksum = "a70e4329df6cb94385eed412ec92375c3cdd8a6e502493d1229b6414e4036dfa" dependencies = [ "async-channel", "async-task", @@ -438,12 +438,12 @@ dependencies = [ [[package]] name = "bstr" -version = "1.12.1" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63044e1ae8e69f3b5a92c736ca6269b8d12fa7efe39bf34ddb06d102cf0e2cab" +checksum = "6bb31b46c14244e20ee9984b11bf5c992b91fb6939fea616e3512c8baecdbe5f" dependencies = [ "memchr", - "serde", + "serde_core", ] [[package]] @@ -460,22 +460,22 @@ checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" [[package]] name = "bytemuck" -version = "1.25.0" +version = "1.25.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" +checksum = "95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.10.2" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" +checksum = "fc0e56a716f1e132ff6bf4bdac1c944a3fcdc1cae65f70a4a2a1ac3b401d2d1f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.5", ] [[package]] @@ -492,9 +492,9 @@ checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" [[package]] name = "bytes" -version = "1.11.1" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" +checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" [[package]] name = "calloop" @@ -502,7 +502,7 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "log", "polling", "rustix 0.38.44", @@ -512,9 +512,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.63" +version = "1.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" +checksum = "005ec2760ca554fae18df7a11195552ec576cd665632a881bc011d5bb2fd4d80" dependencies = [ "find-msvc-tools", "jobserver", @@ -530,15 +530,15 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "cfg_aliases" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" +checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527" [[package]] name = "chacha20" -version = "0.10.0" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f8d983286843e49675a4b7a2d174efe136dc93a18d69130dd18198a6c167601" +checksum = "65c35e4b699c7e15ccbe7ee35c005e4fc0a278d22238a2857e6ce2dadeda1b06" dependencies = [ "cfg-if", "cpufeatures", @@ -571,7 +571,7 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd63e33452ffdafd39924c4f05a5dd1e94db646c779c6bd59148a3d95fff5ad4" dependencies = [ - "thiserror 2.0.18", + "thiserror 2.0.20", "x11rb", ] @@ -592,9 +592,9 @@ checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" [[package]] name = "combine" -version = "4.6.7" +version = "4.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +checksum = "cfc320937d09e6de266b31b9afb480f197d7a861be86be7cb2ea7e5d1bfffc5e" dependencies = [ "bytes", "memchr", @@ -664,7 +664,7 @@ version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "173852283a9a57a3cbe365d86e74dc428a09c50421477d5ad6fe9d9509e37737" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "fontdb", "harfrust", "linebender_resource_handle", @@ -684,27 +684,27 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" +checksum = "5ca28b0ae3115b884660db4118d803791fd6756b6e88f39c0f3f7859060d7566" dependencies = [ "libc", ] [[package]] name = "crc32fast" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" +checksum = "8498c871161e1742aaa9d52551b2d6ebdd4c3d45a3be423e3728f33b955be550" dependencies = [ "cfg-if", ] [[package]] name = "crossbeam-deque" -version = "0.8.6" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +checksum = "622f3fc73690be383c7214310406f28a90e6edeadc3cea882f9d71e495b9711a" dependencies = [ "crossbeam-epoch", "crossbeam-utils", @@ -712,18 +712,18 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.18" +version = "0.9.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +checksum = "dc74980687109a3b14c72fd458107bf0baa1da1a1a805e178d15501ba9b86d9d" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.21" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +checksum = "a31eee39dddec8330830986fcd7625edb5a24ec90ea038215273bbc3adb08ac6" [[package]] name = "crunchy" @@ -740,7 +740,7 @@ dependencies = [ "cosmic-text", "etagere", "lru", - "rustc-hash 2.1.2", + "rustc-hash 2.1.3", "wgpu", ] @@ -771,7 +771,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "objc2 0.6.4", ] @@ -807,9 +807,9 @@ checksum = "edf234dd1594d6dd434a8fb8cada51ddbbc593e40e4a01556a0b31c62da2775b" [[package]] name = "either" -version = "1.16.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" +checksum = "252afb9ae5eaa683babdc6a068b3f5726eb19e05070c731f9b2a23a7c3e8ed34" [[package]] name = "endi" @@ -835,7 +835,7 @@ checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -855,7 +855,7 @@ checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -876,9 +876,9 @@ dependencies = [ [[package]] name = "error-code" -version = "3.3.2" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dea2df4cf52843e0452895c455a1a2cfbb842a1e7329671acf418fdc53ed4c59" +checksum = "0b5343afd4a8365a643ac588dab4cf234a190c7f6c88c9f6dd6ffe00837661b7" [[package]] name = "etagere" @@ -907,11 +907,10 @@ checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] name = "event-listener" -version = "5.4.1" +version = "5.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" +checksum = "5a23add41df1562121a9393cb065eab5146a1242410f23a644851e90cfd669d2" dependencies = [ - "concurrent-queue", "parking", "pin-project-lite", ] @@ -922,20 +921,22 @@ version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" dependencies = [ - "event-listener 5.4.1", + "event-listener 5.4.2", "pin-project-lite", ] [[package]] name = "exr" -version = "1.74.0" +version = "1.74.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4300e043a56aa2cb633c01af81ca8f699a321879a7854d3896a0ba89056363be" +checksum = "711fe42c9964295e01ee3fba3f9fe0e1d24b98886950d68efe81b1c76e21adf3" dependencies = [ "bit_field", "half", "lebe", - "miniz_oxide", + "miniz_oxide 0.8.9", + "num-complex", + "pulp", "rayon-core", "smallvec", "zune-inflate", @@ -952,9 +953,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" +checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" [[package]] name = "fax" @@ -973,26 +974,21 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.9" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +checksum = "3e0f1c7c3a72c66fd80abe965175f7523475c0489a87d3ff9d6e8c87d87a9d2d" [[package]] name = "flate2" -version = "1.1.9" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" +checksum = "6e634e2e0ebac1ee034020da1ca582e17ffe4e0f5e985823721e168928136dcb" dependencies = [ "crc32fast", - "miniz_oxide", + "miniz_oxide 0.9.1", + "zlib-rs", ] -[[package]] -name = "foldhash" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" - [[package]] name = "foldhash" version = "0.2.0" @@ -1010,9 +1006,9 @@ dependencies = [ [[package]] name = "font-types" -version = "0.11.3" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b38ad915f6dadd993ced50848a8291a543bd41ca62bc10740d5e64e2ab4cfd7" +checksum = "b8eb065f3251655b3c90e22e5e363f310fc5332fb3402e37bbc94752283248f6" dependencies = [ "bytemuck", ] @@ -1052,13 +1048,13 @@ dependencies = [ [[package]] name = "foreign-types-macros" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +checksum = "ea5190182e6915eb873ddbc16e23b711b6eb1f9c00a0d0a3a91b5f6228475225" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.5", ] [[package]] @@ -1069,9 +1065,9 @@ checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" [[package]] name = "futures" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +checksum = "9a31d2a3fbaaeb2af2368bbdd904aa8e812d3c04a1ee10d3171f52d556e5d0a3" dependencies = [ "futures-channel", "futures-core", @@ -1084,9 +1080,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" dependencies = [ "futures-core", "futures-sink", @@ -1094,15 +1090,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" [[package]] name = "futures-executor" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +checksum = "031b47cf1a3c6cc8bc2fc76cd437f521619387907d469316e7c0bc278f1f5432" dependencies = [ "futures-core", "futures-task", @@ -1111,9 +1107,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" +checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" [[package]] name = "futures-lite" @@ -1136,7 +1132,7 @@ version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" dependencies = [ - "fastrand 2.4.1", + "fastrand 2.5.0", "futures-core", "futures-io", "parking", @@ -1145,32 +1141,32 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.5", ] [[package]] name = "futures-sink" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" +checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" dependencies = [ "futures-channel", "futures-core", @@ -1207,16 +1203,14 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" dependencies = [ "cfg-if", "libc", "r-efi 6.0.0", "rand_core 0.10.1", - "wasip2", - "wasip3", ] [[package]] @@ -1247,15 +1241,15 @@ checksum = "151665d9be52f9bb40fc7966565d39666f2d1e69233571b71b87791c7e0528b3" [[package]] name = "glob" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" +checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b" [[package]] name = "globset" -version = "0.4.18" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52dfc19153a48bde0cbd630453615c8151bce3a5adfac7a0aebfbf0a1e1f57e3" +checksum = "07c34a9410465b45bd9787443bc7370f37735bad04b0f0cd57ff1a3186c98988" dependencies = [ "aho-corasick", "bstr", @@ -1303,29 +1297,20 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92c020db12c71d8a12a3fe7607873cade3a01a6287e29d540c8723276221b9d8" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "bytemuck", "core_maths", "read-fonts 0.35.0", "smallvec", ] -[[package]] -name = "hashbrown" -version = "0.15.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" -dependencies = [ - "foldhash 0.1.5", -] - [[package]] name = "hashbrown" version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" dependencies = [ - "foldhash 0.2.0", + "foldhash", ] [[package]] @@ -1334,17 +1319,11 @@ version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" -[[package]] -name = "heck" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - [[package]] name = "hermit-abi" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" +checksum = "e17592d60ebacc7d5e169f4663c5f84f9161cc90328abcfe8456f41e4dfcb284" [[package]] name = "hex" @@ -1372,7 +1351,7 @@ dependencies = [ "iced_widget", "iced_winit", "image 0.25.10", - "thiserror 2.0.18", + "thiserror 2.0.20", ] [[package]] @@ -1381,15 +1360,15 @@ version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91ab1937d699403e7e69252ae743a902bcee9f4ab2052cc4c9a46fcf34729d85" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "bytes", "glam", "lilt", "log", "num-traits", - "rustc-hash 2.1.2", + "rustc-hash 2.1.3", "smol_str", - "thiserror 2.0.18", + "thiserror 2.0.20", "web-time", ] @@ -1413,7 +1392,7 @@ dependencies = [ "futures", "iced_core", "log", - "rustc-hash 2.1.2", + "rustc-hash 2.1.3", "smol", "wasm-bindgen-futures", "wasmtimer", @@ -1425,7 +1404,7 @@ version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "234ca1c2cec4155055f68fa5fad1b5242c496ac8238d80a259bca382fb44a102" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "bytemuck", "cosmic-text", "half", @@ -1435,8 +1414,8 @@ dependencies = [ "kamadak-exif", "log", "raw-window-handle", - "rustc-hash 2.1.2", - "thiserror 2.0.18", + "rustc-hash 2.1.3", + "thiserror 2.0.20", "unicode-segmentation", ] @@ -1474,7 +1453,7 @@ dependencies = [ "iced_tiny_skia", "iced_wgpu", "log", - "thiserror 2.0.18", + "thiserror 2.0.20", ] [[package]] @@ -1487,14 +1466,14 @@ dependencies = [ "iced_core", "iced_futures", "raw-window-handle", - "thiserror 2.0.18", + "thiserror 2.0.20", ] [[package]] name = "iced_tiny_skia" -version = "0.14.0" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe0acf8b75a3bc914aff5f2329fdffc1b36eeaea29dda0e4bd232f1c62e9cc3d" +checksum = "c267596d742714b1853cc10c3983a367762816fc4836bd3b79f76ce76787d6f8" dependencies = [ "bytemuck", "cosmic-text", @@ -1502,7 +1481,7 @@ dependencies = [ "iced_graphics", "kurbo", "log", - "rustc-hash 2.1.2", + "rustc-hash 2.1.3", "softbuffer", "tiny-skia", ] @@ -1513,7 +1492,7 @@ version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff144a999b0ca0f8a10257934500060240825c42e950ec0ebee9c8ae30561c13" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "bytemuck", "cryoglyph", "futures", @@ -1522,8 +1501,8 @@ dependencies = [ "iced_debug", "iced_graphics", "log", - "rustc-hash 2.1.2", - "thiserror 2.0.18", + "rustc-hash 2.1.3", + "thiserror 2.0.20", "wgpu", ] @@ -1536,8 +1515,8 @@ dependencies = [ "iced_renderer", "log", "num-traits", - "rustc-hash 2.1.2", - "thiserror 2.0.18", + "rustc-hash 2.1.3", + "thiserror 2.0.20", "unicode-segmentation", ] @@ -1551,8 +1530,8 @@ dependencies = [ "iced_program", "log", "mundy", - "rustc-hash 2.1.2", - "thiserror 2.0.18", + "rustc-hash 2.1.3", + "thiserror 2.0.20", "tracing", "wasm-bindgen-futures", "web-sys", @@ -1560,17 +1539,11 @@ dependencies = [ "winit", ] -[[package]] -name = "id-arena" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" - [[package]] name = "ignore" -version = "0.4.25" +version = "0.4.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3d782a365a015e0f5c04902246139249abf769125006fbe7649e2ee88169b4a" +checksum = "00b69833ed729dc5aa7d19541d96d6cf8e9137194207a04916d658e43168402f" dependencies = [ "crossbeam-deque", "globset", @@ -1636,20 +1609,18 @@ dependencies = [ [[package]] name = "imgref" -version = "1.12.1" +version = "1.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40fac9d56ed6437b198fddba683305e8e2d651aa42647f00f5ae542e7f5c94a2" +checksum = "6e44b0a4eaa4c82f441d50a963f2d5f05a787240aeee097597033e72accfd22f" [[package]] name = "indexmap" -version = "2.14.0" +version = "2.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" +checksum = "cc4e190f5d26ca7051642629da2c52fc03bde85a03197c99408dcd291734c855" dependencies = [ "equivalent", "hashbrown 0.17.1", - "serde", - "serde_core", ] [[package]] @@ -1669,7 +1640,7 @@ checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -1708,7 +1679,7 @@ dependencies = [ "jni-sys 0.4.1", "log", "simd_cesu8", - "thiserror 2.0.18", + "thiserror 2.0.20", "walkdir", "windows-link", ] @@ -1723,7 +1694,7 @@ dependencies = [ "quote", "rustc_version", "simd_cesu8", - "syn", + "syn 2.0.119", ] [[package]] @@ -1751,16 +1722,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" dependencies = [ "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "jobserver" -version = "0.1.34" +version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +checksum = "1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3" dependencies = [ - "getrandom 0.3.4", + "getrandom 0.4.3", "libc", ] @@ -1775,13 +1746,12 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.99" +version = "0.3.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "142bc4740e452c1e57ade0cbc129f139c9093e354346f0872ef985f4f5cf5f11" +checksum = "ce57d20d1ea864ce2ac172ab472d409214f4fd359f0b2a2775abdf522e2af99e" dependencies = [ "cfg-if", "futures-util", - "once_cell", "wasm-bindgen", ] @@ -1802,12 +1772,12 @@ dependencies = [ "iced", "iced_moving_picture", "log", - "rand 0.10.1", + "rand 0.10.2", "rust-i18n", "serde", "serde_json", "time-format", - "toml 1.1.2+spec-1.1.0", + "toml 1.1.5+spec-1.1.0", ] [[package]] @@ -1826,12 +1796,6 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" -[[package]] -name = "leb128fmt" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" - [[package]] name = "lebe" version = "0.5.3" @@ -1840,15 +1804,15 @@ checksum = "7a79a3332a6609480d7d0c9eab957bca6b455b91bb84e66d19f5ff66294b85b8" [[package]] name = "libc" -version = "0.2.186" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libfuzzer-sys" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f12a681b7dd8ce12bff52488013ba614b869148d54dd79836ab85aafdd53f08d" +checksum = "a9fd2f41a1cba099f79a0b6b6c35656cf7c03351a7bae8ff0f28f25270f929d2" dependencies = [ "arbitrary", "cc", @@ -1872,21 +1836,21 @@ checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" [[package]] name = "libredox" -version = "0.1.17" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f02ab6bace2054fb888a3c16f990117b579d14a3088e472d63c6011fa185c9d3" +checksum = "8d8f1ea3f21fd3405dcaf6c9b5c1630af9afc422d9073ea39c5f6d6c772e08ed" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "libc", "plain", - "redox_syscall 0.8.0", + "redox_syscall 0.9.4", ] [[package]] name = "lilt" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f67562e5eff6b20553fa9be1c503356768420994e28f67e3eafe6f41910e57ad" +checksum = "337d4c256f7d9f2dbd633891d48ace853efa5b1554122d9220b172ad9c03c3a9" dependencies = [ "web-time", ] @@ -1926,9 +1890,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.30" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "616ec5685824bcc94416c6d4a7a446eea774a31efd7062c8480ba6fd06d7a6e5" +checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" [[package]] name = "loop9" @@ -1957,15 +1921,15 @@ dependencies = [ [[package]] name = "memchr" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "memmap2" -version = "0.9.10" +version = "0.9.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714098028fe011992e1c3962653c96b2d578c4b4bce9036e15ff220319b1e0e3" +checksum = "d1219ed1b7f229ee7104d281dd01d6802fe28bb6e95d292942c4daacdeb798c0" dependencies = [ "libc", ] @@ -1989,6 +1953,16 @@ dependencies = [ "simd-adler32", ] +[[package]] +name = "miniz_oxide" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b63fbc4a50860e98e7b2aa7804ded1db5cbc3aff9193adaff57a6931bf7c4b4c" +dependencies = [ + "adler2", + "simd-adler32", +] + [[package]] name = "moxcms" version = "0.8.1" @@ -2038,7 +2012,7 @@ checksum = "066cf25f0e8b11ee0df221219010f213ad429855f57c494f995590c861a9a7d8" dependencies = [ "arrayvec", "bit-set", - "bitflags 2.11.1", + "bitflags 2.13.2", "cfg-if", "cfg_aliases", "codespan-reporting", @@ -2051,7 +2025,7 @@ dependencies = [ "num-traits", "once_cell", "rustc-hash 1.1.0", - "thiserror 2.0.18", + "thiserror 2.0.20", "unicode-ident", ] @@ -2061,7 +2035,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "jni-sys 0.3.1", "log", "ndk-sys", @@ -2126,14 +2100,24 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.6" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +checksum = "c89e69e7e0f03bea5ef08013795c25018e101932225a656383bd384495ecc367" dependencies = [ "num-integer", "num-traits", ] +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "bytemuck", + "num-traits", +] + [[package]] name = "num-derive" version = "0.4.2" @@ -2142,14 +2126,14 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "num-integer" -version = "0.1.46" +version = "0.1.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +checksum = "7ce2d95d4b3734dc35aa2f45e1aa22cd416814592a4f9d9205e11affd5b8e10b" dependencies = [ "num-traits", ] @@ -2194,7 +2178,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -2228,7 +2212,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "block2 0.5.1", "libc", "objc2 0.5.2", @@ -2244,7 +2228,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "block2 0.6.2", "libc", "objc2 0.6.4", @@ -2265,7 +2249,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "block2 0.5.1", "objc2 0.5.2", "objc2-core-location", @@ -2278,7 +2262,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "objc2 0.6.4", "objc2-foundation 0.3.2", ] @@ -2300,7 +2284,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -2312,7 +2296,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "objc2 0.6.4", "objc2-foundation 0.3.2", ] @@ -2323,7 +2307,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "dispatch2", "objc2 0.6.4", ] @@ -2334,7 +2318,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "dispatch2", "objc2 0.6.4", "objc2-core-foundation", @@ -2381,7 +2365,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "objc2 0.6.4", "objc2-core-foundation", "objc2-core-graphics", @@ -2393,7 +2377,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d425caf1df73233f29fd8a5c3e5edbc30d2d4307870f802d18f00d83dc5141a6" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "objc2 0.6.4", "objc2-core-foundation", "objc2-core-graphics", @@ -2412,7 +2396,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "block2 0.5.1", "dispatch", "libc", @@ -2425,7 +2409,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "block2 0.6.2", "libc", "objc2 0.6.4", @@ -2438,7 +2422,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "objc2 0.6.4", "objc2-core-foundation", ] @@ -2461,7 +2445,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -2473,7 +2457,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -2486,7 +2470,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "objc2 0.6.4", "objc2-core-foundation", "objc2-foundation 0.3.2", @@ -2508,7 +2492,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "block2 0.5.1", "objc2 0.5.2", "objc2-cloud-kit 0.2.2", @@ -2540,7 +2524,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "block2 0.5.1", "objc2 0.5.2", "objc2-core-location", @@ -2637,7 +2621,7 @@ checksum = "c96395f0a926bc13b1c17622aaddda1ecb55d49c8f1bf9777e4d877800a43f8b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -2659,15 +2643,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c835479a4443ded371d6c535cbfd8d31ad92c5d23ae9770a61bc155e4992a3c1" dependencies = [ "atomic-waker", - "fastrand 2.4.1", + "fastrand 2.5.0", "futures-io", ] [[package]] name = "pkg-config" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" +checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548" [[package]] name = "plain" @@ -2685,7 +2669,7 @@ dependencies = [ "crc32fast", "fdeflate", "flate2", - "miniz_oxide", + "miniz_oxide 0.8.9", ] [[package]] @@ -2694,11 +2678,11 @@ version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "crc32fast", "fdeflate", "flate2", - "miniz_oxide", + "miniz_oxide 0.8.9", ] [[package]] @@ -2717,15 +2701,15 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.13.1" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" +checksum = "05c8b63e8d9609db387f0324918f81d68fe27748f084ef092fb35954d0539a85" [[package]] name = "portable-atomic-util" -version = "0.2.7" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2a106d1259c23fac8e543272398ae0e3c0b8d33c88ed73d0cc71b0f1d902618" +checksum = "10ab3eb7f3becc3a1cbc4f2c6f20267996cfc1a6467a873763411b136a122715" dependencies = [ "portable-atomic", ] @@ -2739,30 +2723,20 @@ dependencies = [ "zerocopy", ] -[[package]] -name = "prettyplease" -version = "0.2.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" -dependencies = [ - "proc-macro2", - "syn", -] - [[package]] name = "proc-macro-crate" version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" dependencies = [ - "toml_edit 0.25.12+spec-1.1.0", + "toml_edit 0.25.13+spec-1.1.0", ] [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] @@ -2783,14 +2757,37 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4488a4a36b9a4ba6b9334a32a39971f77c1436ec82c38707bce707699cc3bbcb" dependencies = [ "quote", - "syn", + "syn 2.0.119", ] [[package]] -name = "pxfm" -version = "0.1.29" +name = "pulp" +version = "0.22.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0c5ccf5294c6ccd63a74f1565028353830a9c2f5eb0c682c355c471726a6e3f" +checksum = "046aa45b989642ec2e4717c8e72d677b13edd831a4d3b6cf37d9a3e54912496a" +dependencies = [ + "bytemuck", + "cfg-if", + "libm", + "num-complex", + "paste", + "pulp-wasm-simd-flag", + "raw-cpuid", + "reborrow", + "version_check", +] + +[[package]] +name = "pulp-wasm-simd-flag" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d8f70e07b9c3962945a74e59ca1c511bba65b6419468acc217c457d93f3c740" + +[[package]] +name = "pxfm" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d55d956fa96f5ec02be2e13af0e20391a5aa83d6a074e3ad368959d0fab299ea" [[package]] name = "qoi" @@ -2809,9 +2806,9 @@ checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" [[package]] name = "quote" -version = "1.0.45" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] @@ -2830,9 +2827,9 @@ checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] name = "rand" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea" +checksum = "b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41" dependencies = [ "rand_chacha", "rand_core 0.9.5", @@ -2840,12 +2837,12 @@ dependencies = [ [[package]] name = "rand" -version = "0.10.1" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2e8e8bcc7961af1fdac401278c6a831614941f6164ee3bf4ce61b7edb162207" +checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80" dependencies = [ "chacha20", - "getrandom 0.4.2", + "getrandom 0.4.3", "rand_core 0.10.1", ] @@ -2876,9 +2873,9 @@ checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" [[package]] name = "rangemap" -version = "1.7.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "973443cf09a9c8656b574a866ab68dfa19f0867d0340648c7d2f6a71b8a8ea68" +checksum = "a611d15b50743feb4c76b7d03edcb0e64f399c26961e4efe6975bc398be6aa3d" [[package]] name = "rav1e" @@ -2907,10 +2904,10 @@ dependencies = [ "num-traits", "paste", "profiling", - "rand 0.9.4", + "rand 0.9.5", "rand_chacha", "simd_helpers", - "thiserror 2.0.18", + "thiserror 2.0.20", "v_frame", "wasm-bindgen", ] @@ -2930,6 +2927,15 @@ dependencies = [ "rgb", ] +[[package]] +name = "raw-cpuid" +version = "11.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186" +dependencies = [ + "bitflags 2.13.2", +] + [[package]] name = "raw-window-handle" version = "0.6.2" @@ -2969,14 +2975,21 @@ dependencies = [ [[package]] name = "read-fonts" -version = "0.37.0" +version = "0.41.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b634fabf032fab15307ffd272149b622260f55974d9fad689292a5d33df02e5" +checksum = "046a7d674daf459825b32f5062056d6882db0d2f5a479fbd76ccfc870ac18709" dependencies = [ "bytemuck", - "font-types 0.11.3", + "font-types 0.12.5", + "once_cell", ] +[[package]] +name = "reborrow" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03251193000f4bd3b042892be858ee50e8b3719f2b08e5833ac4353724632430" + [[package]] name = "redox_syscall" version = "0.4.1" @@ -2992,23 +3005,23 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", ] [[package]] name = "redox_syscall" -version = "0.8.0" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c7591fa2c6b601dfcfe5f043f65a1c39fcdf50efefcd7f1572e538c1f4b398d" +checksum = "737970939a87c6fa31e7acad13307bccbb017a073b695b6089a2c484f929e20e" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", ] [[package]] name = "regex" -version = "1.12.3" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" dependencies = [ "aho-corasick", "memchr", @@ -3018,9 +3031,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.14" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" dependencies = [ "aho-corasick", "memchr", @@ -3029,9 +3042,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "renderdoc-sys" @@ -3079,7 +3092,7 @@ dependencies = [ "serde", "serde_json", "serde_yaml", - "syn", + "syn 2.0.119", ] [[package]] @@ -3113,9 +3126,9 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustc-hash" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" [[package]] name = "rustc_version" @@ -3132,7 +3145,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "errno", "libc", "linux-raw-sys 0.4.15", @@ -3145,7 +3158,7 @@ version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "errno", "libc", "linux-raw-sys 0.12.1", @@ -3154,9 +3167,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" [[package]] name = "ryu" @@ -3181,9 +3194,9 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "self_cell" -version = "1.2.2" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b12e76d157a900eb52e81bc6e9f3069344290341720e9178cde2407113ac8d89" +checksum = "2ab42ca02749e120097e328d91d415325bdf43b1c72c4c8badf37375fe40a813" [[package]] name = "semver" @@ -3193,9 +3206,9 @@ checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" [[package]] name = "serde" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" dependencies = [ "serde_core", "serde_derive", @@ -3203,29 +3216,29 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.5", ] [[package]] name = "serde_json" -version = "1.0.150" +version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" dependencies = [ "itoa", "memchr", @@ -3236,13 +3249,13 @@ dependencies = [ [[package]] name = "serde_repr" -version = "0.1.20" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" +checksum = "8d3b1629de253c70a0508c3899572da79ca359fdab27c7920ff00406df418906" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.5", ] [[package]] @@ -3294,15 +3307,15 @@ dependencies = [ [[package]] name = "simd-adler32" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214" +checksum = "3a219298ac11a56ea9a6d2120044824d6f01aeb034955e7af7bc16858527deea" [[package]] name = "simd_cesu8" -version = "1.1.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94f90157bb87cddf702797c5dadfa0be7d266cdf49e22da2fcaa32eff75b2c33" +checksum = "11031e251abf8611c80f460e19dbdeb54a66db918e49c65a7065b46ac7aec520" dependencies = [ "rustc_version", "simdutf8", @@ -3341,12 +3354,12 @@ dependencies = [ [[package]] name = "skrifa" -version = "0.40.0" +version = "0.44.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fbdfe3d2475fbd7ddd1f3e5cf8288a30eb3e5f95832829570cd88115a7434ac" +checksum = "819ab7d62b1d3e72d9d9dea5650bac30424f9111364bb94928dbf5ecad1baa68" dependencies = [ "bytemuck", - "read-fonts 0.37.0", + "read-fonts 0.41.0", ] [[package]] @@ -3366,9 +3379,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.15.1" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +checksum = "b9be42f50aa861c555654aa3a37f52f4b1074bacf4e48fe0ef7fa584e80f1f0f" [[package]] name = "smol" @@ -3404,7 +3417,7 @@ checksum = "aac18da81ebbf05109ab275b157c22a653bb3c12cf884450179942f81bcbf6c3" dependencies = [ "as-raw-xcb-connection", "bytemuck", - "fastrand 2.4.1", + "fastrand 2.5.0", "js-sys", "ndk", "objc2 0.6.4", @@ -3449,20 +3462,31 @@ checksum = "0193cc4331cfd2f3d2011ef287590868599a2f33c3e69bc22c1a3d3acf9e02fb" [[package]] name = "swash" -version = "0.2.7" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "842f3cd369c2ba38966204f983eaa5e54a8e84a7d7159ed36ade2b6c335aae64" +checksum = "6c2499c2d826531388872b2268718aed907a39bd785ab0dcfe57fab26283f92e" dependencies = [ - "skrifa 0.40.0", + "skrifa 0.44.0", "yazi", "zeno", ] [[package]] name = "syn" -version = "2.0.117" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12df2e0110f65b775f769bb17ef989067a1d931b2eb822bd4346631eeada89f9" dependencies = [ "proc-macro2", "quote", @@ -3484,8 +3508,8 @@ version = "3.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ - "fastrand 2.4.1", - "getrandom 0.4.2", + "fastrand 2.5.0", + "getrandom 0.4.3", "once_cell", "rustix 1.1.4", "windows-sys 0.61.2", @@ -3502,11 +3526,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.18" +version = "2.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" +checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f" dependencies = [ - "thiserror-impl 2.0.18", + "thiserror-impl 2.0.20", ] [[package]] @@ -3517,18 +3541,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "thiserror-impl" -version = "2.0.18" +version = "2.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" +checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.5", ] [[package]] @@ -3558,9 +3582,9 @@ dependencies = [ [[package]] name = "time-format" -version = "1.2.2" +version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caa08af685f978227b475da86d38312cd1acd5024338bf53a1ab9a799219507d" +checksum = "fb54c799611991d3d4a66fee3ff17b9f600c2a0f8c0d34e8209dbd153ff0a87b" [[package]] name = "tiny-skia" @@ -3602,9 +3626,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.11.0" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" +checksum = "4cf0ded5c4e56918d8f8a339e1bb67d038d3bc6d144ac407904015ba2e4cde9b" dependencies = [ "tinyvec_macros", ] @@ -3629,9 +3653,9 @@ dependencies = [ [[package]] name = "toml" -version = "1.1.2+spec-1.1.0" +version = "1.1.5+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81f3d15e84cbcd896376e6730314d59fb5a87f31e4b038454184435cd57defee" +checksum = "12c0ba9680044b4ce98d391a62094047eada0d64860b80166c39f4a6b5640785" dependencies = [ "indexmap", "serde_core", @@ -3639,7 +3663,7 @@ dependencies = [ "toml_datetime 1.1.1+spec-1.1.0", "toml_parser", "toml_writer", - "winnow 1.0.3", + "winnow 1.0.4", ] [[package]] @@ -3676,23 +3700,23 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.25.12+spec-1.1.0" +version = "0.25.13+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2153edc6955a6c354fad8f5efd38b6a8769bdccf9fe50f8e1329f81b0baa5d7" +checksum = "6975367e4d2ef766d86af01ffad14b622fecc8d4357a998fbc4deb6e9bacaf9b" dependencies = [ "indexmap", "toml_datetime 1.1.1+spec-1.1.0", "toml_parser", - "winnow 1.0.3", + "winnow 1.0.4", ] [[package]] name = "toml_parser" -version = "1.1.2+spec-1.1.0" +version = "1.1.3+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" +checksum = "1d38ac1cf9b95face32296c0a3ede1fdc270627c9d9c02a7274dd6d960dc4d56" dependencies = [ - "winnow 1.0.3", + "winnow 1.0.4", ] [[package]] @@ -3703,9 +3727,9 @@ checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" [[package]] name = "toml_writer" -version = "1.1.1+spec-1.1.0" +version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db" +checksum = "7d56353a2a665ad0f41a421187180aab746c8c325620617ad883a99a1cbe66d2" [[package]] name = "tracing" @@ -3726,7 +3750,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -3740,9 +3764,9 @@ dependencies = [ [[package]] name = "triomphe" -version = "0.1.15" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd69c5aa8f924c7519d6372789a74eac5b94fb0f8fcf0d4a97eb0bfc3e785f39" +checksum = "b40688ea6389c8171614b25491f71d4a27946e0c7ce2da1c6de27e25abf1a0ae" dependencies = [ "arc-swap", "serde", @@ -3795,9 +3819,9 @@ checksum = "383ad40bb927465ec0ce7720e033cb4ca06912855fc35db31b5755d0de75b1ee" [[package]] name = "unicode-segmentation" -version = "1.13.2" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "unicode-width" @@ -3805,12 +3829,6 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" -[[package]] -name = "unicode-xid" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" - [[package]] name = "unsafe-libyaml" version = "0.2.11" @@ -3819,9 +3837,9 @@ checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" [[package]] name = "uuid" -version = "1.23.2" +version = "1.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d258b83ceec21034727ecee8c382cfa6c3e133699b0742c64571814fb420c9f7" +checksum = "2ef6dac1e96601b4fb3acccccff2139741fcb757cb9a36089bf5be91cfb285ce" dependencies = [ "js-sys", "serde_core", @@ -3863,27 +3881,18 @@ dependencies = [ [[package]] name = "wasip2" -version = "1.0.3+wasi-0.2.9" +version = "1.0.4+wasi-0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" +checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" dependencies = [ - "wit-bindgen 0.57.1", -] - -[[package]] -name = "wasip3" -version = "0.4.0+wasi-0.3.0-rc-2026-01-06" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" -dependencies = [ - "wit-bindgen 0.51.0", + "wit-bindgen", ] [[package]] name = "wasm-bindgen" -version = "0.2.122" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed04576f974d2b2fba0f38c51dbc5518011e38c36bf1143164be765528fd409" +checksum = "aecb87a33d3b0c5e3b7aa46336eaf486cffafbd281b195e4c8b80d50df2351bf" dependencies = [ "cfg-if", "once_cell", @@ -3894,9 +3903,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.72" +version = "0.4.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9473dbd2991ae90b6291c3c32c30c6187ac49aa32f9905d1cce280ec1e110b0f" +checksum = "6ef4c5d3d2cdf5c54f4231181768f5510842e350db025faf1f7163b1030ed928" dependencies = [ "js-sys", "wasm-bindgen", @@ -3904,9 +3913,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.122" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "916151b09da36bd82f6615cbf3a419e2f0ba23a03c6160e8e92eb6bd4aa1dec6" +checksum = "a690d511e3c1a8b3a55e33511e3c2c00c78415cd23650f32b808627f5696b9ed" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3914,60 +3923,26 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.122" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "299047362ccbfce148b67ab7e73349f77748e00c8296f9542adfad2ad82c5c5e" +checksum = "411e4887f0071ef2d2164a9d5fdf2d20efbef78fccd3a78b0c10a1dc5295e48a" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn", + "syn 3.0.5", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.122" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a929b2c61f11ba3e9bc35b50c1f25cb38e0e892c0c231ae2b8cf78d5dad4437" +checksum = "81941cd78d0c92026c33e5e01312845a4cb1e9af3407f9134b100dd03144103e" dependencies = [ "unicode-ident", ] -[[package]] -name = "wasm-encoder" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" -dependencies = [ - "leb128fmt", - "wasmparser", -] - -[[package]] -name = "wasm-metadata" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" -dependencies = [ - "anyhow", - "indexmap", - "wasm-encoder", - "wasmparser", -] - -[[package]] -name = "wasmparser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" -dependencies = [ - "bitflags 2.11.1", - "hashbrown 0.15.5", - "indexmap", - "semver", -] - [[package]] name = "wasmtimer" version = "0.4.3" @@ -3984,9 +3959,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.99" +version = "0.3.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621441cfc37b84979402712047321980c178f299193a3589d05b99e8763436" +checksum = "9fbddc4a036f00ec4f18c83445bd3115cb306a91da554919a099d9222fe4a7f8" dependencies = [ "js-sys", "wasm-bindgen", @@ -4015,7 +3990,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfe68bac7cde125de7a731c3400723cadaaf1703795ad3f4805f187459cd7a77" dependencies = [ "arrayvec", - "bitflags 2.11.1", + "bitflags 2.13.2", "cfg-if", "cfg_aliases", "document-features", @@ -4040,7 +4015,7 @@ dependencies = [ "arrayvec", "bit-set", "bit-vec", - "bitflags 2.11.1", + "bitflags 2.13.2", "bytemuck", "cfg_aliases", "document-features", @@ -4055,7 +4030,7 @@ dependencies = [ "raw-window-handle", "rustc-hash 1.1.0", "smallvec", - "thiserror 2.0.18", + "thiserror 2.0.20", "wgpu-core-deps-windows-linux-android", "wgpu-hal", "wgpu-types", @@ -4076,7 +4051,7 @@ version = "27.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b21cb61c57ee198bc4aff71aeadff4cbb80b927beb912506af9c780d64313ce" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "cfg-if", "cfg_aliases", "libloading", @@ -4086,7 +4061,7 @@ dependencies = [ "portable-atomic-util", "raw-window-handle", "renderdoc-sys", - "thiserror 2.0.18", + "thiserror 2.0.20", "wgpu-types", ] @@ -4096,11 +4071,11 @@ version = "27.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "afdcf84c395990db737f2dd91628706cb31e86d72e53482320d368e52b5da5eb" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "bytemuck", "js-sys", "log", - "thiserror 2.0.18", + "thiserror 2.0.20", "web-sys", ] @@ -4123,7 +4098,7 @@ dependencies = [ "clipboard_macos", "clipboard_x11", "raw-window-handle", - "thiserror 2.0.18", + "thiserror 2.0.20", ] [[package]] @@ -4179,7 +4154,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -4190,7 +4165,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -4335,7 +4310,7 @@ checksum = "a6755fa58a9f8350bd1e472d4c3fcc25f824ec358933bba33306d0b63df5978d" dependencies = [ "android-activity", "atomic-waker", - "bitflags 2.11.1", + "bitflags 2.13.2", "block2 0.5.1", "bytemuck", "calloop", @@ -4382,107 +4357,19 @@ dependencies = [ [[package]] name = "winnow" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1" +checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81" dependencies = [ "memchr", ] -[[package]] -name = "wit-bindgen" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" -dependencies = [ - "wit-bindgen-rust-macro", -] - [[package]] name = "wit-bindgen" version = "0.57.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" -[[package]] -name = "wit-bindgen-core" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" -dependencies = [ - "anyhow", - "heck", - "wit-parser", -] - -[[package]] -name = "wit-bindgen-rust" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" -dependencies = [ - "anyhow", - "heck", - "indexmap", - "prettyplease", - "syn", - "wasm-metadata", - "wit-bindgen-core", - "wit-component", -] - -[[package]] -name = "wit-bindgen-rust-macro" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" -dependencies = [ - "anyhow", - "prettyplease", - "proc-macro2", - "quote", - "syn", - "wit-bindgen-core", - "wit-bindgen-rust", -] - -[[package]] -name = "wit-component" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" -dependencies = [ - "anyhow", - "bitflags 2.11.1", - "indexmap", - "log", - "serde", - "serde_derive", - "serde_json", - "wasm-encoder", - "wasm-metadata", - "wasmparser", - "wit-parser", -] - -[[package]] -name = "wit-parser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" -dependencies = [ - "anyhow", - "id-arena", - "indexmap", - "log", - "semver", - "serde", - "serde_derive", - "serde_json", - "unicode-xid", - "wasmparser", -] - [[package]] name = "x11-dl" version = "2.21.0" @@ -4521,7 +4408,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.2", "dlib", "log", "once_cell", @@ -4548,9 +4435,9 @@ checksum = "e01738255b5a16e78bbb83e7fbba0a1e7dd506905cfc53f4622d89015a03fbb5" [[package]] name = "zbus" -version = "5.16.0" +version = "5.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eee682d202a77e4a9f3b2c2bdf48a7b28af5c08c34ddf66f98c93e5e39464285" +checksum = "5db4be7c075cb421e4b7ee645541604239bd243ba7c357511f4ff3a74b555907" dependencies = [ "async-broadcast", "async-executor", @@ -4562,7 +4449,7 @@ dependencies = [ "async-trait", "blocking", "enumflags2", - "event-listener 5.4.1", + "event-listener 5.4.2", "futures-core", "futures-lite 2.6.1", "hex", @@ -4575,7 +4462,7 @@ dependencies = [ "uds_windows", "uuid", "windows-sys 0.61.2", - "winnow 1.0.3", + "winnow 1.0.4", "zbus_macros", "zbus_names", "zvariant", @@ -4583,14 +4470,14 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.16.0" +version = "5.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adf1bd45a81a103745b1757754762a26e8cd01e4532e4d6c8ec431624b80d1d6" +checksum = "2990635d09ade6df1868f72f8cac69a876a90981e8bd3c40b1be413f8dc88f40" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 3.0.5", "zbus_names", "zvariant", "zvariant_utils", @@ -4598,15 +4485,24 @@ dependencies = [ [[package]] name = "zbus_names" -version = "4.3.2" +version = "4.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7074f3e50b894eac91750142016d30d0a89be8e67dbfd9704fb875825760e52d" +checksum = "d8bf88b4a3ff53e883001e0e0115b297a9d53c31b9c1edd2bfdd853e3428624e" dependencies = [ "serde", - "winnow 1.0.3", + "winnow 1.0.4", "zvariant", ] +[[package]] +name = "zcheapstr" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1afec51604565183aeb5c54c20aeab286120d4e4460f7f76e3e8bb8c0d99473" +dependencies = [ + "serde", +] + [[package]] name = "zeno" version = "0.3.3" @@ -4615,35 +4511,41 @@ checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524" [[package]] name = "zerocopy" -version = "0.8.50" +version = "0.8.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b065d4f0e55f82fae73202e189638116a87c55ab6b8e6c2721e13dd9d854ad1" +checksum = "d35102a9f36d089ccae9e4c6802bc118be4487b80aaffc0ab4e0cf5ce92d2873" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.50" +version = "0.8.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b631b19d36a892ab55420c92dbc83ccd79274f25be714855d3074aa71cab639" +checksum = "146c01f5ab44258da43cf276c74a2763db2ff3969c9c652c3f2de07041d0b2bc" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] -name = "zmij" -version = "1.0.21" +name = "zlib-rs" +version = "0.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" +checksum = "34b31d188d9d685a4f9c7b46d6e36631b07058d2cfe190267adce54dc230bf12" + +[[package]] +name = "zmij" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" [[package]] name = "zune-core" -version = "0.5.1" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb8a0807f7c01457d0379ba880ba6322660448ddebc890ce29bb64da71fb40f9" +checksum = "d56377fd46368984a170bc5aac5567e52ca5da874caa60bea39fcbca78fb658b" [[package]] name = "zune-inflate" @@ -4665,40 +4567,41 @@ dependencies = [ [[package]] name = "zvariant" -version = "5.12.0" +version = "5.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a192a0bde63360d77a7523c833d4b4ce6070a927e2c53246e4c540b1a3e27be0" +checksum = "c1d34c27cc6cdd1f458427519dd6b8612f7b7e3f7b9a0b2355d041dda9869147" dependencies = [ "endi", "enumflags2", "serde", - "winnow 1.0.3", + "winnow 1.0.4", + "zcheapstr", "zvariant_derive", "zvariant_utils", ] [[package]] name = "zvariant_derive" -version = "5.12.0" +version = "5.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bc6cde9c01c511074be97f7ccb6c19d0da89e3f8662e812e999dcfd4638737" +checksum = "864155e69b4352db0c7f374917bf45d1e0c8d17659c8b3dbf9795f3673f8c497" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 3.0.5", "zvariant_utils", ] [[package]] name = "zvariant_utils" -version = "3.4.0" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e8535915cfa75547e559d8c68e8139909a4aeee076831e4ef7fc59d8172c4d6" +checksum = "bad0294361a320b694a328460dc73add56c306150f5cb6bfafc44446120008a3" dependencies = [ "proc-macro2", "quote", "serde", - "syn", - "winnow 1.0.3", + "syn 3.0.5", + "winnow 1.0.4", ] diff --git a/Cargo.toml b/Cargo.toml index 9a257e7..51ec07f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -29,6 +29,9 @@ lto = true debug = false incremental = false codegen-units = 1 -opt-level = 3 +opt-level = "s" strip = true + +[registry] +global-min-publish-age = "14 days" diff --git a/src/kira_disk_layout.rs b/src/kira_disk_layout.rs index 47764fa..1724611 100644 --- a/src/kira_disk_layout.rs +++ b/src/kira_disk_layout.rs @@ -108,9 +108,12 @@ impl BlkDev { } pub fn from_sys(name: &str) -> Option { - Self::list_sys_blk_dev().ok()?.iter().find(|v| v.name == name).cloned() + Self::list_sys_blk_dev() + .ok()? + .iter() + .find(|v| v.name == name) + .cloned() } - } #[derive(Debug, Clone, PartialEq, Eq)] @@ -231,6 +234,10 @@ impl PartInfo { role: None, }) } + + pub fn partlabel_dev(&self) -> Option { + self.gpt_label.as_ref().and_then(|l| Some(format!("/dev/disk/by-partlabel/{}", l))) + } } /// getting list of device partitions @@ -416,7 +423,7 @@ impl PartLayout { FSType::VFAT, Some("bee-efi".into()), Some("EFI".into()), - Some("/efi".into()), + Some("/beefi".into()), Some(PartRole::EFI), ) .add_part_reserve( @@ -444,194 +451,6 @@ impl PartLayout { } } -/// Executes parted command with given arguments -fn exec_parted(args: &Vec<&str>) -> Result { - use std::process::Command; - - match Command::new("parted").args(args).output() { - Err(ex) => Err(ex.to_string()), - Ok(out) => { - if out.status.success() { - String::from_utf8(out.stdout).map_err(|ex| ex.to_string()) - } else { - Err(out.status.to_string()) - } - } - } -} - -fn parted_get_last_part_num(dev: &BlkDev) -> Result { - // parted -m /dev/loop0 print - match exec_parted(&vec!["-m", dev.full_name().as_str(), "print"]) { - Ok(res) => { - match res.lines().last().and_then(|last_line| { - last_line - .split_once(':') - .and_then(|(first_part, _)| u32::from_str_radix(first_part, 10).ok()) - }) { - Some(n) => Ok(n), - None => Err("Error parsing parted output".to_string()), - } - } - Err(ex) => Err(ex), - } -} - -/// init gpt partition table -/// parted --script $install_device mklabel gpt -/// Its blocking function -pub fn parted_init_gpt_part_table(dev: &BlkDev) -> Result<(), String> { - exec_parted(&vec![ - "--script", - dev.full_name().as_str(), - "mklabel", - "gpt", - ]) - .map(|_| ()) -} - -const LINUX_ROOT_X86_64_TYPE: &str = "4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709"; - -/// creating partition from PartInfo specification -/// It assumes that we add partitions sequentially to empty space (for part attributes settings) -/// Otherwise can produce bonkers layout -pub fn parted_mkpart(dev: &BlkDev, part: &PartInfo) -> Result<(), String> { - let part_end = part.start + part.size; - - // gpt label should be in double qutes - let gpt_label = if let Some(s) = &part.gpt_label { - format!("\"{}\"", s) - } else { - "\"\"".to_string() - }; - // creating partition - exec_parted(&vec![ - "--script", - dev.full_name().as_str(), - "mkpart", - gpt_label.as_str(), - part.fs_type.to_parted_str(), - part.start.to_parted_bytes_str().as_str(), - part_end.to_parted_bytes_str().as_str(), - ])?; - - // set partition options depending on its role - if let Some(role) = &part.role { - // getting part number of last created partition (hopefully) - let part_id = parted_get_last_part_num(dev)?; - match role { - PartRole::EFI => { - exec_parted(&vec![ - "--script", - dev.full_name().as_str(), - "set", - &part_id.to_string(), - "esp", - "on", - ])?; - } - // parted --script $install_device type 3 4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709 - PartRole::ROOT => { - exec_parted(&vec![ - "--script", - dev.full_name().as_str(), - "type", - &part_id.to_string(), - LINUX_ROOT_X86_64_TYPE, - ])?; - } - _ => (), - } - }; - - Ok(()) -} - -/// creating single drive bcachefs volume -pub fn bcachefs_format( - dev: &BlkDev, - compression: Option, - password: Option, -) -> Result<(), String> { - // sudo bcachefs format --compression=lz4 --background_compression=lz4 --encrypted /dev/loop0 - // --data_checksum=none - do not make sense on single dev volumes - // sudo bcachefs format --force --compression=lz4 --background_compression=lz4 --encrypted --passphrase_file=./test.pass /dev/loop0 - use std::fs; - use std::process::Command; - - let mut arg = vec!["format", "--force", "--data_checksum=none"]; - // if compression algorythm specified - if let Some(compresss_alg) = &compression { - arg.push(compresss_alg.as_str()); - } - // if we want encrypted volume - if let Some(passw) = password { - // creating tmp file with password - fs::write("/tmp/bzzpsspass.txt", &passw).map_err(|ex| ex.to_string())?; - arg.push("--encrypted"); - arg.push("--passphrase_file=/tmp/bzzpsspass.txt"); - } - - // add dev name at the end - let dev_name = dev.full_name(); - arg.push(dev_name.as_str()); - - let out = Command::new("bcachefs") - .args(arg) - .output() - .map_err(|ex| ex.to_string())?; - - // ignore any errors while deleting pass tmp file - let _ = fs::remove_file("/tmp/bzzpsspass.txt"); - - if out.status.success() { - Ok(()) - } else { - Err(String::from_utf8(out.stderr).map_err(|ex| ex.to_string())?) - } -} - -/// unlok encrypted bcache volume -pub fn bcachefs_unlock(dev: &BlkDev, pass: String) -> Result<(), String> { - use std::fs; - use std::process::Command; - - // bcachefs unlock --file=/tmp/bzzpsspass.txt /dev/loop0 - let dev_name = dev.full_name(); - let arg = vec!["unlock", "--file=/tmp/bzzpsspass.txt ", dev_name.as_str()]; - // creating tmp file with password - fs::write("/tmp/bzzpsspass.txt", &pass).map_err(|ex| ex.to_string())?; - - let out = Command::new("bcachefs") - .args(arg) - .output() - .map_err(|ex| ex.to_string())?; - // ignore any errors while deleting pass tmp file - let _ = fs::remove_file("/tmp/bzzpsspass.txt"); - - if out.status.success() { - Ok(()) - } else { - Err(String::from_utf8(out.stderr).map_err(|ex| ex.to_string())?) - } -} - - -/// create subvolume -pub fn bcachefs_create_subvolume(vol_path: &str) -> Result<(), String> { - use std::process::Command; - - // sudo bcachefs subvolume create /mnt/test/nyan - let out = Command::new("bcachefs") - .args(["subvolume", "create", vol_path]) - .output() - .map_err(|ex| ex.to_string())?; - if out.status.success() { - Ok(()) - } else { - Err(String::from_utf8(out.stderr).map_err(|ex| ex.to_string())?) - } -} #[cfg(test)] mod tests { diff --git a/src/kira_system.rs b/src/kira_system.rs new file mode 100644 index 0000000..5149561 --- /dev/null +++ b/src/kira_system.rs @@ -0,0 +1,308 @@ +// +// Copyright (C) <2026> + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +/* + Functions for creating with disk layout +*/ + +use crate::kira_disk_layout::*; +use std::process::Command; +use std::fs; + +#[derive(Debug)] +pub struct CommandFailed{ + stderr: Vec, + cmd: String, +} + +impl std::fmt::Display for CommandFailed { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + write!(f, "Command failed! Command: {}; Stderr: {}", self.cmd, String::from_utf8(self.stderr.clone()).unwrap_or_else(|_|{"STDEER IS NOT VALID UTF-8".to_string()})) + } +} + +impl CommandFailed { + pub fn new(cmd: &str, args: &Vec<&str>, stderr: Vec) -> Self { + Self { + stderr: stderr, + cmd: format!("{} {}", cmd, args.join(" ")), + } + } +} + +#[derive(Debug)] +pub enum ExecCommandError { + IoError(std::io::Error), + FromUtf8Error(std::string::FromUtf8Error), + CommandFailed(CommandFailed), + Other(String), +} + +// 2. Implement From for each wrapped error type +impl From for ExecCommandError { + fn from(err: std::io::Error) -> Self { + ExecCommandError::IoError(err) + } +} + +impl From for ExecCommandError { + fn from(err: std::string::FromUtf8Error) -> Self { + ExecCommandError::FromUtf8Error(err) + } +} + +impl From for ExecCommandError { + fn from(err: CommandFailed) -> Self { + ExecCommandError::CommandFailed(err) + } +} + +impl From for ExecCommandError { + fn from(err: String) -> Self { + ExecCommandError::Other(err) + } +} + +impl std::fmt::Display for ExecCommandError { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + match self { + ExecCommandError::IoError(e) => write!(f, "IO Error: {}", e), + ExecCommandError::FromUtf8Error(e) => { + write!(f, "IO streem to String parse Error: {}", e) + } + ExecCommandError::CommandFailed(ex) => { + write!(f, "{}", ex) + } + ExecCommandError::Other(msg) => write!(f, "Error: {}", msg), + } + } +} + +// Implement std::error::Error +impl std::error::Error for ExecCommandError {} + +/// exec given sommand with arguments, capturing stderr in case or failure +fn exec_command(cmd: &str, args: &Vec<&str>) -> Result<(), ExecCommandError> { + let out = Command::new(cmd).args(args).output()?; + if out.status.success() { + Ok(()) + } else { + Err(CommandFailed::new(cmd, args, out.stderr).into()) + } +} + +/// exec given sommand with arguments, returning stdout parsed to UTF-8 string +/// capturing stderr in case or failure +fn exec_command_out(cmd: &str, args: &Vec<&str>) -> Result { + let out = Command::new(cmd).args(args).output()?; + if out.status.success() { + Ok(String::from_utf8(out.stdout)?) + } else { + Err(CommandFailed::new(cmd, args, out.stderr).into()) + } +} + +/// sync system time with chrony +/// dinitctl start chrony +pub fn dinit_sync_time_chrony() -> Result<(), ExecCommandError> { + exec_command("dinitctl", &vec!["start", "chrony"]) +} + +/// Install base system +/// basestrap /mnt base base-devel dinit elogind-dinit +pub fn basestrap_dinit(root_dir: &str) -> Result<(), ExecCommandError> { + exec_command("basestrap", &vec![root_dir, "base", "base-devel", "dinit", "elogind-dinit"]) +} + +/// Executes parted command with given arguments +fn exec_parted(args: &Vec<&str>) -> Result { + exec_command_out("parted", args) +} + +fn parted_get_last_part_num(dev: &BlkDev) -> Result { + // parted -m /dev/loop0 print + let res = exec_parted(&vec!["-m", dev.full_name().as_str(), "print"])?; + + match res.lines().last().and_then(|last_line| { + last_line + .split_once(':') + .and_then(|(first_part, _)| u32::from_str_radix(first_part, 10).ok()) + }) { + Some(n) => Ok(n), + None => Err("Error parsing parted output".to_string().into()), + } +} + +/// init gpt partition table +/// parted --script $install_device mklabel gpt +/// Its blocking function +pub fn parted_init_gpt_part_table(dev: &BlkDev) -> Result<(), ExecCommandError> { + exec_parted(&vec![ + "--script", + dev.full_name().as_str(), + "mklabel", + "gpt", + ]) + .map(|_| ()) +} + +const LINUX_ROOT_X86_64_TYPE: &str = "4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709"; + +/// creating partition from PartInfo specification +/// It assumes that we add partitions sequentially to empty space (for part attributes settings) +/// Otherwise can produce bonkers layout +pub fn parted_mkpart(dev: &BlkDev, part: &PartInfo) -> Result<(), ExecCommandError> { + let part_end = part.start + part.size; + + // gpt label should be in double qutes + let gpt_label = if let Some(s) = &part.gpt_label { + format!("\"{}\"", s) + } else { + "\"\"".to_string() + }; + // creating partition + exec_parted(&vec![ + "--script", + dev.full_name().as_str(), + "mkpart", + gpt_label.as_str(), + part.fs_type.to_parted_str(), + part.start.to_parted_bytes_str().as_str(), + part_end.to_parted_bytes_str().as_str(), + ])?; + + // set partition options depending on its role + if let Some(role) = &part.role { + // getting part number of last created partition (hopefully) + let part_id = parted_get_last_part_num(dev)?; + match role { + PartRole::EFI => { + exec_parted(&vec![ + "--script", + dev.full_name().as_str(), + "set", + &part_id.to_string(), + "esp", + "on", + ])?; + } + // parted --script $install_device type 3 4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709 + PartRole::ROOT => { + exec_parted(&vec![ + "--script", + dev.full_name().as_str(), + "type", + &part_id.to_string(), + LINUX_ROOT_X86_64_TYPE, + ])?; + } + _ => (), + } + }; + + Ok(()) +} + +/// creating single drive bcachefs volume +pub fn bcachefs_format( + dev_name: &str, + compression: Option, + password: Option, +) -> Result<(), ExecCommandError> { + // sudo bcachefs format --compression=lz4 --background_compression=lz4 --encrypted /dev/loop0 + // --data_checksum=none - do not make sense on single dev volumes + // sudo bcachefs format --force --compression=lz4 --background_compression=lz4 --encrypted --passphrase_file=./test.pass /dev/loop0 + + let mut arg = vec!["format", "--force", "--data_checksum=none"]; + // if compression algorythm specified + if let Some(compresss_alg) = &compression { + arg.push(compresss_alg.as_str()); + } + // if we want encrypted volume + if let Some(passw) = password { + // creating tmp file with password + fs::write("/tmp/bzzpsspass.txt", &passw)?; + arg.push("--encrypted"); + arg.push("--passphrase_file=/tmp/bzzpsspass.txt"); + } + + // add dev name at the end + arg.push(dev_name); + + let out = exec_command("bcachefs", &arg); + + // ignore any errors while deleting pass tmp file + let _ = fs::remove_file("/tmp/bzzpsspass.txt"); + + out +} + +/// unlok encrypted bcache volume +pub fn bcachefs_unlock(dev_name: &str, pass: &str) -> Result<(), ExecCommandError> { + + // bcachefs unlock --file=/tmp/bzzpsspass.txt /dev/loop0 + let arg = vec!["unlock", "--file=/tmp/bzzpsspass.txt ", dev_name]; + // creating tmp file with password + fs::write("/tmp/bzzpsspass.txt", &pass)?; + + + let out = exec_command("bcachefs", &arg); + // ignore any errors while deleting pass tmp file + let _ = fs::remove_file("/tmp/bzzpsspass.txt"); + + out +} + +/// create subvolume +pub fn bcachefs_create_subvolume(vol_path: &str) -> Result<(), ExecCommandError> { + // sudo bcachefs subvolume create /mnt/test/nyan + exec_command("bcachefs", &vec!["subvolume", "create", vol_path]) +} + +/// mount bcachefs +pub fn bcachefs_mount(dev_name: &str, mount_point: &str) -> Result<(), ExecCommandError> { + // sudo mount -t bcachefs /dev/loop0 /mnt/test + exec_command("mount", &vec!["-t", "bcachefs", dev_name, mount_point]) +} + +pub fn fatlabel(dev: &str, label: &str) -> Result<(), ExecCommandError> { + //fatlabel /dev/sda1 ESP + exec_command("fatlabel", &vec![dev, label]) +} + +pub fn mkfs_fat32(dev: &str, maybe_label: Option<&str>) -> Result<(), ExecCommandError> { + //mkfs.fat -F 32 /dev/sda1 + exec_command("mkfs.fat", &vec!["-F", "32", dev])?; + + // if need to set label + if let Some(label) = maybe_label { + fatlabel(dev, label) + } else { + Ok(()) + } +} + +/// mkfs.fat -F 32 /dev/sda1 +/// fatlabel /dev/sda1 ESP +pub fn mkfs_esp(dev: &str) -> Result<(), ExecCommandError> { + mkfs_fat32(dev, Some("ESP")) +} + + +pub fn mkswap(dev: &str) -> Result<(), ExecCommandError> { + //mkswap -L SWAP /dev/sda4 + exec_command("mkswap", &vec!["L", "SWAP", dev]) +} \ No newline at end of file diff --git a/src/kira_theming.rs b/src/kira_theming.rs index 7d8cbe5..804b60e 100644 --- a/src/kira_theming.rs +++ b/src/kira_theming.rs @@ -20,6 +20,7 @@ */ use iced::{Color, Theme, color}; +use iced::widget::container; // Function returns theme to be used by installer pub fn main_theme() -> Theme { @@ -38,6 +39,20 @@ pub fn change_lightnes(c: &Color, factor: f32) -> Color { res } + +pub fn dialog_background(_theme: &Theme) -> container::Style { + let mut back = _theme.palette().background.clone(); + back.a = 0.8; + container::Style { + background: Some(iced::Background::Color(back)), + ..container::Style::default() + } +} + +pub fn warning_dialog(_theme: &Theme) -> container::Style { + container::bordered_box(_theme).background(color!(0xDB5375)) +} + // pub fn text_with_border(_theme: &Theme) -> container::Style { // container::Style { diff --git a/src/locales/en.json b/src/locales/en.json index 239079e..12ffeed 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -52,5 +52,5 @@ "security.pass_middle": "normal security", "security.pass_hight": "hight security", "install.caption": "Now we will beee install Bzz Linux to your PC", - "install.warning": "We a ready to start installation, this action will destroy all data on select drive!\nDo you want to proceed?" + "install.warning": "We a ready to start installation, this action will destroy all data on select drive!\n\nDo you want to proceed?" } \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index e52e715..4ae3c4b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -35,6 +35,7 @@ use crate::stages::welcome::WelcomeStage; rust_i18n::i18n!("src/locales", fallback = "en"); mod kira_color_bar; mod kira_disk_layout; +mod kira_system; mod kira_logger; mod kira_scroll_list; mod kira_size; @@ -53,6 +54,7 @@ enum Views { Keyboard(stages::keyboard::KeyboardStage), Partition(stages::partition::PartitionStage), Security(stages::security::SecurityStage), + Install(stages::install::InstallStage), } enum Message { @@ -65,6 +67,7 @@ enum Message { Keyboard(stages::keyboard::Message), Partition(stages::partition::Message), Security(stages::security::Message), + Install(stages::install::Message), } struct KiraState { @@ -115,7 +118,8 @@ fn view(k_state: &KiraState) -> Element<'_, Message> { Views::Locale(locale_stage) => locale_stage.view().map(Message::Locale), Views::Keyboard(keyboard_stage) => keyboard_stage.view().map(Message::Keyboard), Views::Partition(partition_stage) => partition_stage.view().map(Message::Partition), - Views::Security(security_stage) => security_stage.view().map(Message::Security) + Views::Security(security_stage) => security_stage.view().map(Message::Security), + Views::Install(install_stage) => install_stage.view().map(Message::Install), } } @@ -138,7 +142,10 @@ fn update(k_state: &mut KiraState, message: Message) -> Task { match wlc_view.update(wlc_msg) { StageAction::Next(welcome_res) => { k_state.config.config_trail.push(welcome_res); - let s_state = std::mem::replace(&mut k_state.current_view, Views::License(license::LicenseStage {})); + let s_state = std::mem::replace( + &mut k_state.current_view, + Views::License(license::LicenseStage {}), + ); k_state.stages_save.push(s_state); Task::none() } @@ -155,7 +162,10 @@ fn update(k_state: &mut KiraState, message: Message) -> Task { match action { StageAction::Next(license_res) => { k_state.config.config_trail.push(license_res); - let s_state = std::mem::replace(&mut k_state.current_view, Views::Network(network::NetworkStage::new(&k_state.toml_config))); + let s_state = std::mem::replace( + &mut k_state.current_view, + Views::Network(network::NetworkStage::new(&k_state.toml_config)), + ); k_state.stages_save.push(s_state); Task::done(Message::Network(network::Message::CheckNetwork)) } @@ -179,7 +189,10 @@ fn update(k_state: &mut KiraState, message: Message) -> Task { network::UpdateResult::StageAction(action) => match action { StageAction::Next(network_res) => { k_state.config.config_trail.push(network_res); - let s_state = std::mem::replace(&mut k_state.current_view,Views::TimeZone(stages::timezone::TimeZoneStage::new())); + let s_state = std::mem::replace( + &mut k_state.current_view, + Views::TimeZone(stages::timezone::TimeZoneStage::new()), + ); k_state.stages_save.push(s_state); Task::none() } @@ -201,7 +214,10 @@ fn update(k_state: &mut KiraState, message: Message) -> Task { match action { StageAction::Next(tz_res) => { k_state.config.config_trail.push(tz_res); - let s_state = std::mem::replace(&mut k_state.current_view,Views::Locale(stages::locale::LocaleStage::new(&k_state.config))); + let s_state = std::mem::replace( + &mut k_state.current_view, + Views::Locale(stages::locale::LocaleStage::new(&k_state.config)), + ); k_state.stages_save.push(s_state); Task::none() } @@ -222,8 +238,11 @@ fn update(k_state: &mut KiraState, message: Message) -> Task { match locale_view.update(locale_msg) { StageAction::Next(locale_res) => { k_state.config.config_trail.push(locale_res); - let s_state = std::mem::replace(&mut k_state.current_view,Views::Keyboard(stages::keyboard::KeyboardStage::new())); - k_state.stages_save.push(s_state); + let s_state = std::mem::replace( + &mut k_state.current_view, + Views::Keyboard(stages::keyboard::KeyboardStage::new()), + ); + k_state.stages_save.push(s_state); Task::none() } StageAction::Back => { @@ -244,7 +263,10 @@ fn update(k_state: &mut KiraState, message: Message) -> Task { match stages::partition::PartitionStage::new(&k_state.toml_config) { Ok(part_stage) => { k_state.config.config_trail.push(keyboard_res); - let s_state = std::mem::replace(&mut k_state.current_view,Views::Partition(part_stage)); + let s_state = std::mem::replace( + &mut k_state.current_view, + Views::Partition(part_stage), + ); k_state.stages_save.push(s_state); } Err(ex) => { @@ -263,13 +285,16 @@ fn update(k_state: &mut KiraState, message: Message) -> Task { } else { Task::none() } - }, + } Message::Partition(partition_msg) => { if let Views::Partition(partition_view) = &mut k_state.current_view { match partition_view.update(partition_msg) { StageAction::Next(partition_res) => { k_state.config.config_trail.push(partition_res); - let s_state = std::mem::replace(&mut k_state.current_view,Views::Security(stages::security::SecurityStage::new())); + let s_state = std::mem::replace( + &mut k_state.current_view, + Views::Security(stages::security::SecurityStage::new()), + ); k_state.stages_save.push(s_state); Task::none() } @@ -283,13 +308,17 @@ fn update(k_state: &mut KiraState, message: Message) -> Task { } else { Task::none() } - }, + } Message::Security(security_msg) => { if let Views::Security(security_view) = &mut k_state.current_view { match security_view.update(security_msg) { StageAction::Next(security_res) => { k_state.config.config_trail.push(security_res); - //let s_state = std::mem::replace(&mut k_state.current_view, + let s_state = std::mem::replace( + &mut k_state.current_view, + Views::Install(stages::install::InstallStage::new(&k_state.config)), + ); + k_state.stages_save.push(s_state); Task::none() } StageAction::Back => { @@ -302,8 +331,25 @@ fn update(k_state: &mut KiraState, message: Message) -> Task { } else { Task::none() } - }, - + } + Message::Install(install_msg) => { + if let Views::Install(install_view) = &mut k_state.current_view { + let update_result = install_view.update(install_msg); + match update_result { + stages::install::Update::Task(t) => t.map(Message::Install), + stages::install::Update::StgAct(stage_action) => match stage_action { + StageAction::Back => { + k_state.config.config_trail.pop(); + k_state.current_view = k_state.stages_save.pop().unwrap(); + Task::none() + } + _ => Task::none(), + }, + } + } else { + Task::none() + } + } } } diff --git a/src/stages/install/mod.rs b/src/stages/install/mod.rs index a006337..c116bc3 100644 --- a/src/stages/install/mod.rs +++ b/src/stages/install/mod.rs @@ -18,27 +18,104 @@ Actual installation script. */ +use crate::{ + kira_disk_layout::{self, BlkDev, PartLayout, PartRole}, + kira_system::{self, ExecCommandError}, + kira_size::KiraSize, + kira_theming, + stage::{KiraConfig, StageAction, StageResult}, + stages::partition::PartitionStageResult, +}; +use iced::{ + Alignment, Task, futures::{self, SinkExt, StreamExt, TryStreamExt, channel::mpsc::SendError}, widget, +}; +use iced::{Color, Length, futures::channel::mpsc::Sender, widget::container}; /// /// So. I am goind to make dir structure lile this /// /bzz/root /// /bzz/home /// Mount root from it and binmount home /// - use log; -use crate::{ - kira_disk_layout::{self, BlkDev, PartLayout}, kira_size::KiraSize, kira_theming, stage::{KiraConfig, StageAction, StageResult} -}; -use iced::{Alignment, Task, futures::{self, SinkExt}, widget}; use rust_i18n::t; -use iced::futures::channel::mpsc::{Sender}; + +/// Creates new GPT table and partitions from PartLayout +pub fn create_partitions(part_layout: &PartLayout) -> Result<(), ExecCommandError> { + kira_system::parted_init_gpt_part_table(&part_layout.dev)?; + for part in &part_layout.part_list { + kira_system::parted_mkpart(&part_layout.dev, part)?; + } + Ok(()) +} + +/// inits bcachefs volume for installation to use +/// Formats device to bcachefs +/// Unlock it if encryption used +/// Mount to specified dir +/// creates subvolumes bzz/root bzz/home +pub fn bcachefs_init( + dev_name: &str, + compression: Option, + password: Option, + mnt_dir: &str, +) -> Result<(), ExecCommandError> { + + // format device + kira_system::bcachefs_format(dev_name, compression, password.clone())?; + + // if encryption used - unlock drive + if let Some(pass) = password { + kira_system::bcachefs_unlock(dev_name, pass.as_str())?; + } + + //mount drive + kira_system::bcachefs_mount(dev_name, mnt_dir)?; + + // Creating bzz_snaps directory for root snapshoots + std::fs::create_dir(format!("{}{}", mnt_dir, "/bzz_snaps"))?; + + // We want /var to bee simple dir so snapshoting root capture it + std::fs::create_dir(format!("{}{}", mnt_dir, "/var"))?; + + // Creating boot directory for efi mounting + std::fs::create_dir_all(format!("{}{}", mnt_dir, "/bzz-boot/uefi"))?; + + // create subvolumes + for vol_name in ["/home", "/tmp", "/var/tmp"] { + let vol_path = format!("{}{}", mnt_dir, vol_name); + kira_system::bcachefs_create_subvolume(vol_path.as_str())?; + } + + Ok(()) +} + +pub fn init_disk(part_layout: &PartLayout) -> Result<(), ExecCommandError> { + // use parted to create partition gpt layout + create_partitions(part_layout)?; + + for part in &part_layout.part_list { + match part.role { + Some(PartRole::EFI) => { + if let Some(part_l) = part.partlabel_dev() { + kira_system::mkfs_esp(&part_l)?; + } + } + Some(PartRole::SWAP) => { + if let Some(part_l) = part.partlabel_dev() { + kira_system::mkswap(&part_l)?; + } + } + _ => (), + } + } + + Ok(()) +} #[derive(Debug, Clone, Copy, PartialEq, Eq)] enum InstallationState { UserConfirmDialog, - Partitionning, - CopyFiles, - Configuring, + Installing, Finish, Error, } @@ -48,19 +125,19 @@ pub struct InstallStage { state: InstallationState, progress: f32, progress_message: String, - kira_config: KiraConfig, + part_config: PartitionStageResult, + modal_backgroud: Color, } #[derive(Debug, Clone)] pub enum Message { UserConfirms, UserDenies, - StartPartitioning, - UpdateProgress(Result<(f32, String), String>), - PartitioningFinish(Result<(), String>), - Back, + Sucess, Cancel, Finish, + UpdateProgress(Result<(f32, String), String>), + Failure(String), } #[derive(Debug)] @@ -69,42 +146,128 @@ pub enum Update { Task(Task), } +async fn init_disk_async(part_layout: PartLayout) -> Result<(f32, String), ExecCommandError> { + use blocking; + blocking::unblock(move || init_disk(&part_layout)).await?; + Ok((1.1f32, "Preparing bcachefs filesystem...".into())) +} -fn partition_disk(disk_layout: PartLayout, password: Option) -> impl futures::Stream> { +async fn bcachefs_init_async( + dev_name: String, + compression: Option, + password: Option, + mnt_dir: String, +) -> Result<(f32, String), ExecCommandError> { + use blocking; + blocking::unblock(move || bcachefs_init(&dev_name, compression, password, &mnt_dir)).await?; + Ok((2.2f32, "Something next...".into())) +} + +fn partition_disk( + disk_layout: PartLayout, + password: Option, + compression: Option, +) -> impl futures::Stream> { use blocking; - iced::stream::channel(100, |mut output: Sender>| async move { - for i in 0..=1000 { + iced::stream::channel( + 100, + |mut output: Sender>| async move { //sleep(Duration::from_millis(10)).await; - let dev = disk_layout.dev.clone(); + let disk_layout_cloned = disk_layout.clone(); // creating gpt partition table - match output.send(blocking::unblock(move || kira_disk_layout::parted_init_gpt_part_table(&dev)).await.and(Ok((1.0f32, String::new())))).await { - Err(ex) =>{ + match output.send(init_disk_async(disk_layout_cloned).await).await { + Err(ex) => { log::error!("Error creating GPT partition table: {}", ex.to_string()); return; - }, - _ => () + } + _ => (), + }; + + // creating partitions + let dev = disk_layout.dev.clone(); + let part_list = disk_layout.part_list.clone(); + match output + .send( + blocking::unblock(move || { + let mut res = Ok(()); + for part in part_list { + match kira_system::parted_mkpart(&dev, &part) { + Ok(_) => (), + Err(ex) => { + res = Err(ex); + break; + } + } + } + res + }) + .await + .and(Ok((5.0f32, "Creating partitions".into()))), + ) + .await + { + Err(ex) => { + log::error!("Error creating GPT partition table: {}", ex.to_string()); + return; + } + _ => (), + }; + + // creating bcachefs filesystem + // /dev/disk/by-partlabel/ + let compression_cloned = compression.clone(); + let password_cloned = password.clone(); + match output + .send( + blocking::unblock(move || { + bcachefs_init( + "/dev/disk/by-partlabel/bee-root", + compression_cloned, + password_cloned, + "/mnt/bzzpss-install", + ) + }) + .await + .and(Ok((10.0f32, "Creating partition table".into()))), + ) + .await + { + Err(ex) => { + log::error!("Error creating GPT partition table: {}", ex.to_string()); + return; + } + _ => (), }; // Check if send fails (receiver dropped/cancelled) // if output.send(res).await.is_err() { // return; // Exit early if UI is gone // } - } - - // Optional: Send completion or error state here - // output.send(Message::WorkFailed).await.ok(); - }) -} + // Optional: Send completion or error state here + // output.send(Message::WorkFailed).await.ok(); + }, + ) +} impl InstallStage { pub fn new(config: &KiraConfig) -> Self { + let mut modal_backgroud = kira_theming::main_theme().palette().background; + modal_backgroud.a = 0.5; Self { + modal_backgroud: modal_backgroud, state: InstallationState::UserConfirmDialog, progress: 0.0, progress_message: String::new(), - kira_config: config.clone(), + part_config: config + .config_trail + .iter() + .find_map(|v| match v { + StageResult::PartitionStageResult(res) => Some(res.clone()), + _ => None, + }) + .expect("Partition stage result should be present in KiraConfig!"), } } @@ -117,23 +280,21 @@ impl InstallStage { Message::UserDenies => Update::StgAct(StageAction::Back), Message::UserConfirms => { // starting installation process here - let part_data = self.kira_config.config_trail.iter().find_map(|v| match v { - StageResult::PartitionStageResult(res) => Some(res.clone()), - _ => None, - }).unwrap(); - self.state = InstallationState::Partitionning; - let disk_layout = part_data.part_layout.clone(); - let disk_password = part_data.password.clone(); - - - Update::Task(Task::run(partition_disk(disk_layout, disk_password), Message::UpdateProgress)) + log::info!("Starting disk partitioning."); + + self.state = InstallationState::Installing; + let disk_layout = self.part_config.part_layout.clone(); + let disk_password = self.part_config.password.clone(); + let disk_compression = Some("lz4".to_string()); + Update::Task(Task::run( + partition_disk(disk_layout, disk_password, disk_compression).map_err(|ex|ex.to_string()), + Message::UpdateProgress, + )) //Update::Task(Task::perform(, Message::PartitioningFinish)) } - Message::StartPartitioning => Update::StgAct(StageAction::None), - Message::PartitioningFinish(res) => Update::StgAct(StageAction::None), Message::UpdateProgress(maybe_msg) => { match maybe_msg { - Ok((progress, msg))=> { + Ok((progress, msg)) => { self.progress = progress; self.progress_message = msg; Update::StgAct(StageAction::None) @@ -145,10 +306,13 @@ impl InstallStage { } } //Update::StgAct(StageAction::None) - - }, + } + Message::Failure(ex) => { + self.state = InstallationState::Error; + Update::StgAct(StageAction::Abort) + } Message::Cancel => Update::StgAct(StageAction::Abort), - Message::Back => Update::StgAct(StageAction::Back), + Message::Sucess => Update::StgAct(StageAction::None), Message::Finish => Update::StgAct(StageAction::None), } } @@ -161,12 +325,12 @@ impl InstallStage { }; // Embed the image bytes into the executable - let welcom_logo_handle = widget::image::Handle::from_bytes(kira_theming::get_logo_bytes()); + let logo_handle = widget::image::Handle::from_bytes(kira_theming::get_logo_bytes()); let main_content = widget::column![ widget::container( widget::column![ - widget::image(welcom_logo_handle) + widget::image(logo_handle) .width(iced::Pixels(128.0)) .height(iced::Pixels(128.0)), widget::text(t!("install.caption")), @@ -193,22 +357,34 @@ impl InstallStage { if self.state == InstallationState::UserConfirmDialog { page_stack - .push( - widget::column![ - widget::text(t!("install.warning")), - widget::row![ - widget::button(widget::text(t!("button.no"))) - .on_press(Message::UserDenies), - widget::space::horizontal(), // Pushes the right button to the far right - widget::button(widget::text(t!("button.yes"))) - .on_press(Message::UserConfirms) - ] - .width(iced::Length::Fill) - .align_y(Alignment::End) - .padding(10) - ] - .align_x(Alignment::Center), - ) + .push(widget::opaque( + container( + container( + widget::column![ + widget::text(t!("install.warning")).align_x(Alignment::Center), + widget::row![ + widget::button(widget::text(t!("button.no"))) + .on_press(Message::UserDenies), + widget::space::horizontal(), // Pushes the right button to the far right + widget::button(widget::text(t!("button.yes"))) + .on_press(Message::UserConfirms) + ] + .padding(10) + ] + .spacing(10) + .padding(10) + .width(512) + .align_x(Alignment::Center), + ) + .style(kira_theming::warning_dialog), + ) + .style(container::bordered_box) + .style(kira_theming::dialog_background) + .align_x(Alignment::Center) + .align_y(Alignment::Center) + .height(Length::Fill) + .width(Length::Fill), + )) .into() } else { page_stack.into()