diff --git a/.vscode/settings.json b/.vscode/settings.json index 0fa13383..5aa232fa 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,5 +2,6 @@ "editor.tabSize": 2, "files.associations": { "*.stack": "clojure" - } + }, + "rust-analyzer.cargo.features": "all" } diff --git a/Cargo.lock b/Cargo.lock index a074aa24..bdc9d890 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,99 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "ab_glyph" +version = "0.2.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e53b0a3d5760cd2ba9b787ae0c6440ad18ee294ff71b05e3381c900a7d16cfd" +dependencies = [ + "ab_glyph_rasterizer", + "owned_ttf_parser", +] + +[[package]] +name = "ab_glyph_rasterizer" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046" + +[[package]] +name = "accesskit" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74a4b14f3d99c1255dcba8f45621ab1a2e7540a0009652d33989005a4d0bfc6b" + +[[package]] +name = "accesskit_consumer" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c17cca53c09fbd7288667b22a201274b9becaa27f0b91bf52a526db95de45e6" +dependencies = [ + "accesskit", +] + +[[package]] +name = "accesskit_macos" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd3b6ae1eabbfbced10e840fd3fce8a93ae84f174b3e4ba892ab7bcb42e477a7" +dependencies = [ + "accesskit", + "accesskit_consumer", + "objc2 0.3.0-beta.3.patch-leaks.3", + "once_cell", +] + +[[package]] +name = "accesskit_unix" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09f46c18d99ba61ad7123dd13eeb0c104436ab6af1df6a1cd8c11054ed394a08" +dependencies = [ + "accesskit", + "accesskit_consumer", + "async-channel", + "async-once-cell", + "atspi", + "futures-lite 1.13.0", + "once_cell", + "serde", + "zbus", +] + +[[package]] +name = "accesskit_windows" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afcae27ec0974fc7c3b0b318783be89fd1b2e66dd702179fe600166a38ff4a0b" +dependencies = [ + "accesskit", + "accesskit_consumer", + "once_cell", + "paste", + "static_assertions", + "windows 0.48.0", +] + +[[package]] +name = "accesskit_winit" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5284218aca17d9e150164428a0ebc7b955f70e3a9a78b4c20894513aabf98a67" +dependencies = [ + "accesskit", + "accesskit_macos", + "accesskit_unix", + "accesskit_windows", + "winit", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + [[package]] name = "ahash" version = "0.8.11" @@ -9,6 +102,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", + "getrandom", "once_cell", "version_check", "zerocopy", @@ -29,6 +123,33 @@ version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" +[[package]] +name = "android-activity" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee91c0c2905bae44f84bfa4e044536541df26b7703fd0888deeb9060fcc44289" +dependencies = [ + "android-properties", + "bitflags 2.5.0", + "cc", + "cesu8", + "jni", + "jni-sys", + "libc", + "log", + "ndk", + "ndk-context", + "ndk-sys", + "num_enum", + "thiserror", +] + +[[package]] +name = "android-properties" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" + [[package]] name = "android-tzdata" version = "0.1.1" @@ -46,47 +167,48 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.13" +version = "0.6.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d96bd03f33fe50a863e394ee9718a706f988b9079b20c3784fb726e7678b62fb" +checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" dependencies = [ "anstyle", "anstyle-parse", "anstyle-query", "anstyle-wincon", "colorchoice", + "is_terminal_polyfill", "utf8parse", ] [[package]] name = "anstyle" -version = "1.0.6" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" +checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" [[package]] name = "anstyle-parse" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" +checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.0.2" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" +checksum = "ad186efb764318d35165f1758e7dcef3b10628e26d41a44bc5550652e6804391" dependencies = [ "windows-sys 0.52.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.2" +version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" +checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" dependencies = [ "anstyle", "windows-sys 0.52.0", @@ -94,711 +216,2581 @@ dependencies = [ [[package]] name = "arboard" -version = "3.3.2" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2041f1943049c7978768d84e6d0fd95de98b76d6c4727b09e78ec253d29fa58" +checksum = "9fb4009533e8ff8f1450a5bcbc30f4242a1d34442221f72314bea1f5dc9c7f89" dependencies = [ "clipboard-win", "log", - "objc", - "objc-foundation", - "objc_id", + "objc2 0.5.2", + "objc2-app-kit", + "objc2-foundation", "parking_lot", - "thiserror", "wl-clipboard-rs", "x11rb", ] [[package]] -name = "autocfg" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80" - -[[package]] -name = "bitflags" -version = "1.3.2" +name = "arrayref" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" [[package]] -name = "bitflags" -version = "2.5.0" +name = "arrayvec" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" -dependencies = [ - "serde", -] +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] -name = "block" -version = "0.1.6" +name = "as-raw-xcb-connection" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" +checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" [[package]] -name = "bumpalo" -version = "3.16.0" +name = "ash" +version = "0.37.3+1.3.251" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "39e9c3835d686b0a6084ab4234fcd1b07dbf6e4767dce60874b12356a25ecd4a" +dependencies = [ + "libloading 0.7.4", +] [[package]] -name = "castaway" -version = "0.2.2" +name = "async-broadcast" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a17ed5635fc8536268e5d4de1e22e81ac34419e5f052d4d51f4e01dcc263fcc" +checksum = "7c48ccdbf6ca6b121e0f586cbc0e73ae440e56c67c30fa0873b4e110d9c26d2b" dependencies = [ - "rustversion", + "event-listener 2.5.3", + "futures-core", ] [[package]] -name = "cc" -version = "1.0.95" +name = "async-channel" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d32a725bc159af97c3e629873bb9f88fb8cf8a4867175f76dc987815ea07c83b" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] [[package]] -name = "cfg-if" -version = "1.0.0" +name = "async-executor" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "c8828ec6e544c02b0d6691d21ed9f9218d0384a82542855073c2a3f58304aaf0" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand 2.1.0", + "futures-lite 2.3.0", + "slab", +] [[package]] -name = "cfg_aliases" -version = "0.1.1" +name = "async-fs" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" +checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06" +dependencies = [ + "async-lock 2.8.0", + "autocfg", + "blocking", + "futures-lite 1.13.0", +] [[package]] -name = "chrono" -version = "0.4.38" +name = "async-io" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" dependencies = [ - "android-tzdata", - "iana-time-zone", - "num-traits", - "serde", - "windows-targets 0.52.5", + "async-lock 2.8.0", + "autocfg", + "cfg-if", + "concurrent-queue", + "futures-lite 1.13.0", + "log", + "parking", + "polling 2.8.0", + "rustix 0.37.27", + "slab", + "socket2", + "waker-fn", ] [[package]] -name = "clap" -version = "4.5.4" +name = "async-io" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0" +checksum = "0d6baa8f0178795da0e71bc42c9e5d13261aac7ee549853162e66a241ba17964" dependencies = [ - "clap_builder", - "clap_derive", + "async-lock 3.4.0", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite 2.3.0", + "parking", + "polling 3.7.1", + "rustix 0.38.34", + "slab", + "tracing", + "windows-sys 0.52.0", ] [[package]] -name = "clap_builder" -version = "4.5.2" +name = "async-lock" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" +checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" dependencies = [ - "anstream", - "anstyle", - "clap_lex", - "strsim", + "event-listener 2.5.3", ] [[package]] -name = "clap_derive" -version = "4.5.4" +name = "async-lock" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64" +checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" dependencies = [ - "heck 0.5.0", - "proc-macro2", - "quote", - "syn", + "event-listener 5.3.1", + "event-listener-strategy", + "pin-project-lite", ] [[package]] -name = "clap_lex" -version = "0.7.0" +name = "async-once-cell" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" +checksum = "9338790e78aa95a416786ec8389546c4b6a1dfc3dc36071ed9518a9413a542eb" [[package]] -name = "clipboard-win" -version = "5.3.0" +name = "async-process" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d517d4b86184dbb111d3556a10f1c8a04da7428d2987bf1081602bf11c3aa9ee" +checksum = "ea6438ba0a08d81529c69b36700fa2f95837bfe3e776ab39cde9c14d9149da88" dependencies = [ - "error-code", + "async-io 1.13.0", + "async-lock 2.8.0", + "async-signal", + "blocking", + "cfg-if", + "event-listener 3.1.0", + "futures-lite 1.13.0", + "rustix 0.38.34", + "windows-sys 0.48.0", ] [[package]] -name = "codespan-reporting" -version = "0.11.1" +name = "async-recursion" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ - "termcolor", - "unicode-width", + "proc-macro2", + "quote", + "syn 2.0.66", ] [[package]] -name = "colorchoice" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" - -[[package]] -name = "compact_str" -version = "0.8.0-beta" +name = "async-signal" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2a2dc81369dde6d31456eedbb4fd3d320f0b9713573dfe06e569e2bce7607f2" +checksum = "794f185324c2f00e771cd9f1ae8b5ac68be2ca7abb129a87afd6e86d228bc54d" dependencies = [ - "castaway", + "async-io 2.3.3", + "async-lock 3.4.0", + "atomic-waker", "cfg-if", - "itoa", - "rustversion", - "ryu", - "static_assertions", + "futures-core", + "futures-io", + "rustix 0.38.34", + "signal-hook-registry", + "slab", + "windows-sys 0.52.0", ] [[package]] -name = "core-foundation-sys" -version = "0.8.6" +name = "async-task" +version = "4.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[package]] -name = "crossbeam-channel" -version = "0.5.12" +name = "async-trait" +version = "0.1.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab3db02a9c5b5121e1e42fbdb1aeb65f5e02624cc58c43f2884c6ccac0b82f95" +checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" dependencies = [ - "crossbeam-utils", + "proc-macro2", + "quote", + "syn 2.0.66", ] [[package]] -name = "crossbeam-utils" -version = "0.8.19" +name = "atomic-waker" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] -name = "crossterm" -version = "0.27.0" +name = "atspi" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f476fe445d41c9e991fd07515a6f463074b782242ccf4a5b7b1d1012e70824df" +checksum = "6059f350ab6f593ea00727b334265c4dfc7fd442ee32d264794bd9bdc68e87ca" dependencies = [ - "bitflags 2.5.0", - "crossterm_winapi", - "libc", - "mio", - "parking_lot", - "serde", - "signal-hook", - "signal-hook-mio", - "winapi", + "atspi-common", + "atspi-connection", + "atspi-proxies", ] [[package]] -name = "crossterm_winapi" -version = "0.9.1" +name = "atspi-common" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" +checksum = "92af95f966d2431f962bc632c2e68eda7777330158bf640c4af4249349b2cdf5" dependencies = [ - "winapi", + "enumflags2", + "serde", + "static_assertions", + "zbus", + "zbus_names", + "zvariant", ] [[package]] -name = "derive-new" -version = "0.6.0" +name = "atspi-connection" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d150dea618e920167e5973d70ae6ece4385b7164e0d799fe7c122dd0a5d912ad" +checksum = "a0c65e7d70f86d4c0e3b2d585d9bf3f979f0b19d635a336725a88d279f76b939" dependencies = [ - "proc-macro2", - "quote", - "syn", + "atspi-common", + "atspi-proxies", + "futures-lite 1.13.0", + "zbus", ] [[package]] -name = "dlib" -version = "0.5.2" +name = "atspi-proxies" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" +checksum = "6495661273703e7a229356dcbe8c8f38223d697aacfaf0e13590a9ac9977bb52" dependencies = [ - "libloading", + "atspi-common", + "serde", + "zbus", ] [[package]] -name = "downcast-rs" -version = "1.2.1" +name = "autocfg" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] -name = "either" -version = "1.11.0" +name = "bit-set" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2" +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +dependencies = [ + "bit-vec", +] [[package]] -name = "equivalent" -version = "1.0.1" +name = "bit-vec" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" [[package]] -name = "errno" -version = "0.3.8" +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" dependencies = [ - "libc", - "windows-sys 0.52.0", + "serde", ] [[package]] -name = "error-code" -version = "3.2.0" +name = "block" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0474425d51df81997e2f90a21591180b38eccf27292d755f3e30750225c175b" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" [[package]] -name = "fastrand" -version = "2.0.2" +name = "block-buffer" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "658bd65b1cf4c852a3cc96f18a8ce7b5640f6b703f905c7d74532294c2a63984" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] [[package]] -name = "fd-lock" -version = "4.0.2" +name = "block-sys" +version = "0.1.0-beta.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e5768da2206272c81ef0b5e951a41862938a6070da63bcea197899942d3b947" +checksum = "0fa55741ee90902547802152aaf3f8e5248aab7e21468089560d4c8840561146" dependencies = [ - "cfg-if", - "rustix", - "windows-sys 0.52.0", + "objc-sys 0.2.0-beta.2", ] [[package]] -name = "filetime" -version = "0.2.23" +name = "block-sys" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd" +checksum = "ae85a0696e7ea3b835a453750bf002770776609115e6d25c6d2ff28a8200f7e7" dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "windows-sys 0.52.0", + "objc-sys 0.3.5", ] [[package]] -name = "fixedbitset" -version = "0.4.2" +name = "block2" +version = "0.2.0-alpha.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" +checksum = "8dd9e63c1744f755c2f60332b88de39d341e5e86239014ad839bd71c106dec42" +dependencies = [ + "block-sys 0.1.0-beta.1", + "objc2-encode 2.0.0-pre.2", +] [[package]] -name = "fnv" -version = "1.0.7" +name = "block2" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +checksum = "15b55663a85f33501257357e6421bb33e769d5c9ffb5ba0921c975a123e35e68" +dependencies = [ + "block-sys 0.2.1", + "objc2 0.4.1", +] [[package]] -name = "fsevent-sys" -version = "4.1.0" +name = "block2" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2" +checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" dependencies = [ - "libc", + "objc2 0.5.2", ] [[package]] -name = "gethostname" -version = "0.4.3" +name = "blocking" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818" +checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" dependencies = [ - "libc", - "windows-targets 0.48.5", + "async-channel", + "async-task", + "futures-io", + "futures-lite 2.3.0", + "piper", ] [[package]] -name = "hashbrown" -version = "0.14.3" +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "bytemuck" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" +checksum = "78834c15cb5d5efe3452d58b1e8ba890dd62d21907f867f383358198e56ebca5" dependencies = [ - "ahash", - "allocator-api2", + "bytemuck_derive", ] [[package]] -name = "heck" -version = "0.4.1" +name = "bytemuck_derive" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ee891b04274a59bd38b412188e24b849617b2e45a0fd8d057deb63e7403761b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "byteorder" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] -name = "heck" -version = "0.5.0" +name = "bytes" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" +checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" [[package]] -name = "home" -version = "0.5.9" +name = "calloop" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +checksum = "fba7adb4dd5aa98e5553510223000e7148f621165ec5f9acd7113f6ca4995298" dependencies = [ - "windows-sys 0.52.0", + "bitflags 2.5.0", + "log", + "polling 3.7.1", + "rustix 0.38.34", + "slab", + "thiserror", ] [[package]] -name = "iana-time-zone" -version = "0.1.60" +name = "calloop-wayland-source" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +checksum = "0f0ea9b9476c7fad82841a8dbb380e2eae480c21910feba80725b46931ed8f02" dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "wasm-bindgen", - "windows-core", + "calloop", + "rustix 0.38.34", + "wayland-backend", + "wayland-client", ] [[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" +name = "castaway" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +checksum = "8a17ed5635fc8536268e5d4de1e22e81ac34419e5f052d4d51f4e01dcc263fcc" dependencies = [ - "cc", + "rustversion", ] [[package]] -name = "indexmap" -version = "2.2.6" +name = "cc" +version = "1.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +checksum = "96c51067fd44124faa7f870b4b1c969379ad32b2ba805aa959430ceaa384f695" dependencies = [ - "equivalent", - "hashbrown", + "jobserver", + "libc", + "once_cell", ] [[package]] -name = "inotify" -version = "0.9.6" +name = "cesu8" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cfg_aliases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" + +[[package]] +name = "cgl" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff" +dependencies = [ + "libc", +] + +[[package]] +name = "chrono" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "num-traits", + "serde", + "windows-targets 0.52.5", +] + +[[package]] +name = "clap" +version = "4.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5db83dced34638ad474f39f250d7fea9598bdd239eaced1bdf45d597da0f433f" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7e204572485eb3fbf28f871612191521df159bc3e15a9f5064c66dba3a8c05f" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c780290ccf4fb26629baa7a1081e68ced113f1d3ec302fa5948f1c381ebf06c6" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "clap_lex" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b82cf0babdbd58558212896d1a4272303a57bdb245c2bf1147185fb45640e70" + +[[package]] +name = "clipboard-win" +version = "5.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79f4473f5144e20d9aceaf2972478f06ddf687831eafeeb434fbaf0acc4144ad" +dependencies = [ + "error-code", +] + +[[package]] +name = "cocoa" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c" dependencies = [ "bitflags 1.3.2", - "inotify-sys", + "block", + "cocoa-foundation", + "core-foundation", + "core-graphics", + "foreign-types", "libc", + "objc", ] [[package]] -name = "inotify-sys" -version = "0.1.5" +name = "cocoa-foundation" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" +checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7" dependencies = [ + "bitflags 1.3.2", + "block", + "core-foundation", + "core-graphics-types", "libc", + "objc", ] [[package]] -name = "internment" -version = "0.7.5" +name = "codespan-reporting" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04e8e537b529b8674e97e9fb82c10ff168a290ac3867a0295f112061ffbca1ef" +checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" dependencies = [ - "hashbrown", - "parking_lot", + "termcolor", + "unicode-width", ] [[package]] -name = "itertools" -version = "0.12.1" +name = "color_quant" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" + +[[package]] +name = "colorchoice" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" + +[[package]] +name = "com" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e17887fd17353b65b1b2ef1c526c83e26cd72e74f598a8dc1bee13a48f3d9f6" dependencies = [ - "either", + "com_macros", ] [[package]] -name = "itoa" -version = "1.0.11" +name = "com_macros" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "d375883580a668c7481ea6631fc1a8863e33cc335bf56bfad8d7e6d4b04b13a5" +dependencies = [ + "com_macros_support", + "proc-macro2", + "syn 1.0.109", +] [[package]] -name = "js-sys" -version = "0.3.69" +name = "com_macros_support" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +checksum = "ad899a1087a9296d5644792d7cb72b8e34c1bec8e7d4fbc002230169a6e8710c" dependencies = [ - "wasm-bindgen", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "kqueue" -version = "1.0.8" +name = "combine" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7447f1ca1b7b563588a205fe93dea8df60fd981423a768bc1c0ded35ed147d0c" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" dependencies = [ - "kqueue-sys", + "bytes", + "memchr", +] + +[[package]] +name = "compact_str" +version = "0.8.0-beta" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a2dc81369dde6d31456eedbb4fd3d320f0b9713573dfe06e569e2bce7607f2" +dependencies = [ + "castaway", + "cfg-if", + "itoa", + "rustversion", + "ryu", + "static_assertions", +] + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", "libc", ] [[package]] -name = "kqueue-sys" -version = "1.0.4" +name = "core-foundation-sys" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed9625ffda8729b85e45cf04090035ac368927b8cebc34898e7c120f52e4838b" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "core-graphics" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" dependencies = [ "bitflags 1.3.2", + "core-foundation", + "core-graphics-types", + "foreign-types", "libc", ] [[package]] -name = "libc" -version = "0.2.153" +name = "core-graphics-types" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" +checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "libc", +] [[package]] -name = "libloading" -version = "0.8.3" +name = "cpufeatures" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c2a198fb6b0eada2a8df47933734e6d35d350665a33a3593d7164fa52c75c19" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" dependencies = [ - "cfg-if", - "windows-targets 0.52.5", + "libc", ] [[package]] -name = "linux-raw-sys" -version = "0.4.13" +name = "crc32fast" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if", +] [[package]] -name = "lock_api" -version = "0.4.11" +name = "crossbeam-channel" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" dependencies = [ - "autocfg", - "scopeguard", + "crossbeam-utils", ] [[package]] -name = "log" -version = "0.4.21" +name = "crossbeam-utils" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" + +[[package]] +name = "crossterm" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f476fe445d41c9e991fd07515a6f463074b782242ccf4a5b7b1d1012e70824df" +dependencies = [ + "bitflags 2.5.0", + "crossterm_winapi", + "libc", + "mio", + "parking_lot", + "serde", + "signal-hook", + "signal-hook-mio", + "winapi", +] + +[[package]] +name = "crossterm_winapi" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" +dependencies = [ + "winapi", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "cursor-icon" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96a6ac251f4a2aca6b3f91340350eab87ae57c3f127ffeb585e92bd336717991" + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derive-new" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d150dea618e920167e5973d70ae6ece4385b7164e0d799fe7c122dd0a5d912ad" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "dispatch" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" + +[[package]] +name = "displaydoc" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "dlib" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" +dependencies = [ + "libloading 0.8.3", +] + +[[package]] +name = "document-features" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef5282ad69563b5fc40319526ba27e0e7363d552a896f0297d54f767717f9b95" +dependencies = [ + "litrs", +] + +[[package]] +name = "downcast-rs" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" + +[[package]] +name = "ecolor" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20930a432bbd57a6d55e07976089708d4893f3d556cf42a0d79e9e321fa73b10" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "eframe" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "020e2ccef6bbcec71dbc542f7eed64a5846fc3076727f5746da8fd307c91bab2" +dependencies = [ + "bytemuck", + "cocoa", + "document-features", + "egui", + "egui-wgpu", + "egui-winit", + "egui_glow", + "glow", + "glutin", + "glutin-winit", + "image", + "js-sys", + "log", + "objc", + "parking_lot", + "percent-encoding", + "raw-window-handle 0.5.2", + "raw-window-handle 0.6.2", + "static_assertions", + "thiserror", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "web-time", + "winapi", + "winit", +] + +[[package]] +name = "egui" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "584c5d1bf9a67b25778a3323af222dbe1a1feb532190e103901187f92c7fe29a" +dependencies = [ + "accesskit", + "ahash", + "epaint", + "log", + "nohash-hasher", +] + +[[package]] +name = "egui-wgpu" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "469ff65843f88a702b731a1532b7d03b0e8e96d283e70f3a22b0e06c46cb9b37" +dependencies = [ + "bytemuck", + "document-features", + "egui", + "epaint", + "log", + "thiserror", + "type-map", + "web-time", + "wgpu", + "winit", +] + +[[package]] +name = "egui-winit" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e3da0cbe020f341450c599b35b92de4af7b00abde85624fd16f09c885573609" +dependencies = [ + "accesskit_winit", + "arboard", + "egui", + "log", + "raw-window-handle 0.6.2", + "smithay-clipboard", + "web-time", + "webbrowser", + "winit", +] + +[[package]] +name = "egui_glow" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0e5d975f3c86edc3d35b1db88bb27c15dde7c55d3b5af164968ab5ede3f44ca" +dependencies = [ + "bytemuck", + "egui", + "glow", + "log", + "memoffset 0.9.1", + "wasm-bindgen", + "web-sys", + "winit", +] + +[[package]] +name = "either" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" + +[[package]] +name = "emath" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4c3a552cfca14630702449d35f41c84a0d15963273771c6059175a803620f3f" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "enumflags2" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d232db7f5956f3f14313dc2f87985c58bd2c695ce124c8cdd984e08e15ac133d" +dependencies = [ + "enumflags2_derive", + "serde", +] + +[[package]] +name = "enumflags2_derive" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "epaint" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b381f8b149657a4acf837095351839f32cd5c4aec1817fc4df84e18d76334176" +dependencies = [ + "ab_glyph", + "ahash", + "bytemuck", + "ecolor", + "emath", + "log", + "nohash-hasher", + "parking_lot", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "error-code" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0474425d51df81997e2f90a21591180b38eccf27292d755f3e30750225c175b" + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "event-listener" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d93877bcde0eb80ca09131a08d23f0a5c18a620b01db137dba666d18cd9b30c2" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener" +version = "5.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" +dependencies = [ + "event-listener 5.3.1", + "pin-project-lite", +] + +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + +[[package]] +name = "fastrand" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" + +[[package]] +name = "fd-lock" +version = "4.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e5768da2206272c81ef0b5e951a41862938a6070da63bcea197899942d3b947" +dependencies = [ + "cfg-if", + "rustix 0.38.34", + "windows-sys 0.52.0", +] + +[[package]] +name = "fdeflate" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f9bfee30e4dedf0ab8b422f03af778d9612b63f502710fc500a334ebe2de645" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "filetime" +version = "0.2.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.4.1", + "windows-sys 0.52.0", +] + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "flate2" +version = "1.0.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "fsevent-sys" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2" +dependencies = [ + "libc", +] + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-lite" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +dependencies = [ + "fastrand 1.9.0", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", + "waker-fn", +] + +[[package]] +name = "futures-lite" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" +dependencies = [ + "fastrand 2.1.0", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-core", + "futures-io", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "gethostname" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818" +dependencies = [ + "libc", + "windows-targets 0.48.5", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "gl_generator" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d" +dependencies = [ + "khronos_api", + "log", + "xml-rs", +] + +[[package]] +name = "glow" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd348e04c43b32574f2de31c8bb397d96c9fcfa1371bd4ca6d8bdc464ab121b1" +dependencies = [ + "js-sys", + "slotmap", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "glutin" +version = "0.31.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18fcd4ae4e86d991ad1300b8f57166e5be0c95ef1f63f3f5b827f8a164548746" +dependencies = [ + "bitflags 2.5.0", + "cfg_aliases", + "cgl", + "core-foundation", + "dispatch", + "glutin_egl_sys", + "glutin_glx_sys", + "glutin_wgl_sys", + "icrate", + "libloading 0.8.3", + "objc2 0.4.1", + "once_cell", + "raw-window-handle 0.5.2", + "wayland-sys", + "windows-sys 0.48.0", + "x11-dl", +] + +[[package]] +name = "glutin-winit" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebcdfba24f73b8412c5181e56f092b5eff16671c514ce896b258a0a64bd7735" +dependencies = [ + "cfg_aliases", + "glutin", + "raw-window-handle 0.5.2", + "winit", +] + +[[package]] +name = "glutin_egl_sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77cc5623f5309ef433c3dd4ca1223195347fe62c413da8e2fdd0eb76db2d9bcd" +dependencies = [ + "gl_generator", + "windows-sys 0.48.0", +] + +[[package]] +name = "glutin_glx_sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a165fd686c10dcc2d45380b35796e577eacfd43d4660ee741ec8ebe2201b3b4f" +dependencies = [ + "gl_generator", + "x11-dl", +] + +[[package]] +name = "glutin_wgl_sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c8098adac955faa2d31079b65dc48841251f69efd3ac25477903fc424362ead" +dependencies = [ + "gl_generator", +] + +[[package]] +name = "gpu-alloc" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" +dependencies = [ + "bitflags 2.5.0", + "gpu-alloc-types", +] + +[[package]] +name = "gpu-alloc-types" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" +dependencies = [ + "bitflags 2.5.0", +] + +[[package]] +name = "gpu-allocator" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f56f6318968d03c18e1bcf4857ff88c61157e9da8e47c5f29055d60e1228884" +dependencies = [ + "log", + "presser", + "thiserror", + "winapi", + "windows 0.52.0", +] + +[[package]] +name = "gpu-descriptor" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc11df1ace8e7e564511f53af41f3e42ddc95b56fd07b3f4445d2a6048bc682c" +dependencies = [ + "bitflags 2.5.0", + "gpu-descriptor-types", + "hashbrown", +] + +[[package]] +name = "gpu-descriptor-types" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bf0b36e6f090b7e1d8a4b49c0cb81c1f8376f72198c65dd3ad9ff3556b8b78c" +dependencies = [ + "bitflags 2.5.0", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash", + "allocator-api2", +] + +[[package]] +name = "hassle-rs" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af2a7e73e1f34c48da31fb668a907f250794837e08faa144fd24f0b8b741e890" +dependencies = [ + "bitflags 2.5.0", + "com", + "libc", + "libloading 0.8.3", + "thiserror", + "widestring", + "winapi", +] + +[[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.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hexf-parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" + +[[package]] +name = "home" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "icrate" +version = "0.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d3aaff8a54577104bafdf686ff18565c3b6903ca5782a2026ef06e2c7aa319" +dependencies = [ + "block2 0.3.0", + "dispatch", + "objc2 0.4.1", +] + +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f8ac670d7422d7f76b32e17a5db556510825b29ec9154f235977c9caba61036" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "idna" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4716a3a0933a1d01c2f72450e89596eb51dd34ef3c211ccd875acdf1f8fe47ed" +dependencies = [ + "icu_normalizer", + "icu_properties", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "image" +version = "0.24.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5690139d2f55868e080017335e4b94cb7414274c74f1669c84fb5feba2c9f69d" +dependencies = [ + "bytemuck", + "byteorder", + "color_quant", + "num-traits", + "png", +] + +[[package]] +name = "indexmap" +version = "2.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "inotify" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff" +dependencies = [ + "bitflags 1.3.2", + "inotify-sys", + "libc", +] + +[[package]] +name = "inotify-sys" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" +dependencies = [ + "libc", +] + +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "internment" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04e8e537b529b8674e97e9fb82c10ff168a290ac3867a0295f112061ffbca1ef" +dependencies = [ + "hashbrown", + "parking_lot", +] + +[[package]] +name = "io-lifetimes" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +dependencies = [ + "hermit-abi", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" + +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys", + "log", + "thiserror", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + +[[package]] +name = "jobserver" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" +dependencies = [ + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "khronos-egl" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76" +dependencies = [ + "libc", + "libloading 0.8.3", + "pkg-config", +] + +[[package]] +name = "khronos_api" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" + +[[package]] +name = "kqueue" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7447f1ca1b7b563588a205fe93dea8df60fd981423a768bc1c0ded35ed147d0c" +dependencies = [ + "kqueue-sys", + "libc", +] + +[[package]] +name = "kqueue-sys" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed9625ffda8729b85e45cf04090035ac368927b8cebc34898e7c120f52e4838b" +dependencies = [ + "bitflags 1.3.2", + "libc", +] + +[[package]] +name = "libc" +version = "0.2.155" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" + +[[package]] +name = "libloading" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +dependencies = [ + "cfg-if", + "winapi", +] + +[[package]] +name = "libloading" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c2a198fb6b0eada2a8df47933734e6d35d350665a33a3593d7164fa52c75c19" +dependencies = [ + "cfg-if", + "windows-targets 0.52.5", +] + +[[package]] +name = "libredox" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3af92c55d7d839293953fcd0fda5ecfe93297cfde6ffbdec13b41d99c0ba6607" +dependencies = [ + "bitflags 2.5.0", + "libc", + "redox_syscall 0.4.1", +] + +[[package]] +name = "linux-raw-sys" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" + +[[package]] +name = "linux-raw-sys" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" + +[[package]] +name = "litemap" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "643cb0b8d4fcc284004d5fd0d67ccf61dfffadb7f75e1e71bc420f4688a3a704" + +[[package]] +name = "litrs" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5" + +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + +[[package]] +name = "memchr" +version = "2.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" + +[[package]] +name = "memmap2" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe751422e4a8caa417e13c3ea66452215d7d63e19e604f4980461212f3ae1322" +dependencies = [ + "libc", +] + +[[package]] +name = "memoffset" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" +dependencies = [ + "autocfg", +] + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "metal" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c43f73953f8cbe511f021b58f18c3ce1c3d1ae13fe953293e13345bf83217f25" +dependencies = [ + "bitflags 2.5.0", + "block", + "core-graphics-types", + "foreign-types", + "log", + "objc", + "paste", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87dfd01fe195c66b572b37921ad8803d010623c0aca821bea2302239d155cdae" +dependencies = [ + "adler", + "simd-adler32", +] + +[[package]] +name = "mio" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +dependencies = [ + "libc", + "log", + "wasi", + "windows-sys 0.48.0", +] + +[[package]] +name = "naga" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50e3524642f53d9af419ab5e8dd29d3ba155708267667c2f3f06c88c9e130843" +dependencies = [ + "bit-set", + "bitflags 2.5.0", + "codespan-reporting", + "hexf-parse", + "indexmap", + "log", + "num-traits", + "rustc-hash", + "spirv", + "termcolor", + "thiserror", + "unicode-xid", +] + +[[package]] +name = "ndk" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2076a31b7010b17a38c01907c45b945e8f11495ee4dd588309718901b1f7a5b7" +dependencies = [ + "bitflags 2.5.0", + "jni-sys", + "log", + "ndk-sys", + "num_enum", + "raw-window-handle 0.5.2", + "raw-window-handle 0.6.2", + "thiserror", +] + +[[package]] +name = "ndk-context" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" + +[[package]] +name = "ndk-sys" +version = "0.5.0+25.2.9519653" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c196769dd60fd4f363e11d948139556a344e79d451aeb2fa2fd040738ef7691" +dependencies = [ + "jni-sys", +] + +[[package]] +name = "nix" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" +dependencies = [ + "bitflags 1.3.2", + "cfg-if", + "libc", + "memoffset 0.7.1", +] + +[[package]] +name = "nix" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4" +dependencies = [ + "bitflags 2.5.0", + "cfg-if", + "cfg_aliases", + "libc", +] + +[[package]] +name = "nohash-hasher" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "notify" +version = "6.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6205bd8bb1e454ad2e27422015fb5e4f2bcc7e08fa8f27058670d208324a4d2d" +dependencies = [ + "bitflags 2.5.0", + "crossbeam-channel", + "filetime", + "fsevent-sys", + "inotify", + "kqueue", + "libc", + "log", + "mio", + "walkdir", + "windows-sys 0.48.0", +] + +[[package]] +name = "nu-ansi-term" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd2800e1520bdc966782168a627aa5d1ad92e33b984bf7c7615d31280c83ff14" +dependencies = [ + "windows-sys 0.48.0", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_enum" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" +dependencies = [ + "proc-macro-crate 3.1.0", + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", + "objc_exception", +] + +[[package]] +name = "objc-sys" +version = "0.2.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b9834c1e95694a05a828b59f55fa2afec6288359cda67146126b3f90a55d7" + +[[package]] +name = "objc-sys" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" + +[[package]] +name = "objc2" +version = "0.3.0-beta.3.patch-leaks.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e01640f9f2cb1220bbe80325e179e532cb3379ebcd1bf2279d703c19fe3a468" +dependencies = [ + "block2 0.2.0-alpha.6", + "objc-sys 0.2.0-beta.2", + "objc2-encode 2.0.0-pre.2", +] + +[[package]] +name = "objc2" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "559c5a40fdd30eb5e344fbceacf7595a81e242529fb4e21cf5f43fb4f11ff98d" +dependencies = [ + "objc-sys 0.3.5", + "objc2-encode 3.0.0", +] + +[[package]] +name = "objc2" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804" +dependencies = [ + "objc-sys 0.3.5", + "objc2-encode 4.0.3", +] + +[[package]] +name = "objc2-app-kit" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" +dependencies = [ + "bitflags 2.5.0", + "block2 0.5.1", + "libc", + "objc2 0.5.2", + "objc2-core-data", + "objc2-core-image", + "objc2-foundation", + "objc2-quartz-core", +] + +[[package]] +name = "objc2-core-data" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" +dependencies = [ + "bitflags 2.5.0", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-image" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" +dependencies = [ + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation", + "objc2-metal", +] + +[[package]] +name = "objc2-encode" +version = "2.0.0-pre.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abfcac41015b00a120608fdaa6938c44cb983fee294351cc4bac7638b4e50512" +dependencies = [ + "objc-sys 0.2.0-beta.2", +] + +[[package]] +name = "objc2-encode" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d079845b37af429bfe5dfa76e6d087d788031045b25cfc6fd898486fd9847666" + +[[package]] +name = "objc2-encode" +version = "4.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7891e71393cd1f227313c9379a26a584ff3d7e6e7159e988851f0934c993f0f8" + +[[package]] +name = "objc2-foundation" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" +dependencies = [ + "bitflags 2.5.0", + "block2 0.5.1", + "libc", + "objc2 0.5.2", +] + +[[package]] +name = "objc2-metal" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" +dependencies = [ + "bitflags 2.5.0", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation", +] + +[[package]] +name = "objc2-quartz-core" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" +dependencies = [ + "bitflags 2.5.0", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation", + "objc2-metal", +] + +[[package]] +name = "objc_exception" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" +dependencies = [ + "cc", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "orbclient" +version = "0.3.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52f0d54bde9774d3a51dcf281a5def240c71996bc6ca05d2c847ec8b2b216166" +dependencies = [ + "libredox", +] + +[[package]] +name = "ordered-stream" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" +dependencies = [ + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "os_pipe" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29d73ba8daf8fac13b0501d1abeddcfe21ba7401ada61a819144b6c2a4f32209" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "owned_ttf_parser" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b41438d2fc63c46c74a2203bf5ccd82c41ba04347b2fcf5754f230b167067d5" +dependencies = [ + "ttf-parser", +] + +[[package]] +name = "parking" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" + +[[package]] +name = "parking_lot" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.5.1", + "smallvec", + "windows-targets 0.52.5", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "percent-encoding" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] -name = "malloc_buf" -version = "0.0.6" +name = "petgraph" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ - "libc", + "fixedbitset", + "indexmap", ] [[package]] -name = "memchr" -version = "2.7.2" +name = "pin-project-lite" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" [[package]] -name = "minimal-lexical" -version = "0.2.1" +name = "pin-utils" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] -name = "mio" -version = "0.8.11" +name = "piper" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +checksum = "ae1d5c74c9876f070d3e8fd503d748c7d974c3e48da8f41350fa5222ef9b4391" dependencies = [ - "libc", - "log", - "wasi", - "windows-sys 0.48.0", + "atomic-waker", + "fastrand 2.1.0", + "futures-io", ] [[package]] -name = "nix" -version = "0.28.0" +name = "pkg-config" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4" -dependencies = [ - "bitflags 2.5.0", - "cfg-if", - "cfg_aliases", - "libc", -] +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" [[package]] -name = "nom" -version = "7.1.3" +name = "png" +version = "0.17.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +checksum = "06e4b0d3d1312775e782c86c91a111aa1f910cbb65e1337f9975b5f9a554b5e1" dependencies = [ - "memchr", - "minimal-lexical", + "bitflags 1.3.2", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", ] [[package]] -name = "notify" -version = "6.1.1" +name = "polling" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6205bd8bb1e454ad2e27422015fb5e4f2bcc7e08fa8f27058670d208324a4d2d" +checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" dependencies = [ - "bitflags 2.5.0", - "crossbeam-channel", - "filetime", - "fsevent-sys", - "inotify", - "kqueue", + "autocfg", + "bitflags 1.3.2", + "cfg-if", + "concurrent-queue", "libc", "log", - "mio", - "walkdir", + "pin-project-lite", "windows-sys 0.48.0", ] [[package]] -name = "nu-ansi-term" -version = "0.50.0" +name = "polling" +version = "3.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd2800e1520bdc966782168a627aa5d1ad92e33b984bf7c7615d31280c83ff14" +checksum = "5e6a007746f34ed64099e88783b0ae369eaa3da6392868ba262e2af9b8fbaea1" dependencies = [ - "windows-sys 0.48.0", + "cfg-if", + "concurrent-queue", + "hermit-abi", + "pin-project-lite", + "rustix 0.38.34", + "tracing", + "windows-sys 0.52.0", ] [[package]] -name = "num-traits" -version = "0.2.18" +name = "ppv-lite86" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" -dependencies = [ - "autocfg", -] +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" [[package]] -name = "objc" -version = "0.2.7" +name = "presser" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" dependencies = [ - "malloc_buf", + "once_cell", + "toml_edit 0.19.15", ] [[package]] -name = "objc-foundation" -version = "0.1.1" +name = "proc-macro-crate" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" +checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" dependencies = [ - "block", - "objc", - "objc_id", + "toml_edit 0.21.1", ] [[package]] -name = "objc_id" -version = "0.1.1" +name = "proc-macro2" +version = "1.0.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" +checksum = "22244ce15aa966053a896d1accb3a6e68469b97c7f33f284b99f0d576879fc23" dependencies = [ - "objc", + "unicode-ident", ] [[package]] -name = "once_cell" -version = "1.19.0" +name = "profiling" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "43d84d1d7a6ac92673717f9f6d1518374ef257669c24ebc5ac25d5033828be58" [[package]] -name = "os_pipe" -version = "1.1.5" +name = "quick-xml" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57119c3b893986491ec9aa85056780d3a0f3cf4da7cc09dd3650dbd6c6738fb9" +checksum = "1004a344b30a54e2ee58d66a71b32d2db2feb0a31f9a2d302bf0536f15de2a33" dependencies = [ - "libc", - "windows-sys 0.52.0", + "memchr", ] [[package]] -name = "parking_lot" -version = "0.12.1" +name = "quote" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ - "lock_api", - "parking_lot_core", + "proc-macro2", ] [[package]] -name = "parking_lot_core" -version = "0.9.9" +name = "rand" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ - "cfg-if", "libc", - "redox_syscall", - "smallvec", - "windows-targets 0.48.5", + "rand_chacha", + "rand_core", ] [[package]] -name = "petgraph" -version = "0.6.4" +name = "rand_chacha" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ - "fixedbitset", - "indexmap", + "ppv-lite86", + "rand_core", ] [[package]] -name = "pkg-config" -version = "0.3.30" +name = "rand_core" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] [[package]] -name = "proc-macro2" -version = "1.0.79" +name = "raw-window-handle" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e" -dependencies = [ - "unicode-ident", -] +checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" [[package]] -name = "quick-xml" -version = "0.31.0" +name = "raw-window-handle" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1004a344b30a54e2ee58d66a71b32d2db2feb0a31f9a2d302bf0536f15de2a33" -dependencies = [ - "memchr", -] +checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" [[package]] -name = "quote" -version = "1.0.36" +name = "redox_syscall" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" dependencies = [ - "proc-macro2", + "bitflags 1.3.2", ] [[package]] @@ -810,6 +2802,15 @@ dependencies = [ "bitflags 1.3.2", ] +[[package]] +name = "redox_syscall" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "469052894dcb553421e483e4209ee581a45100d31b4018de03e5a7ad86374a7e" +dependencies = [ + "bitflags 2.5.0", +] + [[package]] name = "reedline" version = "0.31.0" @@ -833,9 +2834,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.10.4" +version = "1.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" +checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" dependencies = [ "aho-corasick", "memchr", @@ -845,9 +2846,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.6" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" +checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" dependencies = [ "aho-corasick", "memchr", @@ -856,34 +2857,60 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" +checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" + +[[package]] +name = "renderdoc-sys" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustix" +version = "0.37.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" +dependencies = [ + "bitflags 1.3.2", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys 0.3.8", + "windows-sys 0.48.0", +] [[package]] name = "rustix" -version = "0.38.33" +version = "0.38.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3cc72858054fcff6d7dea32df2aeaee6a7c24227366d7ea429aada2f26b16ad" +checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" dependencies = [ "bitflags 2.5.0", "errno", "libc", - "linux-raw-sys", + "linux-raw-sys 0.4.14", "windows-sys 0.52.0", ] [[package]] name = "rustversion" -version = "1.0.15" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80af6f9131f277a45a3fba6ce8e2258037bb0477a67e610d3c1fe046ab31de47" +checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" [[package]] name = "ryu" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] name = "same-file" @@ -906,61 +2933,190 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "sctk-adwaita" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82b2eaf3a5b264a521b988b2e73042e742df700c4f962cde845d1541adb46550" +dependencies = [ + "ab_glyph", + "log", + "memmap2", + "smithay-client-toolkit", + "tiny-skia", +] + [[package]] name = "serde" -version = "1.0.198" +version = "1.0.203" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9846a40c979031340571da2545a4e5b7c4163bdae79b301d5f86d03979451fcc" +checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" dependencies = [ "serde_derive", ] [[package]] -name = "serde_derive" -version = "1.0.198" +name = "serde_derive" +version = "1.0.203" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "serde_repr" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "signal-hook" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-mio" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af" +dependencies = [ + "libc", + "mio", + "signal-hook", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +dependencies = [ + "libc", +] + +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "slotmap" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" +dependencies = [ + "version_check", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "smithay-client-toolkit" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "922fd3eeab3bd820d76537ce8f582b1cf951eceb5475c28500c7457d9d17f53a" +dependencies = [ + "bitflags 2.5.0", + "calloop", + "calloop-wayland-source", + "cursor-icon", + "libc", + "log", + "memmap2", + "rustix 0.38.34", + "thiserror", + "wayland-backend", + "wayland-client", + "wayland-csd-frame", + "wayland-cursor", + "wayland-protocols", + "wayland-protocols-wlr", + "wayland-scanner", + "xkeysym", +] + +[[package]] +name = "smithay-clipboard" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e88edab869b01783ba905e7d0153f9fc1a6505a96e4ad3018011eedb838566d9" +checksum = "c091e7354ea8059d6ad99eace06dd13ddeedbb0ac72d40a9a6e7ff790525882d" dependencies = [ - "proc-macro2", - "quote", - "syn", + "libc", + "smithay-client-toolkit", + "wayland-backend", ] [[package]] -name = "signal-hook" -version = "0.3.17" +name = "smol_str" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" +checksum = "dd538fb6910ac1099850255cf94a94df6551fbdd602454387d0adb2d1ca6dead" dependencies = [ - "libc", - "signal-hook-registry", + "serde", ] [[package]] -name = "signal-hook-mio" -version = "0.2.3" +name = "socket2" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" dependencies = [ "libc", - "mio", - "signal-hook", + "winapi", ] [[package]] -name = "signal-hook-registry" -version = "1.4.2" +name = "spirv" +version = "0.3.0+sdk-1.3.268.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" dependencies = [ - "libc", + "bitflags 2.5.0", ] [[package]] -name = "smallvec" -version = "1.13.2" +name = "stable_deref_trait" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] name = "stack-cli" @@ -986,6 +3142,17 @@ dependencies = [ "yansi", ] +[[package]] +name = "stack-debugger" +version = "0.1.0" +dependencies = [ + "clap", + "eframe", + "notify", + "stack-core", + "stack-std", +] + [[package]] name = "stack-std" version = "0.1.0" @@ -1002,6 +3169,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" +[[package]] +name = "strict-num" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" + [[package]] name = "strip-ansi-escapes" version = "0.2.0" @@ -1025,28 +3198,50 @@ checksum = "5d8cec3501a5194c432b2b7976db6b7d10ec95c253208b45f83f7136aa985e29" [[package]] name = "strum_macros" -version = "0.26.2" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6cf59daf282c0a494ba14fd21610a0325f9f90ec9d1231dea26bcb1d696c946" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" dependencies = [ - "heck 0.4.1", + "heck", "proc-macro2", "quote", "rustversion", - "syn", + "syn 2.0.66", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", ] [[package]] name = "syn" -version = "2.0.58" +version = "2.0.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44cfb93f38070beee36b3fef7d4f5a16f27751d94b187b666a5cc5e9b0d30687" +checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + [[package]] name = "tempfile" version = "3.10.1" @@ -1054,8 +3249,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" dependencies = [ "cfg-if", - "fastrand", - "rustix", + "fastrand 2.1.0", + "rustix 0.38.34", "windows-sys 0.52.0", ] @@ -1086,7 +3281,7 @@ dependencies = [ "cfg-if", "proc-macro2", "quote", - "syn", + "syn 2.0.66", ] [[package]] @@ -1097,35 +3292,129 @@ checksum = "5c89e72a01ed4c579669add59014b9a524d609c0c88c6a585ce37485879f6ffb" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.66", "test-case-core", ] [[package]] name = "thiserror" -version = "1.0.59" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0126ad08bff79f29fc3ae6a55cc72352056dfff61e3ff8bb7129476d44b23aa" +checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.59" +version = "1.0.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "tiny-skia" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83d13394d44dae3207b52a326c0c85a8bf87f1541f23b0d143811088497b09ab" +dependencies = [ + "arrayref", + "arrayvec", + "bytemuck", + "cfg-if", + "log", + "tiny-skia-path", +] + +[[package]] +name = "tiny-skia-path" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c9e7fc0c2e86a30b117d0462aa261b72b7a99b7ebd7deb3a14ceda95c5bdc93" +dependencies = [ + "arrayref", + "bytemuck", + "strict-num", +] + +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "toml_datetime" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow", +] + +[[package]] +name = "toml_edit" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1cd413b5d558b4c5bf3680e324a6fa5014e7b7c067a51e69dbdf47eb7148b66" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.66", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", ] [[package]] name = "tree_magic_mini" -version = "3.1.4" +version = "3.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77ee137597cdb361b55a4746983e4ac1b35ab6024396a419944ad473bb915265" +checksum = "469a727cac55b41448315cc10427c069c618ac59bb6a4480283fcd811749bdc2" dependencies = [ "fnv", "home", @@ -1135,6 +3424,38 @@ dependencies = [ "petgraph", ] +[[package]] +name = "ttf-parser" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c591d83f69777866b9126b24c6dd9a18351f177e49d625920d19f989fd31cf8" + +[[package]] +name = "type-map" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "deb68604048ff8fa93347f02441e4487594adc20bb8a084f9e564d2b827a0a9f" +dependencies = [ + "rustc-hash", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "uds_windows" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9" +dependencies = [ + "memoffset 0.9.1", + "tempfile", + "winapi", +] + [[package]] name = "unicode-ident" version = "1.0.12" @@ -1149,15 +3470,44 @@ checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" [[package]] name = "unicode-width" -version = "0.1.11" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" + +[[package]] +name = "unicode-xid" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" + +[[package]] +name = "url" +version = "2.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c25da092f0a868cdf09e8674cd3b7ef3a7d92a24253e663a2fb85e2496de56" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "utf8parse" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "version_check" @@ -1177,14 +3527,20 @@ dependencies = [ [[package]] name = "vte_generate_state_changes" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d257817081c7dffcdbab24b9e62d2def62e2ff7d00b1c20062551e6cccc145ff" +checksum = "2e369bee1b05d510a7b4ed645f5faa90619e05437111783ea5848f28d97d3c2e" dependencies = [ "proc-macro2", "quote", ] +[[package]] +name = "waker-fn" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" + [[package]] name = "walkdir" version = "2.5.0" @@ -1222,10 +3578,22 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn", + "syn 2.0.66", "wasm-bindgen-shared", ] +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "wasm-bindgen-macro" version = "0.2.92" @@ -1244,7 +3612,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.66", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -1257,13 +3625,13 @@ checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" [[package]] name = "wayland-backend" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d50fa61ce90d76474c87f5fc002828d81b32677340112b4ef08079a9d459a40" +checksum = "34e9e6b6d4a2bb4e7e69433e0b35c7923b95d4dc8503a84d25ec917a4bbfdf07" dependencies = [ "cc", "downcast-rs", - "rustix", + "rustix 0.38.34", "scoped-tls", "smallvec", "wayland-sys", @@ -1271,16 +3639,38 @@ dependencies = [ [[package]] name = "wayland-client" -version = "0.31.2" +version = "0.31.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82fb96ee935c2cea6668ccb470fb7771f6215d1691746c2d896b447a00ad3f1f" +checksum = "1e63801c85358a431f986cffa74ba9599ff571fc5774ac113ed3b490c19a1133" dependencies = [ "bitflags 2.5.0", - "rustix", + "rustix 0.38.34", "wayland-backend", "wayland-scanner", ] +[[package]] +name = "wayland-csd-frame" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" +dependencies = [ + "bitflags 2.5.0", + "cursor-icon", + "wayland-backend", +] + +[[package]] +name = "wayland-cursor" +version = "0.31.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a206e8b2b53b1d3fcb9428fec72bc278ce539e2fa81fe2bfc1ab27703d5187b9" +dependencies = [ + "rustix 0.38.34", + "wayland-client", + "xcursor", +] + [[package]] name = "wayland-protocols" version = "0.31.2" @@ -1293,6 +3683,19 @@ dependencies = [ "wayland-scanner", ] +[[package]] +name = "wayland-protocols-plasma" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23803551115ff9ea9bce586860c5c5a971e360825a0309264102a9495a5ff479" +dependencies = [ + "bitflags 2.5.0", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-scanner", +] + [[package]] name = "wayland-protocols-wlr" version = "0.2.0" @@ -1307,27 +3710,173 @@ dependencies = [ ] [[package]] -name = "wayland-scanner" -version = "0.31.1" +name = "wayland-scanner" +version = "0.31.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67da50b9f80159dec0ea4c11c13e24ef9e7574bd6ce24b01860a175010cea565" +dependencies = [ + "proc-macro2", + "quick-xml", + "quote", +] + +[[package]] +name = "wayland-sys" +version = "0.31.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "105b1842da6554f91526c14a2a2172897b7f745a805d62af4ce698706be79c12" +dependencies = [ + "dlib", + "log", + "once_cell", + "pkg-config", +] + +[[package]] +name = "web-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa30049b1c872b72c89866d458eae9f20380ab280ffd1b1e18df2d3e2d98cfe0" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webbrowser" +version = "0.8.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db67ae75a9405634f5882791678772c94ff5f16a66535aae186e26aa0841fc8b" +dependencies = [ + "core-foundation", + "home", + "jni", + "log", + "ndk-context", + "objc", + "raw-window-handle 0.5.2", + "url", + "web-sys", +] + +[[package]] +name = "wgpu" +version = "0.19.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbd7311dbd2abcfebaabf1841a2824ed7c8be443a0f29166e5d3c6a53a762c01" +dependencies = [ + "arrayvec", + "cfg-if", + "cfg_aliases", + "js-sys", + "log", + "parking_lot", + "profiling", + "raw-window-handle 0.6.2", + "smallvec", + "static_assertions", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "wgpu-core", + "wgpu-hal", + "wgpu-types", +] + +[[package]] +name = "wgpu-core" +version = "0.19.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28b94525fc99ba9e5c9a9e24764f2bc29bad0911a7446c12f446a8277369bf3a" +dependencies = [ + "arrayvec", + "bit-vec", + "bitflags 2.5.0", + "cfg_aliases", + "codespan-reporting", + "indexmap", + "log", + "naga", + "once_cell", + "parking_lot", + "profiling", + "raw-window-handle 0.6.2", + "rustc-hash", + "smallvec", + "thiserror", + "web-sys", + "wgpu-hal", + "wgpu-types", +] + +[[package]] +name = "wgpu-hal" +version = "0.19.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63b3a62929287001986fb58c789dce9b67604a397c15c611ad9f747300b6c283" +checksum = "fc1a4924366df7ab41a5d8546d6534f1f33231aa5b3f72b9930e300f254e39c3" dependencies = [ - "proc-macro2", - "quick-xml", - "quote", + "android_system_properties", + "arrayvec", + "ash", + "bitflags 2.5.0", + "cfg_aliases", + "core-graphics-types", + "glow", + "glutin_wgl_sys", + "gpu-alloc", + "gpu-allocator", + "gpu-descriptor", + "hassle-rs", + "js-sys", + "khronos-egl", + "libc", + "libloading 0.8.3", + "log", + "metal", + "naga", + "ndk-sys", + "objc", + "once_cell", + "parking_lot", + "profiling", + "raw-window-handle 0.6.2", + "renderdoc-sys", + "rustc-hash", + "smallvec", + "thiserror", + "wasm-bindgen", + "web-sys", + "wgpu-types", + "winapi", ] [[package]] -name = "wayland-sys" -version = "0.31.1" +name = "wgpu-types" +version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15a0c8eaff5216d07f226cb7a549159267f3467b289d9a2e52fd3ef5aae2b7af" +checksum = "b671ff9fb03f78b46ff176494ee1ebe7d603393f42664be55b64dc8d53969805" dependencies = [ - "dlib", - "log", - "pkg-config", + "bitflags 2.5.0", + "js-sys", + "web-sys", ] +[[package]] +name = "widestring" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7219d36b6eac893fa81e84ebe06485e7dcbb616177469b142df14f1f4deb1311" + [[package]] name = "winapi" version = "0.3.9" @@ -1346,11 +3895,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.6" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" +checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" dependencies = [ - "winapi", + "windows-sys 0.52.0", ] [[package]] @@ -1359,6 +3908,27 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-targets 0.48.5", +] + +[[package]] +name = "windows" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" +dependencies = [ + "windows-core", + "windows-targets 0.52.5", +] + [[package]] name = "windows-core" version = "0.52.0" @@ -1368,6 +3938,37 @@ dependencies = [ "windows-targets 0.52.5", ] +[[package]] +name = "windows-implement" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e2ee588991b9e7e6c8338edf3333fbe4da35dc72092643958ebb43f0ab2c49c" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "windows-interface" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6fb8df20c9bcaa8ad6ab513f7b40104840c8867d5751126e4df3b08388d0cc7" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + [[package]] name = "windows-sys" version = "0.48.0" @@ -1386,6 +3987,21 @@ dependencies = [ "windows-targets 0.52.5", ] +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + [[package]] name = "windows-targets" version = "0.48.5" @@ -1417,6 +4033,12 @@ dependencies = [ "windows_x86_64_msvc 0.52.5", ] +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + [[package]] name = "windows_aarch64_gnullvm" version = "0.48.5" @@ -1429,6 +4051,12 @@ version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + [[package]] name = "windows_aarch64_msvc" version = "0.48.5" @@ -1441,6 +4069,12 @@ version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + [[package]] name = "windows_i686_gnu" version = "0.48.5" @@ -1459,6 +4093,12 @@ version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + [[package]] name = "windows_i686_msvc" version = "0.48.5" @@ -1471,6 +4111,12 @@ version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + [[package]] name = "windows_x86_64_gnu" version = "0.48.5" @@ -1483,6 +4129,12 @@ version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" @@ -1495,6 +4147,12 @@ version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + [[package]] name = "windows_x86_64_msvc" version = "0.48.5" @@ -1507,6 +4165,64 @@ version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" +[[package]] +name = "winit" +version = "0.29.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d59ad965a635657faf09c8f062badd885748428933dad8e8bdd64064d92e5ca" +dependencies = [ + "ahash", + "android-activity", + "atomic-waker", + "bitflags 2.5.0", + "bytemuck", + "calloop", + "cfg_aliases", + "core-foundation", + "core-graphics", + "cursor-icon", + "icrate", + "js-sys", + "libc", + "log", + "memmap2", + "ndk", + "ndk-sys", + "objc2 0.4.1", + "once_cell", + "orbclient", + "percent-encoding", + "raw-window-handle 0.5.2", + "raw-window-handle 0.6.2", + "redox_syscall 0.3.5", + "rustix 0.38.34", + "sctk-adwaita", + "smithay-client-toolkit", + "smol_str", + "unicode-segmentation", + "wasm-bindgen", + "wasm-bindgen-futures", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-protocols-plasma", + "web-sys", + "web-time", + "windows-sys 0.48.0", + "x11-dl", + "x11rb", + "xkbcommon-dl", +] + +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + [[package]] name = "wl-clipboard-rs" version = "0.8.1" @@ -1516,7 +4232,7 @@ dependencies = [ "derive-new", "libc", "log", - "nix", + "nix 0.28.0", "os_pipe", "tempfile", "thiserror", @@ -1527,22 +4243,90 @@ dependencies = [ "wayland-protocols-wlr", ] +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + +[[package]] +name = "x11-dl" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" +dependencies = [ + "libc", + "once_cell", + "pkg-config", +] + [[package]] name = "x11rb" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8f25ead8c7e4cba123243a6367da5d3990e0d3affa708ea19dce96356bd9f1a" +checksum = "5d91ffca73ee7f68ce055750bf9f6eca0780b8c85eff9bc046a3b0da41755e12" dependencies = [ + "as-raw-xcb-connection", "gethostname", - "rustix", + "libc", + "libloading 0.8.3", + "once_cell", + "rustix 0.38.34", "x11rb-protocol", ] [[package]] name = "x11rb-protocol" -version = "0.13.0" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec107c4503ea0b4a98ef47356329af139c0a4f7750e621cf2973cd3385ebcb3d" + +[[package]] +name = "xcursor" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a0ccd7b4a5345edfcd0c3535718a4e9ff7798ffc536bb5b5a0e26ff84732911" + +[[package]] +name = "xdg-home" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca91dcf8f93db085f3a0a29358cd0b9d670915468f4290e8b85d118a34211ab8" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "xkbcommon-dl" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" +dependencies = [ + "bitflags 2.5.0", + "dlib", + "log", + "once_cell", + "xkeysym", +] + +[[package]] +name = "xkeysym" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" + +[[package]] +name = "xml-rs" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e63e71c4b8bd9ffec2c963173a4dc4cbde9ee96961d4fcb4429db9929b606c34" +checksum = "791978798f0597cfc70478424c2b4fdc2b7a8024aaff78497ef00f24ef674193" [[package]] name = "yansi" @@ -1550,22 +4334,193 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" +[[package]] +name = "yoke" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c5b1314b079b0930c31e3af543d8ee1757b1951ae1e1565ec704403a7240ca5" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", + "synstructure", +] + +[[package]] +name = "zbus" +version = "3.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "675d170b632a6ad49804c8cf2105d7c31eddd3312555cffd4b740e08e97c25e6" +dependencies = [ + "async-broadcast", + "async-executor", + "async-fs", + "async-io 1.13.0", + "async-lock 2.8.0", + "async-process", + "async-recursion", + "async-task", + "async-trait", + "blocking", + "byteorder", + "derivative", + "enumflags2", + "event-listener 2.5.3", + "futures-core", + "futures-sink", + "futures-util", + "hex", + "nix 0.26.4", + "once_cell", + "ordered-stream", + "rand", + "serde", + "serde_repr", + "sha1", + "static_assertions", + "tracing", + "uds_windows", + "winapi", + "xdg-home", + "zbus_macros", + "zbus_names", + "zvariant", +] + +[[package]] +name = "zbus_macros" +version = "3.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7131497b0f887e8061b430c530240063d33bf9455fa34438f388a245da69e0a5" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "regex", + "syn 1.0.109", + "zvariant_utils", +] + +[[package]] +name = "zbus_names" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "437d738d3750bed6ca9b8d423ccc7a8eb284f6b1d6d4e225a0e4e6258d864c8d" +dependencies = [ + "serde", + "static_assertions", + "zvariant", +] + [[package]] name = "zerocopy" -version = "0.7.32" +version = "0.7.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.32" +version = "0.7.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "zerofrom" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ec111ce797d0e0784a1116d0ddcdbea84322cd79e5d5ad173daeba4f93ab55" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", + "synstructure", +] + +[[package]] +name = "zerovec" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb2cc8827d6c0994478a15c53f374f46fbd41bea663d809b14744bc42e6b109c" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97cf56601ee5052b4417d90c8755c6683473c926039908196cf35d99f893ebe7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "zvariant" +version = "3.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4eef2be88ba09b358d3b58aca6e41cd853631d44787f319a1383ca83424fb2db" +dependencies = [ + "byteorder", + "enumflags2", + "libc", + "serde", + "static_assertions", + "zvariant_derive", +] + +[[package]] +name = "zvariant_derive" +version = "3.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37c24dc0bed72f5f90d1f8bb5b07228cbf63b3c6e9f82d82559d4bae666e7ed9" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 1.0.109", + "zvariant_utils", +] + +[[package]] +name = "zvariant_utils" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +checksum = "7234f0d811589db492d16893e3f21e8e2fd282e6d01b0cddee310322062cc200" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] diff --git a/Cargo.toml b/Cargo.toml index d8f85ec8..ab0bfd9f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,9 +1,10 @@ [workspace] resolver = "2" -members = ["stack-core", "stack-std", "stack-cli"] +members = ["stack-core", "stack-std", "stack-cli", "stack-debugger"] [workspace.dependencies] unicode-segmentation = "1" compact_str = "=0.8.0-beta" test-case = "3" +clap = { version = "4", features = ["derive"] } \ No newline at end of file diff --git a/stack-cli/Cargo.toml b/stack-cli/Cargo.toml index e202f97c..9d831234 100644 --- a/stack-cli/Cargo.toml +++ b/stack-cli/Cargo.toml @@ -8,7 +8,7 @@ default = ["stack-std"] stack-std = ["dep:stack-std"] [dependencies] -clap = { version = "4", features = ["derive"] } +clap.workspace = true reedline = { version = "0.31.0", features = ["system_clipboard"] } notify = "6" crossterm = "0.27.0" diff --git a/stack-cli/src/main.rs b/stack-cli/src/main.rs index e481b661..6bf1092f 100644 --- a/stack-cli/src/main.rs +++ b/stack-cli/src/main.rs @@ -2,6 +2,7 @@ use core::fmt; use std::{ io::{self, prelude::Write, Read}, path::{Path, PathBuf}, + sync::Arc, }; use clap::Parser; @@ -29,13 +30,14 @@ fn main() { let new_context = || { if cli.journal { - Context::new().with_journal(cli.journal_length) + Context::new().with_journal(Some(cli.journal_length.unwrap_or(20))) } else { Context::new() } }; - let mut engine = Engine::new().with_debug_hook(Some(|s| eprintln!("{s}"))); + let mut engine = + Engine::new().with_debug_hook(Some(Arc::new(|s| eprintln!("{s}")))); let mut context = new_context(); #[cfg(feature = "stack-std")] diff --git a/stack-core/src/context.rs b/stack-core/src/context.rs index 0b0d090f..be63fe4d 100644 --- a/stack-core/src/context.rs +++ b/stack-core/src/context.rs @@ -40,8 +40,12 @@ impl Context { } #[inline] - pub fn with_journal(mut self, journal: Option) -> Self { - self.journal = Some(journal.map(Journal::new).unwrap_or_default()); + pub fn with_journal(mut self, size: Option) -> Self { + self.journal = Some( + size + .map(|size| Journal::new().with_size(size)) + .unwrap_or_default(), + ); self } diff --git a/stack-core/src/engine.rs b/stack-core/src/engine.rs index 6478c1c0..7ddea350 100644 --- a/stack-core/src/engine.rs +++ b/stack-core/src/engine.rs @@ -1,6 +1,7 @@ use core::{fmt, str::FromStr}; use std::{ collections::HashMap, + sync::Arc, time::{Duration, Instant}, }; @@ -16,12 +17,12 @@ use crate::{ symbol::Symbol, }; -#[derive(Debug, Clone, PartialEq, Eq, Default)] +#[derive(Clone, Default)] pub struct Engine { modules: HashMap, start_time: Option, timeout: Option, - debug_hook: Option, + debug_hook: Option>, } #[derive(Debug, Clone, PartialEq)] @@ -55,7 +56,10 @@ impl Engine { } #[inline] - pub fn with_debug_hook(mut self, debug_hook: Option) -> Self { + pub fn with_debug_hook( + mut self, + debug_hook: Option>, + ) -> Self { self.debug_hook = debug_hook; self } @@ -66,8 +70,8 @@ impl Engine { } #[inline] - pub fn debug_hook(&self) -> Option { - self.debug_hook + pub fn debug_hook(&self) -> Option> { + self.debug_hook.clone() } pub fn run( diff --git a/stack-core/src/intrinsic.rs b/stack-core/src/intrinsic.rs index 53529a25..1db77f98 100644 --- a/stack-core/src/intrinsic.rs +++ b/stack-core/src/intrinsic.rs @@ -903,13 +903,22 @@ impl Intrinsic { let name = context.stack_pop(&expr)?; match name.kind { - ExprKind::Symbol(symbol) => context - .stack_push(context.scope_item(symbol).ok_or_else(|| RunError { - context: context.clone(), - expr, - reason: RunErrorReason::UnknownCall, - })?) - .map(|_| context), + ExprKind::Symbol(symbol) => { + // Lets take precedence over scoped vars + let item = if let Some(let_item) = context.let_get(symbol) { + Some(let_item.clone()) + } else { + context.scope_item(symbol) + }; + + context + .stack_push(item.ok_or_else(|| RunError { + context: context.clone(), + expr, + reason: RunErrorReason::UnknownCall, + })?) + .map(|_| context) + } _ => Err(RunError { reason: RunErrorReason::UnknownCall, context: context.clone(), @@ -977,13 +986,28 @@ impl Intrinsic { Self::Import => { let path = context.stack_pop(&expr)?; + // Imports should trigger a new commit + if let Some(journal) = context.journal_mut() { + journal.commit(); + journal.op(JournalOp::FnStart(false)); + } + match path.kind { ExprKind::String(str) => { if let Ok(source) = Source::from_path(str.as_str()) { context.add_source(source.clone()); let mut lexer = Lexer::new(source); if let Ok(exprs) = parse(&mut lexer) { - return engine.run(context, exprs); + let mut result = engine.run(context, exprs); + + if let Ok(ref mut context) = result { + if let Some(journal) = context.journal_mut() { + journal.commit(); + journal.op(JournalOp::FnEnd); + } + } + + return result; } } } diff --git a/stack-core/src/journal.rs b/stack-core/src/journal.rs index 378e3524..5e3c1f50 100644 --- a/stack-core/src/journal.rs +++ b/stack-core/src/journal.rs @@ -1,18 +1,44 @@ use core::fmt; use std::mem; -use crate::expr::Expr; +use crate::expr::{Expr, ExprKind}; #[derive(Debug, Clone, PartialEq, PartialOrd, Default)] -struct JournalEntry { - ops: Vec, - scope: usize, - scoped: bool, +pub struct JournalEntry { + pub index: usize, + pub ops: Vec, + pub scope: usize, + pub scoped: bool, +} + +impl fmt::Display for JournalEntry { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + core::iter::once("") + .chain(core::iter::repeat(", ")) + .zip(self.ops.iter()) + .try_for_each(|(sep, op)| { + if f.alternate() { + write!(f, "{sep}{op:#}") + } else { + write!(f, "{sep}{op}") + } + }) + } } impl JournalEntry { - fn new(ops: Vec, scope: usize, scoped: bool) -> Self { - Self { ops, scope, scoped } + pub fn new( + index: usize, + ops: Vec, + scope: usize, + scoped: bool, + ) -> Self { + Self { + index, + ops, + scope, + scoped, + } } } @@ -29,6 +55,45 @@ pub enum JournalOp { Commit, } +impl fmt::Display for JournalOp { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + if f.alternate() { + match self { + Self::Call(call) => write!(f, "call({call})"), + Self::FnCall(fn_call) => write!(f, "fn({fn_call})"), + Self::Push(push) => write!(f, "push({push})"), + Self::Pop(pop) => write!(f, "pop({pop})"), + _ => write!(f, ""), + } + } else { + match self { + Self::Call(call) => write!(f, "{call}"), + Self::FnCall(fn_call) => write!(f, "{fn_call}"), + Self::Push(push) => write!(f, "{push}"), + Self::Pop(pop) => write!(f, "{pop}"), + _ => write!(f, ""), + } + } + } +} + +impl JournalOp { + pub fn is_stack_based(&self) -> bool { + matches!(self, Self::Push(_) | Self::Pop(_)) + } + + pub fn expr(&self) -> Option<&Expr> { + match self { + Self::Call(expr) => Some(expr), + Self::FnCall(expr) => Some(expr), + Self::Push(expr) => Some(expr), + Self::Pop(expr) => Some(expr), + + _ => None, + } + } +} + #[derive(Debug, Clone, PartialEq, PartialOrd)] // TODO: implement this as a ring buffer with max_commits so we never go over pub struct Journal { @@ -36,14 +101,18 @@ pub struct Journal { current: Vec, commits: Vec, - size: usize, + size: Option, } impl fmt::Display for Journal { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { use yansi::Paint; - let entries = self.entries(self.size); + let entries = if let Some(size) = self.size { + self.entries(size) + } else { + self.all_entries() + }; if !entries.is_empty() { writeln!(f, "Stack History (most recent first):")?; } @@ -58,23 +127,35 @@ impl fmt::Display for Journal { } match op { - JournalOp::Call(call) => { - line.push_str(&format!("{}", call.white())); + JournalOp::Call(x) => { + line.push_str(&format!( + "{}", + if f.alternate() { x.white() } else { x.new() } + )); should_print = true; } - JournalOp::FnCall(fn_call) => { - line.push_str(&format!("{}", fn_call.yellow())); + JournalOp::FnCall(x) => { + line.push_str(&format!( + "{}", + if f.alternate() { x.yellow() } else { x.new() } + )); should_print = true; } - JournalOp::Push(push) => { - line.push_str(&format!("{}", push.green())); + JournalOp::Push(x) => { + line.push_str(&format!( + "{}", + if f.alternate() { x.green() } else { x.new() } + )); should_print = true; } - JournalOp::Pop(pop) => { - line.push_str(&format!("{}", pop.red())); + JournalOp::Pop(x) => { + line.push_str(&format!( + "{}", + if f.alternate() { x.red() } else { x.new() } + )); should_print = true; } @@ -106,21 +187,31 @@ impl fmt::Display for Journal { impl Default for Journal { #[inline] fn default() -> Self { - Self::new(20) + Self::new() } } impl Journal { #[inline] - pub const fn new(size: usize) -> Self { + pub const fn new() -> Self { Self { commits: Vec::new(), current: Vec::new(), ops: Vec::new(), - size, + size: None, } } + #[inline] + pub const fn with_size(mut self, size: usize) -> Self { + self.size = Some(size); + self + } + + pub fn ops(&self) -> &[JournalOp] { + &self.ops + } + pub fn op(&mut self, op: JournalOp) { if matches!(op, JournalOp::Commit) { return self.commit(); @@ -143,7 +234,11 @@ impl Journal { self.commits.clear(); } - fn entries(&self, max_commits: usize) -> Vec { + pub fn all_entries(&self) -> Vec { + self.entries(self.len()) + } + + pub fn entries(&self, max_commits: usize) -> Vec { let mut entries: Vec = Vec::new(); let start = match max_commits >= self.commits.len() { @@ -158,10 +253,12 @@ impl Journal { let mut scope = 0; let mut ops: Vec = Vec::new(); let mut scoped: Vec = vec![true]; - for op in self.ops.iter().skip(start) { + + for (i, op) in self.ops.iter().enumerate().skip(start) { match op { JournalOp::Commit => { entries.push(JournalEntry::new( + i, ops, scope, *scoped.last().unwrap_or(&true), @@ -182,4 +279,69 @@ impl Journal { entries.into_iter().rev().collect::>() } + + pub fn len(&self) -> usize { + self.ops.len() + } + + pub fn is_empty(&self) -> bool { + self.len() == 0 + } + + pub fn recount_commits(&mut self) { + self.commits.drain(..); + self.ops.iter().enumerate().for_each(|(i, op)| { + if matches!(op, JournalOp::Commit) { + self.commits.push(i + 1) + } + }); + } + + pub fn total_commits(&self) -> usize { + self.commits.len() + } + + pub fn construct_to(&self, index: usize) -> Vec { + let mut stack: Vec = Vec::new(); + for (i, op) in self.ops.iter().enumerate() { + if i == index { + break; + } + + match op { + JournalOp::Push(expr) => stack.push(expr.clone()), + JournalOp::Pop(_) => { + stack.pop(); + } + JournalOp::FnCall(expr) => { + if let ExprKind::Symbol(symbol) = expr.kind { + let len = stack.len(); + match symbol.as_str() { + "swap" => stack.swap(len - 1, len - 2), + "rot" => { + stack.swap(len - 1, len - 3); + stack.swap(len - 2, len - 3); + } + _ => {} + } + } + } + + _ => {} + }; + } + + stack + } + + pub fn trim_to(mut self, index: usize) -> Self { + let total = self.ops.len(); + self.ops = self + .ops + .into_iter() + .take(self.commits.get(index + 1).copied().unwrap_or(total)) + .collect(); + self.recount_commits(); + self + } } diff --git a/stack-core/src/module.rs b/stack-core/src/module.rs index d71b6bf4..7267dbf2 100644 --- a/stack-core/src/module.rs +++ b/stack-core/src/module.rs @@ -1,4 +1,4 @@ -use std::collections::HashMap; +use std::{collections::HashMap, sync::Arc}; use crate::{ context::Context, @@ -7,9 +7,11 @@ use crate::{ symbol::Symbol, }; -pub type Func = fn(&Engine, Context, Expr) -> Result; +// pub type Func = fn(&Engine, Context, Expr) -> Result; +pub type Func = + Arc Result>; -#[derive(Debug, Clone, PartialEq, Eq)] +#[derive(Clone)] pub struct Module { name: Symbol, funcs: HashMap, @@ -43,6 +45,6 @@ impl Module { #[inline] pub fn func(&self, name: Symbol) -> Option { - self.funcs.get(&name).copied() + self.funcs.get(&name).cloned() } } diff --git a/stack-core/src/source.rs b/stack-core/src/source.rs index 2aca9e9d..48d401d9 100644 --- a/stack-core/src/source.rs +++ b/stack-core/src/source.rs @@ -76,7 +76,7 @@ impl Source { }; let line_start = self.0.line_starts[line]; - let line_str = self.line(line).unwrap(); + let line_str = self.line(NonZeroUsize::new(line + 1).unwrap()).unwrap(); let column_index = index - line_start; let column = line_str.get(0..column_index)?.graphemes(true).count(); @@ -94,12 +94,12 @@ impl Source { /// /// [`location`]: Self::location #[must_use] - pub fn line(&self, line: usize) -> Option<&str> { - if let Some(&line_start) = self.0.line_starts.get(line) { + pub fn line(&self, line: NonZeroUsize) -> Option<&str> { + if let Some(&line_start) = self.0.line_starts.get(line.get() - 1) { let line_end = self .0 .line_starts - .get(line + 1) + .get(line.get()) .copied() .unwrap_or(self.0.source.len()); Some(&self.0.source[line_start..line_end]) @@ -222,25 +222,25 @@ mod test { Source::new("", source).location(index) } - #[case("", 0 => Some("".into()) ; "empty 0")] - #[case("", 1 => None ; "empty 1")] - #[case("hello", 0 => Some("hello".into()) ; "single 0")] - #[case("hello", 1 => None ; "single 1")] - #[case("h💣llo", 0 => Some("h💣llo".into()) ; "single with bomb 0")] - #[case("h💣llo", 1 => None ; "single with bomb 1")] - #[case("hello\n", 0 => Some("hello\n".into()) ; "single with newline 0")] - #[case("hello\n", 1 => Some("".into()) ; "single with newline 1")] - #[case("hello\n", 2 => None ; "single with newline 2")] - #[case("h💣llo\n", 0 => Some("h💣llo\n".into()) ; "single with bomb with newline 0")] - #[case("h💣llo\n", 1 => Some("".into()) ; "single with bomb with newline 1")] - #[case("h💣llo\n", 2 => None ; "single with bomb with newline 2")] - #[case("hello\nworld", 0 => Some("hello\n".into()) ; "multiple 0")] - #[case("hello\nworld", 1 => Some("world".into()) ; "multiple 1")] - #[case("hello\nworld", 2 => None ; "multiple 2")] - #[case("h💣llo\nworld", 0 => Some("h💣llo\n".into()) ; "multiple with bomb 0")] - #[case("h💣llo\nworld", 1 => Some("world".into()) ; "multiple with bomb 1")] - #[case("h💣llo\nworld", 2 => None ; "multiple with bomb 2")] - fn line(source: &str, line: usize) -> Option { + #[case("", NonZeroUsize::new(1).unwrap() => Some("".into()) ; "empty 1")] + #[case("", NonZeroUsize::new(2).unwrap() => None ; "empty 2")] + #[case("hello", NonZeroUsize::new(1).unwrap() => Some("hello".into()) ; "single 1")] + #[case("hello", NonZeroUsize::new(2).unwrap() => None ; "single 2")] + #[case("h💣llo", NonZeroUsize::new(1).unwrap() => Some("h💣llo".into()) ; "single with bomb 1")] + #[case("h💣llo", NonZeroUsize::new(2).unwrap() => None ; "single with bomb 2")] + #[case("hello\n", NonZeroUsize::new(1).unwrap() => Some("hello\n".into()) ; "single with newline 1")] + #[case("hello\n", NonZeroUsize::new(2).unwrap() => Some("".into()) ; "single with newline 2")] + #[case("hello\n", NonZeroUsize::new(3).unwrap() => None ; "single with newline 3")] + #[case("h💣llo\n", NonZeroUsize::new(1).unwrap() => Some("h💣llo\n".into()) ; "single with bomb with newline 1")] + #[case("h💣llo\n", NonZeroUsize::new(2).unwrap() => Some("".into()) ; "single with bomb with newline 2")] + #[case("h💣llo\n", NonZeroUsize::new(3).unwrap() => None ; "single with bomb with newline 3")] + #[case("hello\nworld", NonZeroUsize::new(1).unwrap() => Some("hello\n".into()) ; "multiple 1")] + #[case("hello\nworld", NonZeroUsize::new(2).unwrap() => Some("world".into()) ; "multiple 2")] + #[case("hello\nworld", NonZeroUsize::new(3).unwrap() => None ; "multiple 3")] + #[case("h💣llo\nworld", NonZeroUsize::new(1).unwrap() => Some("h💣llo\n".into()) ; "multiple with bomb 1")] + #[case("h💣llo\nworld", NonZeroUsize::new(2).unwrap() => Some("world".into()) ; "multiple with bomb 2")] + #[case("h💣llo\nworld", NonZeroUsize::new(3).unwrap() => None ; "multiple with bomb 3")] + fn line(source: &str, line: NonZeroUsize) -> Option { Source::new("", source).line(line).map(Into::into) } } diff --git a/stack-debugger/Cargo.toml b/stack-debugger/Cargo.toml new file mode 100644 index 00000000..509221db --- /dev/null +++ b/stack-debugger/Cargo.toml @@ -0,0 +1,20 @@ +[package] +name = "stack-debugger" +version = "0.1.0" +edition = "2021" + +[features] +default = ["stack-std"] +stack-std = ["dep:stack-std"] + +[dependencies] +clap.workspace = true +notify = "6" +eframe = { version = "0.27.2" } + +stack-core = { path = "../stack-core" } +stack-std = { path = "../stack-std", optional = true } + +[[bin]] +name = "stack-debugger" +path = "src/main.rs" diff --git a/stack-debugger/src/lib.rs b/stack-debugger/src/lib.rs new file mode 100644 index 00000000..d0bd2345 --- /dev/null +++ b/stack-debugger/src/lib.rs @@ -0,0 +1,195 @@ +pub mod module; + +use eframe::egui::{ + text::LayoutJob, Align, Color32, FontSelection, RichText, Style, +}; +use stack_core::{journal::JournalOp, prelude::*}; + +pub enum IOHookEvent { + Print(String), + Marker(usize), + GoTo(usize), + Note(usize, String), +} + +pub fn append_to_job(text: RichText, layout_job: &mut LayoutJob) { + text.append_to( + layout_job, + &Style::default(), + FontSelection::Default, + Align::Center, + ) +} + +const GREEN: &str = "#16C60C"; +const RED: &str = "#E74856"; +const BLUE: &str = "#3B78FF"; +const YELLOW: &str = "#C19C00"; + +pub fn paint_expr(expr: &Expr, layout_job: &mut LayoutJob) { + let green = Color32::from_hex(GREEN).unwrap(); + let red = Color32::from_hex(RED).unwrap(); + let blue = Color32::from_hex(BLUE).unwrap(); + let yellow = Color32::from_hex(YELLOW).unwrap(); + + match &expr.kind { + ExprKind::Nil => { + append_to_job(RichText::new("nil").color(green), layout_job) + } + ExprKind::Error(x) => append_to_job( + RichText::new(format!("error({})", x)).color(red), + layout_job, + ), + ExprKind::Boolean(x) => { + append_to_job(RichText::new(x.to_string()).color(green), layout_job) + } + ExprKind::Integer(x) => { + append_to_job(RichText::new(x.to_string()).color(blue), layout_job) + } + ExprKind::Float(x) => { + append_to_job(RichText::new(x.to_string()).color(blue), layout_job) + } + ExprKind::String(x) => { + append_to_job(RichText::new(format!("\"{x}\"")).color(green), layout_job) + } + + ExprKind::Symbol(x) => { + append_to_job(RichText::new(x.to_string()).color(blue), layout_job) + } + + ExprKind::Lazy(x) => { + append_to_job(RichText::new("'").color(yellow), layout_job); + paint_expr(x, layout_job) + } + ExprKind::List(x) => { + append_to_job(RichText::new("("), layout_job); + + for (sep, x) in core::iter::once("") + .chain(core::iter::repeat(" ")) + .zip(x.iter()) + { + append_to_job(RichText::new(sep), layout_job); + paint_expr(x, layout_job); + } + + append_to_job(RichText::new(")"), layout_job); + } + ExprKind::Record(x) => { + append_to_job(RichText::new("{"), layout_job); + + for (sep, (key, value)) in core::iter::once("") + .chain(core::iter::repeat(", ")) + .zip(x.iter()) + { + let key: Expr = ExprKind::Symbol(*key).into(); + append_to_job(RichText::new(sep), layout_job); + paint_expr(&key, layout_job); + append_to_job(RichText::new(": "), layout_job); + paint_expr(value, layout_job); + } + + append_to_job(RichText::new("}"), layout_job); + } + + ExprKind::Fn(x) => { + append_to_job(RichText::new(x.to_string()).color(yellow), layout_job) + } + } +} + +pub fn string_with_quotes(expr: &Expr) -> String { + match &expr.kind { + ExprKind::String(x) => format!("\"{x}\""), + + ExprKind::Lazy(x) => string_with_quotes(x), + + ExprKind::List(x) => { + let mut string = String::from("("); + core::iter::once("") + .chain(core::iter::repeat(" ")) + .zip(x.iter()) + .for_each(|(sep, x)| { + string.push_str(&format!("{sep}{}", string_with_quotes(x))) + }); + string.push(')'); + + string + } + + ExprKind::Record(x) => { + let mut string = String::from("{"); + core::iter::once("") + .chain(core::iter::repeat(" ")) + .zip(x.iter()) + .for_each(|(sep, (key, value))| { + string.push_str(&format!("{sep}{key}: {}", string_with_quotes(value))) + }); + string.push('}'); + + string + } + + kind => kind.to_string(), + } +} + +pub fn paint_op(op: &JournalOp, layout_job: &mut LayoutJob) { + let green = Color32::from_hex(GREEN).unwrap(); + let red = Color32::from_hex(RED).unwrap(); + let yellow = Color32::from_hex(YELLOW).unwrap(); + + match op { + JournalOp::Call(expr) => { + // append_to_job(RichText::new("call(").color(yellow), layout_job); + // paint_expr(expr, layout_job); + // append_to_job(RichText::new(")").color(yellow), layout_job) + append_to_job( + RichText::new(format!("scope({})", string_with_quotes(expr))) + .color(yellow), + layout_job, + ) + } + JournalOp::FnCall(expr) => { + // append_to_job(RichText::new("fn(").color(yellow), layout_job); + // paint_expr(expr, layout_job); + // append_to_job(RichText::new(")").color(yellow), layout_job) + append_to_job( + RichText::new(format!("fn({})", string_with_quotes(expr))) + .color(yellow), + layout_job, + ) + } + JournalOp::Push(expr) => { + // append_to_job(RichText::new("push(").color(green), layout_job); + // paint_expr(expr, layout_job); + // append_to_job(RichText::new(")").color(green), layout_job) + append_to_job( + RichText::new(format!("push({})", string_with_quotes(expr))) + .color(green), + layout_job, + ) + } + JournalOp::Pop(expr) => { + // append_to_job(RichText::new("pop(").color(red), layout_job); + // paint_expr(expr, layout_job); + // append_to_job(RichText::new(")").color(red), layout_job) + append_to_job( + RichText::new(format!("pop({})", string_with_quotes(expr))).color(red), + layout_job, + ) + } + JournalOp::FnStart(scoped) => { + append_to_job( + RichText::new(format!( + "scope: fn{}(start)", + if *scoped { "" } else { "!" } + )), + layout_job, + ); + } + JournalOp::FnEnd => { + append_to_job(RichText::new("scope: fn(end)"), layout_job); + } + _ => {} + } +} diff --git a/stack-debugger/src/main.rs b/stack-debugger/src/main.rs new file mode 100644 index 00000000..25d60e6e --- /dev/null +++ b/stack-debugger/src/main.rs @@ -0,0 +1,452 @@ +use core::{fmt, num::NonZeroUsize}; +use std::{ + ops::Add, + path::PathBuf, + sync::{mpsc, Arc}, + time::Duration, +}; + +use clap::Parser; +use eframe::egui::{self, text::LayoutJob, Color32, RichText, ScrollArea}; +use notify::{ + Config, Event, EventKind, RecommendedWatcher, RecursiveMode, Watcher, +}; +use stack_core::prelude::*; +use stack_debugger::*; + +#[derive(Debug, Clone, PartialEq, Eq, Default, clap::Parser)] +#[command(author, version, about, long_about = None)] +#[command(propagate_version = true)] +struct Cli { + /// The input file path. + input: PathBuf, + + /// Whether to run a sandbox variant of the enabled standard modules. + #[arg(short, long)] + #[cfg(feature = "stack-std")] + sandbox: bool, + + /// Enable all standard modules. + #[arg(long)] + #[cfg(feature = "stack-std")] + enable_all: bool, + /// Enable the string standard module. + #[arg(long)] + #[cfg(feature = "stack-std")] + enable_str: bool, + /// Enable the file-system standard module. + #[arg(long)] + #[cfg(feature = "stack-std")] + enable_fs: bool, + /// Enable the scope standard module. + #[arg(long)] + #[cfg(feature = "stack-std")] + enable_scope: bool, +} + +pub fn main() { + let cli = Cli::parse(); + + let context = Context::new().with_journal(None); + + let (print_tx, print_rx) = mpsc::channel(); + let debug_tx = print_tx.clone(); + + let mut engine = Engine::new().with_debug_hook(Some(Arc::new(move |s| { + debug_tx.send(IOHookEvent::Print(s)).unwrap() + }))); + engine.add_module(module::module(print_tx)); + + #[cfg(feature = "stack-std")] + { + if cli.enable_all || cli.enable_str { + engine.add_module(stack_std::str::module()); + } + + if cli.enable_all || cli.enable_fs { + engine.add_module(stack_std::fs::module(cli.sandbox)); + } + + if cli.enable_all || cli.enable_scope { + engine.add_module(stack_std::scope::module()); + } + } + + let (tx, rx) = mpsc::channel(); + + let mut debugger_app = DebuggerApp { + do_reload: rx, + print_rx, + + context, + engine, + input: cli.input.clone(), + + error: None, + prints: Vec::new(), + index: 0, + }; + + // Run the program once in the beginning + debugger_app.reload(); + + std::thread::spawn(move || { + let (watcher_tx, watcher_rx) = mpsc::channel(); + + let mut watcher = + ok_or_exit(RecommendedWatcher::new(watcher_tx, Config::default())); + ok_or_exit(watcher.watch(&cli.input, RecursiveMode::NonRecursive)); + + for event in watcher_rx { + if let Event { + kind: EventKind::Modify(_), + .. + } = ok_or_exit(event) + { + tx.send(()).unwrap(); + } + } + }); + + let native_options = eframe::NativeOptions::default(); + eframe::run_native( + "Stack Debugger", + native_options, + Box::new(move |_| Box::new(debugger_app)), + ) + .unwrap(); +} + +fn ok_or_exit(result: Result) -> T +where + E: fmt::Display, +{ + match result { + Ok(x) => x, + Err(e) => { + eprintln!("error: {e}"); + std::process::exit(1); + } + } +} + +pub struct DebuggerApp { + do_reload: mpsc::Receiver<()>, + print_rx: mpsc::Receiver, + + context: Context, + engine: Engine, + input: PathBuf, + + error: Option, + prints: Vec, + index: usize, +} + +impl DebuggerApp { + fn reload(&mut self) { + // TODO: Clear screen when we reload + let mut context = Context::new().with_journal(None); + + let source = match Source::from_path(&self.input) { + Ok(source) => source, + Err(e) => return self.error = Some(e.to_string()), + }; + + context.add_source(source.clone()); + + let mut lexer = Lexer::new(source); + + let exprs = match parse(&mut lexer) { + Ok(exprs) => exprs, + Err(e) => return self.error = Some(e.to_string()), + }; + + self.prints.drain(..); + match self.engine.run(context, exprs) { + Ok(context) => { + self.context = context; + self.error = None + } + Err(err) => { + self.error = Some(err.to_string().clone()); + self.context = err.context; + } + } + + self.context.journal_mut().as_mut().unwrap().commit(); + + self.index = self.stack_ops_len().saturating_sub(1); + self.prints.extend(self.print_rx.try_iter().map(|evt| { + if let IOHookEvent::GoTo(index) = evt { + self.index = index; + } + + evt + })); + } + + fn stack_ops_len(&self) -> usize { + self.context.journal().as_ref().unwrap().all_entries().len() + } +} + +impl eframe::App for DebuggerApp { + fn update(&mut self, ctx: &egui::Context, _: &mut eframe::Frame) { + if self.do_reload.try_iter().last().is_some() { + self.reload(); + } + + egui::SidePanel::left("io_hooks").show(ctx, |ui| { + ui.heading("Contents"); + ui.add_space(10.0); + + if self.prints.is_empty() { + let mut layout_job = LayoutJob::default(); + append_to_job(RichText::new("Use "), &mut layout_job); + append_to_job(RichText::new("debug").code(), &mut layout_job); + append_to_job(RichText::new(", "), &mut layout_job); + append_to_job(RichText::new("dbg:mark").code(), &mut layout_job); + append_to_job(RichText::new(", or "), &mut layout_job); + append_to_job(RichText::new("dbg:note").code(), &mut layout_job); + append_to_job( + RichText::new(" to create jump locations"), + &mut layout_job, + ); + ui.label(layout_job); + } else { + let row_height = ui.text_style_height(&egui::TextStyle::Body); + + egui::ScrollArea::vertical().show_rows( + ui, + row_height, + self.prints.len(), + |ui, index| { + for text in self.prints.get(index).unwrap_or_default() { + match text { + IOHookEvent::Print(text) => { + ui.label(text); + } + IOHookEvent::Marker(op) => { + if ui.link(format!("mark at {op}")).clicked() { + self.index = *op; + } + } + IOHookEvent::Note(op, text) => { + if ui + .link(format!("note at {op}")) + .on_hover_text(text) + .clicked() + { + self.index = *op; + } + } + IOHookEvent::GoTo(op) => { + if ui.link(format!("goto at {op}")).clicked() { + self.index = *op; + } + } + }; + } + }, + ); + } + }); + + egui::CentralPanel::default().show(ctx, |ui| { + ctx.set_pixels_per_point(1.2); + + if !self.prints.is_empty() { + ui.add_space(10.0); + } + + if let Some(err) = &self.error { + ui.label(format!("Error: {err}")); + } + + ui.horizontal(|ui| { + if ui.button("Reload").clicked() { + self.reload(); + } + + if ui.button("<|").clicked() { + self.index = 0; + } + if ui.button("<").clicked() { + self.index = self.index.saturating_sub(1); + } + + if ui.button(">").clicked() { + self.index = self + .index + .add(1) + .min(self.stack_ops_len().saturating_sub(1)); + } + if ui.button("|>").clicked() { + self.index = self.stack_ops_len().saturating_sub(1); + } + }); + + let mut entries = self.context.journal().as_ref().unwrap().all_entries(); + entries.reverse(); + + let entry = entries.get(self.index); + + let mut layout_job = LayoutJob::default(); + append_to_job( + RichText::new("Stack: ").strong().color(Color32::WHITE), + &mut layout_job, + ); + self + .context + .journal() + .as_ref() + .unwrap() + .construct_to(entry.map(|entry| entry.index).unwrap_or_default()) + .iter() + .enumerate() + .for_each(|(i, expr)| { + if i != 0 { + append_to_job(RichText::new(", "), &mut layout_job); + } + paint_expr(expr, &mut layout_job) + }); + ui.label(layout_job); + + let mut layout_job = LayoutJob::default(); + append_to_job( + RichText::new("Commit: ").strong().color(Color32::WHITE), + &mut layout_job, + ); + if let Some(entry) = entry { + append_to_job( + RichText::new(format!("Scope Level {}; ", entry.scope,)), + &mut layout_job, + ); + + core::iter::once("") + .chain(core::iter::repeat(", ")) + .zip(entry.ops.iter()) + .for_each(|(sep, op)| { + append_to_job(RichText::new(sep), &mut layout_job); + paint_op(op, &mut layout_job); + }); + } + ui.label(layout_job); + + let mut layout_job = LayoutJob::default(); + append_to_job( + RichText::new("Location: ").strong().color(Color32::WHITE), + &mut layout_job, + ); + if let Some(entry) = entry { + if let Some(first) = entry.ops.first() { + if let Some(expr) = first.expr() { + if let Some(info) = expr.info.clone() { + if let Some(location) = info.source.location(info.span.start) { + append_to_job( + RichText::new(format!("{}:{}", info.source.name(), location)), + &mut layout_job, + ); + } + } + } + } + } + ui.label(layout_job); + + let max = self.stack_ops_len().saturating_sub(1); + ui.horizontal(|ui| { + ui.spacing_mut().slider_width = ui.available_width() - 80.0; + ui.add( + egui::Slider::new(&mut self.index, 0..=max) + .clamp_to_range(true) + .text("ops"), + ) + }); + + let mut layout_job = LayoutJob::default(); + if let Some(entry) = entry { + if let Some(first) = entry.ops.first() { + if let Some(expr) = first.expr() { + if let Some(info) = expr.info.clone() { + if let Some((start_loc, end_loc)) = info + .source + .location(info.span.start) + .zip(info.source.location(info.span.end)) + { + const SURROUNDING_LINES: usize = 7; + + let start = + start_loc.line.get().saturating_sub(SURROUNDING_LINES); + let end = + start_loc.line.get().saturating_add(SURROUNDING_LINES); + + ui.add_space(5.0); + ui.label(RichText::new(info.source.name()).monospace()); + ui.add_space(5.0); + + for line in start..end { + if let Some(line_str) = NonZeroUsize::new(line) + .and_then(|line| info.source.line(line)) + { + let mut text = + RichText::new(format!("{}: ", line)).monospace(); + + if line == start_loc.line.get() { + text = text.color(Color32::YELLOW); + } + + append_to_job(text, &mut layout_job); + + line_str.char_indices().for_each(|(i, c)| { + let mut text = RichText::new(c).monospace(); + // TODO: properly support multiline exprs + // + // TODO: if the line span is greater than the surrounding lines, + // remove top surrounding lines until it fits + // + // TODO: lex and parse so we can use paint_expr + if line >= start_loc.line.into() + && line <= end_loc.line.into() + { + if (i + 1) >= start_loc.column.into() + && (i + 1) < end_loc.column.into() + { + text = text + .color(Color32::BLACK) + .background_color(Color32::YELLOW); + } else { + text = text.color(Color32::YELLOW); + } + } + + append_to_job(text, &mut layout_job); + }); + } + } + + ui.label(layout_job); + ui.add_space(5.0); + } + } + } + } + } + + ScrollArea::vertical().show(ui, |ui| { + ui.monospace( + self + .context + .journal() + .clone() + .unwrap() + .trim_to(self.index) + .to_string(), + ); + }); + }); + + ctx.request_repaint_after(Duration::from_secs_f32(1.0 / 15.0)); + } +} diff --git a/stack-debugger/src/module.rs b/stack-debugger/src/module.rs new file mode 100644 index 00000000..b4d8f659 --- /dev/null +++ b/stack-debugger/src/module.rs @@ -0,0 +1,64 @@ +use crate::IOHookEvent; +use stack_core::prelude::*; +use std::sync::{mpsc, Arc}; + +pub fn module(tx: mpsc::Sender) -> Module { + let mut module = Module::new(Symbol::from_ref("dbg")); + + let tx2 = tx.clone(); + let tx3 = tx.clone(); + + module + .add_func( + Symbol::from_ref("note"), + Arc::new(move |_, mut context, expr| { + let val = context.stack_pop(&expr)?; + + tx.send(IOHookEvent::Note( + context + .journal() + .as_ref() + .map(|j| j.total_commits()) + .unwrap_or_default(), + val.to_string(), + )) + .unwrap(); + + Ok(context) + }), + ) + .add_func( + Symbol::from_ref("mark"), + Arc::new(move |_, context, _| { + tx2 + .send(IOHookEvent::Marker( + context + .journal() + .as_ref() + .map(|j| j.total_commits()) + .unwrap_or_default(), + )) + .unwrap(); + + Ok(context) + }), + ) + .add_func( + Symbol::from_ref("goto"), + Arc::new(move |_, context, _| { + tx3 + .send(IOHookEvent::GoTo( + context + .journal() + .as_ref() + .map(|j| j.total_commits()) + .unwrap_or_default(), + )) + .unwrap(); + + Ok(context) + }), + ); + + module +} diff --git a/stack-std/src/fs.rs b/stack-std/src/fs.rs index cdde12e3..c9ddf2a6 100644 --- a/stack-std/src/fs.rs +++ b/stack-std/src/fs.rs @@ -1,3 +1,5 @@ +use std::sync::Arc; + use compact_str::ToCompactString; use stack_core::prelude::*; @@ -6,35 +8,41 @@ pub fn module(sandbox: bool) -> Module { if !sandbox { module - .add_func(Symbol::from_ref("cwd"), |_, mut context, _| { - context.stack_push( - std::env::current_dir() - .map(|x| { - ExprKind::String( - x.to_string_lossy().into_owned().to_compact_string(), - ) - }) - .unwrap_or(ExprKind::Nil) - .into(), - )?; - - Ok(context) - }) - .add_func(Symbol::from_ref("read-file"), |_, mut context, expr| { - let path = context.stack_pop(&expr)?; - - let kind = match path.kind { - ExprKind::String(ref x) => std::fs::read_to_string(x.as_str()) - .map(|x| x.to_compact_string()) - .map(ExprKind::String) - .unwrap_or_else(|e| ExprKind::Error(Error::new(e.to_string()))), - _ => ExprKind::Nil, - }; - - context.stack_push(kind.into())?; - - Ok(context) - }); + .add_func( + Symbol::from_ref("cwd"), + Arc::new(|_, mut context, _| { + context.stack_push( + std::env::current_dir() + .map(|x| { + ExprKind::String( + x.to_string_lossy().into_owned().to_compact_string(), + ) + }) + .unwrap_or(ExprKind::Nil) + .into(), + )?; + + Ok(context) + }), + ) + .add_func( + Symbol::from_ref("read-file"), + Arc::new(|_, mut context, expr| { + let path = context.stack_pop(&expr)?; + + let kind = match path.kind { + ExprKind::String(ref x) => std::fs::read_to_string(x.as_str()) + .map(|x| x.to_compact_string()) + .map(ExprKind::String) + .unwrap_or_else(|e| ExprKind::Error(Error::new(e.to_string()))), + _ => ExprKind::Nil, + }; + + context.stack_push(kind.into())?; + + Ok(context) + }), + ); } module diff --git a/stack-std/src/scope.rs b/stack-std/src/scope.rs index 835588fe..bbbad714 100644 --- a/stack-std/src/scope.rs +++ b/stack-std/src/scope.rs @@ -1,4 +1,5 @@ use core::str::FromStr; +use std::sync::Arc; use stack_core::prelude::*; @@ -6,54 +7,60 @@ pub fn module() -> Module { let mut module = Module::new(Symbol::from_ref("scope")); module - .add_func(Symbol::from_ref("where"), |engine, mut context, expr| { - let symbol = context.stack_pop(&expr)?; + .add_func( + Symbol::from_ref("where"), + Arc::new(|engine, mut context, expr| { + let symbol = context.stack_pop(&expr)?; - match symbol.kind { - ExprKind::Symbol(ref x) => { - if Intrinsic::from_str(x.as_str()).is_ok() { - context.stack_push(ExprKind::String("intrinsic".into()).into()) - } else if engine - .module(&Symbol::new( - x.as_str().split(':').next().unwrap_or_default().into(), - )) - .is_some() - { - context.stack_push(ExprKind::String("module".into()).into()) - } else if context.let_get(*x).is_some() { - context.stack_push(ExprKind::String("let".into()).into()) - } else if context.scope_item(*x).is_some() { - context.stack_push(ExprKind::String("scope".into()).into()) - } else { - context.stack_push(ExprKind::Nil.into()) + match symbol.kind { + ExprKind::Symbol(ref x) => { + if Intrinsic::from_str(x.as_str()).is_ok() { + context.stack_push(ExprKind::String("intrinsic".into()).into()) + } else if engine + .module(&Symbol::new( + x.as_str().split(':').next().unwrap_or_default().into(), + )) + .is_some() + { + context.stack_push(ExprKind::String("module".into()).into()) + } else if context.let_get(*x).is_some() { + context.stack_push(ExprKind::String("let".into()).into()) + } else if context.scope_item(*x).is_some() { + context.stack_push(ExprKind::String("scope".into()).into()) + } else { + context.stack_push(ExprKind::Nil.into()) + } } + _ => context.stack_push(ExprKind::Nil.into()), } - _ => context.stack_push(ExprKind::Nil.into()), - } - .map(|_| context) - }) - .add_func(Symbol::from_ref("dump"), |_, mut context, _| { - let items: Vec = context - .scope_items() - .map(|(name, content)| { - let list: Vec = vec![ - ExprKind::Symbol(*name).into(), - content - .borrow() - .val() - .map(|e| e.kind) - .unwrap_or(ExprKind::Nil) - .into(), - ]; + .map(|_| context) + }), + ) + .add_func( + Symbol::from_ref("dump"), + Arc::new(|_, mut context, _| { + let items: Vec = context + .scope_items() + .map(|(name, content)| { + let list: Vec = vec![ + ExprKind::Symbol(*name).into(), + content + .borrow() + .val() + .map(|e| e.kind) + .unwrap_or(ExprKind::Nil) + .into(), + ]; - ExprKind::List(list).into() - }) - .collect(); + ExprKind::List(list).into() + }) + .collect(); - context - .stack_push(ExprKind::List(items).into()) - .map(|_| context) - }); + context + .stack_push(ExprKind::List(items).into()) + .map(|_| context) + }), + ); module } diff --git a/stack-std/src/str.rs b/stack-std/src/str.rs index d4fb5cf1..75d00c5e 100644 --- a/stack-std/src/str.rs +++ b/stack-std/src/str.rs @@ -1,3 +1,5 @@ +use std::sync::Arc; + use compact_str::{CompactString, ToCompactString}; use stack_core::prelude::*; use unicode_segmentation::UnicodeSegmentation; @@ -6,92 +8,110 @@ use unicode_segmentation::UnicodeSegmentation; pub fn module() -> Module { let mut module = Module::new(Symbol::from_ref("str")) - .with_func(Symbol::from_ref("trim-start"), |_, mut context, expr| { - let item = context.stack_pop(&expr)?; - - let kind = match item.kind { - ExprKind::String(ref x) => ExprKind::String(x.trim_start().into()), - _ => ExprKind::Nil, - }; - - context.stack_push(kind.into())?; - - Ok(context) - }) - .with_func(Symbol::from_ref("trim-end"), |_, mut context, expr| { - let item = context.stack_pop(&expr)?; - - let kind = match item.kind { - ExprKind::String(ref x) => ExprKind::String(x.trim_end().into()), - _ => ExprKind::Nil, - }; - - context.stack_push(kind.into())?; - - Ok(context) - }) - .with_func(Symbol::from_ref("trim"), |_, mut context, expr| { - let item = context.stack_pop(&expr)?; - - let kind = match item.kind { - ExprKind::String(ref x) => ExprKind::String(x.trim().into()), - _ => ExprKind::Nil, - }; - - context.stack_push(kind.into())?; - - Ok(context) - }) - .with_func(Symbol::from_ref("starts-with"), |_, mut context, expr| { - let patt = context.stack_pop(&expr)?; - let item = context.stack_pop(&expr)?; - - let kind = match (item.kind.clone(), patt.kind.clone()) { - (ExprKind::String(ref x), ExprKind::String(ref y)) => { - ExprKind::Boolean(x.starts_with(y.as_str())) - } - _ => ExprKind::Nil, - }; - - context.stack_push(kind.into())?; - - Ok(context) - }) - .with_func(Symbol::from_ref("ends-with"), |_, mut context, expr| { - let patt = context.stack_pop(&expr)?; - let item = context.stack_pop(&expr)?; - - let kind = match (item.kind.clone(), patt.kind.clone()) { - (ExprKind::String(ref x), ExprKind::String(ref y)) => { - ExprKind::Boolean(x.ends_with(y.as_str())) - } - _ => ExprKind::Nil, - }; - - context.stack_push(kind.into())?; - - Ok(context) - }) - .with_func(Symbol::from_ref("split-by"), |_, mut context, expr| { - let patt = context.stack_pop(&expr)?; - let item = context.stack_pop(&expr)?; - - let kind = match (item.kind.clone(), patt.kind.clone()) { - (ExprKind::String(ref x), ExprKind::String(ref y)) => ExprKind::List( - x.split(y.as_str()) - .map(|x| ExprKind::String(x.into()).into()) - .collect(), - ), - _ => ExprKind::Nil, - }; - - context.stack_push(kind.into())?; - - Ok(context) - }) + .with_func( + Symbol::from_ref("trim-start"), + Arc::new(|_, mut context, expr| { + let item = context.stack_pop(&expr)?; + + let kind = match item.kind { + ExprKind::String(ref x) => ExprKind::String(x.trim_start().into()), + _ => ExprKind::Nil, + }; + + context.stack_push(kind.into())?; + + Ok(context) + }), + ) + .with_func( + Symbol::from_ref("trim-end"), + Arc::new(|_, mut context, expr| { + let item = context.stack_pop(&expr)?; + + let kind = match item.kind { + ExprKind::String(ref x) => ExprKind::String(x.trim_end().into()), + _ => ExprKind::Nil, + }; + + context.stack_push(kind.into())?; + + Ok(context) + }), + ) + .with_func( + Symbol::from_ref("trim"), + Arc::new(|_, mut context, expr| { + let item = context.stack_pop(&expr)?; + + let kind = match item.kind { + ExprKind::String(ref x) => ExprKind::String(x.trim().into()), + _ => ExprKind::Nil, + }; + + context.stack_push(kind.into())?; + + Ok(context) + }), + ) + .with_func( + Symbol::from_ref("starts-with"), + Arc::new(|_, mut context, expr| { + let patt = context.stack_pop(&expr)?; + let item = context.stack_pop(&expr)?; + + let kind = match (item.kind.clone(), patt.kind.clone()) { + (ExprKind::String(ref x), ExprKind::String(ref y)) => { + ExprKind::Boolean(x.starts_with(y.as_str())) + } + _ => ExprKind::Nil, + }; + + context.stack_push(kind.into())?; + + Ok(context) + }), + ) + .with_func( + Symbol::from_ref("ends-with"), + Arc::new(|_, mut context, expr| { + let patt = context.stack_pop(&expr)?; + let item = context.stack_pop(&expr)?; + + let kind = match (item.kind.clone(), patt.kind.clone()) { + (ExprKind::String(ref x), ExprKind::String(ref y)) => { + ExprKind::Boolean(x.ends_with(y.as_str())) + } + _ => ExprKind::Nil, + }; + + context.stack_push(kind.into())?; + + Ok(context) + }), + ) + .with_func( + Symbol::from_ref("split-by"), + Arc::new(|_, mut context, expr| { + let patt = context.stack_pop(&expr)?; + let item = context.stack_pop(&expr)?; + + let kind = match (item.kind.clone(), patt.kind.clone()) { + (ExprKind::String(ref x), ExprKind::String(ref y)) => ExprKind::List( + x.split(y.as_str()) + .map(|x| ExprKind::String(x.into()).into()) + .collect(), + ), + _ => ExprKind::Nil, + }; + + context.stack_push(kind.into())?; + + Ok(context) + }), + ) .with_func( Symbol::from_ref("split-whitespace"), - |_, mut context, expr| { + Arc::new(|_, mut context, expr| { let item = context.stack_pop(&expr)?; let kind = match item.kind { @@ -106,205 +126,235 @@ pub fn module() -> Module { context.stack_push(kind.into())?; Ok(context) - }, + }), + ) + .with_func( + Symbol::from_ref("to-lowercase"), + Arc::new(|_, mut context, expr| { + let item = context.stack_pop(&expr)?; + + let kind = match item.kind { + ExprKind::String(ref x) => ExprKind::String(x.to_lowercase()), + _ => ExprKind::Nil, + }; + + context.stack_push(kind.into())?; + + Ok(context) + }), + ) + .with_func( + Symbol::from_ref("to-uppercase"), + Arc::new(|_, mut context, expr| { + let item = context.stack_pop(&expr)?; + + let kind = match item.kind { + ExprKind::String(ref x) => ExprKind::String(x.to_uppercase()), + _ => ExprKind::Nil, + }; + + context.stack_push(kind.into())?; + + Ok(context) + }), ) - .with_func(Symbol::from_ref("to-lowercase"), |_, mut context, expr| { - let item = context.stack_pop(&expr)?; - - let kind = match item.kind { - ExprKind::String(ref x) => ExprKind::String(x.to_lowercase()), - _ => ExprKind::Nil, - }; - - context.stack_push(kind.into())?; - - Ok(context) - }) - .with_func(Symbol::from_ref("to-uppercase"), |_, mut context, expr| { - let item = context.stack_pop(&expr)?; - - let kind = match item.kind { - ExprKind::String(ref x) => ExprKind::String(x.to_uppercase()), - _ => ExprKind::Nil, - }; - - context.stack_push(kind.into())?; - - Ok(context) - }) - .with_func(Symbol::from_ref("is-ascii"), |_, mut context, expr| { - let item = context.stack_pop(&expr)?; - - let kind = match item.kind { - ExprKind::String(ref x) => ExprKind::Boolean(x.is_ascii()), - _ => ExprKind::Nil, - }; - - context.stack_push(kind.into())?; - - Ok(context) - }) - .with_func(Symbol::from_ref("is-char"), |_, mut context, expr| { - let item = context.stack_pop(&expr)?; - - let kind = match item.kind { - ExprKind::String(ref x) => { - ExprKind::Boolean(x.graphemes(true).count() == 1) - } - _ => ExprKind::Nil, - }; - - context.stack_push(kind.into())?; - - Ok(context) - }) - .with_func(Symbol::from_ref("to-bytes"), |_, mut context, expr| { - let item = context.stack_pop(&expr)?; - - let kind = match item.kind { - ExprKind::String(ref x) => ExprKind::List( - x.as_bytes() + .with_func( + Symbol::from_ref("is-ascii"), + Arc::new(|_, mut context, expr| { + let item = context.stack_pop(&expr)?; + + let kind = match item.kind { + ExprKind::String(ref x) => ExprKind::Boolean(x.is_ascii()), + _ => ExprKind::Nil, + }; + + context.stack_push(kind.into())?; + + Ok(context) + }), + ) + .with_func( + Symbol::from_ref("is-char"), + Arc::new(|_, mut context, expr| { + let item = context.stack_pop(&expr)?; + + let kind = match item.kind { + ExprKind::String(ref x) => { + ExprKind::Boolean(x.graphemes(true).count() == 1) + } + _ => ExprKind::Nil, + }; + + context.stack_push(kind.into())?; + + Ok(context) + }), + ) + .with_func( + Symbol::from_ref("to-bytes"), + Arc::new(|_, mut context, expr| { + let item = context.stack_pop(&expr)?; + + let kind = match item.kind { + ExprKind::String(ref x) => ExprKind::List( + x.as_bytes() + .iter() + .copied() + .map(|x| ExprKind::Integer(x as i64).into()) + .collect(), + ), + _ => ExprKind::Nil, + }; + + context.stack_push(kind.into())?; + + Ok(context) + }), + ) + .with_func( + Symbol::from_ref("from-bytes"), + Arc::new(|_, mut context, expr| { + let item = context.stack_pop(&expr)?; + + let kind = match item.kind { + ExprKind::List(ref x) => x .iter() - .copied() - .map(|x| ExprKind::Integer(x as i64).into()) - .collect(), - ), - _ => ExprKind::Nil, - }; - - context.stack_push(kind.into())?; - - Ok(context) - }) - .with_func(Symbol::from_ref("from-bytes"), |_, mut context, expr| { - let item = context.stack_pop(&expr)?; - - let kind = match item.kind { - ExprKind::List(ref x) => x - .iter() - .try_fold(Vec::with_capacity(x.len()), |mut v, x| match x.kind { - ExprKind::Integer(i) if i >= 0 && i <= u8::MAX as i64 => { - v.push(i as u8); - Ok(v) - } - _ => Err(()), - }) - .map(|x| { - CompactString::from_utf8(x) - .map(ExprKind::String) - .unwrap_or(ExprKind::Nil) - }) - .unwrap_or(ExprKind::Nil), - _ => ExprKind::Nil, - }; - - context.stack_push(kind.into())?; - - Ok(context) - }) - .with_func(Symbol::from_ref("to-chars"), |_, mut context, expr| { - let item = context.stack_pop(&expr)?; - - let kind = match item.kind { - ExprKind::String(ref x) => ExprKind::List( - x.as_str() - .graphemes(true) - .map(|x| ExprKind::String(x.into()).into()) - .collect(), - ), - _ => ExprKind::Nil, - }; - - context.stack_push(kind.into())?; - - Ok(context) - }) - .with_func(Symbol::from_ref("from-chars"), |_, mut context, expr| { - let item = context.stack_pop(&expr)?; - - let kind = match item.kind { - ExprKind::List(ref x) => x - .iter() - .try_fold(String::with_capacity(x.len()), |mut v, x| match x.kind { - ExprKind::String(ref s) => { - v.push_str(s); - Ok(v) - } - _ => Err(()), - }) - .map(|x| x.to_compact_string()) - .map(ExprKind::String) - .unwrap_or(ExprKind::Nil), - _ => ExprKind::Nil, - }; + .try_fold(Vec::with_capacity(x.len()), |mut v, x| match x.kind { + ExprKind::Integer(i) if i >= 0 && i <= u8::MAX as i64 => { + v.push(i as u8); + Ok(v) + } + _ => Err(()), + }) + .map(|x| { + CompactString::from_utf8(x) + .map(ExprKind::String) + .unwrap_or(ExprKind::Nil) + }) + .unwrap_or(ExprKind::Nil), + _ => ExprKind::Nil, + }; + + context.stack_push(kind.into())?; + + Ok(context) + }), + ) + .with_func( + Symbol::from_ref("to-chars"), + Arc::new(|_, mut context, expr| { + let item = context.stack_pop(&expr)?; - context.stack_push(kind.into())?; + let kind = match item.kind { + ExprKind::String(ref x) => ExprKind::List( + x.as_str() + .graphemes(true) + .map(|x| ExprKind::String(x.into()).into()) + .collect(), + ), + _ => ExprKind::Nil, + }; - Ok(context) - }); + context.stack_push(kind.into())?; + + Ok(context) + }), + ) + .with_func( + Symbol::from_ref("from-chars"), + Arc::new(|_, mut context, expr| { + let item = context.stack_pop(&expr)?; + + let kind = match item.kind { + ExprKind::List(ref x) => x + .iter() + .try_fold(String::with_capacity(x.len()), |mut v, x| match x.kind { + ExprKind::String(ref s) => { + v.push_str(s); + Ok(v) + } + _ => Err(()), + }) + .map(|x| x.to_compact_string()) + .map(ExprKind::String) + .unwrap_or(ExprKind::Nil), + _ => ExprKind::Nil, + }; + + context.stack_push(kind.into())?; + + Ok(context) + }), + ); #[cfg(feature = "regex")] { use regex::Regex; module = module - .with_func(Symbol::from_ref("regex-test"), |_, mut context, expr| { - let pattern = context.stack_pop(&expr)?; - let string = context.stack_pop(&expr)?; - - let kind = match (string.kind, pattern.kind) { - (ExprKind::String(ref string), ExprKind::String(ref pattern)) => { - let re = Regex::new(pattern); - match re { - Ok(re) => ExprKind::Boolean(re.captures(string).is_some()), - Err(err) => { - todo!() + .with_func( + Symbol::from_ref("regex-test"), + Arc::new(|_, mut context, expr| { + let pattern = context.stack_pop(&expr)?; + let string = context.stack_pop(&expr)?; + + let kind = match (string.kind, pattern.kind) { + (ExprKind::String(ref string), ExprKind::String(ref pattern)) => { + let re = Regex::new(pattern); + match re { + Ok(re) => ExprKind::Boolean(re.captures(string).is_some()), + Err(err) => { + todo!() + } } } - } - (_, _) => ExprKind::Nil, - }; + (_, _) => ExprKind::Nil, + }; - context.stack_push(kind.into())?; + context.stack_push(kind.into())?; - Ok(context) - }) - .with_func(Symbol::from_ref("regex-match"), |_, mut context, expr| { - let pattern = context.stack_pop(&expr)?; - let string = context.stack_pop(&expr)?; - - let kind = match (string.kind, pattern.kind) { - (ExprKind::String(ref string), ExprKind::String(ref pattern)) => { - let re = Regex::new(pattern); - match re { - Ok(re) => re - .find(string) - .map(|m| { - ExprKind::String( - string - .chars() - .skip(m.start()) - .take(m.end() - m.start()) - .collect::() - .into(), - ) - }) - .unwrap_or(ExprKind::Nil), - Err(err) => { - todo!() + Ok(context) + }), + ) + .with_func( + Symbol::from_ref("regex-match"), + Arc::new(|_, mut context, expr| { + let pattern = context.stack_pop(&expr)?; + let string = context.stack_pop(&expr)?; + + let kind = match (string.kind, pattern.kind) { + (ExprKind::String(ref string), ExprKind::String(ref pattern)) => { + let re = Regex::new(pattern); + match re { + Ok(re) => re + .find(string) + .map(|m| { + ExprKind::String( + string + .chars() + .skip(m.start()) + .take(m.end() - m.start()) + .collect::() + .into(), + ) + }) + .unwrap_or(ExprKind::Nil), + Err(err) => { + todo!() + } } } - } - (_, _) => ExprKind::Nil, - }; + (_, _) => ExprKind::Nil, + }; - context.stack_push(kind.into())?; + context.stack_push(kind.into())?; - Ok(context) - }) + Ok(context) + }), + ) .with_func( Symbol::from_ref("regex-match-all"), - |_, mut context, expr| { + Arc::new(|_, mut context, expr| { let pattern = context.stack_pop(&expr)?; let string = context.stack_pop(&expr)?; @@ -338,7 +388,7 @@ pub fn module() -> Module { context.stack_push(kind.into())?; Ok(context) - }, + }), ) }