diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index d7473658..ceafc823 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -70,19 +70,23 @@ jobs: uses: taiki-e/install-action@cargo-llvm-cov - name: Install dwarf + env: + DWARF_HOME: /home/runner/.dwarf run: | cd dwarf cargo xtask install cargo xtask plugin + ls -l ~/.dwarf/ - name: Build and run tests with coverage run: | cd dwarf - RUST_MIN_STACK=6291456 cargo llvm-cov --lcov --output-path coverage.lcov --no-default-features --features "multi-vec, repl, async" + RUST_MIN_STACK=6291456 cargo llvm-cov --lcov --output-path coverage.lcov --no-default-features --features "lu-dog-rc, repl, async" - name: Upload coverage reports to Codecov uses: codecov/codecov-action@v3 env: + DWARF_HOME: /home/runner/.dwarf CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} with: working-directory: . diff --git a/.gitignore b/.gitignore index 151a3ca8..39615443 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,11 @@ **/target *.tracy *.道 +crates/lambda +crates/plugin +crates/types +crates/value +.idea woog_structs.rs .dwarf_history coverage.lcov diff --git a/.vscode/launch.json b/.vscode/launch.json index 72fd529b..fa1dc521 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -142,20 +142,26 @@ } }, "args": [ + // "test.ore", + // "tests/harness/extensions/test_ffi/test.ore", + // "tests/proxy/declare.ore", // "tests/vm_harness/types/map/get.ore", // "tests/vm_harness/lambda.ore" - "mandelbrot.ore", + // "mandelbrot.ore", // "https://raw.githubusercontent.com/uberFoo/dwarf/develop/mandelbrot.ore" - // "uberfoo.rs/src/uberfoo.rs.ore", - // "-c", - // "uberfoo.rs/src", - // "-t", + // + "uberfoo.rs/src/uberfoo.rs.ore", + "-c", + "uberfoo.rs/src", + "-t", + // "-b", "--uber", ], "cwd": "${workspaceFolder}", "env": { - "RUST_LOG": "extruder=debug" + "CLIENT_SECRET": "ff786a55a988bcdcfee228643cc782956d075f8b", + // "RUST_LOG": "vm=trace,async=trace" }, "preRunCommands": [ "script lldb.debugger.HandleCommand('settings set target.source-map /rustc/{} \"{}/lib/rustlib/src/rust\"'.format(os.popen('rustc --version --verbose').read().split('commit-hash: ')[1].split('\\n')[0].strip(), os.popen('rustc --print sysroot').readline().strip()))" diff --git a/.vscode/settings.json b/.vscode/settings.json index eddec87f..39b02991 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -14,6 +14,7 @@ "confusables", "cpus", "cspan", + "ctsk", "CVAR", "defn", "desanitize", diff --git a/Cargo.lock b/Cargo.lock index bd6f7ba7..edfd388a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "abi_stable" @@ -52,9 +52,9 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.21.0" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ "gimli", ] @@ -65,6 +65,12 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" + [[package]] name = "ahash" version = "0.8.11" @@ -119,7 +125,7 @@ version = "3.0.0" source = "git+https://github.com/uberFoo/ansi-to-tui#84bac8fbfe4d84d023dce0a32f087e900ebf1f73" dependencies = [ "nom", - "ratatui", + "ratatui 0.20.1", "thiserror", ] @@ -149,9 +155,9 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.7" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" [[package]] name = "anstyle-parse" @@ -164,9 +170,9 @@ dependencies = [ [[package]] name = "anstyle-query" -version = "1.0.3" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a64c907d4e79225ac72e2a354c9ce84d50ebb4586dee56c82b3ee73004f537f5" +checksum = "ad186efb764318d35165f1758e7dcef3b10628e26d41a44bc5550652e6804391" dependencies = [ "windows-sys 0.52.0", ] @@ -192,8 +198,8 @@ name = "ariadne" version = "0.3.0" source = "git+https://github.com/uberFoo/ariadne#7f145e849a2a3c80efe4306d90d89de3198dab4f" dependencies = [ - "unicode-width", - "yansi", + "unicode-width 0.1.13", + "yansi 0.5.1", ] [[package]] @@ -232,16 +238,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" dependencies = [ "concurrent-queue", - "event-listener-strategy 0.5.2", + "event-listener-strategy", "futures-core", "pin-project-lite", ] [[package]] name = "async-compat" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f68a707c1feb095d8c07f8a65b9f506b117d30af431cab89374357de7c11461b" +checksum = "7bab94bde396a3f7b4962e396fdad640e241ed797d4d8d77fc8c237d14c58fc0" dependencies = [ "futures-core", "futures-io", @@ -264,14 +270,14 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.11.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b10202063978b3351199d68f8b22c4e47e4b1b822f8d43fd862d5ea8c006b29a" +checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" dependencies = [ "async-task", "concurrent-queue", "fastrand 2.1.0", - "futures-lite 2.3.0", + "futures-lite 2.5.0", "slab", ] @@ -293,9 +299,9 @@ version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a" dependencies = [ - "async-lock 3.3.0", + "async-lock 3.4.0", "blocking", - "futures-lite 2.3.0", + "futures-lite 2.5.0", ] [[package]] @@ -320,21 +326,21 @@ dependencies = [ [[package]] name = "async-io" -version = "2.3.2" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcccb0f599cfa2f8ace422d3555572f47424da5648a4382a9dd0310ff8210884" +checksum = "43a2b323ccce0a1d90b449fd71f2a06ca7faa7c54c2751f06c9bd851fc061059" dependencies = [ - "async-lock 3.3.0", + "async-lock 3.4.0", "cfg-if", "concurrent-queue", "futures-io", - "futures-lite 2.3.0", + "futures-lite 2.5.0", "parking", - "polling 3.7.0", + "polling 3.7.2", "rustix 0.38.34", "slab", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -348,12 +354,12 @@ dependencies = [ [[package]] name = "async-lock" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d034b430882f8381900d3fe6f0aaa3ad94f2cb4ac519b429692a1bc2dda4ae7b" +checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" dependencies = [ - "event-listener 4.0.3", - "event-listener-strategy 0.4.0", + "event-listener 5.3.1", + "event-listener-strategy", "pin-project-lite", ] @@ -374,9 +380,9 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b948000fad4873c1c9339d60f2623323a0cfd3816e5181033c6a5cb68b2accf7" dependencies = [ - "async-io 2.3.2", + "async-io 2.4.0", "blocking", - "futures-lite 2.3.0", + "futures-lite 2.5.0", ] [[package]] @@ -398,19 +404,19 @@ dependencies = [ [[package]] name = "async-process" -version = "2.2.2" +version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a53fc6301894e04a92cb2584fedde80cb25ba8e02d9dc39d4a87d036e22f397d" +checksum = "f7eda79bbd84e29c2b308d1dc099d7de8dcc7035e48f4bf5dc4a531a44ff5e2a" dependencies = [ "async-channel 2.3.1", - "async-io 2.3.2", - "async-lock 3.3.0", + "async-io 2.4.0", + "async-lock 3.4.0", "async-signal", "async-task", "blocking", "cfg-if", - "event-listener 5.3.0", - "futures-lite 2.3.0", + "event-listener 5.3.1", + "futures-lite 2.5.0", "rustix 0.38.34", "tracing", "windows-sys 0.52.0", @@ -418,12 +424,12 @@ dependencies = [ [[package]] name = "async-signal" -version = "0.2.6" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afe66191c335039c7bb78f99dc7520b0cbb166b3a1cb33a03f53d8a1c6f2afda" +checksum = "794f185324c2f00e771cd9f1ae8b5ac68be2ca7abb129a87afd6e86d228bc54d" dependencies = [ - "async-io 2.3.2", - "async-lock 3.3.0", + "async-io 2.4.0", + "async-lock 3.4.0", "atomic-waker", "cfg-if", "futures-core", @@ -465,24 +471,24 @@ checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "backtrace" -version = "0.3.71" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", - "cc", "cfg-if", "libc", - "miniz_oxide", + "miniz_oxide 0.8.2", "object", "rustc-demangle", + "windows-targets 0.52.6", ] [[package]] name = "base64" -version = "0.21.7" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "bincode" @@ -495,28 +501,26 @@ dependencies = [ [[package]] name = "bitcode" -version = "0.5.1" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a733ab290c6e6b2859bba3e68fd1a4ca3eee0577f21ea46049a3529e500627" +checksum = "ee1bce7608560cd4bf0296a4262d0dbf13e6bcec5ff2105724c8ab88cc7fc784" dependencies = [ + "arrayvec", "bitcode_derive", "bytemuck", - "from_bytes_or_zeroed", - "residua-zigzag", + "glam", "serde", - "simdutf8", ] [[package]] name = "bitcode_derive" -version = "0.5.0" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c25ffc293cbf807499083d016ce3bc0459aaa7fd624c1cc563718a2440cb38a" +checksum = "a539389a13af092cd345a2b47ae7dec12deb306d660b2223d25cd3419b253ebe" dependencies = [ - "packagemerge", "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.87", ] [[package]] @@ -527,21 +531,20 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" [[package]] name = "blocking" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "495f7104e962b7356f0aeb34247aca1fe7d2e783b346582db7f2904cb5717e88" +checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" dependencies = [ "async-channel 2.3.1", - "async-lock 3.3.0", "async-task", "futures-io", - "futures-lite 2.3.0", + "futures-lite 2.5.0", "piper", ] @@ -553,9 +556,9 @@ checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "bytemuck" -version = "1.16.0" +version = "1.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78834c15cb5d5efe3452d58b1e8ba890dd62d21907f867f383358198e56ebca5" +checksum = "b236fc92302c97ed75b38da1f4917b5cdda4984745740f153a5d3059e48d725e" [[package]] name = "byteorder" @@ -581,11 +584,20 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" +[[package]] +name = "castaway" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0abae9be0aaf9ea96a3b1b8b1b55c602ca751eba1b1500220cea4ecbafe7c0d5" +dependencies = [ + "rustversion", +] + [[package]] name = "cc" -version = "1.0.98" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41c270e7540d725e65ac7f1b212ac8ce349719624d7bcff99f8e2e488e8cf03f" +checksum = "74b6a57f98764a267ff415d50a25e6e166f3831a5071af4995296ea97d210490" [[package]] name = "cfg-if" @@ -593,6 +605,12 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + [[package]] name = "chrono" version = "0.4.38" @@ -604,7 +622,7 @@ dependencies = [ "js-sys", "num-traits", "wasm-bindgen", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -672,23 +690,23 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.4" +version = "4.5.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0" +checksum = "3135e7ec2ef7b10c6ed8950f0f792ed96ee093fa088608f1c76e569722700c84" dependencies = [ "clap_builder", - "clap_derive 4.5.4", + "clap_derive 4.5.18", ] [[package]] name = "clap_builder" -version = "4.5.2" +version = "4.5.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" +checksum = "30582fc632330df2bd26877bde0c1f4470d57c582bbc070376afcd04d8cb4838" dependencies = [ "anstream", "anstyle", - "clap_lex 0.7.0", + "clap_lex 0.7.4", "strsim 0.11.1", ] @@ -707,14 +725,14 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.4" +version = "4.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64" +checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.87", ] [[package]] @@ -728,15 +746,15 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.0" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" [[package]] name = "clipboard-win" -version = "5.3.1" +version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79f4473f5144e20d9aceaf2972478f06ddf687831eafeeb434fbaf0acc4144ad" +checksum = "15efe7a882b08f34e38556b14f2fb3daa98769d06c7f0c1b076dfd0d983bc892" dependencies = [ "error-code", ] @@ -757,6 +775,20 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" +[[package]] +name = "compact_str" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b79c4069c6cad78e2e0cdfcbd26275770669fb39fd308a752dc110e83b9af32" +dependencies = [ + "castaway", + "cfg-if", + "itoa", + "rustversion", + "ryu", + "static_assertions", +] + [[package]] name = "concurrent-queue" version = "2.5.0" @@ -852,7 +884,7 @@ dependencies = [ "anes", "cast", "ciborium", - "clap 4.5.4", + "clap 4.5.23", "criterion-plot", "is-terminal", "itertools 0.10.5", @@ -944,7 +976,7 @@ dependencies = [ "bitflags 1.3.2", "crossterm_winapi", "libc", - "mio", + "mio 0.8.11", "parking_lot", "signal-hook", "signal-hook-mio", @@ -953,15 +985,15 @@ dependencies = [ [[package]] name = "crossterm" -version = "0.27.0" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f476fe445d41c9e991fd07515a6f463074b782242ccf4a5b7b1d1012e70824df" +checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "crossterm_winapi", - "libc", - "mio", + "mio 1.0.3", "parking_lot", + "rustix 0.38.34", "signal-hook", "signal-hook-mio", "winapi", @@ -993,6 +1025,41 @@ dependencies = [ "thiserror", ] +[[package]] +name = "darling" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.11.1", + "syn 2.0.87", +] + +[[package]] +name = "darling_macro" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.87", +] + [[package]] name = "deranged" version = "0.3.11" @@ -1031,7 +1098,7 @@ checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" [[package]] name = "dwarf" -version = "0.8.1" +version = "0.9.0" dependencies = [ "abi_stable", "ansi-to-tui", @@ -1040,7 +1107,7 @@ dependencies = [ "async-compat", "async-condvar-fair", "async-executor", - "async-io 2.3.2", + "async-io 2.4.0", "async-task", "backtrace", "bincode", @@ -1049,19 +1116,20 @@ dependencies = [ "chrono", "chumsky", "circular-queue", - "clap 4.5.4", + "clap 4.5.23", "color-backtrace", "core_extensions", "criterion", "crossbeam", - "crossterm 0.27.0", + "crossterm 0.28.1", "dap", "diff", "dotenvy", - "env_logger 0.10.2", - "futures-lite 2.3.0", - "heck 0.4.1", - "hyper 1.3.1", + "env_logger 0.11.6", + "futures-lite 2.5.0", + "heck 0.5.0", + "hyper", + "itertools 0.13.0", "lazy_static", "log", "no_deadlocks", @@ -1071,18 +1139,18 @@ dependencies = [ "parking_lot", "pretty_env_logger", "puteketeke", - "ratatui", + "ratatui 0.20.1", "regex", "reqwest", - "rustc-hash", + "rustc-hash 2.1.0", "rustyline", "sarzak", "serde", "serde_json", "slab", "smartstring", - "smol 2.0.0", - "snafu 0.8.2", + "smol 2.0.2", + "snafu 0.8.5", "syntect", "test-log", "threadpool", @@ -1090,7 +1158,7 @@ dependencies = [ "tracing-subscriber", "tracing-tracy", "tracy-client 0.17.0", - "tracy-client-sys 0.22.2", + "tracy-client-sys 0.24.3", "tui-input", "tui-logger", "tui-textarea", @@ -1102,9 +1170,9 @@ dependencies = [ [[package]] name = "either" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "encoding_rs" @@ -1128,6 +1196,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a009aa4810eb158359dda09d0c87378e4bbb89b5a801f016885a4707ba24f7ea" dependencies = [ "log", + "regex", ] [[package]] @@ -1145,11 +1214,14 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.11.3" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b35839ba51819680ba087cd351788c9a3c476841207e0b8cee0b04722343b9" +checksum = "dcaee3d8e3cfc3fd92428d477bc97fc29ec8716d180c0d74c643bb26166660e0" dependencies = [ + "anstream", + "anstyle", "env_filter", + "humantime", "log", ] @@ -1194,43 +1266,22 @@ dependencies = [ [[package]] name = "event-listener" -version = "4.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" -dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", -] - -[[package]] -name = "event-listener" -version = "5.3.0" +version = "5.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d9944b8ca13534cdfb2800775f8dd4902ff3fc75a50101466decadfdf322a24" +checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" dependencies = [ "concurrent-queue", "parking", "pin-project-lite", ] -[[package]] -name = "event-listener-strategy" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3" -dependencies = [ - "event-listener 4.0.3", - "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.0", + "event-listener 5.3.1", "pin-project-lite", ] @@ -1267,7 +1318,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" dependencies = [ "crc32fast", - "miniz_oxide", + "miniz_oxide 0.7.4", ] [[package]] @@ -1276,6 +1327,12 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foldhash" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f" + [[package]] name = "foreign-types" version = "0.3.2" @@ -1300,12 +1357,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "from_bytes_or_zeroed" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d25934a78435889223e575c7b0fc36a290c5a312e7a7ae901f10587792e142a" - [[package]] name = "futures-channel" version = "0.3.30" @@ -1313,6 +1364,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" dependencies = [ "futures-core", + "futures-sink", ] [[package]] @@ -1344,9 +1396,9 @@ dependencies = [ [[package]] name = "futures-lite" -version = "2.3.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" +checksum = "cef40d21ae2c515b51041df9ed313ed21e572df340ea58a922a0aefe7e8891a1" dependencies = [ "fastrand 2.1.0", "futures-core", @@ -1375,6 +1427,7 @@ checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" dependencies = [ "futures-core", "futures-io", + "futures-sink", "futures-task", "memchr", "pin-project-lite", @@ -1451,22 +1504,28 @@ dependencies = [ [[package]] name = "gimli" -version = "0.28.1" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + +[[package]] +name = "glam" +version = "0.29.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +checksum = "dc46dd3ec48fdd8e693a98d2b8bafae273a2d54c1de02a2a7e3d57d501f39677" [[package]] name = "h2" -version = "0.3.26" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +checksum = "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab" dependencies = [ + "atomic-waker", "bytes", "fnv", "futures-core", "futures-sink", - "futures-util", - "http 0.2.12", + "http", "indexmap 2.2.6", "slab", "tokio", @@ -1490,6 +1549,15 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash", +] + [[package]] name = "hashbrown" version = "0.14.5" @@ -1500,6 +1568,17 @@ dependencies = [ "allocator-api2", ] +[[package]] +name = "hashbrown" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash", +] + [[package]] name = "heck" version = "0.4.1" @@ -1527,6 +1606,12 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" +[[package]] +name = "hermit-abi" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" + [[package]] name = "home" version = "0.5.9" @@ -1536,17 +1621,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "http" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - [[package]] name = "http" version = "1.1.0" @@ -1560,36 +1634,32 @@ dependencies = [ [[package]] name = "http-body" -version = "0.4.6" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" dependencies = [ "bytes", - "http 0.2.12", - "pin-project-lite", + "http", ] [[package]] -name = "http-body" -version = "1.0.0" +name = "http-body-util" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" dependencies = [ "bytes", - "http 1.1.0", + "futures-util", + "http", + "http-body", + "pin-project-lite", ] [[package]] name = "httparse" -version = "1.8.0" +version = "1.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" - -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" +checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" [[package]] name = "humantime" @@ -1599,65 +1669,76 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.28" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" +checksum = "256fb8d4bd6413123cc9d91832d78325c48ff41677595be797d90f42969beae0" dependencies = [ "bytes", "futures-channel", - "futures-core", "futures-util", "h2", - "http 0.2.12", - "http-body 0.4.6", + "http", + "http-body", "httparse", - "httpdate", "itoa", "pin-project-lite", - "socket2 0.5.7", + "smallvec", "tokio", - "tower-service", - "tracing", "want", ] -[[package]] -name = "hyper" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe575dd17d0862a9a33781c8c4696a55c320909004a67a00fb286ba8b1bc496d" -dependencies = [ - "bytes", - "http 1.1.0", - "http-body 1.0.0", - "tokio", -] - [[package]] name = "hyper-rustls" -version = "0.24.2" +version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +checksum = "5ee4be2c948921a1a5320b629c4193916ed787a7f7f293fd3f7f5a6c9de74155" dependencies = [ "futures-util", - "http 0.2.12", - "hyper 0.14.28", + "http", + "hyper", + "hyper-util", "rustls", + "rustls-pki-types", "tokio", "tokio-rustls", + "tower-service", + "webpki-roots", ] [[package]] name = "hyper-tls" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", - "hyper 0.14.28", + "http-body-util", + "hyper", + "hyper-util", "native-tls", "tokio", "tokio-native-tls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ab92f4f49ee4fb4f997c784b7a2e0fa70050211e0b6a287f898c3c9785ca956" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "pin-project-lite", + "socket2 0.5.7", + "tokio", + "tower", + "tower-service", + "tracing", ] [[package]] @@ -1683,6 +1764,12 @@ dependencies = [ "cc", ] +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + [[package]] name = "idna" version = "0.5.0" @@ -1713,6 +1800,26 @@ dependencies = [ "hashbrown 0.14.5", ] +[[package]] +name = "indoc" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5" + +[[package]] +name = "instability" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac48900be4ab1c0dd6f1c2553d86ef371eda69c52b97ffd22af3e4f0a1771eb8" +dependencies = [ + "darling", + "indoc", + "pretty_assertions", + "proc-macro2", + "quote", + "syn 2.0.87", +] + [[package]] name = "instant" version = "0.1.13" @@ -1758,15 +1865,18 @@ checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" [[package]] name = "itertools" -version = "0.4.19" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a9b56eb56058f43dc66e58f40a214b2ccbc9f3df51861b63d51dec7b65bc3f" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] [[package]] name = "itertools" -version = "0.10.5" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" dependencies = [ "either", ] @@ -1788,15 +1898,15 @@ dependencies = [ [[package]] name = "lazy_static" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.155" +version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" [[package]] name = "libloading" @@ -1808,12 +1918,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "line-wrap" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd1bc4d24ad230d21fb898d1116b1801d7adfc449d42026475862ab48b11e70e" - [[package]] name = "linked-hash-map" version = "0.5.6" @@ -1845,9 +1949,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.21" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "loom" @@ -1875,6 +1979,15 @@ dependencies = [ "tracing-subscriber", ] +[[package]] +name = "lru" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" +dependencies = [ + "hashbrown 0.15.2", +] + [[package]] name = "matchers" version = "0.1.0" @@ -1886,9 +1999,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.2" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "mime" @@ -1904,13 +2017,22 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87dfd01fe195c66b572b37921ad8803d010623c0aca821bea2302239d155cdae" +checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" dependencies = [ "adler", ] +[[package]] +name = "miniz_oxide" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ffbe83022cedc1d264172192511ae958937694cd57ce297164951b8b3568394" +dependencies = [ + "adler2", +] + [[package]] name = "mio" version = "0.8.11" @@ -1923,6 +2045,18 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "mio" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" +dependencies = [ + "libc", + "log", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.52.0", +] + [[package]] name = "names" version = "0.14.0" @@ -1935,11 +2069,10 @@ dependencies = [ [[package]] name = "native-tls" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" dependencies = [ - "lazy_static", "libc", "log", "openssl", @@ -1962,12 +2095,13 @@ dependencies = [ [[package]] name = "nix" -version = "0.27.1" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "cfg-if", + "cfg_aliases", "libc", ] @@ -2041,7 +2175,7 @@ version = "1.0.0" source = "git+https://github.com/uberFoo/nut#1f89d402a281ab4ea02478d26512e8480146d12a" dependencies = [ "anyhow", - "clap 4.5.4", + "clap 4.5.23", "diff", "heck 0.4.1", "log", @@ -2060,18 +2194,18 @@ dependencies = [ [[package]] name = "object" -version = "0.32.2" +version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +checksum = "081b846d1d56ddfc18fdf1a922e4f6e07a11768ea1b92dec44e42b72712ccfce" dependencies = [ "memchr", ] [[package]] name = "once_cell" -version = "1.19.0" +version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "onig" @@ -2097,9 +2231,9 @@ dependencies = [ [[package]] name = "oorandom" -version = "11.1.3" +version = "11.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" +checksum = "b410bbe7e14ab526a0e86877eb47c6996a2bd7746f027ba551028c925390e4e9" [[package]] name = "openssl" @@ -2107,7 +2241,7 @@ version = "0.10.64" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "cfg-if", "foreign-types", "libc", @@ -2124,7 +2258,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.87", ] [[package]] @@ -2145,6 +2279,16 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "ordered_hash_map" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab0e5f22bf6dd04abd854a8874247813a8fa2c8c1260eba6fbb150270ce7c176" +dependencies = [ + "hashbrown 0.13.2", + "serde", +] + [[package]] name = "os_str_bytes" version = "6.6.1" @@ -2157,15 +2301,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" -[[package]] -name = "packagemerge" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0efcf6ee55f8f7a24333bc8d1dd0e541a6cedf903dbc07ae6479d7f8ff32ed08" -dependencies = [ - "itertools 0.4.19", -] - [[package]] name = "parking" version = "2.2.0" @@ -2174,9 +2309,9 @@ checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" [[package]] name = "parking_lot" -version = "0.12.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e4af0ca4f6caed20e900d564c242b8e5d4903fdacf31d3daf527b66fe6f42fb" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", "parking_lot_core", @@ -2192,7 +2327,7 @@ dependencies = [ "libc", "redox_syscall", "smallvec", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -2207,6 +2342,26 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +[[package]] +name = "pin-project" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + [[package]] name = "pin-project-lite" version = "0.2.14" @@ -2221,9 +2376,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "piper" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "464db0c665917b13ebb5d453ccdec4add5658ee1adc7affc7677615356a8afaf" +checksum = "ae1d5c74c9876f070d3e8fd503d748c7d974c3e48da8f41350fa5222ef9b4391" dependencies = [ "atomic-waker", "fastrand 2.1.0", @@ -2238,13 +2393,12 @@ checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" [[package]] name = "plist" -version = "1.6.1" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9d34169e64b3c7a80c8621a48adaf44e0cf62c78a9b25dd9dd35f1881a17cf9" +checksum = "42cf17e9a1800f5f396bc67d193dc9411b59012a5876445ef450d449881e1016" dependencies = [ "base64", "indexmap 2.2.6", - "line-wrap", "quick-xml", "serde", "time", @@ -2296,13 +2450,13 @@ dependencies = [ [[package]] name = "polling" -version = "3.7.0" +version = "3.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645493cf344456ef24219d02a768cf1fb92ddf8c92161679ae3d91b91a637be3" +checksum = "a3ed00ed3fbf728b5816498ecd316d1716eecaced9c0c8d2c5a6740ca214985b" dependencies = [ "cfg-if", "concurrent-queue", - "hermit-abi 0.3.9", + "hermit-abi 0.4.0", "pin-project-lite", "rustix 0.38.34", "tracing", @@ -2321,6 +2475,16 @@ version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +[[package]] +name = "pretty_assertions" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ae130e2f271fbc2ac3a40fb1d07180839cdbbe443c7a27e1e3c13c5cac0116d" +dependencies = [ + "diff", + "yansi 1.0.1", +] + [[package]] name = "pretty_env_logger" version = "0.5.0" @@ -2357,9 +2521,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.83" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b33eb56c327dec362a9e55b3ad14f9d2f0904fb5a5b03b513ab5465399e9f43" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" dependencies = [ "unicode-ident", ] @@ -2380,9 +2544,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83b1109db5f94e442b059329319e1bc014ee53ce1c1b9a1ad72207e7eb177936" dependencies = [ "async-executor", - "async-io 2.3.2", + "async-io 2.4.0", "crossbeam", - "futures-lite 2.3.0", + "futures-lite 2.5.0", "once_cell", "parking_lot", "slab", @@ -2392,13 +2556,60 @@ dependencies = [ [[package]] name = "quick-xml" -version = "0.31.0" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1004a344b30a54e2ee58d66a71b32d2db2feb0a31f9a2d302bf0536f15de2a33" +checksum = "1d3a6e5838b60e0e8fa7a43f22ade549a37d61f8bdbe636d0d7816191de969c2" dependencies = [ "memchr", ] +[[package]] +name = "quinn" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4ceeeeabace7857413798eb1ffa1e9c905a9946a57d81fb69b4b71c4d8eb3ad" +dependencies = [ + "bytes", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash 1.1.0", + "rustls", + "thiserror", + "tokio", + "tracing", +] + +[[package]] +name = "quinn-proto" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddf517c03a109db8100448a4be38d498df8a210a99fe0e1b9eaf39e78c640efe" +dependencies = [ + "bytes", + "rand 0.8.5", + "ring", + "rustc-hash 1.1.0", + "rustls", + "slab", + "thiserror", + "tinyvec", + "tracing", +] + +[[package]] +name = "quinn-udp" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9096629c45860fc7fb143e125eb826b5e721e10be3263160c7d60ca832cf8c46" +dependencies = [ + "libc", + "once_cell", + "socket2 0.5.7", + "tracing", + "windows-sys 0.52.0", +] + [[package]] name = "quote" version = "1.0.36" @@ -2507,7 +2718,28 @@ dependencies = [ "cassowary", "crossterm 0.26.1", "unicode-segmentation", - "unicode-width", + "unicode-width 0.1.13", +] + +[[package]] +name = "ratatui" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eabd94c2f37801c20583fc49dd5cd6b0ba68c716787c2dd6ed18571e1e63117b" +dependencies = [ + "bitflags 2.6.0", + "cassowary", + "compact_str", + "crossterm 0.28.1", + "indoc", + "instability", + "itertools 0.13.0", + "lru", + "paste", + "strum", + "unicode-segmentation", + "unicode-truncate", + "unicode-width 0.2.0", ] [[package]] @@ -2532,23 +2764,23 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469052894dcb553421e483e4209ee581a45100d31b4018de03e5a7ad86374a7e" +checksum = "c82cf8cff14456045f55ec4241383baeff27af886adb72ffb2162f99911de0fd" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", ] [[package]] name = "regex" -version = "1.10.4" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.6", - "regex-syntax 0.8.3", + "regex-automata 0.4.9", + "regex-syntax 0.8.5", ] [[package]] @@ -2562,13 +2794,13 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.6" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.3", + "regex-syntax 0.8.5", ] [[package]] @@ -2579,9 +2811,9 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "repr_offset" @@ -2594,21 +2826,24 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.11.27" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" +checksum = "c7d6d2a27d57148378eb5e111173f4276ad26340ecc5c49a4a2152167a2d6a37" dependencies = [ "base64", "bytes", "encoding_rs", + "futures-channel", "futures-core", "futures-util", "h2", - "http 0.2.12", - "http-body 0.4.6", - "hyper 0.14.28", + "http", + "http-body", + "http-body-util", + "hyper", "hyper-rustls", "hyper-tls", + "hyper-util", "ipnet", "js-sys", "log", @@ -2617,8 +2852,10 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", + "quinn", "rustls", "rustls-pemfile", + "rustls-pki-types", "serde", "serde_json", "serde_urlencoded", @@ -2636,12 +2873,6 @@ dependencies = [ "winreg", ] -[[package]] -name = "residua-zigzag" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b37805477eee599a61753230f511ae94d737f69b536e468e294723ad5f1b75f" - [[package]] name = "ring" version = "0.17.8" @@ -2669,6 +2900,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" +[[package]] +name = "rustc-hash" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7fb8039b3032c191086b10f11f319a6e99e1e82889c5cc6046f515c9db1d497" + [[package]] name = "rustc_version" version = "0.4.0" @@ -2698,7 +2935,7 @@ version = "0.38.34" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "errno", "libc", "linux-raw-sys 0.4.14", @@ -2707,32 +2944,42 @@ dependencies = [ [[package]] name = "rustls" -version = "0.21.12" +version = "0.23.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +checksum = "05cff451f60db80f490f3c182b77c35260baace73209e9cdbbe526bfe3a4d402" dependencies = [ - "log", + "once_cell", "ring", + "rustls-pki-types", "rustls-webpki", - "sct", + "subtle", + "zeroize", ] [[package]] name = "rustls-pemfile" -version = "1.0.4" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +checksum = "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d" dependencies = [ "base64", + "rustls-pki-types", ] +[[package]] +name = "rustls-pki-types" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" + [[package]] name = "rustls-webpki" -version = "0.101.7" +version = "0.102.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +checksum = "f9a6fccd794a42c2c105b513a2f62bc3fd8f3ba57a4593677ceb0bd035164d78" dependencies = [ "ring", + "rustls-pki-types", "untrusted", ] @@ -2744,11 +2991,11 @@ checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" [[package]] name = "rustyline" -version = "13.0.0" +version = "15.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02a2d683a4ac90aeef5b1013933f6d977bd37d51ff3f4dad829d4931a7e6be86" +checksum = "2ee1e066dc922e513bda599c6ccb5f3bb2b0ea5870a579448f2622993f0a9a2f" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "cfg-if", "clipboard-win", "fd-lock", @@ -2760,20 +3007,20 @@ dependencies = [ "radix_trie", "rustyline-derive", "unicode-segmentation", - "unicode-width", + "unicode-width 0.2.0", "utf8parse", - "winapi", + "windows-sys 0.59.0", ] [[package]] name = "rustyline-derive" -version = "0.10.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5af959c8bf6af1aff6d2b463a57f71aae53d1332da58419e30ad8dc7011d951" +checksum = "327e9d075f6df7e25fbf594f1be7ef55cf0d567a6cb5112eeccbbd51ceb48e0d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.87", ] [[package]] @@ -2793,19 +3040,20 @@ dependencies = [ [[package]] name = "sarzak" -version = "2.13.29" -source = "git+https://github.com/uberFoo/sarzak?branch=develop#0b6f1002afb9f64377e552d6aad0db66d1df1905" +version = "2.15.2" +source = "git+https://github.com/uberFoo/sarzak?branch=develop#cd95b35537c795f8fa0536ef509fea5d4c42f7d6" dependencies = [ "ansi_term", "bincode", "cfg-if", - "clap 4.5.4", + "clap 4.5.23", "heck 0.4.1", "log", "no_deadlocks", "nut", + "ordered_hash_map", "parking_lot", - "rustc-hash", + "rustc-hash 1.1.0", "serde", "serde_json", "snafu 0.7.5", @@ -2835,23 +3083,13 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "sct" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "security-framework" version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c627723fd09706bacdb5cf41499e95098555af3c3c29d014dc3c458ef6be11c0" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "core-foundation", "core-foundation-sys", "libc", @@ -2876,31 +3114,32 @@ checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" [[package]] name = "serde" -version = "1.0.202" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "226b61a0d411b2ba5ff6d7f73a476ac4f8bb900373459cd00fab8512828ba395" +checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.202" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6048858004bcff69094cd972ed40a32500f153bd3be9f716b2eed2e8217c4838" +checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.87", ] [[package]] name = "serde_json" -version = "1.0.117" +version = "1.0.134" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" +checksum = "d00f4175c42ee48b15416f6193a959ba3a0d67fc699a0db9ad12df9f83991c7d" dependencies = [ "itoa", + "memchr", "ryu", "serde", ] @@ -2944,12 +3183,13 @@ dependencies = [ [[package]] name = "signal-hook-mio" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af" +checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd" dependencies = [ "libc", - "mio", + "mio 0.8.11", + "mio 1.0.3", "signal-hook", ] @@ -2962,12 +3202,6 @@ dependencies = [ "libc", ] -[[package]] -name = "simdutf8" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a" - [[package]] name = "slab" version = "0.4.9" @@ -3014,19 +3248,19 @@ dependencies = [ [[package]] name = "smol" -version = "2.0.0" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e635339259e51ef85ac7aa29a1cd991b957047507288697a690e80ab97d07cad" +checksum = "a33bd3e260892199c3ccfc487c88b2da2265080acb316cd920da72fdfd7c599f" dependencies = [ "async-channel 2.3.1", "async-executor", "async-fs 2.1.2", - "async-io 2.3.2", - "async-lock 3.3.0", + "async-io 2.4.0", + "async-lock 3.4.0", "async-net 2.0.0", - "async-process 2.2.2", + "async-process 2.2.3", "blocking", - "futures-lite 2.3.0", + "futures-lite 2.5.0", ] [[package]] @@ -3041,11 +3275,11 @@ dependencies = [ [[package]] name = "snafu" -version = "0.8.2" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75976f4748ab44f6e5332102be424e7c2dc18daeaf7e725f2040c3ebb133512e" +checksum = "223891c85e2a29c3fe8fb900c1fae5e69c2e42415e3177752e8718475efa5019" dependencies = [ - "snafu-derive 0.8.2", + "snafu-derive 0.8.5", ] [[package]] @@ -3062,14 +3296,14 @@ dependencies = [ [[package]] name = "snafu-derive" -version = "0.8.2" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4b19911debfb8c2fb1107bc6cb2d61868aaf53a988449213959bb1b5b1ed95f" +checksum = "03c3c6b7927ffe7ecaa769ee0e3994da3b8cafc8f444578982c83ecb161af917" dependencies = [ - "heck 0.4.1", + "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.87", ] [[package]] @@ -3129,6 +3363,34 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +[[package]] +name = "strum" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" +dependencies = [ + "strum_macros", +] + +[[package]] +name = "strum_macros" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.87", +] + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + [[package]] name = "syn" version = "1.0.109" @@ -3142,9 +3404,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.65" +version = "2.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2863d96a84c6439701d7a38f9de935ec562c8832cc55d1dde0f513b52fad106" +checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" dependencies = [ "proc-macro2", "quote", @@ -3153,9 +3415,9 @@ dependencies = [ [[package]] name = "sync_wrapper" -version = "0.1.2" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" +checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" [[package]] name = "syntect" @@ -3170,7 +3432,7 @@ dependencies = [ "once_cell", "onig", "plist", - "regex-syntax 0.8.3", + "regex-syntax 0.8.5", "serde", "serde_derive", "serde_json", @@ -3227,7 +3489,7 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b319995299c65d522680decf80f2c108d85b861d81dfe340a10d16cee29d9e6" dependencies = [ - "env_logger 0.11.3", + "env_logger 0.11.6", "test-log-macros", "tracing-subscriber", ] @@ -3240,7 +3502,7 @@ checksum = "5999e24eaa32083191ba4e425deb75cdf25efefabe5aaccb7446dd0d4122a3f5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.87", ] [[package]] @@ -3266,7 +3528,7 @@ checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.87", ] [[package]] @@ -3340,9 +3602,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +checksum = "ce6b6a2fb3a985e99cebfaefa9faa3024743da73304ca1c683a36429613d3d22" dependencies = [ "tinyvec_macros", ] @@ -3355,14 +3617,14 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.37.0" +version = "1.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787" +checksum = "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a" dependencies = [ "backtrace", "bytes", "libc", - "mio", + "mio 0.8.11", "pin-project-lite", "socket2 0.5.7", "windows-sys 0.48.0", @@ -3380,11 +3642,12 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.24.1" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" dependencies = [ "rustls", + "rustls-pki-types", "tokio", ] @@ -3410,6 +3673,27 @@ dependencies = [ "serde", ] +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "pin-project", + "pin-project-lite", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" + [[package]] name = "tower-service" version = "0.3.2" @@ -3418,9 +3702,9 @@ checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" [[package]] name = "tracing" -version = "0.1.40" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "pin-project-lite", "tracing-attributes", @@ -3429,20 +3713,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.87", ] [[package]] name = "tracing-core" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ "once_cell", "valuable", @@ -3461,9 +3745,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.18" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" dependencies = [ "matchers", "nu-ansi-term", @@ -3479,9 +3763,9 @@ dependencies = [ [[package]] name = "tracing-tracy" -version = "0.11.0" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6024d04f84a69fd0d1dc1eee3a2b070bd246530a0582f9982ae487cb6c703614" +checksum = "0eaa1852afa96e0fe9e44caa53dc0bd2d9d05e0f2611ce09f97f8677af56e4ba" dependencies = [ "tracing-core", "tracing-subscriber", @@ -3528,6 +3812,16 @@ dependencies = [ "cc", ] +[[package]] +name = "tracy-client-sys" +version = "0.24.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69fff37da548239c3bf9e64a12193d261e8b22b660991c6fd2df057c168f435f" +dependencies = [ + "cc", + "windows-targets 0.52.6", +] + [[package]] name = "try-lock" version = "0.2.5" @@ -3551,12 +3845,12 @@ checksum = "e78122066b0cb818b8afd08f7ed22f7fdbc3e90815035726f0840d0d26c0747a" [[package]] name = "tui-input" -version = "0.8.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3e785f863a3af4c800a2a669d0b64c879b538738e352607e2624d03f868dc01" +checksum = "e5d1733c47f1a217b7deff18730ff7ca4ecafc5771368f715ab072d679a36114" dependencies = [ - "crossterm 0.27.0", - "unicode-width", + "ratatui 0.29.0", + "unicode-width 0.2.0", ] [[package]] @@ -3569,7 +3863,7 @@ dependencies = [ "lazy_static", "log", "parking_lot", - "ratatui", + "ratatui 0.20.1", ] [[package]] @@ -3580,7 +3874,7 @@ dependencies = [ "ansi-to-tui", "crossterm 0.26.1", "log", - "ratatui", + "ratatui 0.20.1", "syntect", ] @@ -3589,8 +3883,8 @@ name = "tui-tree-widget" version = "0.12.0" source = "git+https://github.com/uberFoo/tui-rs-tree-widget#dd20714466aedeb915e24228ced9d56563dd109b" dependencies = [ - "ratatui", - "unicode-width", + "ratatui 0.20.1", + "unicode-width 0.1.13", ] [[package]] @@ -3622,15 +3916,32 @@ dependencies = [ [[package]] name = "unicode-segmentation" -version = "1.11.0" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" + +[[package]] +name = "unicode-truncate" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" +checksum = "b3644627a5af5fa321c95b9b235a72fd24cd29c648c2c379431e6628655627bf" +dependencies = [ + "itertools 0.13.0", + "unicode-segmentation", + "unicode-width 0.1.13", +] [[package]] name = "unicode-width" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f5e5f3158ecfd4b8ff6fe086db7c8467a2dfdac97fe420f2b7c4aa97af66d6" +checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" + +[[package]] +name = "unicode-width" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" [[package]] name = "untrusted" @@ -3640,9 +3951,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.0" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" dependencies = [ "form_urlencoded", "idna", @@ -3651,15 +3962,15 @@ dependencies = [ [[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 = "uuid" -version = "1.8.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" +checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" dependencies = [ "getrandom 0.2.15", "serde", @@ -3752,7 +4063,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.87", "wasm-bindgen-shared", ] @@ -3786,7 +4097,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.87", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -3809,9 +4120,12 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.25.4" +version = "0.26.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" +checksum = "bd7c23921eeb1713a4e851530e9b9756e4fb0e89978582942612524cf09f01cd" +dependencies = [ + "rustls-pki-types", +] [[package]] name = "winapi" @@ -3860,7 +4174,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9252e5725dbed82865af151df558e754e4a3c2c30818359eb17465f1346a1b49" dependencies = [ "windows-core 0.54.0", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -3869,7 +4183,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -3879,16 +4193,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "12661b9c89351d684a50a8a643ce5f608e20243b9fb84687800163429f161d65" dependencies = [ "windows-result", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] name = "windows-result" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "749f0da9cc72d82e600d8d2e44cadd0b9eedb9038f71a1c58556ac1c5791813b" +checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8" dependencies = [ - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -3906,7 +4220,16 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.5", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", ] [[package]] @@ -3926,18 +4249,18 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.5", - "windows_aarch64_msvc 0.52.5", - "windows_i686_gnu 0.52.5", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", "windows_i686_gnullvm", - "windows_i686_msvc 0.52.5", - "windows_x86_64_gnu 0.52.5", - "windows_x86_64_gnullvm 0.52.5", - "windows_x86_64_msvc 0.52.5", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", ] [[package]] @@ -3948,9 +4271,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" @@ -3960,9 +4283,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" @@ -3972,15 +4295,15 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" @@ -3990,9 +4313,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" @@ -4002,9 +4325,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" @@ -4014,9 +4337,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" @@ -4026,15 +4349,15 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winreg" -version = "0.50.0" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" dependencies = [ "cfg-if", "windows-sys 0.48.0", @@ -4055,22 +4378,34 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" +[[package]] +name = "yansi" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" + [[package]] name = "zerocopy" -version = "0.7.34" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.34" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.87", ] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" diff --git a/Cargo.toml b/Cargo.toml index ab8b39d2..a783e085 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "dwarf" -version = "0.8.1" +version = "0.9.0" authors = ["Keith T. Star "] categories = ["compilers", "command-line-interface"] description = "A Rust-like, typed, interpreted programming language" @@ -37,34 +37,34 @@ ansi_term = "0.12.1" ansi-to-tui = { git = "https://github.com/uberFoo/ansi-to-tui" } async-compat = { version = "0.2.3", optional = true } async-condvar-fair = { version = "1.0.0", features = ["smol"], optional = true } -async-executor = { version = "1.6.0", optional = true } -async-io = { version = "2.2.0", optional = true } +async-executor = { version = "1.13.1", optional = true } +async-io = { version = "2.4.0", optional = true } async-task = { version = "4.5.0", optional = true } ariadne = { git = "https://github.com/uberFoo/ariadne" } -backtrace = "0.3.67" +backtrace = "0.3.74" bincode = "1.3.3" -bitcode = { version = "0.5.1", features = ["serde"] } +bitcode = { version = "0.6.3", features = ["serde"] } cfg-if = "1.0.0" chumsky = "0.9.3" circular-queue = "0.2.6" -clap = { version = "4.2.2", features = ["derive"] } +clap = { version = "4.5.23", features = ["derive"] } color-backtrace = "0.6.0" core_extensions = { version = "1.5.3", default-features = false, features = [ "std", ] } crossbeam = { version = "0.8.2", features = ["crossbeam-channel"] } -crossterm = "0.27.0" +crossterm = "0.28.1" dap = "0.2.0-alpha1" -env_logger = "0.10.0" -futures-lite = { version = "2.0.0", optional = true } -heck = "0.4.1" -hyper = { version = "1.1.0", optional = true } +env_logger = "0.11.6" +futures-lite = { version = "2.5.0", optional = true } +heck = "0.5.0" +hyper = { version = "1.5.2", optional = true } lazy_static = "1.4.0" log = "0.4.18" no_deadlocks = { git = "https://github.com/uberFoo/no-deadlocks", optional = true } num_cpus = "1.16.0" num-format = "0.4.4" -once_cell = { version = "1.18.0" } +once_cell = { version = "1.20.2" } parking_lot = { version = "0.12.1", features = [ "send_guard", "serde", @@ -73,31 +73,31 @@ parking_lot = { version = "0.12.1", features = [ pretty_env_logger = "0.5.0" puteketeke = { version = "0.0.5", optional = true } ratatui = { git = "https://github.com/uberFoo/ratatui", optional = true } -regex = "1.10.3" -reqwest = { version = "0.11.18", features = ["blocking", "rustls-tls"] } -rustc-hash = "1.1.0" -rustyline = { version = "13.0.0", optional = true, features = [ +regex = "1.11.1" +reqwest = { version = "0.12.5", features = ["blocking", "rustls-tls"] } +rustc-hash = "2.1.0" +rustyline = { version = "15.0.0", optional = true, features = [ "derive", "with-file-history", ] } sarzak = { git = "https://github.com/uberFoo/sarzak", branch = "develop", default-features = false, features = [ "sarzak-rwlock", ] } -serde = { version = "1.0.160", features = ["derive", "rc"] } -serde_json = "1.0.96" +serde = { version = "1.0.217", features = ["derive", "rc"] } +serde_json = "1.0.134" slab = "0.4.9" smartstring = { version = "1.0.1", features = ["serde"] } -smol = { version = "2.0.0", optional = true } -snafu = "0.8.0" +smol = { version = "2.0.2", optional = true } +snafu = "0.8.5" syntect = { version = "5.0.0", optional = true } test-log = { version = "0.2.14", features = ["tracing-subscriber", "trace"] } threadpool = "1.8.1" -tracing = { version = "0.1.40" } -tracing-subscriber = { version = "0.3.17", features = ["env-filter"] } +tracing = { version = "0.1.41" } +tracing-subscriber = { version = "0.3.19", features = ["env-filter"] } tracy-client = { version = "0.17.0", optional = true } -tracy-client-sys = "0.22.0" -tracing-tracy = "0.11.0" -tui-input = { version = "0.8.0", optional = true } +tracy-client-sys = "0.24.3" +tracing-tracy = "0.11.4" +tui-input = { version = "0.11.1", optional = true } tui-logger = { git = "https://github.com/uberFoo/tui-logger", optional = true, default-features = false, features = [ "ratatui-support", ] } @@ -105,8 +105,8 @@ tui-textarea = { git = "https://github.com/uberFoo/tui-textarea", optional = tru "ratatui-crossterm", ] } tui-tree-widget = { git = "https://github.com/uberFoo/tui-rs-tree-widget", optional = true } -unicode-segmentation = "1.10.1" -uuid = { version = "1.6.1", features = ["v4", "serde"] } +unicode-segmentation = "1.12.0" +uuid = { version = "1.11.0", features = ["v4", "serde"] } dotenvy = "0.15.7" # value = { path = "crates/value" } @@ -114,13 +114,14 @@ dotenvy = "0.15.7" # [patch.crates-io] # puteketeke = { path = "../../github/puteketeke" } -# [patch."https://github.com/uberFoo/sarzak"] -# sarzak = { path = "../sarzak" } +#[patch."https://github.com/uberFoo/sarzak"] +#sarzak = { path = "../sarzak" } [dev-dependencies] backtrace = "0.3.67" criterion = { version = "0.5.1", features = ["html_reports"] } diff = "0.1.13" +itertools = "0.13.0" [build-dependencies] chrono = "0.4.31" @@ -131,7 +132,7 @@ default = ["async-executor"] single = ["single-vec", "repl", "print-std-out"] debug = ["sarzak/lu-dog-rc", "repl", "print-std-out"] nd-executor = ["multi-nd-vec", "repl", "print-std-out", "async"] -async-executor = ["multi-vec", "repl", "print-std-out", "async"] +async-executor = ["lu-dog-rc", "repl", "print-std-out", "async"] tracy-client = ["dep:tracy-client"] @@ -156,7 +157,8 @@ tracy = [ "dep:tracy-client", ] - +lu-dog-rc = ["sarzak/lu-dog-rc"] +multi-lu-dog = ["sarzak/lu-dog-rwlock"] single-vec = ["sarzak/lu-dog-vec"] single-vec-tracy = ["sarzak/lu-dog-vec-tracy", "dep:tracy-client"] multi-vec = ["sarzak/lu-dog-rwlock-vec"] diff --git a/bacon.toml b/bacon.toml index b894ff22..65e905b7 100644 --- a/bacon.toml +++ b/bacon.toml @@ -28,7 +28,7 @@ command = [ "--all-targets", "--no-default-features", "--features", - "multi-vec, repl, async", + "lu-dog-rc, repl, async", "--color", "always", ] @@ -41,7 +41,7 @@ command = [ "--no-default-features", "--features", # "single-vec, repl", - "multi-vec, repl, async", + "lu-dog-rc, repl, async", "--all-targets", "--color", "always", @@ -58,7 +58,7 @@ command = [ "coverage.lcov", "--no-default-features", "--features", - "multi-vec, repl, async", + "lu-dog-rc, repl, async", "--color", "always", "--", diff --git a/benches/dwarf.rs b/benches/dwarf.rs index 584d728d..6f3bdd96 100644 --- a/benches/dwarf.rs +++ b/benches/dwarf.rs @@ -2,51 +2,16 @@ use std::{env, fs, path::PathBuf}; use criterion::{criterion_group, criterion_main, Criterion}; use dwarf::{ - bubba::{compiler::compile, value::Value as BubbaValue, VM}, - chacha::interpreter::{initialize_interpreter, start_func}, + bubba::{compiler::compile, VM}, dwarf::{new_lu_dog, parse_dwarf}, - new_ref, NewRef, RefType, Value, + sarzak::{ObjectStore as SarzakStore, MODEL as SARZAK_MODEL}, }; -use sarzak::sarzak::{ObjectStore as SarzakStore, MODEL as SARZAK_MODEL}; #[cfg(feature = "tracy")] use tracy_client::Client; -const MANDEL_SOURCE_FILE: &str = "./benches/mandelbrot.tao"; const FIB_SOURCE_FILE: &str = "./benches/fib.tao"; const LOOP_SOURCE_FILE: &str = "./benches/loop.ore"; -fn mandelbrot(c: &mut Criterion) { - #[cfg(feature = "tracy")] - Client::start(); - - let source = fs::read_to_string(MANDEL_SOURCE_FILE).unwrap(); - let ast = parse_dwarf("mandelbrot", &source).unwrap(); - let sarzak = SarzakStore::from_bincode(SARZAK_MODEL).unwrap(); - - let dwarf_home = env::var("DWARF_HOME") - .unwrap_or_else(|_| { - let mut home = env::var("HOME").unwrap(); - home.push_str("/.dwarf"); - home - }) - .into(); - - let ctx = new_lu_dog( - "mandelbrot".to_owned(), - Some((source, &ast)), - &dwarf_home, - &env::current_dir().unwrap(), - &sarzak, - ) - .unwrap(); - - let ctx = initialize_interpreter(num_cpus::get(), dwarf_home, ctx).unwrap(); - - c.bench_function("mandelbrot-14x4", |b| { - b.iter(|| start_func("main", false, &mut ctx.clone()).unwrap()) - }); -} - fn fib_vm(c: &mut Criterion) { #[cfg(feature = "tracy")] Client::start(); @@ -68,17 +33,18 @@ fn fib_vm(c: &mut Criterion) { Some((source, &ast)), &dwarf_home, &env::current_dir().unwrap(), + false, &sarzak, ) .unwrap(); - let Ok(program) = compile(&lu_dog_ctx) else { + let Ok(program) = compile(&lu_dog_ctx, false) else { panic!("Failed to compile program"); }; let args = vec![ - new_ref!(BubbaValue, "fib".into()), - new_ref!(BubbaValue, "17".into()), + std::sync::Arc::new(std::sync::RwLock::new("fib".into())), + std::sync::Arc::new(std::sync::RwLock::new(17.into())), ]; #[cfg(feature = "async")] let mut vm = VM::new(&program, &args, &PathBuf::new(), num_cpus::get(), false); @@ -87,8 +53,8 @@ fn fib_vm(c: &mut Criterion) { c.bench_function("fib-vm-17", |b| b.iter(|| vm.invoke("main", &[]).unwrap())); let args = vec![ - new_ref!(BubbaValue, "fib".into()), - new_ref!(BubbaValue, "28".into()), + std::sync::Arc::new(std::sync::RwLock::new("fib".into())), + std::sync::Arc::new(std::sync::RwLock::new(28.into())), ]; #[cfg(feature = "async")] let mut vm = VM::new(&program, &args, &PathBuf::new(), num_cpus::get(), false); @@ -97,8 +63,8 @@ fn fib_vm(c: &mut Criterion) { c.bench_function("fib-vm-28", |b| b.iter(|| vm.invoke("main", &[]).unwrap())); let args = vec![ - new_ref!(BubbaValue, "fib".into()), - new_ref!(BubbaValue, "5".into()), + std::sync::Arc::new(std::sync::RwLock::new("fib".into())), + std::sync::Arc::new(std::sync::RwLock::new(5.into())), ]; #[cfg(feature = "async")] let mut vm = VM::new(&program, &args, &PathBuf::new(), num_cpus::get(), false); @@ -107,79 +73,6 @@ fn fib_vm(c: &mut Criterion) { c.bench_function("fib-vm-5", |b| b.iter(|| vm.invoke("main", &[]).unwrap())); } -fn fib(c: &mut Criterion) { - #[cfg(feature = "tracy")] - Client::start(); - - let source = fs::read_to_string(FIB_SOURCE_FILE).unwrap(); - let ast = parse_dwarf("fib", &source).unwrap(); - let sarzak = SarzakStore::from_bincode(SARZAK_MODEL).unwrap(); - - let dwarf_home = env::var("DWARF_HOME") - .unwrap_or_else(|_| { - let mut home = env::var("HOME").unwrap(); - home.push_str("/.dwarf"); - home - }) - .into(); - - let lu_dog_ctx = new_lu_dog( - "fib".to_owned(), - Some((source, &ast)), - &dwarf_home, - &env::current_dir().unwrap(), - &sarzak, - ) - .unwrap(); - - let mut ctx = - initialize_interpreter(num_cpus::get(), dwarf_home.clone(), lu_dog_ctx.clone()).unwrap(); - ctx.add_args(vec!["fib".to_owned(), "17".to_owned()]); - - c.bench_function("fib-17", |b| { - b.iter(|| start_func("main", false, &mut ctx.clone()).unwrap()) - }); - - // let mut ctx = initialize_interpreter(num_cpus::get(), dwarf_home, lu_dog_ctx).unwrap(); - // ctx.add_args(vec!["fib".to_owned(), "28".to_owned()]); - - // c.bench_function("fib-28", |b| { - // b.iter(|| start_func("main", false, &mut ctx.clone()).unwrap()) - // }); -} - -fn loop_(c: &mut Criterion) { - #[cfg(feature = "tracy")] - Client::start(); - let _ = env_logger::builder().is_test(true).try_init(); - let source = fs::read_to_string(LOOP_SOURCE_FILE).unwrap(); - let ast = parse_dwarf("loop", &source).unwrap(); - let sarzak = SarzakStore::from_bincode(SARZAK_MODEL).unwrap(); - - let dwarf_home = env::var("DWARF_HOME") - .unwrap_or_else(|_| { - let mut home = env::var("HOME").unwrap(); - home.push_str("/.dwarf"); - home - }) - .into(); - - let lu_dog_ctx = new_lu_dog( - "loop".to_owned(), - Some((source, &ast)), - &dwarf_home, - &env::current_dir().unwrap(), - &sarzak, - ) - .unwrap(); - - let ctx = initialize_interpreter(num_cpus::get(), dwarf_home, lu_dog_ctx).unwrap(); - - c.bench_function("loop", |b| { - b.iter(|| start_func("main", false, &mut ctx.clone()).unwrap()) - }); -} - fn loop_vm(c: &mut Criterion) { #[cfg(feature = "tracy")] Client::start(); @@ -201,11 +94,12 @@ fn loop_vm(c: &mut Criterion) { Some((source, &ast)), &dwarf_home, &env::current_dir().unwrap(), + false, &sarzak, ) .unwrap(); - let Ok(program) = compile(&lu_dog_ctx) else { + let Ok(program) = compile(&lu_dog_ctx, false) else { panic!("Failed to compile program"); }; #[cfg(feature = "async")] @@ -218,5 +112,5 @@ fn loop_vm(c: &mut Criterion) { // criterion_group!(benches, loop_, mandelbrot, fib, vm_28, vm_25, vm_17, vm_5); // criterion_group!(benches, vm_25, vm_17, vm_5); -criterion_group!(benches, fib, fib_vm, loop_vm); +criterion_group!(benches, fib_vm, loop_vm); criterion_main!(benches); diff --git a/build.rs b/build.rs index 2d51ac67..10ce15c2 100644 --- a/build.rs +++ b/build.rs @@ -4,13 +4,11 @@ use walkdir::WalkDir; const EXT1: &str = "tao"; const EXT2: &str = "ore"; -const INTERP_HARNESS_DIR: &str = "harness"; -const INTERP_OUT_NAME: &str = "tests.rs"; +const HARNESS_DIR: &str = "harness"; +const OUT_NAME: &str = "tests.rs"; const SRC_DIR: &str = "src"; const TEST_DIR: &str = "tests"; const TEST_FAILED: &str = "TEST_FAILED"; -const VM_HARNESS_DIR: &str = "vm_harness"; -const VM_OUT_NAME: &str = "vm_tests.rs"; fn main() { // Create a timestamp file @@ -21,19 +19,13 @@ fn main() { // write!(f, r#""{}""#, time::OffsetDateTime::now_utc()).unwrap(); write!(f, r#""{}""#, chrono::Utc::now().to_rfc3339()).unwrap(); - // Generate the interpreter tests - let tests = generate_tests(INTERP_HARNESS_DIR); - let dest_path = Path::new(&out_dir).join(INTERP_OUT_NAME); - fs::write(dest_path, tests).unwrap(); - - // VM Tests - let tests = generate_tests(VM_HARNESS_DIR); - let dest_path = Path::new(&out_dir).join(VM_OUT_NAME); + // Generate the harness tests + let tests = generate_tests(HARNESS_DIR); + let dest_path = Path::new(&out_dir).join(OUT_NAME); fs::write(dest_path, tests).unwrap(); println!("cargo:rerun-if-changed={SRC_DIR}"); - println!("cargo:rerun-if-changed={TEST_DIR}/{INTERP_HARNESS_DIR}"); - println!("cargo:rerun-if-changed={TEST_DIR}/{VM_HARNESS_DIR}"); + println!("cargo:rerun-if-changed={TEST_DIR}/{HARNESS_DIR}"); } fn generate_tests(path: &str) -> String { diff --git a/plugins/http/Cargo.lock b/plugins/http/Cargo.lock index 2f7d533b..1026e46d 100644 --- a/plugins/http/Cargo.lock +++ b/plugins/http/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "abi_stable" @@ -52,18 +52,18 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.21.0" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ "gimli", ] [[package]] -name = "adler" -version = "1.0.2" +name = "adler2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "ahash" @@ -88,9 +88,9 @@ dependencies = [ [[package]] name = "allocator-api2" -version = "0.2.18" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "android-tzdata" @@ -114,7 +114,7 @@ source = "git+https://github.com/uberFoo/ansi-to-tui#84bac8fbfe4d84d023dce0a32f0 dependencies = [ "nom", "ratatui", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -128,9 +128,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.14" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" dependencies = [ "anstyle", "anstyle-parse", @@ -143,58 +143,58 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.7" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" [[package]] name = "anstyle-parse" -version = "0.2.4" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.0.3" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a64c907d4e79225ac72e2a354c9ce84d50ebb4586dee56c82b3ee73004f537f5" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.3" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" +checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" dependencies = [ "anstyle", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "anyhow" -version = "1.0.86" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" +checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" [[package]] name = "ariadne" version = "0.3.0" source = "git+https://github.com/uberFoo/ariadne#7f145e849a2a3c80efe4306d90d89de3198dab4f" dependencies = [ - "unicode-width", + "unicode-width 0.1.14", "yansi", ] [[package]] name = "arrayvec" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "as_derive_utils" @@ -226,16 +226,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" dependencies = [ "concurrent-queue", - "event-listener-strategy 0.5.2", + "event-listener-strategy", "futures-core", "pin-project-lite", ] [[package]] name = "async-compat" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f68a707c1feb095d8c07f8a65b9f506b117d30af431cab89374357de7c11461b" +checksum = "7bab94bde396a3f7b4962e396fdad640e241ed797d4d8d77fc8c237d14c58fc0" dependencies = [ "futures-core", "futures-io", @@ -258,14 +258,14 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.11.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b10202063978b3351199d68f8b22c4e47e4b1b822f8d43fd862d5ea8c006b29a" +checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" dependencies = [ "async-task", "concurrent-queue", - "fastrand 2.1.0", - "futures-lite 2.3.0", + "fastrand 2.3.0", + "futures-lite 2.5.0", "slab", ] @@ -287,9 +287,9 @@ version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a" dependencies = [ - "async-lock 3.3.0", + "async-lock 3.4.0", "blocking", - "futures-lite 2.3.0", + "futures-lite 2.5.0", ] [[package]] @@ -306,7 +306,7 @@ dependencies = [ "log", "parking", "polling 2.8.0", - "rustix 0.37.27", + "rustix 0.37.28", "slab", "socket2 0.4.10", "waker-fn", @@ -314,21 +314,21 @@ dependencies = [ [[package]] name = "async-io" -version = "2.3.2" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcccb0f599cfa2f8ace422d3555572f47424da5648a4382a9dd0310ff8210884" +checksum = "43a2b323ccce0a1d90b449fd71f2a06ca7faa7c54c2751f06c9bd851fc061059" dependencies = [ - "async-lock 3.3.0", + "async-lock 3.4.0", "cfg-if", "concurrent-queue", "futures-io", - "futures-lite 2.3.0", + "futures-lite 2.5.0", "parking", - "polling 3.7.0", - "rustix 0.38.34", + "polling 3.7.4", + "rustix 0.38.43", "slab", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -342,12 +342,12 @@ dependencies = [ [[package]] name = "async-lock" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d034b430882f8381900d3fe6f0aaa3ad94f2cb4ac519b429692a1bc2dda4ae7b" +checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" dependencies = [ - "event-listener 4.0.3", - "event-listener-strategy 0.4.0", + "event-listener 5.4.0", + "event-listener-strategy", "pin-project-lite", ] @@ -368,9 +368,9 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b948000fad4873c1c9339d60f2623323a0cfd3816e5181033c6a5cb68b2accf7" dependencies = [ - "async-io 2.3.2", + "async-io 2.4.0", "blocking", - "futures-lite 2.3.0", + "futures-lite 2.5.0", ] [[package]] @@ -386,46 +386,45 @@ dependencies = [ "cfg-if", "event-listener 3.1.0", "futures-lite 1.13.0", - "rustix 0.38.34", + "rustix 0.38.43", "windows-sys 0.48.0", ] [[package]] name = "async-process" -version = "2.2.2" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a53fc6301894e04a92cb2584fedde80cb25ba8e02d9dc39d4a87d036e22f397d" +checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb" dependencies = [ "async-channel 2.3.1", - "async-io 2.3.2", - "async-lock 3.3.0", + "async-io 2.4.0", + "async-lock 3.4.0", "async-signal", "async-task", "blocking", "cfg-if", - "event-listener 5.3.0", - "futures-lite 2.3.0", - "rustix 0.38.34", + "event-listener 5.4.0", + "futures-lite 2.5.0", + "rustix 0.38.43", "tracing", - "windows-sys 0.52.0", ] [[package]] name = "async-signal" -version = "0.2.6" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afe66191c335039c7bb78f99dc7520b0cbb166b3a1cb33a03f53d8a1c6f2afda" +checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" dependencies = [ - "async-io 2.3.2", - "async-lock 3.3.0", + "async-io 2.4.0", + "async-lock 3.4.0", "atomic-waker", "cfg-if", "futures-core", "futures-io", - "rustix 0.38.34", + "rustix 0.38.43", "signal-hook-registry", "slab", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -453,18 +452,17 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "aws-lc-rs" -version = "1.7.1" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8487b59d62764df8231cb371c459314df895b41756df457a1fb1243d65c89195" +checksum = "f409eb70b561706bf8abba8ca9c112729c481595893fd06a2dd9af8ed8441148" dependencies = [ "aws-lc-sys", - "mirai-annotations", "paste", "untrusted 0.7.1", "zeroize", @@ -472,40 +470,33 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.16.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c15eb61145320320eb919d9bab524617a7aa4216c78d342fae3a758bc33073e4" +checksum = "923ded50f602b3007e5e63e3f094c479d9c8a9b42d7f4034e4afe456aa48bfd2" dependencies = [ "bindgen", "cc", "cmake", "dunce", "fs_extra", - "libc", "paste", ] [[package]] name = "backtrace" -version = "0.3.71" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", - "cc", "cfg-if", "libc", "miniz_oxide", "object", "rustc-demangle", + "windows-targets 0.52.6", ] -[[package]] -name = "base64" -version = "0.21.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" - [[package]] name = "base64" version = "0.22.1" @@ -523,14 +514,14 @@ dependencies = [ [[package]] name = "bindgen" -version = "0.69.4" +version = "0.69.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a00dc851838a2120612785d195287475a3ac45514741da670b735818822129a0" +checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.7.0", "cexpr", "clang-sys", - "itertools 0.12.1", + "itertools", "lazy_static", "lazycell", "log", @@ -538,36 +529,34 @@ dependencies = [ "proc-macro2", "quote", "regex", - "rustc-hash", + "rustc-hash 1.1.0", "shlex", - "syn 2.0.65", + "syn 2.0.96", "which", ] [[package]] name = "bitcode" -version = "0.5.1" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a733ab290c6e6b2859bba3e68fd1a4ca3eee0577f21ea46049a3529e500627" +checksum = "ee1bce7608560cd4bf0296a4262d0dbf13e6bcec5ff2105724c8ab88cc7fc784" dependencies = [ + "arrayvec", "bitcode_derive", "bytemuck", - "from_bytes_or_zeroed", - "residua-zigzag", + "glam", "serde", - "simdutf8", ] [[package]] name = "bitcode_derive" -version = "0.5.0" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c25ffc293cbf807499083d016ce3bc0459aaa7fd624c1cc563718a2440cb38a" +checksum = "a539389a13af092cd345a2b47ae7dec12deb306d660b2223d25cd3419b253ebe" dependencies = [ - "packagemerge", "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.96", ] [[package]] @@ -578,21 +567,20 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.5.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +checksum = "1be3f42a67d6d345ecd59f675f3f012d6974981560836e938c22b424b85ce1be" [[package]] name = "blocking" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "495f7104e962b7356f0aeb34247aca1fe7d2e783b346582db7f2904cb5717e88" +checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" dependencies = [ "async-channel 2.3.1", - "async-lock 3.3.0", "async-task", "futures-io", - "futures-lite 2.3.0", + "futures-lite 2.5.0", "piper", ] @@ -604,15 +592,21 @@ checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "bytemuck" -version = "1.16.0" +version = "1.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" + +[[package]] +name = "byteorder" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78834c15cb5d5efe3452d58b1e8ba890dd62d21907f867f383358198e56ebca5" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.6.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" +checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" [[package]] name = "cassowary" @@ -622,13 +616,13 @@ checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53" [[package]] name = "cc" -version = "1.0.98" +version = "1.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41c270e7540d725e65ac7f1b212ac8ce349719624d7bcff99f8e2e488e8cf03f" +checksum = "a012a0df96dd6d06ba9a1b29d6402d1a5d77c6befd2566afdc26e10603dc93d7" dependencies = [ "jobserver", "libc", - "once_cell", + "shlex", ] [[package]] @@ -646,18 +640,24 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + [[package]] name = "chrono" -version = "0.4.38" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" dependencies = [ "android-tzdata", "iana-time-zone", "js-sys", "num-traits", "wasm-bindgen", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -681,13 +681,13 @@ dependencies = [ [[package]] name = "clang-sys" -version = "1.7.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67523a3b4be3ce1989d607a828d036249522dd9c1c8de7f4dd2dae43a37369d1" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" dependencies = [ "glob", "libc", - "libloading 0.8.3", + "libloading 0.8.6", ] [[package]] @@ -709,23 +709,23 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.4" +version = "4.5.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0" +checksum = "a8eb5e908ef3a6efbe1ed62520fb7287959888c88485abe072543190ecc66783" dependencies = [ "clap_builder", - "clap_derive 4.5.4", + "clap_derive 4.5.24", ] [[package]] name = "clap_builder" -version = "4.5.2" +version = "4.5.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" +checksum = "96b01801b5fc6a0a232407abc821660c9c6d25a1cafc0d4f85f29fb8d9afc121" dependencies = [ "anstream", "anstyle", - "clap_lex 0.7.0", + "clap_lex 0.7.4", "strsim 0.11.1", ] @@ -744,14 +744,14 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.4" +version = "4.5.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64" +checksum = "54b755194d6389280185988721fffba69495eed5ee9feeee9a599b53db80318c" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.96", ] [[package]] @@ -765,24 +765,24 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.0" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" [[package]] name = "clipboard-win" -version = "5.3.1" +version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79f4473f5144e20d9aceaf2972478f06ddf687831eafeeb434fbaf0acc4144ad" +checksum = "15efe7a882b08f34e38556b14f2fb3daa98769d06c7f0c1b076dfd0d983bc892" dependencies = [ "error-code", ] [[package]] name = "cmake" -version = "0.1.50" +version = "0.1.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31c789563b815f77f4250caee12365734369f942439b7defd71e18a48197130" +checksum = "c682c223677e0e5b6b7f63a64b9351844c3f1b1678a68b7ee617e30fb082620e" dependencies = [ "cc", ] @@ -799,9 +799,9 @@ dependencies = [ [[package]] name = "colorchoice" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" [[package]] name = "concurrent-queue" @@ -834,9 +834,9 @@ dependencies = [ [[package]] name = "const_panic" -version = "0.2.8" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6051f239ecec86fde3410901ab7860d458d160371533842974fc61f96d15879b" +checksum = "2459fc9262a1aa204eb4b5764ad4f189caec88aea9634389c0a25f8be7f6265e" [[package]] name = "core-foundation" @@ -850,9 +850,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "core_extensions" @@ -884,18 +884,18 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.13" +version = "0.5.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" +checksum = "06ba6d68e24814cb8de6bb986db8222d3a027d15872cabc0d18817bc3c0e4471" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-deque" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" dependencies = [ "crossbeam-epoch", "crossbeam-utils", @@ -912,30 +912,30 @@ dependencies = [ [[package]] name = "crossbeam-queue" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.20" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crossterm" -version = "0.27.0" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f476fe445d41c9e991fd07515a6f463074b782242ccf4a5b7b1d1012e70824df" +checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.7.0", "crossterm_winapi", - "libc", "mio", "parking_lot", + "rustix 0.38.43", "signal-hook", "signal-hook-mio", "winapi", @@ -964,7 +964,7 @@ checksum = "85b03f0c23c75d79d10ae9e6ea850f795db0b11bb9610d55f7751d8a92272db2" dependencies = [ "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -973,6 +973,17 @@ version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + [[package]] name = "dlv-list" version = "0.5.2" @@ -996,13 +1007,13 @@ checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" [[package]] name = "dunce" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] name = "dwarf" -version = "0.8.1" +version = "0.9.0" dependencies = [ "abi_stable", "ansi-to-tui", @@ -1011,7 +1022,7 @@ dependencies = [ "async-compat", "async-condvar-fair", "async-executor", - "async-io 2.3.2", + "async-io 2.4.0", "backtrace", "bincode", "bitcode", @@ -1019,16 +1030,16 @@ dependencies = [ "chrono", "chumsky", "circular-queue", - "clap 4.5.4", + "clap 4.5.26", "color-backtrace", "core_extensions", "crossbeam", "crossterm", "dap", "dotenvy", - "env_logger 0.10.2", - "futures-lite 2.3.0", - "heck 0.4.1", + "env_logger 0.11.6", + "futures-lite 2.5.0", + "heck 0.5.0", "lazy_static", "log", "num-format", @@ -1039,21 +1050,21 @@ dependencies = [ "puteketeke", "regex", "reqwest", - "rustc-hash", + "rustc-hash 2.1.0", "rustyline", "sarzak", "serde", "serde_json", "slab", "smartstring", - "smol 2.0.0", - "snafu 0.8.2", + "smol 2.0.2", + "snafu 0.8.5", "test-log", "threadpool", "tracing", "tracing-subscriber", "tracing-tracy", - "tracy-client-sys 0.22.2", + "tracy-client-sys", "unicode-segmentation", "uuid", "walkdir", @@ -1061,15 +1072,15 @@ dependencies = [ [[package]] name = "either" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "encoding_rs" -version = "0.8.34" +version = "0.8.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" dependencies = [ "cfg-if", ] @@ -1082,11 +1093,12 @@ checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d" [[package]] name = "env_filter" -version = "0.1.0" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a009aa4810eb158359dda09d0c87378e4bbb89b5a801f016885a4707ba24f7ea" +checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" dependencies = [ "log", + "regex", ] [[package]] @@ -1104,11 +1116,14 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.11.3" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b35839ba51819680ba087cd351788c9a3c476841207e0b8cee0b04722343b9" +checksum = "dcaee3d8e3cfc3fd92428d477bc97fc29ec8716d180c0d74c643bb26166660e0" dependencies = [ + "anstream", + "anstyle", "env_filter", + "humantime", "log", ] @@ -1120,19 +1135,19 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "error-code" -version = "3.2.0" +version = "3.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0474425d51df81997e2f90a21591180b38eccf27292d755f3e30750225c175b" +checksum = "a5d9305ccc6942a704f4335694ecd3de2ea531b114ac2d51f5f843750787a92f" [[package]] name = "event-listener" @@ -1153,20 +1168,9 @@ dependencies = [ [[package]] name = "event-listener" -version = "4.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" -dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", -] - -[[package]] -name = "event-listener" -version = "5.3.0" +version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d9944b8ca13534cdfb2800775f8dd4902ff3fc75a50101466decadfdf322a24" +checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" dependencies = [ "concurrent-queue", "parking", @@ -1175,21 +1179,11 @@ dependencies = [ [[package]] name = "event-listener-strategy" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3" -dependencies = [ - "event-listener 4.0.3", - "pin-project-lite", -] - -[[package]] -name = "event-listener-strategy" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" +checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2" dependencies = [ - "event-listener 5.3.0", + "event-listener 5.4.0", "pin-project-lite", ] @@ -1204,9 +1198,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.1.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "fd-lock" @@ -1215,7 +1209,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e5768da2206272c81ef0b5e951a41862938a6070da63bcea197899942d3b947" dependencies = [ "cfg-if", - "rustix 0.38.34", + "rustix 0.38.43", "windows-sys 0.52.0", ] @@ -1249,12 +1243,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "from_bytes_or_zeroed" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d25934a78435889223e575c7b0fc36a290c5a312e7a7ae901f10587792e142a" - [[package]] name = "fs_extra" version = "1.3.0" @@ -1263,24 +1251,25 @@ checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" [[package]] name = "futures-channel" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", + "futures-sink", ] [[package]] name = "futures-core" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-io" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-lite" @@ -1299,11 +1288,11 @@ dependencies = [ [[package]] name = "futures-lite" -version = "2.3.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" +checksum = "cef40d21ae2c515b51041df9ed313ed21e572df340ea58a922a0aefe7e8891a1" dependencies = [ - "fastrand 2.1.0", + "fastrand 2.3.0", "futures-core", "futures-io", "parking", @@ -1312,24 +1301,25 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-util" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-core", "futures-io", + "futures-sink", "futures-task", "memchr", "pin-project-lite", @@ -1348,29 +1338,15 @@ dependencies = [ [[package]] name = "generator" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc16584ff22b460a382b7feec54b23d2908d858152e5739a120b949293bd74e" -dependencies = [ - "cc", - "libc", - "log", - "rustversion", - "windows 0.48.0", -] - -[[package]] -name = "generator" -version = "0.8.1" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "186014d53bc231d0090ef8d6f03e0920c54d85a5ed22f4f2f74315ec56cf83fb" +checksum = "cc6bd114ceda131d3b1d665eba35788690ad37f5916457286b32ab6fd3c438dd" dependencies = [ - "cc", "cfg-if", "libc", "log", "rustversion", - "windows 0.54.0", + "windows", ] [[package]] @@ -1380,54 +1356,43 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", + "js-sys", "libc", "wasi", + "wasm-bindgen", ] [[package]] name = "gimli" -version = "0.28.1" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] -name = "glob" -version = "0.3.1" +name = "glam" +version = "0.29.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" +checksum = "dc46dd3ec48fdd8e693a98d2b8bafae273a2d54c1de02a2a7e3d57d501f39677" [[package]] -name = "h2" -version = "0.3.26" +name = "glob" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http 0.2.12", - "indexmap 2.2.6", - "slab", - "tokio", - "tokio-util", - "tracing", -] +checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" [[package]] name = "h2" -version = "0.4.5" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab" +checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e" dependencies = [ "atomic-waker", "bytes", "fnv", "futures-core", "futures-sink", - "http 1.1.0", - "indexmap 2.2.6", + "http 1.2.0", + "indexmap 2.7.0", "slab", "tokio", "tokio-util", @@ -1440,6 +1405,15 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash", +] + [[package]] name = "hashbrown" version = "0.14.5" @@ -1450,6 +1424,12 @@ dependencies = [ "allocator-api2", ] +[[package]] +name = "hashbrown" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" + [[package]] name = "heck" version = "0.4.1" @@ -1477,13 +1457,19 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" +[[package]] +name = "hermit-abi" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" + [[package]] name = "home" -version = "0.5.9" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -1496,43 +1482,32 @@ dependencies = [ "bincode", "crossbeam", "dwarf", - "futures-lite 2.3.0", - "heck 0.4.1", + "futures-lite 2.5.0", + "heck 0.5.0", "http-body-util", - "hyper 1.3.1", + "hyper", "hyper-util", "log", "reqwest", - "rustc-hash", - "rustls 0.23.7", - "rustls-pemfile 2.1.2", + "rustc-hash 2.1.0", + "rustls", + "rustls-pemfile", "rustls-pki-types", "serde", "serde_json", "slab", "tokio", - "tokio-rustls 0.26.0", + "tokio-rustls", "tracing", - "tracy-client 0.15.2", + "tracy-client", "uuid", ] [[package]] name = "http" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "http" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" dependencies = [ "bytes", "fnv", @@ -1541,43 +1516,32 @@ dependencies = [ [[package]] name = "http-body" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" -dependencies = [ - "bytes", - "http 0.2.12", - "pin-project-lite", -] - -[[package]] -name = "http-body" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http 1.1.0", + "http 1.2.0", ] [[package]] name = "http-body-util" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0475f8b2ac86659c21b64320d5d653f9efe42acd2a4e560073ec61a155a34f1d" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" dependencies = [ "bytes", - "futures-core", - "http 1.1.0", - "http-body 1.0.0", + "futures-util", + "http 1.2.0", + "http-body", "pin-project-lite", ] [[package]] name = "httparse" -version = "1.8.0" +version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" +checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" [[package]] name = "httpdate" @@ -1593,40 +1557,16 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2 0.3.26", - "http 0.2.12", - "http-body 0.4.6", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2 0.5.7", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "hyper" -version = "1.3.1" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe575dd17d0862a9a33781c8c4696a55c320909004a67a00fb286ba8b1bc496d" +checksum = "256fb8d4bd6413123cc9d91832d78325c48ff41677595be797d90f42969beae0" dependencies = [ "bytes", "futures-channel", "futures-util", - "h2 0.4.5", - "http 1.1.0", - "http-body 1.0.0", + "h2", + "http 1.2.0", + "http-body", "httparse", "httpdate", "itoa", @@ -1638,56 +1578,62 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.24.2" +version = "0.27.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" dependencies = [ "futures-util", - "http 0.2.12", - "hyper 0.14.28", - "rustls 0.21.12", + "http 1.2.0", + "hyper", + "hyper-util", + "rustls", + "rustls-pki-types", "tokio", - "tokio-rustls 0.24.1", + "tokio-rustls", + "tower-service", + "webpki-roots", ] [[package]] name = "hyper-tls" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", - "hyper 0.14.28", + "http-body-util", + "hyper", + "hyper-util", "native-tls", "tokio", "tokio-native-tls", + "tower-service", ] [[package]] name = "hyper-util" -version = "0.1.3" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca38ef113da30126bbff9cd1705f9273e15d45498615d138b0c20279ac7a76aa" +checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" dependencies = [ "bytes", "futures-channel", "futures-util", - "http 1.1.0", - "http-body 1.0.0", - "hyper 1.3.1", + "http 1.2.0", + "http-body", + "hyper", "pin-project-lite", - "socket2 0.5.7", + "socket2 0.5.8", "tokio", - "tower", "tower-service", "tracing", ] [[package]] name = "iana-time-zone" -version = "0.1.60" +version = "0.1.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -1707,122 +1653,246 @@ dependencies = [ ] [[package]] -name = "idna" -version = "0.5.0" +name = "icu_collections" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "displaydoc", + "yoke", + "zerofrom", + "zerovec", ] [[package]] -name = "indexmap" -version = "1.9.3" +name = "icu_locid" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" dependencies = [ - "autocfg", - "hashbrown 0.12.3", + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", ] [[package]] -name = "indexmap" -version = "2.2.6" +name = "icu_locid_transform" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" dependencies = [ - "equivalent", - "hashbrown 0.14.5", + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", ] [[package]] -name = "instant" -version = "0.1.13" +name = "icu_locid_transform_data" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" -dependencies = [ - "cfg-if", -] +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" [[package]] -name = "io-lifetimes" -version = "1.0.11" +name = "icu_normalizer" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" dependencies = [ - "hermit-abi 0.3.9", - "libc", - "windows-sys 0.48.0", + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", ] [[package]] -name = "ipnet" -version = "2.9.0" +name = "icu_normalizer_data" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" [[package]] -name = "is-terminal" -version = "0.4.12" +name = "icu_properties" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" dependencies = [ - "hermit-abi 0.3.9", - "libc", - "windows-sys 0.52.0", + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", ] [[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.4.19" +name = "icu_properties_data" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a9b56eb56058f43dc66e58f40a214b2ccbc9f3df51861b63d51dec7b65bc3f" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" [[package]] -name = "itertools" -version = "0.12.1" +name = "icu_provider" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" dependencies = [ - "either", + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", ] [[package]] -name = "itoa" +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.96", +] + +[[package]] +name = "idna" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", +] + +[[package]] +name = "indexmap" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" +dependencies = [ + "equivalent", + "hashbrown 0.15.2", +] + +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "io-lifetimes" version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +dependencies = [ + "hermit-abi 0.3.9", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "ipnet" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" + +[[package]] +name = "is-terminal" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "261f68e344040fbd0edea105bef17c66edf46f984ddb1115b775ce31be948f4b" +dependencies = [ + "hermit-abi 0.4.0", + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + +[[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.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] name = "jobserver" -version = "0.1.31" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" dependencies = [ "libc", ] [[package]] name = "js-sys" -version = "0.3.69" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" dependencies = [ + "once_cell", "wasm-bindgen", ] [[package]] name = "lazy_static" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "lazycell" @@ -1832,9 +1902,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.155" +version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" [[package]] name = "libloading" @@ -1848,12 +1918,12 @@ dependencies = [ [[package]] name = "libloading" -version = "0.8.3" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c2a198fb6b0eada2a8df47933734e6d35d350665a33a3593d7164fa52c75c19" +checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" dependencies = [ "cfg-if", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -1864,9 +1934,15 @@ checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" [[package]] name = "linux-raw-sys" -version = "0.4.14" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" + +[[package]] +name = "litemap" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" [[package]] name = "lock_api" @@ -1881,22 +1957,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.21" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" - -[[package]] -name = "loom" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5" -dependencies = [ - "cfg-if", - "generator 0.7.5", - "scoped-tls", - "tracing", - "tracing-subscriber", -] +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "loom" @@ -1905,7 +1968,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "419e0dc8046cb947daa77eb95ae174acfbddb7673b4151f56d1eed8e93fbfaca" dependencies = [ "cfg-if", - "generator 0.8.1", + "generator", "scoped-tls", "tracing", "tracing-subscriber", @@ -1922,9 +1985,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.2" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "mime" @@ -1940,31 +2003,25 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.3" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87dfd01fe195c66b572b37921ad8803d010623c0aca821bea2302239d155cdae" +checksum = "4ffbe83022cedc1d264172192511ae958937694cd57ce297164951b8b3568394" dependencies = [ - "adler", + "adler2", ] [[package]] name = "mio" -version = "0.8.11" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ "libc", "log", "wasi", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] -[[package]] -name = "mirai-annotations" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9be0862c1b3f26a88803c4a49de6889c10e608b3ee9344e6ef5b45fb37ad3d1" - [[package]] name = "names" version = "0.14.0" @@ -1977,11 +2034,10 @@ dependencies = [ [[package]] name = "native-tls" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" dependencies = [ - "lazy_static", "libc", "log", "openssl", @@ -2004,12 +2060,13 @@ dependencies = [ [[package]] name = "nix" -version = "0.27.1" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.7.0", "cfg-if", + "cfg_aliases", "libc", ] @@ -2068,7 +2125,7 @@ version = "1.0.0" source = "git+https://github.com/uberFoo/nut#1f89d402a281ab4ea02478d26512e8480146d12a" dependencies = [ "anyhow", - "clap 4.5.4", + "clap 4.5.26", "diff", "heck 0.4.1", "log", @@ -2087,26 +2144,26 @@ dependencies = [ [[package]] name = "object" -version = "0.32.2" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ "memchr", ] [[package]] name = "once_cell" -version = "1.19.0" +version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "openssl" -version = "0.10.64" +version = "0.10.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" +checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.7.0", "cfg-if", "foreign-types", "libc", @@ -2123,7 +2180,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.96", ] [[package]] @@ -2134,9 +2191,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.102" +version = "0.9.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2" +checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" dependencies = [ "cc", "libc", @@ -2144,6 +2201,16 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "ordered_hash_map" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab0e5f22bf6dd04abd854a8874247813a8fa2c8c1260eba6fbb150270ce7c176" +dependencies = [ + "hashbrown 0.13.2", + "serde", +] + [[package]] name = "os_str_bytes" version = "6.6.1" @@ -2156,26 +2223,17 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" -[[package]] -name = "packagemerge" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0efcf6ee55f8f7a24333bc8d1dd0e541a6cedf903dbc07ae6479d7f8ff32ed08" -dependencies = [ - "itertools 0.4.19", -] - [[package]] name = "parking" -version = "2.2.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot" -version = "0.12.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e4af0ca4f6caed20e900d564c242b8e5d4903fdacf31d3daf527b66fe6f42fb" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", "parking_lot_core", @@ -2191,7 +2249,7 @@ dependencies = [ "libc", "redox_syscall", "smallvec", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -2206,31 +2264,11 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" -[[package]] -name = "pin-project" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.65", -] - [[package]] name = "pin-project-lite" -version = "0.2.14" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pin-utils" @@ -2240,20 +2278,20 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "piper" -version = "0.2.2" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "464db0c665917b13ebb5d453ccdec4add5658ee1adc7affc7677615356a8afaf" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" dependencies = [ "atomic-waker", - "fastrand 2.1.0", + "fastrand 2.3.0", "futures-io", ] [[package]] name = "pkg-config" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] name = "polling" @@ -2273,24 +2311,27 @@ dependencies = [ [[package]] name = "polling" -version = "3.7.0" +version = "3.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645493cf344456ef24219d02a768cf1fb92ddf8c92161679ae3d91b91a637be3" +checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f" dependencies = [ "cfg-if", "concurrent-queue", - "hermit-abi 0.3.9", + "hermit-abi 0.4.0", "pin-project-lite", - "rustix 0.38.34", + "rustix 0.38.43", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "ppv-lite86" -version = "0.2.17" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] [[package]] name = "pretty_env_logger" @@ -2304,12 +2345,12 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.20" +version = "0.2.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" +checksum = "483f8c21f64f3ea09fe0f30f5d48c3e8eefe5dac9129f0075f76593b4c1da705" dependencies = [ "proc-macro2", - "syn 2.0.65", + "syn 2.0.96", ] [[package]] @@ -2338,18 +2379,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.83" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b33eb56c327dec362a9e55b3ad14f9d2f0904fb5a5b03b513ab5465399e9f43" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" dependencies = [ "unicode-ident", ] [[package]] name = "psm" -version = "0.1.21" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874" +checksum = "200b9ff220857e53e184257720a14553b2f4aa02577d2ed9842d45d4b9654810" dependencies = [ "cc", ] @@ -2361,9 +2402,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83b1109db5f94e442b059329319e1bc014ee53ce1c1b9a1ad72207e7eb177936" dependencies = [ "async-executor", - "async-io 2.3.2", + "async-io 2.4.0", "crossbeam", - "futures-lite 2.3.0", + "futures-lite 2.5.0", "once_cell", "parking_lot", "slab", @@ -2371,11 +2412,63 @@ dependencies = [ "tracing", ] +[[package]] +name = "quinn" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef" +dependencies = [ + "bytes", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash 2.1.0", + "rustls", + "socket2 0.5.8", + "thiserror 2.0.10", + "tokio", + "tracing", +] + +[[package]] +name = "quinn-proto" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" +dependencies = [ + "bytes", + "getrandom", + "rand", + "ring", + "rustc-hash 2.1.0", + "rustls", + "rustls-pki-types", + "slab", + "thiserror 2.0.10", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c40286217b4ba3a71d644d752e6a0b71f13f1b6a2c5311acfcbe0c2418ed904" +dependencies = [ + "cfg_aliases", + "libc", + "once_cell", + "socket2 0.5.8", + "tracing", + "windows-sys 0.59.0", +] + [[package]] name = "quote" -version = "1.0.36" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" dependencies = [ "proc-macro2", ] @@ -2437,28 +2530,28 @@ dependencies = [ "bitflags 1.3.2", "cassowary", "unicode-segmentation", - "unicode-width", + "unicode-width 0.1.14", ] [[package]] name = "redox_syscall" -version = "0.5.1" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469052894dcb553421e483e4209ee581a45100d31b4018de03e5a7ad86374a7e" +checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.7.0", ] [[package]] name = "regex" -version = "1.10.4" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.6", - "regex-syntax 0.8.3", + "regex-automata 0.4.9", + "regex-syntax 0.8.5", ] [[package]] @@ -2472,13 +2565,13 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.6" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.3", + "regex-syntax 0.8.5", ] [[package]] @@ -2489,9 +2582,9 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "repr_offset" @@ -2504,21 +2597,24 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.11.27" +version = "0.12.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" +checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" dependencies = [ - "base64 0.21.7", + "base64", "bytes", "encoding_rs", + "futures-channel", "futures-core", "futures-util", - "h2 0.3.26", - "http 0.2.12", - "http-body 0.4.6", - "hyper 0.14.28", + "h2", + "http 1.2.0", + "http-body", + "http-body-util", + "hyper", "hyper-rustls", "hyper-tls", + "hyper-util", "ipnet", "js-sys", "log", @@ -2527,8 +2623,10 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls 0.21.12", - "rustls-pemfile 1.0.4", + "quinn", + "rustls", + "rustls-pemfile", + "rustls-pki-types", "serde", "serde_json", "serde_urlencoded", @@ -2536,22 +2634,17 @@ dependencies = [ "system-configuration", "tokio", "tokio-native-tls", - "tokio-rustls 0.24.1", + "tokio-rustls", + "tower", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", "webpki-roots", - "winreg", + "windows-registry", ] -[[package]] -name = "residua-zigzag" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b37805477eee599a61753230f511ae94d737f69b536e468e294723ad5f1b75f" - [[package]] name = "ring" version = "0.17.8" @@ -2579,20 +2672,26 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" +[[package]] +name = "rustc-hash" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7fb8039b3032c191086b10f11f319a6e99e1e82889c5cc6046f515c9db1d497" + [[package]] name = "rustc_version" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ "semver", ] [[package]] name = "rustix" -version = "0.37.27" +version = "0.37.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" +checksum = "519165d378b97752ca44bbe15047d5d3409e875f39327546b42ac81d7e18c1b6" dependencies = [ "bitflags 1.3.2", "errno", @@ -2604,83 +2703,55 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.34" +version = "0.38.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +checksum = "a78891ee6bf2340288408954ac787aa063d8e8817e9f53abb37c695c6d834ef6" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.7.0", "errno", "libc", - "linux-raw-sys 0.4.14", - "windows-sys 0.52.0", + "linux-raw-sys 0.4.15", + "windows-sys 0.59.0", ] [[package]] name = "rustls" -version = "0.21.12" +version = "0.23.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" -dependencies = [ - "log", - "ring", - "rustls-webpki 0.101.7", - "sct", -] - -[[package]] -name = "rustls" -version = "0.23.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebbbdb961df0ad3f2652da8f3fdc4b36122f568f968f45ad3316f26c025c677b" +checksum = "8f287924602bf649d949c63dc8ac8b235fa5387d394020705b80c4eb597ce5b8" dependencies = [ "aws-lc-rs", "once_cell", + "ring", "rustls-pki-types", - "rustls-webpki 0.102.4", + "rustls-webpki", "subtle", "zeroize", ] [[package]] name = "rustls-pemfile" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" -dependencies = [ - "base64 0.21.7", -] - -[[package]] -name = "rustls-pemfile" -version = "2.1.2" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" dependencies = [ - "base64 0.22.1", "rustls-pki-types", ] [[package]] name = "rustls-pki-types" -version = "1.7.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" - -[[package]] -name = "rustls-webpki" -version = "0.101.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +checksum = "d2bf47e6ff922db3825eb750c4e2ff784c6ff8fb9e13046ef6a1d1c5401b0b37" dependencies = [ - "ring", - "untrusted 0.9.0", + "web-time", ] [[package]] name = "rustls-webpki" -version = "0.102.4" +version = "0.102.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff448f7e92e913c4b7d4c6d8e4540a1724b319b4152b8aef6d4cf8339712b33e" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" dependencies = [ "aws-lc-rs", "ring", @@ -2690,17 +2761,17 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.17" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" +checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" [[package]] name = "rustyline" -version = "13.0.0" +version = "15.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02a2d683a4ac90aeef5b1013933f6d977bd37d51ff3f4dad829d4931a7e6be86" +checksum = "2ee1e066dc922e513bda599c6ccb5f3bb2b0ea5870a579448f2622993f0a9a2f" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.7.0", "cfg-if", "clipboard-win", "fd-lock", @@ -2712,20 +2783,20 @@ dependencies = [ "radix_trie", "rustyline-derive", "unicode-segmentation", - "unicode-width", + "unicode-width 0.2.0", "utf8parse", - "winapi", + "windows-sys 0.59.0", ] [[package]] name = "rustyline-derive" -version = "0.10.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5af959c8bf6af1aff6d2b463a57f71aae53d1332da58419e30ad8dc7011d951" +checksum = "327e9d075f6df7e25fbf594f1be7ef55cf0d567a6cb5112eeccbbd51ceb48e0d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.96", ] [[package]] @@ -2745,17 +2816,18 @@ dependencies = [ [[package]] name = "sarzak" -version = "2.13.27" -source = "git+https://github.com/uberFoo/sarzak?branch=develop#b104ec55bf8dca5b16eb192f716baf392be0fc14" +version = "2.15.2" +source = "git+https://github.com/uberFoo/sarzak?branch=develop#cd95b35537c795f8fa0536ef509fea5d4c42f7d6" dependencies = [ "ansi_term", "bincode", "cfg-if", - "clap 4.5.4", + "clap 4.5.26", "heck 0.4.1", "log", "nut", - "rustc-hash", + "ordered_hash_map", + "rustc-hash 1.1.0", "serde", "serde_json", "snafu 0.7.5", @@ -2765,11 +2837,11 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.23" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -2784,23 +2856,13 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "sct" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" -dependencies = [ - "ring", - "untrusted 0.9.0", -] - [[package]] name = "security-framework" -version = "2.11.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c627723fd09706bacdb5cf41499e95098555af3c3c29d014dc3c458ef6be11c0" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.7.0", "core-foundation", "core-foundation-sys", "libc", @@ -2809,9 +2871,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.11.0" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317936bbbd05227752583946b9e66d7ce3b489f84e11a94a510b4437fef407d7" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" dependencies = [ "core-foundation-sys", "libc", @@ -2819,37 +2881,38 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba" [[package]] name = "serde" -version = "1.0.202" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "226b61a0d411b2ba5ff6d7f73a476ac4f8bb900373459cd00fab8512828ba395" +checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.202" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6048858004bcff69094cd972ed40a32500f153bd3be9f716b2eed2e8217c4838" +checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.96", ] [[package]] name = "serde_json" -version = "1.0.117" +version = "1.0.135" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" +checksum = "2b0d7ba2887406110130a978386c4e1befb98c674b4fba677954e4db976630d9" dependencies = [ "itoa", + "memchr", "ryu", "serde", ] @@ -2868,9 +2931,9 @@ dependencies = [ [[package]] name = "sha1_smol" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012" +checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" [[package]] name = "sharded-slab" @@ -2899,9 +2962,9 @@ dependencies = [ [[package]] name = "signal-hook-mio" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af" +checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd" dependencies = [ "libc", "mio", @@ -2917,12 +2980,6 @@ dependencies = [ "libc", ] -[[package]] -name = "simdutf8" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a" - [[package]] name = "slab" version = "0.4.9" @@ -2969,19 +3026,19 @@ dependencies = [ [[package]] name = "smol" -version = "2.0.0" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e635339259e51ef85ac7aa29a1cd991b957047507288697a690e80ab97d07cad" +checksum = "a33bd3e260892199c3ccfc487c88b2da2265080acb316cd920da72fdfd7c599f" dependencies = [ "async-channel 2.3.1", "async-executor", "async-fs 2.1.2", - "async-io 2.3.2", - "async-lock 3.3.0", + "async-io 2.4.0", + "async-lock 3.4.0", "async-net 2.0.0", - "async-process 2.2.2", + "async-process 2.3.0", "blocking", - "futures-lite 2.3.0", + "futures-lite 2.5.0", ] [[package]] @@ -2996,11 +3053,11 @@ dependencies = [ [[package]] name = "snafu" -version = "0.8.2" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75976f4748ab44f6e5332102be424e7c2dc18daeaf7e725f2040c3ebb133512e" +checksum = "223891c85e2a29c3fe8fb900c1fae5e69c2e42415e3177752e8718475efa5019" dependencies = [ - "snafu-derive 0.8.2", + "snafu-derive 0.8.5", ] [[package]] @@ -3017,14 +3074,14 @@ dependencies = [ [[package]] name = "snafu-derive" -version = "0.8.2" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4b19911debfb8c2fb1107bc6cb2d61868aaf53a988449213959bb1b5b1ed95f" +checksum = "03c3c6b7927ffe7ecaa769ee0e3994da3b8cafc8f444578982c83ecb161af917" dependencies = [ - "heck 0.4.1", + "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.96", ] [[package]] @@ -3039,9 +3096,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" dependencies = [ "libc", "windows-sys 0.52.0", @@ -3053,17 +3110,23 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "stacker" -version = "0.1.15" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c886bd4480155fd3ef527d45e9ac8dd7118a898a46530b7b94c3e21866259fce" +checksum = "799c883d55abdb5e98af1a7b3f23b9b6de8ecada0ecac058672d7635eb48ca7b" dependencies = [ "cc", "cfg-if", "libc", "psm", - "winapi", + "windows-sys 0.59.0", ] [[package]] @@ -3086,9 +3149,9 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "subtle" -version = "2.5.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" @@ -3103,9 +3166,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.65" +version = "2.0.96" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2863d96a84c6439701d7a38f9de935ec562c8832cc55d1dde0f513b52fad106" +checksum = "d5d0adab1ae378d7f53bdebc67a39f1f151407ef230f0ce2883572f5d8985c80" dependencies = [ "proc-macro2", "quote", @@ -3114,26 +3177,40 @@ dependencies = [ [[package]] name = "sync_wrapper" -version = "0.1.2" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[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.96", +] [[package]] name = "system-configuration" -version = "0.5.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.7.0", "core-foundation", "system-configuration-sys", ] [[package]] name = "system-configuration-sys" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" dependencies = [ "core-foundation-sys", "libc", @@ -3141,14 +3218,16 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.10.1" +version = "3.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +checksum = "9a8a559c81686f576e8cd0290cd2a24a2a9ad80c98b3478856500fcbd7acd704" dependencies = [ "cfg-if", - "fastrand 2.1.0", - "rustix 0.38.34", - "windows-sys 0.52.0", + "fastrand 2.3.0", + "getrandom", + "once_cell", + "rustix 0.38.43", + "windows-sys 0.59.0", ] [[package]] @@ -3166,7 +3245,7 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b319995299c65d522680decf80f2c108d85b861d81dfe340a10d16cee29d9e6" dependencies = [ - "env_logger 0.11.3", + "env_logger 0.11.6", "test-log-macros", "tracing-subscriber", ] @@ -3179,7 +3258,7 @@ checksum = "5999e24eaa32083191ba4e425deb75cdf25efefabe5aaccb7446dd0d4122a3f5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.96", ] [[package]] @@ -3190,22 +3269,42 @@ checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9" [[package]] name = "thiserror" -version = "1.0.61" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" +checksum = "a3ac7f54ca534db81081ef1c1e7f6ea8a3ef428d2fc069097c079443d24124d3" dependencies = [ - "thiserror-impl", + "thiserror-impl 2.0.10", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", ] [[package]] name = "thiserror-impl" -version = "1.0.61" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" +checksum = "9e9465d30713b56a37ede7185763c3492a91be2f5fa68d958c44e41ab9248beb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.96", ] [[package]] @@ -3236,11 +3335,21 @@ dependencies = [ "crunchy", ] +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + [[package]] name = "tinyvec" -version = "1.6.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" dependencies = [ "tinyvec_macros", ] @@ -3253,32 +3362,31 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.37.0" +version = "1.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787" +checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" dependencies = [ "backtrace", "bytes", "libc", "mio", - "num_cpus", "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2 0.5.7", + "socket2 0.5.8", "tokio-macros", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "tokio-macros" -version = "2.2.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" +checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.96", ] [[package]] @@ -3293,30 +3401,19 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" -dependencies = [ - "rustls 0.21.12", - "tokio", -] - -[[package]] -name = "tokio-rustls" -version = "0.26.0" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" dependencies = [ - "rustls 0.23.7", - "rustls-pki-types", + "rustls", "tokio", ] [[package]] name = "tokio-util" -version = "0.7.11" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" dependencies = [ "bytes", "futures-core", @@ -3336,39 +3433,37 @@ dependencies = [ [[package]] name = "tower" -version = "0.4.13" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" dependencies = [ "futures-core", "futures-util", - "pin-project", "pin-project-lite", + "sync_wrapper", "tokio", "tower-layer", "tower-service", - "tracing", ] [[package]] name = "tower-layer" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" [[package]] name = "tower-service" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.40" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ - "log", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -3376,20 +3471,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.96", ] [[package]] name = "tracing-core" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ "once_cell", "valuable", @@ -3408,9 +3503,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.18" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" dependencies = [ "matchers", "nu-ansi-term", @@ -3426,53 +3521,34 @@ dependencies = [ [[package]] name = "tracing-tracy" -version = "0.11.0" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6024d04f84a69fd0d1dc1eee3a2b070bd246530a0582f9982ae487cb6c703614" +checksum = "0eaa1852afa96e0fe9e44caa53dc0bd2d9d05e0f2611ce09f97f8677af56e4ba" dependencies = [ "tracing-core", "tracing-subscriber", - "tracy-client 0.17.0", + "tracy-client", ] [[package]] name = "tracy-client" -version = "0.15.2" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "434ecabbda9f67eeea1eab44d52f4a20538afa3e2c2770f2efc161142b25b608" +checksum = "d90a2c01305b02b76fdd89ac8608bae27e173c829a35f7d76a345ab5d33836db" dependencies = [ - "loom 0.5.6", + "loom", "once_cell", - "tracy-client-sys 0.21.2", -] - -[[package]] -name = "tracy-client" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59fb931a64ff88984f86d3e9bcd1ae8843aa7fe44dd0f8097527bc172351741d" -dependencies = [ - "loom 0.7.2", - "once_cell", - "tracy-client-sys 0.22.2", + "tracy-client-sys", ] [[package]] name = "tracy-client-sys" -version = "0.21.2" +version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cb915ea3af048554640d76dd6f1492589a6401a41a30d789b983c1ec280455a" -dependencies = [ - "cc", -] - -[[package]] -name = "tracy-client-sys" -version = "0.22.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d104d610dfa9dd154535102cc9c6164ae1fa37842bc2d9e83f9ac82b0ae0882" +checksum = "69fff37da548239c3bf9e64a12193d261e8b22b660991c6fd2df057c168f435f" dependencies = [ "cc", + "windows-targets 0.52.6", ] [[package]] @@ -3502,38 +3578,29 @@ version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a" -[[package]] -name = "unicode-bidi" -version = "0.3.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" - [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" [[package]] -name = "unicode-normalization" -version = "0.1.23" +name = "unicode-segmentation" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" -dependencies = [ - "tinyvec", -] +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] -name = "unicode-segmentation" -version = "1.11.0" +name = "unicode-width" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" [[package]] name = "unicode-width" -version = "0.1.12" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f5e5f3158ecfd4b8ff6fe086db7c8467a2dfdac97fe420f2b7c4aa97af66d6" +checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" [[package]] name = "untrusted" @@ -3549,26 +3616,38 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.0" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" 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 = "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 = "uuid" -version = "1.8.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" +checksum = "b913a3b5fe84142e269d63cc62b64319ccaf89b748fc31fe025177f767a756c4" dependencies = [ "getrandom", "serde", @@ -3589,9 +3668,9 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "waker-fn" @@ -3626,46 +3705,47 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.92" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" dependencies = [ "cfg-if", + "once_cell", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.92" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" dependencies = [ "bumpalo", "log", - "once_cell", "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.96", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.42" +version = "0.4.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +checksum = "38176d9b44ea84e9184eff0bc34cc167ed044f816accfe5922e54d84cf48eca2" dependencies = [ "cfg-if", "js-sys", + "once_cell", "wasm-bindgen", "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.92" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3673,28 +3753,38 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.92" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.96", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.92" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" [[package]] name = "web-sys" -version = "0.3.69" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" dependencies = [ "js-sys", "wasm-bindgen", @@ -3702,9 +3792,12 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.25.4" +version = "0.26.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" +checksum = "5d642ff16b7e79272ae451b7322067cdc17cadf68c23264be9d94a32319efe7e" +dependencies = [ + "rustls-pki-types", +] [[package]] name = "which" @@ -3715,7 +3808,7 @@ dependencies = [ "either", "home", "once_cell", - "rustix 0.38.34", + "rustix 0.38.43", ] [[package]] @@ -3736,11 +3829,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -3751,49 +3844,86 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows" -version = "0.48.0" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" dependencies = [ - "windows-targets 0.48.5", + "windows-core 0.58.0", + "windows-targets 0.52.6", ] [[package]] -name = "windows" -version = "0.54.0" +name = "windows-core" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9252e5725dbed82865af151df558e754e4a3c2c30818359eb17465f1346a1b49" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-core 0.54.0", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] name = "windows-core" -version = "0.52.0" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" dependencies = [ - "windows-targets 0.52.5", + "windows-implement", + "windows-interface", + "windows-result", + "windows-strings", + "windows-targets 0.52.6", ] [[package]] -name = "windows-core" -version = "0.54.0" +name = "windows-implement" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "windows-interface" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12661b9c89351d684a50a8a643ce5f608e20243b9fb84687800163429f161d65" +checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "windows-registry" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" dependencies = [ "windows-result", - "windows-targets 0.52.5", + "windows-strings", + "windows-targets 0.52.6", ] [[package]] name = "windows-result" -version = "0.1.1" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-strings" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "749f0da9cc72d82e600d8d2e44cadd0b9eedb9038f71a1c58556ac1c5791813b" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" dependencies = [ - "windows-targets 0.52.5", + "windows-result", + "windows-targets 0.52.6", ] [[package]] @@ -3811,7 +3941,16 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.5", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", ] [[package]] @@ -3831,18 +3970,18 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.5", - "windows_aarch64_msvc 0.52.5", - "windows_i686_gnu 0.52.5", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", "windows_i686_gnullvm", - "windows_i686_msvc 0.52.5", - "windows_x86_64_gnu 0.52.5", - "windows_x86_64_gnullvm 0.52.5", - "windows_x86_64_msvc 0.52.5", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", ] [[package]] @@ -3853,9 +3992,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" @@ -3865,9 +4004,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" @@ -3877,15 +4016,15 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" @@ -3895,9 +4034,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" @@ -3907,9 +4046,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" @@ -3919,9 +4058,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" @@ -3931,19 +4070,21 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] -name = "winreg" -version = "0.50.0" +name = "write16" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" [[package]] name = "yansi" @@ -3951,28 +4092,96 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", + "synstructure", +] + [[package]] name = "zerocopy" -version = "0.7.34" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ + "byteorder", "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.34" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.96", +] + +[[package]] +name = "zerofrom" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", + "synstructure", ] [[package]] name = "zeroize" -version = "1.7.0" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] diff --git a/plugins/http/Cargo.toml b/plugins/http/Cargo.toml index 452e523f..850e4fb6 100644 --- a/plugins/http/Cargo.toml +++ b/plugins/http/Cargo.toml @@ -7,19 +7,20 @@ edition = "2021" [dependencies] abi_stable = "0.11.2" -async-compat = "0.2.3" +# async-compat = { git = "https://github.com/uberFoo/async-compat" } +async-compat = "0.2.4" aws-lc-rs = "1.7.0" bincode = "1.3.3" crossbeam = { version = "0.8.4", features = ["crossbeam-channel"] } dwarf = { path = "../../" } -futures-lite = "2.2.0" -heck = "0.4.1" +futures-lite = "2.5.0" +heck = "0.5.0" http-body-util = "0.1.1" hyper = { version = "1.2.0", features = ["full"] } hyper-util = { version = "0.1.3", features = ["full"] } log = "0.4.19" -reqwest = { version = "0.11.22", features = ["json"] } -rustc-hash = "1.1.0" +reqwest = { version = "0.12.5", features = ["json"] } +rustc-hash = "2.1.0" rustls = { version = "0.23", default-features = false, features = [ "aws_lc_rs", ] } @@ -31,7 +32,7 @@ slab = "0.4.9" tokio = { version = "1.36.0", features = ["full"] } tokio-rustls = { version = "0.26", default-features = false } tracing = "0.1.40" -tracy-client = "0.15.2" +tracy-client = "0.18.0" uuid = { version = "1.4.1", features = ["v4"] } [lib] diff --git a/plugins/http/ore/client.ore b/plugins/http/ore/client.ore index b1a7b164..8ed267ea 100644 --- a/plugins/http/ore/client.ore +++ b/plugins/http/ore/client.ore @@ -21,7 +21,18 @@ impl HttpClient { let request = self .inner .invoke_func_mut("client", "HttpClient", "get", [url]); - print("\nrequest: ${request}\n"); + + Request { + inner: request, + plugin: self.inner, + } + } + + async fn post(self, url: String) -> Future { + let request = self + .inner + .invoke_func_mut("client", "HttpClient", "post", [url]); + Request { inner: request, plugin: self.inner, @@ -36,17 +47,26 @@ struct Request { } impl Request { - async fn send(self) -> Future> { + async fn set_header(self, key: string, value: string) -> Future { + let inner = + self.plugin + .invoke_func_mut("client", "Request", "header", @[self.inner, key, value]); + + self.inner = inner; + self + } + + async fn send(self) -> Future> { let response = self .plugin .invoke_func_mut("client", "Request", "send", [self.inner]); match response { - Result::Err(e) => Result::::Err(HttpError { + Result::Err(e) => Result::::Err(HttpError { inner: e, plugin: self.plugin, }), - Result::Ok(r) => Result::::Ok(Response { + Result::Ok(r) => Result::::Ok(ClientResponse { inner: r, plugin: self.plugin, }), @@ -54,13 +74,13 @@ impl Request { } } -struct Response { +struct ClientResponse { #[proxy(plugin = "http::client")] plugin: Plugin, inner: int, } -impl Response { +impl ClientResponse { async fn text(self) -> Future> { let text = self .plugin diff --git a/plugins/http/ore/server.ore b/plugins/http/ore/server.ore index 2d24b369..887e396f 100644 --- a/plugins/http/ore/server.ore +++ b/plugins/http/ore/server.ore @@ -154,18 +154,18 @@ impl Suffix { } } -struct Response { +struct ServerResponse { #[proxy(plugin = "http::server")] plugin: Plugin, inner: int, } -impl Response { +impl ServerResponse { fn new(req: Request) -> Self { let plugin = req.plugin; let inner = plugin .invoke_func("server", "Response", "new", []); - Response { + ServerResponse { plugin: plugin, inner: inner, } diff --git a/plugins/http/src/lib.rs b/plugins/http/src/lib.rs index 1bffc2c8..fe11360d 100644 --- a/plugins/http/src/lib.rs +++ b/plugins/http/src/lib.rs @@ -16,10 +16,7 @@ use abi_stable::{ }; use async_compat::Compat; use dwarf::{ - chacha::{ - error::ChaChaError, - ffi_value::{FfiStruct, FfiValue}, - }, + chacha::ffi_value::FfiValue, plug_in::{Error, LambdaCall, Plugin, PluginModRef, PluginModule, PluginType, Plugin_TO}, DwarfInteger, }; @@ -82,6 +79,9 @@ mod http_client { ROk(Plugin_TO::from_value(HttpClient::default(), TD_Opaque)) } + /// Note that the things dangling off here need to be wrapped in `Arc`'s so + /// that they can be cloned. We need to be Clone to satisfy the TD_Opaque + /// bound for the plugin stuff. #[derive(Clone, Debug)] struct HttpClient { client: Client, @@ -135,13 +135,11 @@ mod http_client { match ty.as_str() { "HttpClient" => match func.as_str() { "get" => { - tracing::trace!("get enter"); - let url: String = args - .first() - .unwrap() - .try_into() - .map_err(|e: ChaChaError| Error::Plugin(e.to_string().into())) - .unwrap(); + tracing::trace!(target: "http", "get enter"); + let url: String = match args.first().unwrap().try_into() { + Ok(url) => url, + Err(e) => return RErr(Error::Plugin(e.to_string().into())), + }; let request = self.client.get(url); @@ -149,20 +147,71 @@ mod http_client { let key = entry.key(); self.requests.insert(Arc::new(request)); - tracing::trace!("get exit"); + tracing::trace!(target: "http", "get exit"); + Ok(FfiValue::Integer(key as DwarfInteger)) + } + "post" => { + tracing::trace!(target: "http", "post enter"); + let url: String = match args.get(0).unwrap().try_into() { + Ok(url) => url, + Err(e) => return RErr(Error::Plugin(e.to_string().into())), + }; + + let request = self.client.post(url); + + let entry = self.requests.vacant_entry(); + let key = entry.key(); + self.requests.insert(Arc::new(request)); + + tracing::trace!(target: "http", "post exit"); Ok(FfiValue::Integer(key as DwarfInteger)) } func => Err(Error::Plugin(format!("Invalid function: {func}").into())), }, "Request" => match func.as_str() { + "header" => { + tracing::trace!(target: "http", "header enter"); + let key: DwarfInteger = match args.get(0).unwrap().try_into() { + Ok(key) => key, + Err(e) => return RErr(Error::Plugin(e.to_string().into())), + }; + + let header: String = match args.get(1).unwrap().try_into() { + Ok(header) => header, + Err(e) => return RErr(Error::Plugin(e.to_string().into())), + }; + + let value: String = match args.get(2).unwrap().try_into() { + Ok(value) => value, + Err(e) => return RErr(Error::Plugin(e.to_string().into())), + }; + + if !self.requests.contains(key as usize) { + return RErr(Error::Plugin("Invalid Request".into())); + } + + let request = self.requests.remove(key as usize); + if let Some(request) = Arc::into_inner(request) { + let request = request.header(header, value); + + let entry = self.requests.vacant_entry(); + let key = entry.key(); + self.requests.insert(Arc::new(request)); + Ok(FfiValue::Integer(key as DwarfInteger)) + } else { + Err(Error::Plugin("Too many references to request.".into())) + } + } "send" => { - tracing::trace!("send enter"); - let key: DwarfInteger = args - .first() - .unwrap() - .try_into() - .map_err(|e: ChaChaError| Error::Plugin(e.to_string().into())) - .unwrap(); + tracing::trace!(target: "http", "send enter"); + let key: DwarfInteger = match args.get(0).unwrap().try_into() { + Ok(key) => key, + Err(e) => return RErr(Error::Plugin(e.to_string().into())), + }; + + if !self.requests.contains(key as usize) { + return RErr(Error::Plugin("Invalid Request".into())); + } let request = self.requests.remove(key as usize); if let Some(request) = Arc::into_inner(request) { @@ -181,10 +230,10 @@ mod http_client { RErr(RBox::new(FfiValue::Integer(key as DwarfInteger))) } }; - tracing::trace!("send exit"); + tracing::trace!(target: "http", "send exit"); Ok(FfiValue::Result(response)) } else { - tracing::trace!("send exit"); + tracing::trace!(target: "http", "send exit"); Ok(FfiValue::Error("Too many references to request.".into())) } } @@ -192,13 +241,15 @@ mod http_client { }, "Response" => match func.as_str() { "text" => { - tracing::trace!("text enter"); - let key: DwarfInteger = args - .first() - .unwrap() - .try_into() - .map_err(|e: ChaChaError| Error::Plugin(e.to_string().into())) - .unwrap(); + tracing::trace!(target: "http", "text enter"); + let key: DwarfInteger = match args.get(0).unwrap().try_into() { + Ok(key) => key, + Err(e) => return RErr(Error::Plugin(e.to_string().into())), + }; + + if !self.responses.contains(key as usize) { + return RErr(Error::Plugin("Invalid Response".into())); + } let response = self.responses.remove(key as usize); if let Some(response) = Arc::into_inner(response) { @@ -212,10 +263,10 @@ mod http_client { RErr(RBox::new(FfiValue::Integer(key as DwarfInteger))) } }; - tracing::trace!("text exit"); + tracing::trace!(target: "http", "text exit"); Ok(FfiValue::Result(result)) } else { - tracing::trace!("text exit"); + tracing::trace!(target: "http", "text exit"); Ok(FfiValue::Error("Too many references to response.".into())) } } @@ -223,22 +274,24 @@ mod http_client { }, "HttpError" => match func.as_str() { "to_string" => { - tracing::trace!("to_string enter"); - let key: DwarfInteger = args - .first() - .unwrap() - .try_into() - .map_err(|e: ChaChaError| Error::Plugin(e.to_string().into())) - .unwrap(); + tracing::trace!(target: "http", "to_string enter"); + let key: DwarfInteger = match args.get(0).unwrap().try_into() { + Ok(key) => key, + Err(e) => return RErr(Error::Plugin(e.to_string().into())), + }; + + if !self.errors.contains(key as usize) { + return RErr(Error::Plugin("Invalid HttpError".into())); + } let error = self.errors.remove(key as usize); if let Some(error) = Arc::into_inner(error) { let result = ROk(RBox::new(FfiValue::String(error.to_string().into()))); - tracing::trace!("to_string exit"); + tracing::trace!(target: "http", "to_string exit"); Ok(FfiValue::Result(result)) } else { - tracing::trace!("to_string exit"); + tracing::trace!(target: "http", "to_string exit"); Ok(FfiValue::Error("Too many references to error.".into())) } } @@ -262,7 +315,7 @@ mod http_server { use std::sync::{Arc, Mutex}; use http_body_util::Full; - use hyper::body::{Body, Bytes}; + use hyper::body::Bytes; use hyper::header::{HeaderValue, CONTENT_TYPE}; use hyper::server::conn::http1; use hyper::service::Service; @@ -513,16 +566,16 @@ mod http_server { } "route" => { let FfiValue::String(path) = args.get(0).unwrap() else { - panic!("Invalid path"); + return RErr(Error::Plugin("Invalid path".into())); }; let FfiValue::String(method) = args.get(1).unwrap() else { - panic!("Invalid method"); + return RErr(Error::Plugin("Invalid method".into())); }; let method = Method::from(MethodStr(method.as_str())); let FfiValue::Lambda(number) = args.get(2).unwrap() else { - panic!("Invalid lambda"); + return RErr(Error::Plugin("Invalid lambda".into())); }; println!("adding route {} {}", path, method); @@ -537,16 +590,16 @@ mod http_server { } "prefix_route" => { let FfiValue::String(path) = args.get(0).unwrap() else { - panic!("Invalid path"); + return RErr(Error::Plugin("Invalid path".into())); }; let FfiValue::String(method) = args.get(1).unwrap() else { - panic!("Invalid method"); + return RErr(Error::Plugin("Invalid method".into())); }; let method = Method::from(MethodStr(method.as_str())); let FfiValue::Lambda(number) = args.get(2).unwrap() else { - panic!("Invalid lambda"); + return RErr(Error::Plugin("Invalid lambda".into())); }; println!("adding route {} {}", path, method); @@ -560,19 +613,15 @@ mod http_server { Ok(FfiValue::Empty) } "use_tls" => { - let cert: String = args - .get(0) - .unwrap() - .try_into() - .map_err(|e: ChaChaError| Error::Plugin(e.to_string().into())) - .unwrap(); + let cert: String = match args.get(0).unwrap().try_into() { + Ok(cert) => cert, + Err(e) => return RErr(Error::Plugin(e.to_string().into())), + }; - let key: String = args - .get(1) - .unwrap() - .try_into() - .map_err(|e: ChaChaError| Error::Plugin(e.to_string().into())) - .unwrap(); + let key: String = match args.get(1).unwrap().try_into() { + Ok(key) => key, + Err(e) => return RErr(Error::Plugin(e.to_string().into())), + }; let cert_file = fs::File::open(cert.clone()) .map_err(|e| { @@ -617,18 +666,14 @@ mod http_server { Ok(FfiValue::Integer(key as DwarfInteger)) } "status" => { - let key: DwarfInteger = args - .first() - .unwrap() - .try_into() - .map_err(|e: ChaChaError| Error::Plugin(e.to_string().into())) - .unwrap(); - let status: DwarfInteger = args - .get(1) - .unwrap() - .try_into() - .map_err(|e: ChaChaError| Error::Plugin(e.to_string().into())) - .unwrap(); + let key: DwarfInteger = match args.get(0).unwrap().try_into() { + Ok(key) => key, + Err(e) => return RErr(Error::Plugin(e.to_string().into())), + }; + let status: DwarfInteger = match args.get(1).unwrap().try_into() { + Ok(status) => status, + Err(e) => return RErr(Error::Plugin(e.to_string().into())), + }; let mut guard = self.response_builders.lock().unwrap(); if let Some(option) = guard.get_mut(key as usize) { @@ -642,18 +687,14 @@ mod http_server { } } "body" => { - let key: DwarfInteger = args - .first() - .unwrap() - .try_into() - .map_err(|e: ChaChaError| Error::Plugin(e.to_string().into())) - .unwrap(); - let body: String = args - .get(1) - .unwrap() - .try_into() - .map_err(|e: ChaChaError| Error::Plugin(e.to_string().into())) - .unwrap(); + let key: DwarfInteger = match args.get(0).unwrap().try_into() { + Ok(key) => key, + Err(e) => return RErr(Error::Plugin(e.to_string().into())), + }; + let body: String = match args.get(1).unwrap().try_into() { + Ok(body) => body, + Err(e) => return RErr(Error::Plugin(e.to_string().into())), + }; let mut guard = self.response_builders.lock().unwrap(); let option = guard.get_mut(key as usize).unwrap(); @@ -669,18 +710,14 @@ mod http_server { Ok(FfiValue::Integer(key as DwarfInteger)) } "json" => { - let key: DwarfInteger = args - .first() - .unwrap() - .try_into() - .map_err(|e: ChaChaError| Error::Plugin(e.to_string().into())) - .unwrap(); - let json: String = args - .get(1) - .unwrap() - .try_into() - .map_err(|e: ChaChaError| Error::Plugin(e.to_string().into())) - .unwrap(); + let key: DwarfInteger = match args.first().unwrap().try_into() { + Ok(key) => key, + Err(e) => return RErr(Error::Plugin(e.to_string().into())), + }; + let json: String = match args.get(1).unwrap().try_into() { + Ok(json) => json, + Err(e) => return RErr(Error::Plugin(e.to_string().into())), + }; let mut guard = self.response_builders.lock().unwrap(); let option = guard.get_mut(key as usize).unwrap(); @@ -698,24 +735,18 @@ mod http_server { Ok(FfiValue::Integer(key as DwarfInteger)) } "set_header" => { - let key: DwarfInteger = args - .first() - .unwrap() - .try_into() - .map_err(|e: ChaChaError| Error::Plugin(e.to_string().into())) - .unwrap(); - let header: String = args - .get(1) - .unwrap() - .try_into() - .map_err(|e: ChaChaError| Error::Plugin(e.to_string().into())) - .unwrap(); - let value: String = args - .get(2) - .unwrap() - .try_into() - .map_err(|e: ChaChaError| Error::Plugin(e.to_string().into())) - .unwrap(); + let key: DwarfInteger = match args.first().unwrap().try_into() { + Ok(key) => key, + Err(e) => return RErr(Error::Plugin(e.to_string().into())), + }; + let header: String = match args.get(1).unwrap().try_into() { + Ok(header) => header, + Err(e) => return RErr(Error::Plugin(e.to_string().into())), + }; + let value: String = match args.get(2).unwrap().try_into() { + Ok(value) => value, + Err(e) => return RErr(Error::Plugin(e.to_string().into())), + }; let mut guard = self.response_builders.lock().unwrap(); let option = guard.get_mut(key as usize).unwrap(); @@ -729,12 +760,10 @@ mod http_server { }, "Request" => match func.as_str() { "uri" => { - let key: DwarfInteger = args - .first() - .unwrap() - .try_into() - .map_err(|e: ChaChaError| Error::Plugin(e.to_string().into())) - .unwrap(); + let key: DwarfInteger = match args.first().unwrap().try_into() { + Ok(key) => key, + Err(e) => return RErr(Error::Plugin(e.to_string().into())), + }; if let Some(request) = self.requests.lock().unwrap().get(key as usize) { let uri = request.uri(); @@ -753,12 +782,10 @@ mod http_server { }, "Suffix" => match func.as_str() { "to_string" => { - let key: DwarfInteger = args - .first() - .unwrap() - .try_into() - .map_err(|e: ChaChaError| Error::Plugin(e.to_string().into())) - .unwrap(); + let key: DwarfInteger = match args.first().unwrap().try_into() { + Ok(key) => key, + Err(e) => return RErr(Error::Plugin(e.to_string().into())), + }; let guard = self.strings.lock().unwrap(); let string = guard.get(key as usize).unwrap(); @@ -769,12 +796,10 @@ mod http_server { }, "Uri" => match func.as_str() { "path" => { - let key: DwarfInteger = args - .first() - .unwrap() - .try_into() - .map_err(|e: ChaChaError| Error::Plugin(e.to_string().into())) - .unwrap(); + let key: DwarfInteger = match args.first().unwrap().try_into() { + Ok(key) => key, + Err(e) => return RErr(Error::Plugin(e.to_string().into())), + }; let guard = self.uris.lock().unwrap(); let guard = guard.borrow(); @@ -783,12 +808,10 @@ mod http_server { Ok(FfiValue::String(path.into())) } "query" => { - let key: DwarfInteger = args - .first() - .unwrap() - .try_into() - .map_err(|e: ChaChaError| Error::Plugin(e.to_string().into())) - .unwrap(); + let key: DwarfInteger = match args.first().unwrap().try_into() { + Ok(key) => key, + Err(e) => return RErr(Error::Plugin(e.to_string().into())), + }; let guard = self.uris.lock().unwrap(); let guard = guard.borrow(); diff --git a/plugins/lu_dog/Cargo.lock b/plugins/lu_dog/Cargo.lock index 26c77303..bf9bb750 100644 --- a/plugins/lu_dog/Cargo.lock +++ b/plugins/lu_dog/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "abi_stable" @@ -52,18 +52,18 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.21.0" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ "gimli", ] [[package]] -name = "adler" -version = "1.0.2" +name = "adler2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "ahash" @@ -88,9 +88,9 @@ dependencies = [ [[package]] name = "allocator-api2" -version = "0.2.18" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "android-tzdata" @@ -114,7 +114,7 @@ source = "git+https://github.com/uberFoo/ansi-to-tui#84bac8fbfe4d84d023dce0a32f0 dependencies = [ "nom", "ratatui", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -128,72 +128,73 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.13" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d96bd03f33fe50a863e394ee9718a706f988b9079b20c3784fb726e7678b62fb" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" dependencies = [ "anstyle", "anstyle-parse", "anstyle-query", "anstyle-wincon", "colorchoice", + "is_terminal_polyfill", "utf8parse", ] [[package]] name = "anstyle" -version = "1.0.6" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" [[package]] name = "anstyle-parse" -version = "0.2.3" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.0.2" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.2" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" +checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" dependencies = [ "anstyle", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "anyhow" -version = "1.0.82" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f538837af36e6f6a9be0faa67f9a314f8119e4e4b5867c6ab40ed60360142519" +checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" [[package]] name = "ariadne" version = "0.3.0" source = "git+https://github.com/uberFoo/ariadne#7f145e849a2a3c80efe4306d90d89de3198dab4f" dependencies = [ - "unicode-width", + "unicode-width 0.1.14", "yansi", ] [[package]] name = "arrayvec" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "as_derive_utils" @@ -220,22 +221,21 @@ dependencies = [ [[package]] name = "async-channel" -version = "2.2.1" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "136d4d23bcc79e27423727b36823d86233aad06dfea531837b038394d11e9928" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" dependencies = [ "concurrent-queue", - "event-listener 5.3.0", - "event-listener-strategy 0.5.2", + "event-listener-strategy", "futures-core", "pin-project-lite", ] [[package]] name = "async-compat" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f68a707c1feb095d8c07f8a65b9f506b117d30af431cab89374357de7c11461b" +checksum = "7bab94bde396a3f7b4962e396fdad640e241ed797d4d8d77fc8c237d14c58fc0" dependencies = [ "futures-core", "futures-io", @@ -258,14 +258,14 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.11.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b10202063978b3351199d68f8b22c4e47e4b1b822f8d43fd862d5ea8c006b29a" +checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" dependencies = [ "async-task", "concurrent-queue", - "fastrand 2.1.0", - "futures-lite 2.3.0", + "fastrand 2.3.0", + "futures-lite 2.5.0", "slab", ] @@ -287,9 +287,9 @@ version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a" dependencies = [ - "async-lock 3.3.0", + "async-lock 3.4.0", "blocking", - "futures-lite 2.3.0", + "futures-lite 2.5.0", ] [[package]] @@ -306,7 +306,7 @@ dependencies = [ "log", "parking", "polling 2.8.0", - "rustix 0.37.27", + "rustix 0.37.28", "slab", "socket2 0.4.10", "waker-fn", @@ -314,21 +314,21 @@ dependencies = [ [[package]] name = "async-io" -version = "2.3.2" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcccb0f599cfa2f8ace422d3555572f47424da5648a4382a9dd0310ff8210884" +checksum = "43a2b323ccce0a1d90b449fd71f2a06ca7faa7c54c2751f06c9bd851fc061059" dependencies = [ - "async-lock 3.3.0", + "async-lock 3.4.0", "cfg-if", "concurrent-queue", "futures-io", - "futures-lite 2.3.0", + "futures-lite 2.5.0", "parking", - "polling 3.7.0", - "rustix 0.38.34", + "polling 3.7.4", + "rustix 0.38.43", "slab", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -342,12 +342,12 @@ dependencies = [ [[package]] name = "async-lock" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d034b430882f8381900d3fe6f0aaa3ad94f2cb4ac519b429692a1bc2dda4ae7b" +checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" dependencies = [ - "event-listener 4.0.3", - "event-listener-strategy 0.4.0", + "event-listener 5.4.0", + "event-listener-strategy", "pin-project-lite", ] @@ -368,9 +368,9 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b948000fad4873c1c9339d60f2623323a0cfd3816e5181033c6a5cb68b2accf7" dependencies = [ - "async-io 2.3.2", + "async-io 2.4.0", "blocking", - "futures-lite 2.3.0", + "futures-lite 2.5.0", ] [[package]] @@ -386,46 +386,45 @@ dependencies = [ "cfg-if", "event-listener 3.1.0", "futures-lite 1.13.0", - "rustix 0.38.34", + "rustix 0.38.43", "windows-sys 0.48.0", ] [[package]] name = "async-process" -version = "2.2.2" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a53fc6301894e04a92cb2584fedde80cb25ba8e02d9dc39d4a87d036e22f397d" +checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb" dependencies = [ - "async-channel 2.2.1", - "async-io 2.3.2", - "async-lock 3.3.0", + "async-channel 2.3.1", + "async-io 2.4.0", + "async-lock 3.4.0", "async-signal", "async-task", "blocking", "cfg-if", - "event-listener 5.3.0", - "futures-lite 2.3.0", - "rustix 0.38.34", + "event-listener 5.4.0", + "futures-lite 2.5.0", + "rustix 0.38.43", "tracing", - "windows-sys 0.52.0", ] [[package]] name = "async-signal" -version = "0.2.6" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afe66191c335039c7bb78f99dc7520b0cbb166b3a1cb33a03f53d8a1c6f2afda" +checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" dependencies = [ - "async-io 2.3.2", - "async-lock 3.3.0", + "async-io 2.4.0", + "async-lock 3.4.0", "atomic-waker", "cfg-if", "futures-core", "futures-io", - "rustix 0.38.34", + "rustix 0.38.43", "signal-hook-registry", "slab", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -453,30 +452,30 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.2.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "backtrace" -version = "0.3.71" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", - "cc", "cfg-if", "libc", "miniz_oxide", "object", "rustc-demangle", + "windows-targets 0.52.6", ] [[package]] name = "base64" -version = "0.21.7" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "bincode" @@ -489,28 +488,26 @@ dependencies = [ [[package]] name = "bitcode" -version = "0.5.1" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a733ab290c6e6b2859bba3e68fd1a4ca3eee0577f21ea46049a3529e500627" +checksum = "ee1bce7608560cd4bf0296a4262d0dbf13e6bcec5ff2105724c8ab88cc7fc784" dependencies = [ + "arrayvec", "bitcode_derive", "bytemuck", - "from_bytes_or_zeroed", - "residua-zigzag", + "glam", "serde", - "simdutf8", ] [[package]] name = "bitcode_derive" -version = "0.5.0" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c25ffc293cbf807499083d016ce3bc0459aaa7fd624c1cc563718a2440cb38a" +checksum = "a539389a13af092cd345a2b47ae7dec12deb306d660b2223d25cd3419b253ebe" dependencies = [ - "packagemerge", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.96", ] [[package]] @@ -521,21 +518,20 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.5.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +checksum = "1be3f42a67d6d345ecd59f675f3f012d6974981560836e938c22b424b85ce1be" [[package]] name = "blocking" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "495f7104e962b7356f0aeb34247aca1fe7d2e783b346582db7f2904cb5717e88" +checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" dependencies = [ - "async-channel 2.2.1", - "async-lock 3.3.0", + "async-channel 2.3.1", "async-task", "futures-io", - "futures-lite 2.3.0", + "futures-lite 2.5.0", "piper", ] @@ -547,15 +543,21 @@ checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "bytemuck" -version = "1.15.0" +version = "1.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" + +[[package]] +name = "byteorder" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d6d68c57235a3a081186990eca2867354726650f42f7516ca50c28d6281fd15" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.6.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" +checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" [[package]] name = "cassowary" @@ -565,9 +567,12 @@ checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53" [[package]] name = "cc" -version = "1.0.96" +version = "1.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "065a29261d53ba54260972629f9ca6bffa69bac13cd1fed61420f7fa68b9f8bd" +checksum = "a012a0df96dd6d06ba9a1b29d6402d1a5d77c6befd2566afdc26e10603dc93d7" +dependencies = [ + "shlex", +] [[package]] name = "cfg-if" @@ -575,18 +580,24 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + [[package]] name = "chrono" -version = "0.4.38" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" dependencies = [ "android-tzdata", "iana-time-zone", "js-sys", "num-traits", "wasm-bindgen", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -627,23 +638,23 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.4" +version = "4.5.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0" +checksum = "a8eb5e908ef3a6efbe1ed62520fb7287959888c88485abe072543190ecc66783" dependencies = [ "clap_builder", - "clap_derive 4.5.4", + "clap_derive 4.5.24", ] [[package]] name = "clap_builder" -version = "4.5.2" +version = "4.5.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" +checksum = "96b01801b5fc6a0a232407abc821660c9c6d25a1cafc0d4f85f29fb8d9afc121" dependencies = [ "anstream", "anstyle", - "clap_lex 0.7.0", + "clap_lex 0.7.4", "strsim 0.11.1", ] @@ -662,14 +673,14 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.4" +version = "4.5.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64" +checksum = "54b755194d6389280185988721fffba69495eed5ee9feeee9a599b53db80318c" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.96", ] [[package]] @@ -683,15 +694,15 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.0" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" [[package]] name = "clipboard-win" -version = "5.3.1" +version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79f4473f5144e20d9aceaf2972478f06ddf687831eafeeb434fbaf0acc4144ad" +checksum = "15efe7a882b08f34e38556b14f2fb3daa98769d06c7f0c1b076dfd0d983bc892" dependencies = [ "error-code", ] @@ -708,9 +719,9 @@ dependencies = [ [[package]] name = "colorchoice" -version = "1.0.0" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" [[package]] name = "concurrent-queue" @@ -743,9 +754,9 @@ dependencies = [ [[package]] name = "const_panic" -version = "0.2.8" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6051f239ecec86fde3410901ab7860d458d160371533842974fc61f96d15879b" +checksum = "2459fc9262a1aa204eb4b5764ad4f189caec88aea9634389c0a25f8be7f6265e" [[package]] name = "core-foundation" @@ -759,9 +770,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "core_extensions" @@ -793,18 +804,18 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.12" +version = "0.5.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab3db02a9c5b5121e1e42fbdb1aeb65f5e02624cc58c43f2884c6ccac0b82f95" +checksum = "06ba6d68e24814cb8de6bb986db8222d3a027d15872cabc0d18817bc3c0e4471" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-deque" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" dependencies = [ "crossbeam-epoch", "crossbeam-utils", @@ -821,30 +832,30 @@ dependencies = [ [[package]] name = "crossbeam-queue" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.19" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crossterm" -version = "0.27.0" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f476fe445d41c9e991fd07515a6f463074b782242ccf4a5b7b1d1012e70824df" +checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.7.0", "crossterm_winapi", - "libc", "mio", "parking_lot", + "rustix 0.38.43", "signal-hook", "signal-hook-mio", "winapi", @@ -873,7 +884,7 @@ checksum = "85b03f0c23c75d79d10ae9e6ea850f795db0b11bb9610d55f7751d8a92272db2" dependencies = [ "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -882,6 +893,17 @@ version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + [[package]] name = "dlv-list" version = "0.5.2" @@ -905,7 +927,7 @@ checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" [[package]] name = "dwarf" -version = "0.8.1" +version = "0.9.0" dependencies = [ "abi_stable", "ansi-to-tui", @@ -914,7 +936,7 @@ dependencies = [ "async-compat", "async-condvar-fair", "async-executor", - "async-io 2.3.2", + "async-io 2.4.0", "backtrace", "bincode", "bitcode", @@ -922,16 +944,16 @@ dependencies = [ "chrono", "chumsky", "circular-queue", - "clap 4.5.4", + "clap 4.5.26", "color-backtrace", "core_extensions", "crossbeam", "crossterm", "dap", "dotenvy", - "env_logger 0.10.2", - "futures-lite 2.3.0", - "heck 0.4.1", + "env_logger 0.11.6", + "futures-lite 2.5.0", + "heck 0.5.0", "lazy_static", "log", "num-format", @@ -942,15 +964,15 @@ dependencies = [ "puteketeke", "regex", "reqwest", - "rustc-hash", + "rustc-hash 2.1.0", "rustyline", "sarzak", "serde", "serde_json", "slab", "smartstring", - "smol 2.0.0", - "snafu 0.8.2", + "smol 2.0.2", + "snafu 0.8.5", "test-log", "threadpool", "tracing", @@ -964,9 +986,9 @@ dependencies = [ [[package]] name = "encoding_rs" -version = "0.8.34" +version = "0.8.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" dependencies = [ "cfg-if", ] @@ -979,11 +1001,12 @@ checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d" [[package]] name = "env_filter" -version = "0.1.0" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a009aa4810eb158359dda09d0c87378e4bbb89b5a801f016885a4707ba24f7ea" +checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" dependencies = [ "log", + "regex", ] [[package]] @@ -1001,11 +1024,14 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.11.3" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b35839ba51819680ba087cd351788c9a3c476841207e0b8cee0b04722343b9" +checksum = "dcaee3d8e3cfc3fd92428d477bc97fc29ec8716d180c0d74c643bb26166660e0" dependencies = [ + "anstream", + "anstyle", "env_filter", + "humantime", "log", ] @@ -1017,19 +1043,19 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.8" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "error-code" -version = "3.2.0" +version = "3.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0474425d51df81997e2f90a21591180b38eccf27292d755f3e30750225c175b" +checksum = "a5d9305ccc6942a704f4335694ecd3de2ea531b114ac2d51f5f843750787a92f" [[package]] name = "event-listener" @@ -1050,20 +1076,9 @@ dependencies = [ [[package]] name = "event-listener" -version = "4.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" -dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", -] - -[[package]] -name = "event-listener" -version = "5.3.0" +version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d9944b8ca13534cdfb2800775f8dd4902ff3fc75a50101466decadfdf322a24" +checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" dependencies = [ "concurrent-queue", "parking", @@ -1072,21 +1087,11 @@ dependencies = [ [[package]] name = "event-listener-strategy" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3" -dependencies = [ - "event-listener 4.0.3", - "pin-project-lite", -] - -[[package]] -name = "event-listener-strategy" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" +checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2" dependencies = [ - "event-listener 5.3.0", + "event-listener 5.4.0", "pin-project-lite", ] @@ -1101,9 +1106,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.1.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "fd-lock" @@ -1112,7 +1117,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e5768da2206272c81ef0b5e951a41862938a6070da63bcea197899942d3b947" dependencies = [ "cfg-if", - "rustix 0.38.34", + "rustix 0.38.43", "windows-sys 0.52.0", ] @@ -1146,32 +1151,27 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "from_bytes_or_zeroed" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d25934a78435889223e575c7b0fc36a290c5a312e7a7ae901f10587792e142a" - [[package]] name = "futures-channel" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", + "futures-sink", ] [[package]] name = "futures-core" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-io" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-lite" @@ -1190,11 +1190,11 @@ dependencies = [ [[package]] name = "futures-lite" -version = "2.3.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" +checksum = "cef40d21ae2c515b51041df9ed313ed21e572df340ea58a922a0aefe7e8891a1" dependencies = [ - "fastrand 2.1.0", + "fastrand 2.3.0", "futures-core", "futures-io", "parking", @@ -1203,24 +1203,25 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-util" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-core", "futures-io", + "futures-sink", "futures-task", "memchr", "pin-project-lite", @@ -1239,11 +1240,10 @@ dependencies = [ [[package]] name = "generator" -version = "0.8.1" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "186014d53bc231d0090ef8d6f03e0920c54d85a5ed22f4f2f74315ec56cf83fb" +checksum = "cc6bd114ceda131d3b1d665eba35788690ad37f5916457286b32ab6fd3c438dd" dependencies = [ - "cc", "cfg-if", "libc", "log", @@ -1253,34 +1253,42 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", + "js-sys", "libc", "wasi", + "wasm-bindgen", ] [[package]] name = "gimli" -version = "0.28.1" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + +[[package]] +name = "glam" +version = "0.29.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +checksum = "dc46dd3ec48fdd8e693a98d2b8bafae273a2d54c1de02a2a7e3d57d501f39677" [[package]] name = "h2" -version = "0.3.26" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e" dependencies = [ + "atomic-waker", "bytes", "fnv", "futures-core", "futures-sink", - "futures-util", "http", - "indexmap 2.2.6", + "indexmap 2.7.0", "slab", "tokio", "tokio-util", @@ -1293,6 +1301,15 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash", +] + [[package]] name = "hashbrown" version = "0.14.5" @@ -1303,6 +1320,12 @@ dependencies = [ "allocator-api2", ] +[[package]] +name = "hashbrown" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" + [[package]] name = "heck" version = "0.4.1" @@ -1330,20 +1353,26 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" +[[package]] +name = "hermit-abi" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" + [[package]] name = "home" -version = "0.5.9" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "http" -version = "0.2.12" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" dependencies = [ "bytes", "fnv", @@ -1352,26 +1381,32 @@ dependencies = [ [[package]] name = "http-body" -version = "0.4.6" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", "http", - "pin-project-lite", ] [[package]] -name = "httparse" -version = "1.8.0" +name = "http-body-util" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +dependencies = [ + "bytes", + "futures-util", + "http", + "http-body", + "pin-project-lite", +] [[package]] -name = "httpdate" -version = "1.0.3" +name = "httparse" +version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" +checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" [[package]] name = "humantime" @@ -1381,60 +1416,82 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.28" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" +checksum = "256fb8d4bd6413123cc9d91832d78325c48ff41677595be797d90f42969beae0" dependencies = [ "bytes", "futures-channel", - "futures-core", "futures-util", "h2", "http", "http-body", "httparse", - "httpdate", "itoa", "pin-project-lite", - "socket2 0.5.7", + "smallvec", "tokio", - "tower-service", - "tracing", "want", ] [[package]] name = "hyper-rustls" -version = "0.24.2" +version = "0.27.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" dependencies = [ "futures-util", "http", "hyper", + "hyper-util", "rustls", + "rustls-pki-types", "tokio", "tokio-rustls", + "tower-service", + "webpki-roots", ] [[package]] name = "hyper-tls" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", + "http-body-util", "hyper", + "hyper-util", "native-tls", "tokio", "tokio-native-tls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "pin-project-lite", + "socket2 0.5.8", + "tokio", + "tower-service", + "tracing", ] [[package]] name = "iana-time-zone" -version = "0.1.60" +version = "0.1.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -1453,14 +1510,143 @@ dependencies = [ "cc", ] +[[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.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +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.96", +] + [[package]] name = "idna" -version = "0.5.0" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "icu_normalizer", + "icu_properties", ] [[package]] @@ -1475,19 +1661,19 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.2.6" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" dependencies = [ "equivalent", - "hashbrown 0.14.5", + "hashbrown 0.15.2", ] [[package]] name = "instant" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" dependencies = [ "cfg-if", ] @@ -1505,53 +1691,54 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.9.0" +version = "2.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" [[package]] name = "is-terminal" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" +checksum = "261f68e344040fbd0edea105bef17c66edf46f984ddb1115b775ce31be948f4b" dependencies = [ - "hermit-abi 0.3.9", + "hermit-abi 0.4.0", "libc", "windows-sys 0.52.0", ] [[package]] -name = "itertools" -version = "0.4.19" +name = "is_terminal_polyfill" +version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a9b56eb56058f43dc66e58f40a214b2ccbc9f3df51861b63d51dec7b65bc3f" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" [[package]] name = "itoa" -version = "1.0.11" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] name = "js-sys" -version = "0.3.69" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" dependencies = [ + "once_cell", "wasm-bindgen", ] [[package]] name = "lazy_static" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.154" +version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae743338b92ff9146ce83992f766a31066a91a8c84a45e0e9f21e7cf6de6d346" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" [[package]] name = "libloading" @@ -1571,9 +1758,15 @@ checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" [[package]] name = "linux-raw-sys" -version = "0.4.13" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" + +[[package]] +name = "litemap" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" [[package]] name = "lock_api" @@ -1588,9 +1781,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.21" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "loom" @@ -1612,9 +1805,10 @@ dependencies = [ "abi_stable", "bincode", "dwarf", - "heck 0.4.1", + "heck 0.5.0", "log", - "rustc-hash", + "ordered_hash_map", + "rustc-hash 2.1.0", "sarzak", "serde", "serde_json", @@ -1632,9 +1826,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.2" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "mime" @@ -1650,23 +1844,23 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.2" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +checksum = "4ffbe83022cedc1d264172192511ae958937694cd57ce297164951b8b3568394" dependencies = [ - "adler", + "adler2", ] [[package]] name = "mio" -version = "0.8.11" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ "libc", "log", "wasi", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -1681,11 +1875,10 @@ dependencies = [ [[package]] name = "native-tls" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" dependencies = [ - "lazy_static", "libc", "log", "openssl", @@ -1708,12 +1901,13 @@ dependencies = [ [[package]] name = "nix" -version = "0.27.1" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.7.0", "cfg-if", + "cfg_aliases", "libc", ] @@ -1749,9 +1943,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] @@ -1772,7 +1966,7 @@ version = "1.0.0" source = "git+https://github.com/uberFoo/nut#1f89d402a281ab4ea02478d26512e8480146d12a" dependencies = [ "anyhow", - "clap 4.5.4", + "clap 4.5.26", "diff", "heck 0.4.1", "log", @@ -1791,26 +1985,26 @@ dependencies = [ [[package]] name = "object" -version = "0.32.2" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ "memchr", ] [[package]] name = "once_cell" -version = "1.19.0" +version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "openssl" -version = "0.10.64" +version = "0.10.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" +checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.7.0", "cfg-if", "foreign-types", "libc", @@ -1827,7 +2021,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.96", ] [[package]] @@ -1838,9 +2032,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.102" +version = "0.9.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2" +checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" dependencies = [ "cc", "libc", @@ -1848,6 +2042,16 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "ordered_hash_map" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab0e5f22bf6dd04abd854a8874247813a8fa2c8c1260eba6fbb150270ce7c176" +dependencies = [ + "hashbrown 0.13.2", + "serde", +] + [[package]] name = "os_str_bytes" version = "6.6.1" @@ -1861,25 +2065,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] -name = "packagemerge" -version = "0.1.0" +name = "parking" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0efcf6ee55f8f7a24333bc8d1dd0e541a6cedf903dbc07ae6479d7f8ff32ed08" -dependencies = [ - "itertools", -] - -[[package]] -name = "parking" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot" -version = "0.12.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e4af0ca4f6caed20e900d564c242b8e5d4903fdacf31d3daf527b66fe6f42fb" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", "parking_lot_core", @@ -1895,14 +2090,14 @@ dependencies = [ "libc", "redox_syscall", "smallvec", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] name = "paste" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "percent-encoding" @@ -1912,9 +2107,9 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pin-project-lite" -version = "0.2.14" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pin-utils" @@ -1924,20 +2119,20 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "piper" -version = "0.2.1" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" dependencies = [ "atomic-waker", - "fastrand 2.1.0", + "fastrand 2.3.0", "futures-io", ] [[package]] name = "pkg-config" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] name = "polling" @@ -1957,24 +2152,27 @@ dependencies = [ [[package]] name = "polling" -version = "3.7.0" +version = "3.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645493cf344456ef24219d02a768cf1fb92ddf8c92161679ae3d91b91a637be3" +checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f" dependencies = [ "cfg-if", "concurrent-queue", - "hermit-abi 0.3.9", + "hermit-abi 0.4.0", "pin-project-lite", - "rustix 0.38.34", + "rustix 0.38.43", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "ppv-lite86" -version = "0.2.17" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] [[package]] name = "pretty_env_logger" @@ -2012,18 +2210,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.81" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d1597b0c024618f09a9c3b8655b7e430397a36d23fdafec26d6965e9eec3eba" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" dependencies = [ "unicode-ident", ] [[package]] name = "psm" -version = "0.1.21" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874" +checksum = "200b9ff220857e53e184257720a14553b2f4aa02577d2ed9842d45d4b9654810" dependencies = [ "cc", ] @@ -2035,9 +2233,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83b1109db5f94e442b059329319e1bc014ee53ce1c1b9a1ad72207e7eb177936" dependencies = [ "async-executor", - "async-io 2.3.2", + "async-io 2.4.0", "crossbeam", - "futures-lite 2.3.0", + "futures-lite 2.5.0", "once_cell", "parking_lot", "slab", @@ -2045,11 +2243,63 @@ dependencies = [ "tracing", ] +[[package]] +name = "quinn" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef" +dependencies = [ + "bytes", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash 2.1.0", + "rustls", + "socket2 0.5.8", + "thiserror 2.0.10", + "tokio", + "tracing", +] + +[[package]] +name = "quinn-proto" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" +dependencies = [ + "bytes", + "getrandom", + "rand", + "ring", + "rustc-hash 2.1.0", + "rustls", + "rustls-pki-types", + "slab", + "thiserror 2.0.10", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c40286217b4ba3a71d644d752e6a0b71f13f1b6a2c5311acfcbe0c2418ed904" +dependencies = [ + "cfg_aliases", + "libc", + "once_cell", + "socket2 0.5.8", + "tracing", + "windows-sys 0.59.0", +] + [[package]] name = "quote" -version = "1.0.36" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" dependencies = [ "proc-macro2", ] @@ -2111,28 +2361,28 @@ dependencies = [ "bitflags 1.3.2", "cassowary", "unicode-segmentation", - "unicode-width", + "unicode-width 0.1.14", ] [[package]] name = "redox_syscall" -version = "0.5.1" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469052894dcb553421e483e4209ee581a45100d31b4018de03e5a7ad86374a7e" +checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.7.0", ] [[package]] name = "regex" -version = "1.10.4" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.6", - "regex-syntax 0.8.3", + "regex-automata 0.4.9", + "regex-syntax 0.8.5", ] [[package]] @@ -2146,13 +2396,13 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.6" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.3", + "regex-syntax 0.8.5", ] [[package]] @@ -2163,9 +2413,9 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "repr_offset" @@ -2178,21 +2428,24 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.11.27" +version = "0.12.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" +checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" dependencies = [ "base64", "bytes", "encoding_rs", + "futures-channel", "futures-core", "futures-util", "h2", "http", "http-body", + "http-body-util", "hyper", "hyper-rustls", "hyper-tls", + "hyper-util", "ipnet", "js-sys", "log", @@ -2201,8 +2454,10 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", + "quinn", "rustls", "rustls-pemfile", + "rustls-pki-types", "serde", "serde_json", "serde_urlencoded", @@ -2211,21 +2466,16 @@ dependencies = [ "tokio", "tokio-native-tls", "tokio-rustls", + "tower", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", "webpki-roots", - "winreg", + "windows-registry", ] -[[package]] -name = "residua-zigzag" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b37805477eee599a61753230f511ae94d737f69b536e468e294723ad5f1b75f" - [[package]] name = "ring" version = "0.17.8" @@ -2243,9 +2493,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc-hash" @@ -2253,20 +2503,26 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" +[[package]] +name = "rustc-hash" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7fb8039b3032c191086b10f11f319a6e99e1e82889c5cc6046f515c9db1d497" + [[package]] name = "rustc_version" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ "semver", ] [[package]] name = "rustix" -version = "0.37.27" +version = "0.37.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" +checksum = "519165d378b97752ca44bbe15047d5d3409e875f39327546b42ac81d7e18c1b6" dependencies = [ "bitflags 1.3.2", "errno", @@ -2278,61 +2534,73 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.34" +version = "0.38.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +checksum = "a78891ee6bf2340288408954ac787aa063d8e8817e9f53abb37c695c6d834ef6" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.7.0", "errno", "libc", - "linux-raw-sys 0.4.13", - "windows-sys 0.52.0", + "linux-raw-sys 0.4.15", + "windows-sys 0.59.0", ] [[package]] name = "rustls" -version = "0.21.12" +version = "0.23.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +checksum = "8f287924602bf649d949c63dc8ac8b235fa5387d394020705b80c4eb597ce5b8" dependencies = [ - "log", + "once_cell", "ring", + "rustls-pki-types", "rustls-webpki", - "sct", + "subtle", + "zeroize", ] [[package]] name = "rustls-pemfile" -version = "1.0.4" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" dependencies = [ - "base64", + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2bf47e6ff922db3825eb750c4e2ff784c6ff8fb9e13046ef6a1d1c5401b0b37" +dependencies = [ + "web-time", ] [[package]] name = "rustls-webpki" -version = "0.101.7" +version = "0.102.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" dependencies = [ "ring", + "rustls-pki-types", "untrusted", ] [[package]] name = "rustversion" -version = "1.0.15" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80af6f9131f277a45a3fba6ce8e2258037bb0477a67e610d3c1fe046ab31de47" +checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" [[package]] name = "rustyline" -version = "13.0.0" +version = "15.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02a2d683a4ac90aeef5b1013933f6d977bd37d51ff3f4dad829d4931a7e6be86" +checksum = "2ee1e066dc922e513bda599c6ccb5f3bb2b0ea5870a579448f2622993f0a9a2f" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.7.0", "cfg-if", "clipboard-win", "fd-lock", @@ -2344,27 +2612,27 @@ dependencies = [ "radix_trie", "rustyline-derive", "unicode-segmentation", - "unicode-width", + "unicode-width 0.2.0", "utf8parse", - "winapi", + "windows-sys 0.59.0", ] [[package]] name = "rustyline-derive" -version = "0.10.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5af959c8bf6af1aff6d2b463a57f71aae53d1332da58419e30ad8dc7011d951" +checksum = "327e9d075f6df7e25fbf594f1be7ef55cf0d567a6cb5112eeccbbd51ceb48e0d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.96", ] [[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" @@ -2377,17 +2645,18 @@ dependencies = [ [[package]] name = "sarzak" -version = "2.13.26" -source = "git+https://github.com/uberFoo/sarzak?branch=develop#45b23aebb5c86bf33e9c5e13d1ef3c406d0d10b0" +version = "2.15.2" +source = "git+https://github.com/uberFoo/sarzak?branch=develop#cd95b35537c795f8fa0536ef509fea5d4c42f7d6" dependencies = [ "ansi_term", "bincode", "cfg-if", - "clap 4.5.4", + "clap 4.5.26", "heck 0.4.1", "log", "nut", - "rustc-hash", + "ordered_hash_map", + "rustc-hash 1.1.0", "serde", "serde_json", "snafu 0.7.5", @@ -2397,11 +2666,11 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.23" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -2416,23 +2685,13 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "sct" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "security-framework" -version = "2.10.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "770452e37cad93e0a50d5abc3990d2bc351c36d0328f86cefec2f2fb206eaef6" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.7.0", "core-foundation", "core-foundation-sys", "libc", @@ -2441,9 +2700,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.10.0" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f3cc463c0ef97e11c3461a9d3787412d30e8e7eb907c79180c4a57bf7c04ef" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" dependencies = [ "core-foundation-sys", "libc", @@ -2451,37 +2710,38 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.22" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" +checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba" [[package]] name = "serde" -version = "1.0.199" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c9f6e76df036c77cd94996771fb40db98187f096dd0b9af39c6c6e452ba966a" +checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.199" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11bd257a6541e141e42ca6d24ae26f7714887b47e89aa739099104c7e4d3b7fc" +checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.96", ] [[package]] name = "serde_json" -version = "1.0.116" +version = "1.0.135" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e17db7126d17feb94eb3fad46bf1a96b034e8aacbc2e775fe81505f8b0b2813" +checksum = "2b0d7ba2887406110130a978386c4e1befb98c674b4fba677954e4db976630d9" dependencies = [ "itoa", + "memchr", "ryu", "serde", ] @@ -2500,9 +2760,9 @@ dependencies = [ [[package]] name = "sha1_smol" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012" +checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" [[package]] name = "sharded-slab" @@ -2513,6 +2773,12 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "signal-hook" version = "0.3.17" @@ -2525,9 +2791,9 @@ dependencies = [ [[package]] name = "signal-hook-mio" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af" +checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd" dependencies = [ "libc", "mio", @@ -2543,12 +2809,6 @@ dependencies = [ "libc", ] -[[package]] -name = "simdutf8" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a" - [[package]] name = "slab" version = "0.4.9" @@ -2595,19 +2855,19 @@ dependencies = [ [[package]] name = "smol" -version = "2.0.0" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e635339259e51ef85ac7aa29a1cd991b957047507288697a690e80ab97d07cad" +checksum = "a33bd3e260892199c3ccfc487c88b2da2265080acb316cd920da72fdfd7c599f" dependencies = [ - "async-channel 2.2.1", + "async-channel 2.3.1", "async-executor", "async-fs 2.1.2", - "async-io 2.3.2", - "async-lock 3.3.0", + "async-io 2.4.0", + "async-lock 3.4.0", "async-net 2.0.0", - "async-process 2.2.2", + "async-process 2.3.0", "blocking", - "futures-lite 2.3.0", + "futures-lite 2.5.0", ] [[package]] @@ -2622,11 +2882,11 @@ dependencies = [ [[package]] name = "snafu" -version = "0.8.2" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75976f4748ab44f6e5332102be424e7c2dc18daeaf7e725f2040c3ebb133512e" +checksum = "223891c85e2a29c3fe8fb900c1fae5e69c2e42415e3177752e8718475efa5019" dependencies = [ - "snafu-derive 0.8.2", + "snafu-derive 0.8.5", ] [[package]] @@ -2643,14 +2903,14 @@ dependencies = [ [[package]] name = "snafu-derive" -version = "0.8.2" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4b19911debfb8c2fb1107bc6cb2d61868aaf53a988449213959bb1b5b1ed95f" +checksum = "03c3c6b7927ffe7ecaa769ee0e3994da3b8cafc8f444578982c83ecb161af917" dependencies = [ - "heck 0.4.1", + "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.96", ] [[package]] @@ -2665,9 +2925,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" dependencies = [ "libc", "windows-sys 0.52.0", @@ -2679,17 +2939,23 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "stacker" -version = "0.1.15" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c886bd4480155fd3ef527d45e9ac8dd7118a898a46530b7b94c3e21866259fce" +checksum = "799c883d55abdb5e98af1a7b3f23b9b6de8ecada0ecac058672d7635eb48ca7b" dependencies = [ "cc", "cfg-if", "libc", "psm", - "winapi", + "windows-sys 0.59.0", ] [[package]] @@ -2710,6 +2976,12 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + [[package]] name = "syn" version = "1.0.109" @@ -2723,9 +2995,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.60" +version = "2.0.96" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "909518bc7b1c9b779f1bbf07f2929d35af9f0f37e47c6e9ef7f9dddc1e1821f3" +checksum = "d5d0adab1ae378d7f53bdebc67a39f1f151407ef230f0ce2883572f5d8985c80" dependencies = [ "proc-macro2", "quote", @@ -2734,26 +3006,40 @@ dependencies = [ [[package]] name = "sync_wrapper" -version = "0.1.2" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[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.96", +] [[package]] name = "system-configuration" -version = "0.5.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.7.0", "core-foundation", "system-configuration-sys", ] [[package]] name = "system-configuration-sys" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" dependencies = [ "core-foundation-sys", "libc", @@ -2761,14 +3047,16 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.10.1" +version = "3.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +checksum = "9a8a559c81686f576e8cd0290cd2a24a2a9ad80c98b3478856500fcbd7acd704" dependencies = [ "cfg-if", - "fastrand 2.1.0", - "rustix 0.38.34", - "windows-sys 0.52.0", + "fastrand 2.3.0", + "getrandom", + "once_cell", + "rustix 0.38.43", + "windows-sys 0.59.0", ] [[package]] @@ -2786,7 +3074,7 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b319995299c65d522680decf80f2c108d85b861d81dfe340a10d16cee29d9e6" dependencies = [ - "env_logger 0.11.3", + "env_logger 0.11.6", "test-log-macros", "tracing-subscriber", ] @@ -2799,7 +3087,7 @@ checksum = "5999e24eaa32083191ba4e425deb75cdf25efefabe5aaccb7446dd0d4122a3f5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.96", ] [[package]] @@ -2810,22 +3098,42 @@ checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9" [[package]] name = "thiserror" -version = "1.0.59" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0126ad08bff79f29fc3ae6a55cc72352056dfff61e3ff8bb7129476d44b23aa" +checksum = "a3ac7f54ca534db81081ef1c1e7f6ea8a3ef428d2fc069097c079443d24124d3" dependencies = [ - "thiserror-impl", + "thiserror-impl 2.0.10", ] [[package]] name = "thiserror-impl" -version = "1.0.59" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1cd413b5d558b4c5bf3680e324a6fa5014e7b7c067a51e69dbdf47eb7148b66" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.96", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e9465d30713b56a37ede7185763c3492a91be2f5fa68d958c44e41ab9248beb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", ] [[package]] @@ -2856,11 +3164,21 @@ dependencies = [ "crunchy", ] +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + [[package]] name = "tinyvec" -version = "1.6.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" dependencies = [ "tinyvec_macros", ] @@ -2873,17 +3191,17 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.37.0" +version = "1.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787" +checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" dependencies = [ "backtrace", "bytes", "libc", "mio", "pin-project-lite", - "socket2 0.5.7", - "windows-sys 0.48.0", + "socket2 0.5.8", + "windows-sys 0.52.0", ] [[package]] @@ -2898,9 +3216,9 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.24.1" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" dependencies = [ "rustls", "tokio", @@ -2908,16 +3226,15 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.10" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" dependencies = [ "bytes", "futures-core", "futures-sink", "pin-project-lite", "tokio", - "tracing", ] [[package]] @@ -2929,17 +3246,38 @@ dependencies = [ "serde", ] +[[package]] +name = "tower" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + [[package]] name = "tower-service" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.40" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "pin-project-lite", "tracing-attributes", @@ -2948,20 +3286,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.96", ] [[package]] name = "tracing-core" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ "once_cell", "valuable", @@ -2980,9 +3318,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.18" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" dependencies = [ "matchers", "nu-ansi-term", @@ -2998,9 +3336,9 @@ dependencies = [ [[package]] name = "tracing-tracy" -version = "0.11.0" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6024d04f84a69fd0d1dc1eee3a2b070bd246530a0582f9982ae487cb6c703614" +checksum = "0eaa1852afa96e0fe9e44caa53dc0bd2d9d05e0f2611ce09f97f8677af56e4ba" dependencies = [ "tracing-core", "tracing-subscriber", @@ -3009,9 +3347,9 @@ dependencies = [ [[package]] name = "tracy-client" -version = "0.17.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59fb931a64ff88984f86d3e9bcd1ae8843aa7fe44dd0f8097527bc172351741d" +checksum = "d90a2c01305b02b76fdd89ac8608bae27e173c829a35f7d76a345ab5d33836db" dependencies = [ "loom", "once_cell", @@ -3020,11 +3358,12 @@ dependencies = [ [[package]] name = "tracy-client-sys" -version = "0.22.2" +version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d104d610dfa9dd154535102cc9c6164ae1fa37842bc2d9e83f9ac82b0ae0882" +checksum = "69fff37da548239c3bf9e64a12193d261e8b22b660991c6fd2df057c168f435f" dependencies = [ "cc", + "windows-targets 0.52.6", ] [[package]] @@ -3054,38 +3393,29 @@ version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a" -[[package]] -name = "unicode-bidi" -version = "0.3.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" - [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" [[package]] -name = "unicode-normalization" -version = "0.1.23" +name = "unicode-segmentation" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" -dependencies = [ - "tinyvec", -] +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] -name = "unicode-segmentation" -version = "1.11.0" +name = "unicode-width" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" [[package]] name = "unicode-width" -version = "0.1.12" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f5e5f3158ecfd4b8ff6fe086db7c8467a2dfdac97fe420f2b7c4aa97af66d6" +checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" [[package]] name = "untrusted" @@ -3095,26 +3425,38 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.0" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" 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 = "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 = "uuid" -version = "1.8.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" +checksum = "b913a3b5fe84142e269d63cc62b64319ccaf89b748fc31fe025177f767a756c4" dependencies = [ "getrandom", "serde", @@ -3135,15 +3477,15 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "waker-fn" -version = "1.1.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690" +checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" [[package]] name = "walkdir" @@ -3172,46 +3514,47 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.92" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" dependencies = [ "cfg-if", + "once_cell", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.92" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" dependencies = [ "bumpalo", "log", - "once_cell", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.96", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.42" +version = "0.4.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +checksum = "38176d9b44ea84e9184eff0bc34cc167ed044f816accfe5922e54d84cf48eca2" dependencies = [ "cfg-if", "js-sys", + "once_cell", "wasm-bindgen", "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.92" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3219,28 +3562,38 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.92" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.96", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.92" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" [[package]] name = "web-sys" -version = "0.3.69" +version = "0.3.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" dependencies = [ "js-sys", "wasm-bindgen", @@ -3248,9 +3601,12 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.25.4" +version = "0.26.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" +checksum = "5d642ff16b7e79272ae451b7322067cdc17cadf68c23264be9d94a32319efe7e" +dependencies = [ + "rustls-pki-types", +] [[package]] name = "winapi" @@ -3270,11 +3626,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -3285,12 +3641,12 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows" -version = "0.54.0" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9252e5725dbed82865af151df558e754e4a3c2c30818359eb17465f1346a1b49" +checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" dependencies = [ - "windows-core 0.54.0", - "windows-targets 0.52.5", + "windows-core 0.58.0", + "windows-targets 0.52.6", ] [[package]] @@ -3299,26 +3655,72 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] name = "windows-core" -version = "0.54.0" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-result", + "windows-strings", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-implement" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "windows-interface" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "windows-registry" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12661b9c89351d684a50a8a643ce5f608e20243b9fb84687800163429f161d65" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" dependencies = [ "windows-result", - "windows-targets 0.52.5", + "windows-strings", + "windows-targets 0.52.6", ] [[package]] name = "windows-result" -version = "0.1.1" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-strings" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "749f0da9cc72d82e600d8d2e44cadd0b9eedb9038f71a1c58556ac1c5791813b" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" dependencies = [ - "windows-targets 0.52.5", + "windows-result", + "windows-targets 0.52.6", ] [[package]] @@ -3336,7 +3738,16 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.5", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", ] [[package]] @@ -3356,18 +3767,18 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.5", - "windows_aarch64_msvc 0.52.5", - "windows_i686_gnu 0.52.5", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", "windows_i686_gnullvm", - "windows_i686_msvc 0.52.5", - "windows_x86_64_gnu 0.52.5", - "windows_x86_64_gnullvm 0.52.5", - "windows_x86_64_msvc 0.52.5", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", ] [[package]] @@ -3378,9 +3789,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" @@ -3390,9 +3801,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" @@ -3402,15 +3813,15 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" @@ -3420,9 +3831,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" @@ -3432,9 +3843,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" @@ -3444,9 +3855,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" @@ -3456,19 +3867,21 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] -name = "winreg" -version = "0.50.0" +name = "write16" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" [[package]] name = "yansi" @@ -3476,22 +3889,96 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", + "synstructure", +] + [[package]] name = "zerocopy" -version = "0.7.32" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ + "byteorder", "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.32" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "zerofrom" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.96", ] diff --git a/plugins/lu_dog/Cargo.toml b/plugins/lu_dog/Cargo.toml index ebc90d5f..639b8644 100644 --- a/plugins/lu_dog/Cargo.toml +++ b/plugins/lu_dog/Cargo.toml @@ -9,9 +9,10 @@ edition = "2021" abi_stable = "0.11.2" bincode = "1.3.3" dwarf = { path = "../../" } -heck = "0.4.1" +heck = "0.5.0" log = "0.4.19" -rustc-hash = "1.1.0" +ordered_hash_map = { version = "0.4.0", features = ["serde"] } +rustc-hash = "2.1.0" sarzak = { git = "https://github.com/uberFoo/sarzak", branch = "develop", default-features = false, features = [ "sarzak-rwlock", ] } @@ -19,8 +20,8 @@ serde = "1.0.176" serde_json = "1.0.104" uuid = { version = "1.4.1", features = ["v4"] } -# [patch."https://github.com/uberFoo/sarzak"] -# sarzak = { path = "../../../sarzak" } +#[patch."https://github.com/uberFoo/sarzak"] +#sarzak = { path = "../../../sarzak" } [lib] name = "lu_dog" diff --git a/plugins/md/Cargo.lock b/plugins/md/Cargo.lock index 233bc18b..3fe72bc4 100644 --- a/plugins/md/Cargo.lock +++ b/plugins/md/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "abi_stable" @@ -52,18 +52,18 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.21.0" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ "gimli", ] [[package]] -name = "adler" -version = "1.0.2" +name = "adler2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "ahash" @@ -88,9 +88,9 @@ dependencies = [ [[package]] name = "allocator-api2" -version = "0.2.18" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "android-tzdata" @@ -114,7 +114,7 @@ source = "git+https://github.com/uberFoo/ansi-to-tui#84bac8fbfe4d84d023dce0a32f0 dependencies = [ "nom", "ratatui", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -128,9 +128,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.14" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" dependencies = [ "anstyle", "anstyle-parse", @@ -143,58 +143,58 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.7" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" [[package]] name = "anstyle-parse" -version = "0.2.4" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.0.3" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a64c907d4e79225ac72e2a354c9ce84d50ebb4586dee56c82b3ee73004f537f5" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.3" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" +checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" dependencies = [ "anstyle", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "anyhow" -version = "1.0.86" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" +checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" [[package]] name = "ariadne" version = "0.3.0" source = "git+https://github.com/uberFoo/ariadne#7f145e849a2a3c80efe4306d90d89de3198dab4f" dependencies = [ - "unicode-width", + "unicode-width 0.1.14", "yansi", ] [[package]] name = "arrayvec" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "as_derive_utils" @@ -226,16 +226,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" dependencies = [ "concurrent-queue", - "event-listener-strategy 0.5.2", + "event-listener-strategy", "futures-core", "pin-project-lite", ] [[package]] name = "async-compat" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f68a707c1feb095d8c07f8a65b9f506b117d30af431cab89374357de7c11461b" +checksum = "7bab94bde396a3f7b4962e396fdad640e241ed797d4d8d77fc8c237d14c58fc0" dependencies = [ "futures-core", "futures-io", @@ -258,14 +258,14 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.11.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b10202063978b3351199d68f8b22c4e47e4b1b822f8d43fd862d5ea8c006b29a" +checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" dependencies = [ "async-task", "concurrent-queue", - "fastrand 2.1.0", - "futures-lite 2.3.0", + "fastrand 2.3.0", + "futures-lite 2.5.0", "slab", ] @@ -287,9 +287,9 @@ version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a" dependencies = [ - "async-lock 3.3.0", + "async-lock 3.4.0", "blocking", - "futures-lite 2.3.0", + "futures-lite 2.5.0", ] [[package]] @@ -306,7 +306,7 @@ dependencies = [ "log", "parking", "polling 2.8.0", - "rustix 0.37.27", + "rustix 0.37.28", "slab", "socket2 0.4.10", "waker-fn", @@ -314,21 +314,21 @@ dependencies = [ [[package]] name = "async-io" -version = "2.3.2" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcccb0f599cfa2f8ace422d3555572f47424da5648a4382a9dd0310ff8210884" +checksum = "43a2b323ccce0a1d90b449fd71f2a06ca7faa7c54c2751f06c9bd851fc061059" dependencies = [ - "async-lock 3.3.0", + "async-lock 3.4.0", "cfg-if", "concurrent-queue", "futures-io", - "futures-lite 2.3.0", + "futures-lite 2.5.0", "parking", - "polling 3.7.0", - "rustix 0.38.34", + "polling 3.7.4", + "rustix 0.38.43", "slab", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -342,12 +342,12 @@ dependencies = [ [[package]] name = "async-lock" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d034b430882f8381900d3fe6f0aaa3ad94f2cb4ac519b429692a1bc2dda4ae7b" +checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" dependencies = [ - "event-listener 4.0.3", - "event-listener-strategy 0.4.0", + "event-listener 5.4.0", + "event-listener-strategy", "pin-project-lite", ] @@ -368,9 +368,9 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b948000fad4873c1c9339d60f2623323a0cfd3816e5181033c6a5cb68b2accf7" dependencies = [ - "async-io 2.3.2", + "async-io 2.4.0", "blocking", - "futures-lite 2.3.0", + "futures-lite 2.5.0", ] [[package]] @@ -386,46 +386,45 @@ dependencies = [ "cfg-if", "event-listener 3.1.0", "futures-lite 1.13.0", - "rustix 0.38.34", + "rustix 0.38.43", "windows-sys 0.48.0", ] [[package]] name = "async-process" -version = "2.2.2" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a53fc6301894e04a92cb2584fedde80cb25ba8e02d9dc39d4a87d036e22f397d" +checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb" dependencies = [ "async-channel 2.3.1", - "async-io 2.3.2", - "async-lock 3.3.0", + "async-io 2.4.0", + "async-lock 3.4.0", "async-signal", "async-task", "blocking", "cfg-if", - "event-listener 5.3.0", - "futures-lite 2.3.0", - "rustix 0.38.34", + "event-listener 5.4.0", + "futures-lite 2.5.0", + "rustix 0.38.43", "tracing", - "windows-sys 0.52.0", ] [[package]] name = "async-signal" -version = "0.2.6" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afe66191c335039c7bb78f99dc7520b0cbb166b3a1cb33a03f53d8a1c6f2afda" +checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" dependencies = [ - "async-io 2.3.2", - "async-lock 3.3.0", + "async-io 2.4.0", + "async-lock 3.4.0", "atomic-waker", "cfg-if", "futures-core", "futures-io", - "rustix 0.38.34", + "rustix 0.38.43", "signal-hook-registry", "slab", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -453,30 +452,30 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "backtrace" -version = "0.3.71" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", - "cc", "cfg-if", "libc", "miniz_oxide", "object", "rustc-demangle", + "windows-targets 0.52.6", ] [[package]] name = "base64" -version = "0.21.7" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "bincode" @@ -489,28 +488,26 @@ dependencies = [ [[package]] name = "bitcode" -version = "0.5.1" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a733ab290c6e6b2859bba3e68fd1a4ca3eee0577f21ea46049a3529e500627" +checksum = "ee1bce7608560cd4bf0296a4262d0dbf13e6bcec5ff2105724c8ab88cc7fc784" dependencies = [ + "arrayvec", "bitcode_derive", "bytemuck", - "from_bytes_or_zeroed", - "residua-zigzag", + "glam", "serde", - "simdutf8", ] [[package]] name = "bitcode_derive" -version = "0.5.0" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c25ffc293cbf807499083d016ce3bc0459aaa7fd624c1cc563718a2440cb38a" +checksum = "a539389a13af092cd345a2b47ae7dec12deb306d660b2223d25cd3419b253ebe" dependencies = [ - "packagemerge", "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.96", ] [[package]] @@ -521,21 +518,20 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.5.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +checksum = "1be3f42a67d6d345ecd59f675f3f012d6974981560836e938c22b424b85ce1be" [[package]] name = "blocking" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "495f7104e962b7356f0aeb34247aca1fe7d2e783b346582db7f2904cb5717e88" +checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" dependencies = [ "async-channel 2.3.1", - "async-lock 3.3.0", "async-task", "futures-io", - "futures-lite 2.3.0", + "futures-lite 2.5.0", "piper", ] @@ -547,15 +543,21 @@ checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "bytemuck" -version = "1.16.0" +version = "1.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" + +[[package]] +name = "byteorder" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78834c15cb5d5efe3452d58b1e8ba890dd62d21907f867f383358198e56ebca5" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.6.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" +checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" [[package]] name = "cassowary" @@ -565,9 +567,12 @@ checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53" [[package]] name = "cc" -version = "1.0.98" +version = "1.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41c270e7540d725e65ac7f1b212ac8ce349719624d7bcff99f8e2e488e8cf03f" +checksum = "a012a0df96dd6d06ba9a1b29d6402d1a5d77c6befd2566afdc26e10603dc93d7" +dependencies = [ + "shlex", +] [[package]] name = "cfg-if" @@ -575,18 +580,24 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + [[package]] name = "chrono" -version = "0.4.38" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" dependencies = [ "android-tzdata", "iana-time-zone", "js-sys", "num-traits", "wasm-bindgen", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -627,23 +638,23 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.4" +version = "4.5.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0" +checksum = "a8eb5e908ef3a6efbe1ed62520fb7287959888c88485abe072543190ecc66783" dependencies = [ "clap_builder", - "clap_derive 4.5.4", + "clap_derive 4.5.24", ] [[package]] name = "clap_builder" -version = "4.5.2" +version = "4.5.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" +checksum = "96b01801b5fc6a0a232407abc821660c9c6d25a1cafc0d4f85f29fb8d9afc121" dependencies = [ "anstream", "anstyle", - "clap_lex 0.7.0", + "clap_lex 0.7.4", "strsim 0.11.1", ] @@ -662,14 +673,14 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.4" +version = "4.5.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64" +checksum = "54b755194d6389280185988721fffba69495eed5ee9feeee9a599b53db80318c" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.96", ] [[package]] @@ -683,15 +694,15 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.0" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" [[package]] name = "clipboard-win" -version = "5.3.1" +version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79f4473f5144e20d9aceaf2972478f06ddf687831eafeeb434fbaf0acc4144ad" +checksum = "15efe7a882b08f34e38556b14f2fb3daa98769d06c7f0c1b076dfd0d983bc892" dependencies = [ "error-code", ] @@ -708,9 +719,9 @@ dependencies = [ [[package]] name = "colorchoice" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" [[package]] name = "concurrent-queue" @@ -743,9 +754,9 @@ dependencies = [ [[package]] name = "const_panic" -version = "0.2.8" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6051f239ecec86fde3410901ab7860d458d160371533842974fc61f96d15879b" +checksum = "2459fc9262a1aa204eb4b5764ad4f189caec88aea9634389c0a25f8be7f6265e" [[package]] name = "core-foundation" @@ -759,9 +770,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "core_extensions" @@ -793,18 +804,18 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.13" +version = "0.5.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" +checksum = "06ba6d68e24814cb8de6bb986db8222d3a027d15872cabc0d18817bc3c0e4471" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-deque" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" dependencies = [ "crossbeam-epoch", "crossbeam-utils", @@ -821,30 +832,30 @@ dependencies = [ [[package]] name = "crossbeam-queue" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.20" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crossterm" -version = "0.27.0" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f476fe445d41c9e991fd07515a6f463074b782242ccf4a5b7b1d1012e70824df" +checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.7.0", "crossterm_winapi", - "libc", "mio", "parking_lot", + "rustix 0.38.43", "signal-hook", "signal-hook-mio", "winapi", @@ -873,7 +884,7 @@ checksum = "85b03f0c23c75d79d10ae9e6ea850f795db0b11bb9610d55f7751d8a92272db2" dependencies = [ "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -882,6 +893,17 @@ version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + [[package]] name = "dlv-list" version = "0.5.2" @@ -905,7 +927,7 @@ checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" [[package]] name = "dwarf" -version = "0.8.1" +version = "0.9.0" dependencies = [ "abi_stable", "ansi-to-tui", @@ -914,7 +936,7 @@ dependencies = [ "async-compat", "async-condvar-fair", "async-executor", - "async-io 2.3.2", + "async-io 2.4.0", "backtrace", "bincode", "bitcode", @@ -922,16 +944,16 @@ dependencies = [ "chrono", "chumsky", "circular-queue", - "clap 4.5.4", + "clap 4.5.26", "color-backtrace", "core_extensions", "crossbeam", "crossterm", "dap", "dotenvy", - "env_logger 0.10.2", - "futures-lite 2.3.0", - "heck 0.4.1", + "env_logger 0.11.6", + "futures-lite 2.5.0", + "heck 0.5.0", "lazy_static", "log", "num-format", @@ -942,15 +964,15 @@ dependencies = [ "puteketeke", "regex", "reqwest", - "rustc-hash", + "rustc-hash 2.1.0", "rustyline", "sarzak", "serde", "serde_json", "slab", "smartstring", - "smol 2.0.0", - "snafu 0.8.2", + "smol 2.0.2", + "snafu 0.8.5", "test-log", "threadpool", "tracing", @@ -964,9 +986,9 @@ dependencies = [ [[package]] name = "encoding_rs" -version = "0.8.34" +version = "0.8.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" dependencies = [ "cfg-if", ] @@ -979,11 +1001,12 @@ checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d" [[package]] name = "env_filter" -version = "0.1.0" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a009aa4810eb158359dda09d0c87378e4bbb89b5a801f016885a4707ba24f7ea" +checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" dependencies = [ "log", + "regex", ] [[package]] @@ -1001,11 +1024,14 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.11.3" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b35839ba51819680ba087cd351788c9a3c476841207e0b8cee0b04722343b9" +checksum = "dcaee3d8e3cfc3fd92428d477bc97fc29ec8716d180c0d74c643bb26166660e0" dependencies = [ + "anstream", + "anstyle", "env_filter", + "humantime", "log", ] @@ -1017,19 +1043,19 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "error-code" -version = "3.2.0" +version = "3.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0474425d51df81997e2f90a21591180b38eccf27292d755f3e30750225c175b" +checksum = "a5d9305ccc6942a704f4335694ecd3de2ea531b114ac2d51f5f843750787a92f" [[package]] name = "event-listener" @@ -1050,20 +1076,9 @@ dependencies = [ [[package]] name = "event-listener" -version = "4.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" -dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", -] - -[[package]] -name = "event-listener" -version = "5.3.0" +version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d9944b8ca13534cdfb2800775f8dd4902ff3fc75a50101466decadfdf322a24" +checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" dependencies = [ "concurrent-queue", "parking", @@ -1072,21 +1087,11 @@ dependencies = [ [[package]] name = "event-listener-strategy" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3" -dependencies = [ - "event-listener 4.0.3", - "pin-project-lite", -] - -[[package]] -name = "event-listener-strategy" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" +checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2" dependencies = [ - "event-listener 5.3.0", + "event-listener 5.4.0", "pin-project-lite", ] @@ -1101,9 +1106,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.1.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "fd-lock" @@ -1112,7 +1117,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e5768da2206272c81ef0b5e951a41862938a6070da63bcea197899942d3b947" dependencies = [ "cfg-if", - "rustix 0.38.34", + "rustix 0.38.43", "windows-sys 0.52.0", ] @@ -1146,32 +1151,27 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "from_bytes_or_zeroed" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d25934a78435889223e575c7b0fc36a290c5a312e7a7ae901f10587792e142a" - [[package]] name = "futures-channel" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", + "futures-sink", ] [[package]] name = "futures-core" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-io" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-lite" @@ -1190,11 +1190,11 @@ dependencies = [ [[package]] name = "futures-lite" -version = "2.3.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" +checksum = "cef40d21ae2c515b51041df9ed313ed21e572df340ea58a922a0aefe7e8891a1" dependencies = [ - "fastrand 2.1.0", + "fastrand 2.3.0", "futures-core", "futures-io", "parking", @@ -1203,24 +1203,25 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-util" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-core", "futures-io", + "futures-sink", "futures-task", "memchr", "pin-project-lite", @@ -1239,11 +1240,10 @@ dependencies = [ [[package]] name = "generator" -version = "0.8.1" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "186014d53bc231d0090ef8d6f03e0920c54d85a5ed22f4f2f74315ec56cf83fb" +checksum = "cc6bd114ceda131d3b1d665eba35788690ad37f5916457286b32ab6fd3c438dd" dependencies = [ - "cc", "cfg-if", "libc", "log", @@ -1258,29 +1258,37 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", + "js-sys", "libc", "wasi", + "wasm-bindgen", ] [[package]] name = "gimli" -version = "0.28.1" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + +[[package]] +name = "glam" +version = "0.29.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +checksum = "dc46dd3ec48fdd8e693a98d2b8bafae273a2d54c1de02a2a7e3d57d501f39677" [[package]] name = "h2" -version = "0.3.26" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e" dependencies = [ + "atomic-waker", "bytes", "fnv", "futures-core", "futures-sink", - "futures-util", "http", - "indexmap 2.2.6", + "indexmap 2.7.0", "slab", "tokio", "tokio-util", @@ -1293,6 +1301,15 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash", +] + [[package]] name = "hashbrown" version = "0.14.5" @@ -1303,6 +1320,12 @@ dependencies = [ "allocator-api2", ] +[[package]] +name = "hashbrown" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" + [[package]] name = "heck" version = "0.4.1" @@ -1330,13 +1353,19 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" +[[package]] +name = "hermit-abi" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" + [[package]] name = "home" -version = "0.5.9" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -1350,9 +1379,9 @@ dependencies = [ [[package]] name = "http" -version = "0.2.12" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" dependencies = [ "bytes", "fnv", @@ -1361,26 +1390,32 @@ dependencies = [ [[package]] name = "http-body" -version = "0.4.6" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", "http", - "pin-project-lite", ] [[package]] -name = "httparse" -version = "1.8.0" +name = "http-body-util" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +dependencies = [ + "bytes", + "futures-util", + "http", + "http-body", + "pin-project-lite", +] [[package]] -name = "httpdate" -version = "1.0.3" +name = "httparse" +version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" +checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" [[package]] name = "humantime" @@ -1390,60 +1425,82 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.28" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" +checksum = "256fb8d4bd6413123cc9d91832d78325c48ff41677595be797d90f42969beae0" dependencies = [ "bytes", "futures-channel", - "futures-core", "futures-util", "h2", "http", "http-body", "httparse", - "httpdate", "itoa", "pin-project-lite", - "socket2 0.5.7", + "smallvec", "tokio", - "tower-service", - "tracing", "want", ] [[package]] name = "hyper-rustls" -version = "0.24.2" +version = "0.27.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" dependencies = [ "futures-util", "http", "hyper", + "hyper-util", "rustls", + "rustls-pki-types", "tokio", "tokio-rustls", + "tower-service", + "webpki-roots", ] [[package]] name = "hyper-tls" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", + "http-body-util", "hyper", + "hyper-util", "native-tls", "tokio", "tokio-native-tls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "pin-project-lite", + "socket2 0.5.8", + "tokio", + "tower-service", + "tracing", ] [[package]] name = "iana-time-zone" -version = "0.1.60" +version = "0.1.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -1462,14 +1519,143 @@ dependencies = [ "cc", ] +[[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.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +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.96", +] + [[package]] name = "idna" -version = "0.5.0" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "icu_normalizer", + "icu_properties", ] [[package]] @@ -1484,12 +1670,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.2.6" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" dependencies = [ "equivalent", - "hashbrown 0.14.5", + "hashbrown 0.15.2", ] [[package]] @@ -1514,59 +1700,54 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.9.0" +version = "2.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" [[package]] name = "is-terminal" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" +checksum = "261f68e344040fbd0edea105bef17c66edf46f984ddb1115b775ce31be948f4b" dependencies = [ - "hermit-abi 0.3.9", + "hermit-abi 0.4.0", "libc", "windows-sys 0.52.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.4.19" +version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a9b56eb56058f43dc66e58f40a214b2ccbc9f3df51861b63d51dec7b65bc3f" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" [[package]] name = "itoa" -version = "1.0.11" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] name = "js-sys" -version = "0.3.69" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" dependencies = [ + "once_cell", "wasm-bindgen", ] [[package]] name = "lazy_static" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.155" +version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" [[package]] name = "libloading" @@ -1586,9 +1767,15 @@ checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" [[package]] name = "linux-raw-sys" -version = "0.4.14" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" + +[[package]] +name = "litemap" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" [[package]] name = "lock_api" @@ -1603,9 +1790,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.21" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "loom" @@ -1622,9 +1809,9 @@ dependencies = [ [[package]] name = "markdown" -version = "1.0.0-alpha.17" +version = "1.0.0-alpha.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21e27d6220ce21f80ce5c4201f23a37c6f1ad037c72c9d1ff215c2919605a5d6" +checksum = "a6491e6c702bf7e3b24e769d800746d5f2c06a6c6a2db7992612e0f429029e81" dependencies = [ "unicode-id", ] @@ -1652,9 +1839,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.2" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "mime" @@ -1670,23 +1857,23 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.3" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87dfd01fe195c66b572b37921ad8803d010623c0aca821bea2302239d155cdae" +checksum = "4ffbe83022cedc1d264172192511ae958937694cd57ce297164951b8b3568394" dependencies = [ - "adler", + "adler2", ] [[package]] name = "mio" -version = "0.8.11" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ "libc", "log", "wasi", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -1701,11 +1888,10 @@ dependencies = [ [[package]] name = "native-tls" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" dependencies = [ - "lazy_static", "libc", "log", "openssl", @@ -1728,12 +1914,13 @@ dependencies = [ [[package]] name = "nix" -version = "0.27.1" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.7.0", "cfg-if", + "cfg_aliases", "libc", ] @@ -1792,7 +1979,7 @@ version = "1.0.0" source = "git+https://github.com/uberFoo/nut#1f89d402a281ab4ea02478d26512e8480146d12a" dependencies = [ "anyhow", - "clap 4.5.4", + "clap 4.5.26", "diff", "heck 0.4.1", "log", @@ -1811,26 +1998,26 @@ dependencies = [ [[package]] name = "object" -version = "0.32.2" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ "memchr", ] [[package]] name = "once_cell" -version = "1.19.0" +version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "openssl" -version = "0.10.64" +version = "0.10.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" +checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.7.0", "cfg-if", "foreign-types", "libc", @@ -1847,7 +2034,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.96", ] [[package]] @@ -1858,9 +2045,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.102" +version = "0.9.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2" +checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" dependencies = [ "cc", "libc", @@ -1868,6 +2055,16 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "ordered_hash_map" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab0e5f22bf6dd04abd854a8874247813a8fa2c8c1260eba6fbb150270ce7c176" +dependencies = [ + "hashbrown 0.13.2", + "serde", +] + [[package]] name = "os_str_bytes" version = "6.6.1" @@ -1880,26 +2077,17 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" -[[package]] -name = "packagemerge" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0efcf6ee55f8f7a24333bc8d1dd0e541a6cedf903dbc07ae6479d7f8ff32ed08" -dependencies = [ - "itertools", -] - [[package]] name = "parking" -version = "2.2.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot" -version = "0.12.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e4af0ca4f6caed20e900d564c242b8e5d4903fdacf31d3daf527b66fe6f42fb" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", "parking_lot_core", @@ -1915,7 +2103,7 @@ dependencies = [ "libc", "redox_syscall", "smallvec", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -1932,9 +2120,9 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pin-project-lite" -version = "0.2.14" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pin-utils" @@ -1944,20 +2132,20 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "piper" -version = "0.2.2" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "464db0c665917b13ebb5d453ccdec4add5658ee1adc7affc7677615356a8afaf" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" dependencies = [ "atomic-waker", - "fastrand 2.1.0", + "fastrand 2.3.0", "futures-io", ] [[package]] name = "pkg-config" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] name = "polling" @@ -1977,24 +2165,27 @@ dependencies = [ [[package]] name = "polling" -version = "3.7.0" +version = "3.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645493cf344456ef24219d02a768cf1fb92ddf8c92161679ae3d91b91a637be3" +checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f" dependencies = [ "cfg-if", "concurrent-queue", - "hermit-abi 0.3.9", + "hermit-abi 0.4.0", "pin-project-lite", - "rustix 0.38.34", + "rustix 0.38.43", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "ppv-lite86" -version = "0.2.17" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] [[package]] name = "pretty_env_logger" @@ -2032,18 +2223,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.83" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b33eb56c327dec362a9e55b3ad14f9d2f0904fb5a5b03b513ab5465399e9f43" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" dependencies = [ "unicode-ident", ] [[package]] name = "psm" -version = "0.1.21" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874" +checksum = "200b9ff220857e53e184257720a14553b2f4aa02577d2ed9842d45d4b9654810" dependencies = [ "cc", ] @@ -2055,9 +2246,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83b1109db5f94e442b059329319e1bc014ee53ce1c1b9a1ad72207e7eb177936" dependencies = [ "async-executor", - "async-io 2.3.2", + "async-io 2.4.0", "crossbeam", - "futures-lite 2.3.0", + "futures-lite 2.5.0", "once_cell", "parking_lot", "slab", @@ -2065,11 +2256,63 @@ dependencies = [ "tracing", ] +[[package]] +name = "quinn" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef" +dependencies = [ + "bytes", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash 2.1.0", + "rustls", + "socket2 0.5.8", + "thiserror 2.0.10", + "tokio", + "tracing", +] + +[[package]] +name = "quinn-proto" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" +dependencies = [ + "bytes", + "getrandom", + "rand", + "ring", + "rustc-hash 2.1.0", + "rustls", + "rustls-pki-types", + "slab", + "thiserror 2.0.10", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c40286217b4ba3a71d644d752e6a0b71f13f1b6a2c5311acfcbe0c2418ed904" +dependencies = [ + "cfg_aliases", + "libc", + "once_cell", + "socket2 0.5.8", + "tracing", + "windows-sys 0.59.0", +] + [[package]] name = "quote" -version = "1.0.36" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" dependencies = [ "proc-macro2", ] @@ -2131,28 +2374,28 @@ dependencies = [ "bitflags 1.3.2", "cassowary", "unicode-segmentation", - "unicode-width", + "unicode-width 0.1.14", ] [[package]] name = "redox_syscall" -version = "0.5.1" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469052894dcb553421e483e4209ee581a45100d31b4018de03e5a7ad86374a7e" +checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.7.0", ] [[package]] name = "regex" -version = "1.10.4" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.6", - "regex-syntax 0.8.3", + "regex-automata 0.4.9", + "regex-syntax 0.8.5", ] [[package]] @@ -2166,13 +2409,13 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.6" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.3", + "regex-syntax 0.8.5", ] [[package]] @@ -2183,9 +2426,9 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "repr_offset" @@ -2198,21 +2441,24 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.11.27" +version = "0.12.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" +checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" dependencies = [ "base64", "bytes", "encoding_rs", + "futures-channel", "futures-core", "futures-util", "h2", "http", "http-body", + "http-body-util", "hyper", "hyper-rustls", "hyper-tls", + "hyper-util", "ipnet", "js-sys", "log", @@ -2221,8 +2467,10 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", + "quinn", "rustls", "rustls-pemfile", + "rustls-pki-types", "serde", "serde_json", "serde_urlencoded", @@ -2231,21 +2479,16 @@ dependencies = [ "tokio", "tokio-native-tls", "tokio-rustls", + "tower", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", "webpki-roots", - "winreg", + "windows-registry", ] -[[package]] -name = "residua-zigzag" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b37805477eee599a61753230f511ae94d737f69b536e468e294723ad5f1b75f" - [[package]] name = "ring" version = "0.17.8" @@ -2273,20 +2516,26 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" +[[package]] +name = "rustc-hash" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7fb8039b3032c191086b10f11f319a6e99e1e82889c5cc6046f515c9db1d497" + [[package]] name = "rustc_version" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ "semver", ] [[package]] name = "rustix" -version = "0.37.27" +version = "0.37.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" +checksum = "519165d378b97752ca44bbe15047d5d3409e875f39327546b42ac81d7e18c1b6" dependencies = [ "bitflags 1.3.2", "errno", @@ -2298,61 +2547,73 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.34" +version = "0.38.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +checksum = "a78891ee6bf2340288408954ac787aa063d8e8817e9f53abb37c695c6d834ef6" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.7.0", "errno", "libc", - "linux-raw-sys 0.4.14", - "windows-sys 0.52.0", + "linux-raw-sys 0.4.15", + "windows-sys 0.59.0", ] [[package]] name = "rustls" -version = "0.21.12" +version = "0.23.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +checksum = "8f287924602bf649d949c63dc8ac8b235fa5387d394020705b80c4eb597ce5b8" dependencies = [ - "log", + "once_cell", "ring", + "rustls-pki-types", "rustls-webpki", - "sct", + "subtle", + "zeroize", ] [[package]] name = "rustls-pemfile" -version = "1.0.4" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" dependencies = [ - "base64", + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2bf47e6ff922db3825eb750c4e2ff784c6ff8fb9e13046ef6a1d1c5401b0b37" +dependencies = [ + "web-time", ] [[package]] name = "rustls-webpki" -version = "0.101.7" +version = "0.102.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" dependencies = [ "ring", + "rustls-pki-types", "untrusted", ] [[package]] name = "rustversion" -version = "1.0.17" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" +checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" [[package]] name = "rustyline" -version = "13.0.0" +version = "15.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02a2d683a4ac90aeef5b1013933f6d977bd37d51ff3f4dad829d4931a7e6be86" +checksum = "2ee1e066dc922e513bda599c6ccb5f3bb2b0ea5870a579448f2622993f0a9a2f" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.7.0", "cfg-if", "clipboard-win", "fd-lock", @@ -2364,20 +2625,20 @@ dependencies = [ "radix_trie", "rustyline-derive", "unicode-segmentation", - "unicode-width", + "unicode-width 0.2.0", "utf8parse", - "winapi", + "windows-sys 0.59.0", ] [[package]] name = "rustyline-derive" -version = "0.10.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5af959c8bf6af1aff6d2b463a57f71aae53d1332da58419e30ad8dc7011d951" +checksum = "327e9d075f6df7e25fbf594f1be7ef55cf0d567a6cb5112eeccbbd51ceb48e0d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.96", ] [[package]] @@ -2397,17 +2658,18 @@ dependencies = [ [[package]] name = "sarzak" -version = "2.13.30" -source = "git+https://github.com/uberFoo/sarzak?branch=develop#75e1490224c7c26c09e0f44d0990bf62d166958b" +version = "2.15.2" +source = "git+https://github.com/uberFoo/sarzak?branch=develop#cd95b35537c795f8fa0536ef509fea5d4c42f7d6" dependencies = [ "ansi_term", "bincode", "cfg-if", - "clap 4.5.4", + "clap 4.5.26", "heck 0.4.1", "log", "nut", - "rustc-hash", + "ordered_hash_map", + "rustc-hash 1.1.0", "serde", "serde_json", "snafu 0.7.5", @@ -2417,11 +2679,11 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.23" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -2436,23 +2698,13 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "sct" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "security-framework" -version = "2.11.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c627723fd09706bacdb5cf41499e95098555af3c3c29d014dc3c458ef6be11c0" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.7.0", "core-foundation", "core-foundation-sys", "libc", @@ -2461,9 +2713,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.11.0" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317936bbbd05227752583946b9e66d7ce3b489f84e11a94a510b4437fef407d7" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" dependencies = [ "core-foundation-sys", "libc", @@ -2471,37 +2723,38 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba" [[package]] name = "serde" -version = "1.0.202" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "226b61a0d411b2ba5ff6d7f73a476ac4f8bb900373459cd00fab8512828ba395" +checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.202" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6048858004bcff69094cd972ed40a32500f153bd3be9f716b2eed2e8217c4838" +checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.96", ] [[package]] name = "serde_json" -version = "1.0.117" +version = "1.0.135" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" +checksum = "2b0d7ba2887406110130a978386c4e1befb98c674b4fba677954e4db976630d9" dependencies = [ "itoa", + "memchr", "ryu", "serde", ] @@ -2520,9 +2773,9 @@ dependencies = [ [[package]] name = "sha1_smol" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012" +checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" [[package]] name = "sharded-slab" @@ -2533,6 +2786,12 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "signal-hook" version = "0.3.17" @@ -2545,9 +2804,9 @@ dependencies = [ [[package]] name = "signal-hook-mio" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af" +checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd" dependencies = [ "libc", "mio", @@ -2563,12 +2822,6 @@ dependencies = [ "libc", ] -[[package]] -name = "simdutf8" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a" - [[package]] name = "slab" version = "0.4.9" @@ -2615,19 +2868,19 @@ dependencies = [ [[package]] name = "smol" -version = "2.0.0" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e635339259e51ef85ac7aa29a1cd991b957047507288697a690e80ab97d07cad" +checksum = "a33bd3e260892199c3ccfc487c88b2da2265080acb316cd920da72fdfd7c599f" dependencies = [ "async-channel 2.3.1", "async-executor", "async-fs 2.1.2", - "async-io 2.3.2", - "async-lock 3.3.0", + "async-io 2.4.0", + "async-lock 3.4.0", "async-net 2.0.0", - "async-process 2.2.2", + "async-process 2.3.0", "blocking", - "futures-lite 2.3.0", + "futures-lite 2.5.0", ] [[package]] @@ -2642,11 +2895,11 @@ dependencies = [ [[package]] name = "snafu" -version = "0.8.2" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75976f4748ab44f6e5332102be424e7c2dc18daeaf7e725f2040c3ebb133512e" +checksum = "223891c85e2a29c3fe8fb900c1fae5e69c2e42415e3177752e8718475efa5019" dependencies = [ - "snafu-derive 0.8.2", + "snafu-derive 0.8.5", ] [[package]] @@ -2663,14 +2916,14 @@ dependencies = [ [[package]] name = "snafu-derive" -version = "0.8.2" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4b19911debfb8c2fb1107bc6cb2d61868aaf53a988449213959bb1b5b1ed95f" +checksum = "03c3c6b7927ffe7ecaa769ee0e3994da3b8cafc8f444578982c83ecb161af917" dependencies = [ - "heck 0.4.1", + "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.96", ] [[package]] @@ -2685,9 +2938,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" dependencies = [ "libc", "windows-sys 0.52.0", @@ -2699,17 +2952,23 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "stacker" -version = "0.1.15" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c886bd4480155fd3ef527d45e9ac8dd7118a898a46530b7b94c3e21866259fce" +checksum = "799c883d55abdb5e98af1a7b3f23b9b6de8ecada0ecac058672d7635eb48ca7b" dependencies = [ "cc", "cfg-if", "libc", "psm", - "winapi", + "windows-sys 0.59.0", ] [[package]] @@ -2730,6 +2989,12 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + [[package]] name = "syn" version = "1.0.109" @@ -2743,9 +3008,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.65" +version = "2.0.96" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2863d96a84c6439701d7a38f9de935ec562c8832cc55d1dde0f513b52fad106" +checksum = "d5d0adab1ae378d7f53bdebc67a39f1f151407ef230f0ce2883572f5d8985c80" dependencies = [ "proc-macro2", "quote", @@ -2754,26 +3019,40 @@ dependencies = [ [[package]] name = "sync_wrapper" -version = "0.1.2" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[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.96", +] [[package]] name = "system-configuration" -version = "0.5.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.7.0", "core-foundation", "system-configuration-sys", ] [[package]] name = "system-configuration-sys" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" dependencies = [ "core-foundation-sys", "libc", @@ -2781,14 +3060,16 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.10.1" +version = "3.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +checksum = "9a8a559c81686f576e8cd0290cd2a24a2a9ad80c98b3478856500fcbd7acd704" dependencies = [ "cfg-if", - "fastrand 2.1.0", - "rustix 0.38.34", - "windows-sys 0.52.0", + "fastrand 2.3.0", + "getrandom", + "once_cell", + "rustix 0.38.43", + "windows-sys 0.59.0", ] [[package]] @@ -2806,7 +3087,7 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b319995299c65d522680decf80f2c108d85b861d81dfe340a10d16cee29d9e6" dependencies = [ - "env_logger 0.11.3", + "env_logger 0.11.6", "test-log-macros", "tracing-subscriber", ] @@ -2819,7 +3100,7 @@ checksum = "5999e24eaa32083191ba4e425deb75cdf25efefabe5aaccb7446dd0d4122a3f5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.96", ] [[package]] @@ -2830,22 +3111,42 @@ checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9" [[package]] name = "thiserror" -version = "1.0.61" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3ac7f54ca534db81081ef1c1e7f6ea8a3ef428d2fc069097c079443d24124d3" +dependencies = [ + "thiserror-impl 2.0.10", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ - "thiserror-impl", + "proc-macro2", + "quote", + "syn 2.0.96", ] [[package]] name = "thiserror-impl" -version = "1.0.61" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" +checksum = "9e9465d30713b56a37ede7185763c3492a91be2f5fa68d958c44e41ab9248beb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.96", ] [[package]] @@ -2876,11 +3177,21 @@ dependencies = [ "crunchy", ] +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + [[package]] name = "tinyvec" -version = "1.6.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" dependencies = [ "tinyvec_macros", ] @@ -2893,17 +3204,17 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.37.0" +version = "1.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787" +checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" dependencies = [ "backtrace", "bytes", "libc", "mio", "pin-project-lite", - "socket2 0.5.7", - "windows-sys 0.48.0", + "socket2 0.5.8", + "windows-sys 0.52.0", ] [[package]] @@ -2918,9 +3229,9 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.24.1" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" dependencies = [ "rustls", "tokio", @@ -2928,9 +3239,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.11" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" dependencies = [ "bytes", "futures-core", @@ -2948,17 +3259,38 @@ dependencies = [ "serde", ] +[[package]] +name = "tower" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + [[package]] name = "tower-service" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.40" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "pin-project-lite", "tracing-attributes", @@ -2967,20 +3299,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.96", ] [[package]] name = "tracing-core" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ "once_cell", "valuable", @@ -2999,9 +3331,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.18" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" dependencies = [ "matchers", "nu-ansi-term", @@ -3017,9 +3349,9 @@ dependencies = [ [[package]] name = "tracing-tracy" -version = "0.11.0" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6024d04f84a69fd0d1dc1eee3a2b070bd246530a0582f9982ae487cb6c703614" +checksum = "0eaa1852afa96e0fe9e44caa53dc0bd2d9d05e0f2611ce09f97f8677af56e4ba" dependencies = [ "tracing-core", "tracing-subscriber", @@ -3028,9 +3360,9 @@ dependencies = [ [[package]] name = "tracy-client" -version = "0.17.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59fb931a64ff88984f86d3e9bcd1ae8843aa7fe44dd0f8097527bc172351741d" +checksum = "d90a2c01305b02b76fdd89ac8608bae27e173c829a35f7d76a345ab5d33836db" dependencies = [ "loom", "once_cell", @@ -3039,11 +3371,12 @@ dependencies = [ [[package]] name = "tracy-client-sys" -version = "0.22.2" +version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d104d610dfa9dd154535102cc9c6164ae1fa37842bc2d9e83f9ac82b0ae0882" +checksum = "69fff37da548239c3bf9e64a12193d261e8b22b660991c6fd2df057c168f435f" dependencies = [ "cc", + "windows-targets 0.52.6", ] [[package]] @@ -3073,44 +3406,35 @@ version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a" -[[package]] -name = "unicode-bidi" -version = "0.3.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" - [[package]] name = "unicode-id" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1b6def86329695390197b82c1e244a54a131ceb66c996f2088a3876e2ae083f" +checksum = "10103c57044730945224467c09f71a4db0071c123a0648cc3e818913bde6b561" [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" [[package]] -name = "unicode-normalization" -version = "0.1.23" +name = "unicode-segmentation" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" -dependencies = [ - "tinyvec", -] +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] -name = "unicode-segmentation" -version = "1.11.0" +name = "unicode-width" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" [[package]] name = "unicode-width" -version = "0.1.12" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f5e5f3158ecfd4b8ff6fe086db7c8467a2dfdac97fe420f2b7c4aa97af66d6" +checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" [[package]] name = "untrusted" @@ -3120,32 +3444,44 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.0" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" 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-width" version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "86bd8d4e895da8537e5315b8254664e6b769c4ff3db18321b297a1e7004392e3" +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +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 = "uuid" -version = "1.8.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" +checksum = "b913a3b5fe84142e269d63cc62b64319ccaf89b748fc31fe025177f767a756c4" dependencies = [ "getrandom", "serde", @@ -3166,9 +3502,9 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "waker-fn" @@ -3203,46 +3539,47 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.92" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" dependencies = [ "cfg-if", + "once_cell", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.92" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" dependencies = [ "bumpalo", "log", - "once_cell", "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.96", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.42" +version = "0.4.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +checksum = "38176d9b44ea84e9184eff0bc34cc167ed044f816accfe5922e54d84cf48eca2" dependencies = [ "cfg-if", "js-sys", + "once_cell", "wasm-bindgen", "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.92" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3250,28 +3587,38 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.92" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.96", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.92" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" [[package]] name = "web-sys" -version = "0.3.69" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" dependencies = [ "js-sys", "wasm-bindgen", @@ -3279,9 +3626,12 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.25.4" +version = "0.26.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" +checksum = "5d642ff16b7e79272ae451b7322067cdc17cadf68c23264be9d94a32319efe7e" +dependencies = [ + "rustls-pki-types", +] [[package]] name = "winapi" @@ -3301,11 +3651,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -3316,12 +3666,12 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows" -version = "0.54.0" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9252e5725dbed82865af151df558e754e4a3c2c30818359eb17465f1346a1b49" +checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" dependencies = [ - "windows-core 0.54.0", - "windows-targets 0.52.5", + "windows-core 0.58.0", + "windows-targets 0.52.6", ] [[package]] @@ -3330,26 +3680,72 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] name = "windows-core" -version = "0.54.0" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12661b9c89351d684a50a8a643ce5f608e20243b9fb84687800163429f161d65" +checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" dependencies = [ + "windows-implement", + "windows-interface", "windows-result", - "windows-targets 0.52.5", + "windows-strings", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-implement" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "windows-interface" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "windows-registry" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" +dependencies = [ + "windows-result", + "windows-strings", + "windows-targets 0.52.6", ] [[package]] name = "windows-result" -version = "0.1.1" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "749f0da9cc72d82e600d8d2e44cadd0b9eedb9038f71a1c58556ac1c5791813b" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" dependencies = [ - "windows-targets 0.52.5", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result", + "windows-targets 0.52.6", ] [[package]] @@ -3367,7 +3763,16 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.5", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", ] [[package]] @@ -3387,18 +3792,18 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.5", - "windows_aarch64_msvc 0.52.5", - "windows_i686_gnu 0.52.5", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", "windows_i686_gnullvm", - "windows_i686_msvc 0.52.5", - "windows_x86_64_gnu 0.52.5", - "windows_x86_64_gnullvm 0.52.5", - "windows_x86_64_msvc 0.52.5", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", ] [[package]] @@ -3409,9 +3814,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" @@ -3421,9 +3826,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" @@ -3433,15 +3838,15 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" @@ -3451,9 +3856,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" @@ -3463,9 +3868,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" @@ -3475,9 +3880,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" @@ -3487,19 +3892,21 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] -name = "winreg" -version = "0.50.0" +name = "write16" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" [[package]] name = "yansi" @@ -3507,22 +3914,96 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", + "synstructure", +] + [[package]] name = "zerocopy" -version = "0.7.34" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ + "byteorder", "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.34" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "zerofrom" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.96", ] diff --git a/plugins/md/src/lib.rs b/plugins/md/src/lib.rs index 5663a14c..a9766cec 100644 --- a/plugins/md/src/lib.rs +++ b/plugins/md/src/lib.rs @@ -9,7 +9,8 @@ use abi_stable::{ std_types::{RErr, ROk, RResult, RStr, RVec}, }; use dwarf::{ - chacha::{error::ChaChaError, ffi_value::FfiValue}, + bubba::error::BubbaError, + chacha::ffi_value::FfiValue, plug_in::{Error, LambdaCall, Plugin, PluginModRef, PluginModule, PluginType, Plugin_TO}, }; use html_escape::decode_html_entities; @@ -57,7 +58,15 @@ mod md { return ROk(Plugin_TO::from_value(Md::default(), TD_Opaque)); } - let mode: String = args.pop().unwrap().try_into().unwrap(); + let mode: String = match args + .pop() + .unwrap() + .try_into() + .map_err(|e: BubbaError| Error::Plugin(e.to_string().into())) + { + Ok(mode) => mode, + Err(e) => return RErr(e), + }; ROk(Plugin_TO::from_value(Md::new(mode.into()), TD_Opaque)) } @@ -153,12 +162,15 @@ mod md { match ty.as_str() { "Md" => match func.as_str() { "to_html" => { - let md: String = args + let md: String = match args .first() .unwrap() .try_into() - .map_err(|e: ChaChaError| Error::Plugin(e.to_string().into())) - .unwrap(); + .map_err(|e: BubbaError| Error::Plugin(e.to_string().into())) + { + Ok(md) => md, + Err(e) => return RErr(e), + }; let options = markdown::Options { parse: ParseOptions::gfm(), diff --git a/plugins/sarzak/Cargo.lock b/plugins/sarzak/Cargo.lock index 965bc670..1f41cc35 100644 --- a/plugins/sarzak/Cargo.lock +++ b/plugins/sarzak/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "abi_stable" @@ -52,18 +52,18 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.21.0" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ "gimli", ] [[package]] -name = "adler" -version = "1.0.2" +name = "adler2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "ahash" @@ -88,9 +88,9 @@ dependencies = [ [[package]] name = "allocator-api2" -version = "0.2.18" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "android-tzdata" @@ -114,7 +114,7 @@ source = "git+https://github.com/uberFoo/ansi-to-tui#84bac8fbfe4d84d023dce0a32f0 dependencies = [ "nom", "ratatui", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -128,9 +128,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.14" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" dependencies = [ "anstyle", "anstyle-parse", @@ -143,58 +143,58 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.7" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" [[package]] name = "anstyle-parse" -version = "0.2.4" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.0.3" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a64c907d4e79225ac72e2a354c9ce84d50ebb4586dee56c82b3ee73004f537f5" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.3" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" +checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" dependencies = [ "anstyle", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "anyhow" -version = "1.0.86" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" +checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" [[package]] name = "ariadne" version = "0.3.0" source = "git+https://github.com/uberFoo/ariadne#7f145e849a2a3c80efe4306d90d89de3198dab4f" dependencies = [ - "unicode-width", + "unicode-width 0.1.14", "yansi", ] [[package]] name = "arrayvec" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "as_derive_utils" @@ -226,16 +226,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" dependencies = [ "concurrent-queue", - "event-listener-strategy 0.5.2", + "event-listener-strategy", "futures-core", "pin-project-lite", ] [[package]] name = "async-compat" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f68a707c1feb095d8c07f8a65b9f506b117d30af431cab89374357de7c11461b" +checksum = "7bab94bde396a3f7b4962e396fdad640e241ed797d4d8d77fc8c237d14c58fc0" dependencies = [ "futures-core", "futures-io", @@ -258,14 +258,14 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.11.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b10202063978b3351199d68f8b22c4e47e4b1b822f8d43fd862d5ea8c006b29a" +checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" dependencies = [ "async-task", "concurrent-queue", - "fastrand 2.1.0", - "futures-lite 2.3.0", + "fastrand 2.3.0", + "futures-lite 2.5.0", "slab", ] @@ -287,9 +287,9 @@ version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a" dependencies = [ - "async-lock 3.3.0", + "async-lock 3.4.0", "blocking", - "futures-lite 2.3.0", + "futures-lite 2.5.0", ] [[package]] @@ -306,7 +306,7 @@ dependencies = [ "log", "parking", "polling 2.8.0", - "rustix 0.37.27", + "rustix 0.37.28", "slab", "socket2 0.4.10", "waker-fn", @@ -314,21 +314,21 @@ dependencies = [ [[package]] name = "async-io" -version = "2.3.2" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcccb0f599cfa2f8ace422d3555572f47424da5648a4382a9dd0310ff8210884" +checksum = "43a2b323ccce0a1d90b449fd71f2a06ca7faa7c54c2751f06c9bd851fc061059" dependencies = [ - "async-lock 3.3.0", + "async-lock 3.4.0", "cfg-if", "concurrent-queue", "futures-io", - "futures-lite 2.3.0", + "futures-lite 2.5.0", "parking", - "polling 3.7.0", - "rustix 0.38.34", + "polling 3.7.4", + "rustix 0.38.43", "slab", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -342,12 +342,12 @@ dependencies = [ [[package]] name = "async-lock" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d034b430882f8381900d3fe6f0aaa3ad94f2cb4ac519b429692a1bc2dda4ae7b" +checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" dependencies = [ - "event-listener 4.0.3", - "event-listener-strategy 0.4.0", + "event-listener 5.4.0", + "event-listener-strategy", "pin-project-lite", ] @@ -368,9 +368,9 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b948000fad4873c1c9339d60f2623323a0cfd3816e5181033c6a5cb68b2accf7" dependencies = [ - "async-io 2.3.2", + "async-io 2.4.0", "blocking", - "futures-lite 2.3.0", + "futures-lite 2.5.0", ] [[package]] @@ -386,46 +386,45 @@ dependencies = [ "cfg-if", "event-listener 3.1.0", "futures-lite 1.13.0", - "rustix 0.38.34", + "rustix 0.38.43", "windows-sys 0.48.0", ] [[package]] name = "async-process" -version = "2.2.2" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a53fc6301894e04a92cb2584fedde80cb25ba8e02d9dc39d4a87d036e22f397d" +checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb" dependencies = [ "async-channel 2.3.1", - "async-io 2.3.2", - "async-lock 3.3.0", + "async-io 2.4.0", + "async-lock 3.4.0", "async-signal", "async-task", "blocking", "cfg-if", - "event-listener 5.3.0", - "futures-lite 2.3.0", - "rustix 0.38.34", + "event-listener 5.4.0", + "futures-lite 2.5.0", + "rustix 0.38.43", "tracing", - "windows-sys 0.52.0", ] [[package]] name = "async-signal" -version = "0.2.6" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afe66191c335039c7bb78f99dc7520b0cbb166b3a1cb33a03f53d8a1c6f2afda" +checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" dependencies = [ - "async-io 2.3.2", - "async-lock 3.3.0", + "async-io 2.4.0", + "async-lock 3.4.0", "atomic-waker", "cfg-if", "futures-core", "futures-io", - "rustix 0.38.34", + "rustix 0.38.43", "signal-hook-registry", "slab", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -453,30 +452,30 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "backtrace" -version = "0.3.71" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", - "cc", "cfg-if", "libc", "miniz_oxide", "object", "rustc-demangle", + "windows-targets 0.52.6", ] [[package]] name = "base64" -version = "0.21.7" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "bincode" @@ -489,28 +488,26 @@ dependencies = [ [[package]] name = "bitcode" -version = "0.5.1" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a733ab290c6e6b2859bba3e68fd1a4ca3eee0577f21ea46049a3529e500627" +checksum = "ee1bce7608560cd4bf0296a4262d0dbf13e6bcec5ff2105724c8ab88cc7fc784" dependencies = [ + "arrayvec", "bitcode_derive", "bytemuck", - "from_bytes_or_zeroed", - "residua-zigzag", + "glam", "serde", - "simdutf8", ] [[package]] name = "bitcode_derive" -version = "0.5.0" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c25ffc293cbf807499083d016ce3bc0459aaa7fd624c1cc563718a2440cb38a" +checksum = "a539389a13af092cd345a2b47ae7dec12deb306d660b2223d25cd3419b253ebe" dependencies = [ - "packagemerge", "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.96", ] [[package]] @@ -521,21 +518,20 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.5.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +checksum = "1be3f42a67d6d345ecd59f675f3f012d6974981560836e938c22b424b85ce1be" [[package]] name = "blocking" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "495f7104e962b7356f0aeb34247aca1fe7d2e783b346582db7f2904cb5717e88" +checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" dependencies = [ "async-channel 2.3.1", - "async-lock 3.3.0", "async-task", "futures-io", - "futures-lite 2.3.0", + "futures-lite 2.5.0", "piper", ] @@ -547,15 +543,21 @@ checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "bytemuck" -version = "1.16.0" +version = "1.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" + +[[package]] +name = "byteorder" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78834c15cb5d5efe3452d58b1e8ba890dd62d21907f867f383358198e56ebca5" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.6.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" +checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" [[package]] name = "cassowary" @@ -565,9 +567,12 @@ checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53" [[package]] name = "cc" -version = "1.0.98" +version = "1.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41c270e7540d725e65ac7f1b212ac8ce349719624d7bcff99f8e2e488e8cf03f" +checksum = "a012a0df96dd6d06ba9a1b29d6402d1a5d77c6befd2566afdc26e10603dc93d7" +dependencies = [ + "shlex", +] [[package]] name = "cfg-if" @@ -575,18 +580,24 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + [[package]] name = "chrono" -version = "0.4.38" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" dependencies = [ "android-tzdata", "iana-time-zone", "js-sys", "num-traits", "wasm-bindgen", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -627,23 +638,23 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.4" +version = "4.5.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0" +checksum = "a8eb5e908ef3a6efbe1ed62520fb7287959888c88485abe072543190ecc66783" dependencies = [ "clap_builder", - "clap_derive 4.5.4", + "clap_derive 4.5.24", ] [[package]] name = "clap_builder" -version = "4.5.2" +version = "4.5.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" +checksum = "96b01801b5fc6a0a232407abc821660c9c6d25a1cafc0d4f85f29fb8d9afc121" dependencies = [ "anstream", "anstyle", - "clap_lex 0.7.0", + "clap_lex 0.7.4", "strsim 0.11.1", ] @@ -662,14 +673,14 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.4" +version = "4.5.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64" +checksum = "54b755194d6389280185988721fffba69495eed5ee9feeee9a599b53db80318c" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.96", ] [[package]] @@ -683,15 +694,15 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.0" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" [[package]] name = "clipboard-win" -version = "5.3.1" +version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79f4473f5144e20d9aceaf2972478f06ddf687831eafeeb434fbaf0acc4144ad" +checksum = "15efe7a882b08f34e38556b14f2fb3daa98769d06c7f0c1b076dfd0d983bc892" dependencies = [ "error-code", ] @@ -708,9 +719,9 @@ dependencies = [ [[package]] name = "colorchoice" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" [[package]] name = "concurrent-queue" @@ -743,9 +754,9 @@ dependencies = [ [[package]] name = "const_panic" -version = "0.2.8" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6051f239ecec86fde3410901ab7860d458d160371533842974fc61f96d15879b" +checksum = "2459fc9262a1aa204eb4b5764ad4f189caec88aea9634389c0a25f8be7f6265e" [[package]] name = "core-foundation" @@ -759,9 +770,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "core_extensions" @@ -793,18 +804,18 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.13" +version = "0.5.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" +checksum = "06ba6d68e24814cb8de6bb986db8222d3a027d15872cabc0d18817bc3c0e4471" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-deque" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" dependencies = [ "crossbeam-epoch", "crossbeam-utils", @@ -821,30 +832,30 @@ dependencies = [ [[package]] name = "crossbeam-queue" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.20" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crossterm" -version = "0.27.0" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f476fe445d41c9e991fd07515a6f463074b782242ccf4a5b7b1d1012e70824df" +checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.7.0", "crossterm_winapi", - "libc", "mio", "parking_lot", + "rustix 0.38.43", "signal-hook", "signal-hook-mio", "winapi", @@ -873,7 +884,7 @@ checksum = "85b03f0c23c75d79d10ae9e6ea850f795db0b11bb9610d55f7751d8a92272db2" dependencies = [ "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -882,6 +893,17 @@ version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + [[package]] name = "dlv-list" version = "0.5.2" @@ -905,7 +927,7 @@ checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" [[package]] name = "dwarf" -version = "0.8.1" +version = "0.9.0" dependencies = [ "abi_stable", "ansi-to-tui", @@ -914,7 +936,7 @@ dependencies = [ "async-compat", "async-condvar-fair", "async-executor", - "async-io 2.3.2", + "async-io 2.4.0", "backtrace", "bincode", "bitcode", @@ -922,16 +944,16 @@ dependencies = [ "chrono", "chumsky", "circular-queue", - "clap 4.5.4", + "clap 4.5.26", "color-backtrace", "core_extensions", "crossbeam", "crossterm", "dap", "dotenvy", - "env_logger 0.10.2", - "futures-lite 2.3.0", - "heck 0.4.1", + "env_logger 0.11.6", + "futures-lite 2.5.0", + "heck 0.5.0", "lazy_static", "log", "num-format", @@ -942,15 +964,15 @@ dependencies = [ "puteketeke", "regex", "reqwest", - "rustc-hash", + "rustc-hash 2.1.0", "rustyline", - "sarzak 2.13.30", + "sarzak 2.15.2", "serde", "serde_json", "slab", "smartstring", - "smol 2.0.0", - "snafu 0.8.2", + "smol 2.0.2", + "snafu 0.8.5", "test-log", "threadpool", "tracing", @@ -964,9 +986,9 @@ dependencies = [ [[package]] name = "encoding_rs" -version = "0.8.34" +version = "0.8.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" dependencies = [ "cfg-if", ] @@ -979,11 +1001,12 @@ checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d" [[package]] name = "env_filter" -version = "0.1.0" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a009aa4810eb158359dda09d0c87378e4bbb89b5a801f016885a4707ba24f7ea" +checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" dependencies = [ "log", + "regex", ] [[package]] @@ -1001,11 +1024,14 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.11.3" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b35839ba51819680ba087cd351788c9a3c476841207e0b8cee0b04722343b9" +checksum = "dcaee3d8e3cfc3fd92428d477bc97fc29ec8716d180c0d74c643bb26166660e0" dependencies = [ + "anstream", + "anstyle", "env_filter", + "humantime", "log", ] @@ -1017,19 +1043,19 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "error-code" -version = "3.2.0" +version = "3.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0474425d51df81997e2f90a21591180b38eccf27292d755f3e30750225c175b" +checksum = "a5d9305ccc6942a704f4335694ecd3de2ea531b114ac2d51f5f843750787a92f" [[package]] name = "event-listener" @@ -1050,20 +1076,9 @@ dependencies = [ [[package]] name = "event-listener" -version = "4.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" -dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", -] - -[[package]] -name = "event-listener" -version = "5.3.0" +version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d9944b8ca13534cdfb2800775f8dd4902ff3fc75a50101466decadfdf322a24" +checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" dependencies = [ "concurrent-queue", "parking", @@ -1072,21 +1087,11 @@ dependencies = [ [[package]] name = "event-listener-strategy" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3" -dependencies = [ - "event-listener 4.0.3", - "pin-project-lite", -] - -[[package]] -name = "event-listener-strategy" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" +checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2" dependencies = [ - "event-listener 5.3.0", + "event-listener 5.4.0", "pin-project-lite", ] @@ -1101,9 +1106,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.1.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "fd-lock" @@ -1112,7 +1117,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e5768da2206272c81ef0b5e951a41862938a6070da63bcea197899942d3b947" dependencies = [ "cfg-if", - "rustix 0.38.34", + "rustix 0.38.43", "windows-sys 0.52.0", ] @@ -1146,32 +1151,27 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "from_bytes_or_zeroed" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d25934a78435889223e575c7b0fc36a290c5a312e7a7ae901f10587792e142a" - [[package]] name = "futures-channel" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", + "futures-sink", ] [[package]] name = "futures-core" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-io" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-lite" @@ -1190,11 +1190,11 @@ dependencies = [ [[package]] name = "futures-lite" -version = "2.3.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" +checksum = "cef40d21ae2c515b51041df9ed313ed21e572df340ea58a922a0aefe7e8891a1" dependencies = [ - "fastrand 2.1.0", + "fastrand 2.3.0", "futures-core", "futures-io", "parking", @@ -1203,24 +1203,25 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-util" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-core", "futures-io", + "futures-sink", "futures-task", "memchr", "pin-project-lite", @@ -1239,11 +1240,10 @@ dependencies = [ [[package]] name = "generator" -version = "0.8.1" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "186014d53bc231d0090ef8d6f03e0920c54d85a5ed22f4f2f74315ec56cf83fb" +checksum = "cc6bd114ceda131d3b1d665eba35788690ad37f5916457286b32ab6fd3c438dd" dependencies = [ - "cc", "cfg-if", "libc", "log", @@ -1258,29 +1258,37 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", + "js-sys", "libc", "wasi", + "wasm-bindgen", ] [[package]] name = "gimli" -version = "0.28.1" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + +[[package]] +name = "glam" +version = "0.29.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +checksum = "dc46dd3ec48fdd8e693a98d2b8bafae273a2d54c1de02a2a7e3d57d501f39677" [[package]] name = "h2" -version = "0.3.26" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e" dependencies = [ + "atomic-waker", "bytes", "fnv", "futures-core", "futures-sink", - "futures-util", "http", - "indexmap 2.2.6", + "indexmap 2.7.0", "slab", "tokio", "tokio-util", @@ -1293,6 +1301,15 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash", +] + [[package]] name = "hashbrown" version = "0.14.5" @@ -1303,6 +1320,12 @@ dependencies = [ "allocator-api2", ] +[[package]] +name = "hashbrown" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" + [[package]] name = "heck" version = "0.4.1" @@ -1330,20 +1353,26 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" +[[package]] +name = "hermit-abi" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" + [[package]] name = "home" -version = "0.5.9" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "http" -version = "0.2.12" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" dependencies = [ "bytes", "fnv", @@ -1352,26 +1381,32 @@ dependencies = [ [[package]] name = "http-body" -version = "0.4.6" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", "http", - "pin-project-lite", ] [[package]] -name = "httparse" -version = "1.8.0" +name = "http-body-util" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +dependencies = [ + "bytes", + "futures-util", + "http", + "http-body", + "pin-project-lite", +] [[package]] -name = "httpdate" -version = "1.0.3" +name = "httparse" +version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" +checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" [[package]] name = "humantime" @@ -1381,60 +1416,82 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.28" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" +checksum = "256fb8d4bd6413123cc9d91832d78325c48ff41677595be797d90f42969beae0" dependencies = [ "bytes", "futures-channel", - "futures-core", "futures-util", "h2", "http", "http-body", "httparse", - "httpdate", "itoa", "pin-project-lite", - "socket2 0.5.7", + "smallvec", "tokio", - "tower-service", - "tracing", "want", ] [[package]] name = "hyper-rustls" -version = "0.24.2" +version = "0.27.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" dependencies = [ "futures-util", "http", "hyper", + "hyper-util", "rustls", + "rustls-pki-types", "tokio", "tokio-rustls", + "tower-service", + "webpki-roots", ] [[package]] name = "hyper-tls" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", + "http-body-util", "hyper", + "hyper-util", "native-tls", "tokio", "tokio-native-tls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "pin-project-lite", + "socket2 0.5.8", + "tokio", + "tower-service", + "tracing", ] [[package]] name = "iana-time-zone" -version = "0.1.60" +version = "0.1.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -1453,14 +1510,143 @@ dependencies = [ "cc", ] +[[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.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +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.96", +] + [[package]] name = "idna" -version = "0.5.0" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "icu_normalizer", + "icu_properties", ] [[package]] @@ -1475,12 +1661,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.2.6" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" dependencies = [ "equivalent", - "hashbrown 0.14.5", + "hashbrown 0.15.2", ] [[package]] @@ -1505,59 +1691,54 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.9.0" +version = "2.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" [[package]] name = "is-terminal" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" +checksum = "261f68e344040fbd0edea105bef17c66edf46f984ddb1115b775ce31be948f4b" dependencies = [ - "hermit-abi 0.3.9", + "hermit-abi 0.4.0", "libc", "windows-sys 0.52.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.4.19" +version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a9b56eb56058f43dc66e58f40a214b2ccbc9f3df51861b63d51dec7b65bc3f" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" [[package]] name = "itoa" -version = "1.0.11" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] name = "js-sys" -version = "0.3.69" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" dependencies = [ + "once_cell", "wasm-bindgen", ] [[package]] name = "lazy_static" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.155" +version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" [[package]] name = "libloading" @@ -1577,9 +1758,15 @@ checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" [[package]] name = "linux-raw-sys" -version = "0.4.14" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" + +[[package]] +name = "litemap" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" [[package]] name = "lock_api" @@ -1594,9 +1781,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.21" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "loom" @@ -1622,9 +1809,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.2" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "mime" @@ -1640,23 +1827,23 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.3" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87dfd01fe195c66b572b37921ad8803d010623c0aca821bea2302239d155cdae" +checksum = "4ffbe83022cedc1d264172192511ae958937694cd57ce297164951b8b3568394" dependencies = [ - "adler", + "adler2", ] [[package]] name = "mio" -version = "0.8.11" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ "libc", "log", "wasi", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -1671,11 +1858,10 @@ dependencies = [ [[package]] name = "native-tls" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" dependencies = [ - "lazy_static", "libc", "log", "openssl", @@ -1698,12 +1884,13 @@ dependencies = [ [[package]] name = "nix" -version = "0.27.1" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.7.0", "cfg-if", + "cfg_aliases", "libc", ] @@ -1762,7 +1949,7 @@ version = "1.0.0" source = "git+https://github.com/uberFoo/nut#1f89d402a281ab4ea02478d26512e8480146d12a" dependencies = [ "anyhow", - "clap 4.5.4", + "clap 4.5.26", "diff", "heck 0.4.1", "log", @@ -1781,26 +1968,26 @@ dependencies = [ [[package]] name = "object" -version = "0.32.2" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ "memchr", ] [[package]] name = "once_cell" -version = "1.19.0" +version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "openssl" -version = "0.10.64" +version = "0.10.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" +checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.7.0", "cfg-if", "foreign-types", "libc", @@ -1817,7 +2004,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.96", ] [[package]] @@ -1828,9 +2015,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.102" +version = "0.9.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2" +checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" dependencies = [ "cc", "libc", @@ -1838,6 +2025,16 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "ordered_hash_map" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab0e5f22bf6dd04abd854a8874247813a8fa2c8c1260eba6fbb150270ce7c176" +dependencies = [ + "hashbrown 0.13.2", + "serde", +] + [[package]] name = "os_str_bytes" version = "6.6.1" @@ -1850,26 +2047,17 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" -[[package]] -name = "packagemerge" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0efcf6ee55f8f7a24333bc8d1dd0e541a6cedf903dbc07ae6479d7f8ff32ed08" -dependencies = [ - "itertools", -] - [[package]] name = "parking" -version = "2.2.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot" -version = "0.12.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e4af0ca4f6caed20e900d564c242b8e5d4903fdacf31d3daf527b66fe6f42fb" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", "parking_lot_core", @@ -1885,7 +2073,7 @@ dependencies = [ "libc", "redox_syscall", "smallvec", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -1902,9 +2090,9 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pin-project-lite" -version = "0.2.14" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pin-utils" @@ -1914,20 +2102,20 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "piper" -version = "0.2.2" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "464db0c665917b13ebb5d453ccdec4add5658ee1adc7affc7677615356a8afaf" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" dependencies = [ "atomic-waker", - "fastrand 2.1.0", + "fastrand 2.3.0", "futures-io", ] [[package]] name = "pkg-config" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] name = "polling" @@ -1947,24 +2135,27 @@ dependencies = [ [[package]] name = "polling" -version = "3.7.0" +version = "3.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645493cf344456ef24219d02a768cf1fb92ddf8c92161679ae3d91b91a637be3" +checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f" dependencies = [ "cfg-if", "concurrent-queue", - "hermit-abi 0.3.9", + "hermit-abi 0.4.0", "pin-project-lite", - "rustix 0.38.34", + "rustix 0.38.43", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "ppv-lite86" -version = "0.2.17" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] [[package]] name = "pretty_env_logger" @@ -2002,18 +2193,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.83" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b33eb56c327dec362a9e55b3ad14f9d2f0904fb5a5b03b513ab5465399e9f43" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" dependencies = [ "unicode-ident", ] [[package]] name = "psm" -version = "0.1.21" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874" +checksum = "200b9ff220857e53e184257720a14553b2f4aa02577d2ed9842d45d4b9654810" dependencies = [ "cc", ] @@ -2025,9 +2216,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83b1109db5f94e442b059329319e1bc014ee53ce1c1b9a1ad72207e7eb177936" dependencies = [ "async-executor", - "async-io 2.3.2", + "async-io 2.4.0", "crossbeam", - "futures-lite 2.3.0", + "futures-lite 2.5.0", "once_cell", "parking_lot", "slab", @@ -2035,11 +2226,63 @@ dependencies = [ "tracing", ] +[[package]] +name = "quinn" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef" +dependencies = [ + "bytes", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash 2.1.0", + "rustls", + "socket2 0.5.8", + "thiserror 2.0.10", + "tokio", + "tracing", +] + +[[package]] +name = "quinn-proto" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" +dependencies = [ + "bytes", + "getrandom", + "rand", + "ring", + "rustc-hash 2.1.0", + "rustls", + "rustls-pki-types", + "slab", + "thiserror 2.0.10", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c40286217b4ba3a71d644d752e6a0b71f13f1b6a2c5311acfcbe0c2418ed904" +dependencies = [ + "cfg_aliases", + "libc", + "once_cell", + "socket2 0.5.8", + "tracing", + "windows-sys 0.59.0", +] + [[package]] name = "quote" -version = "1.0.36" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" dependencies = [ "proc-macro2", ] @@ -2101,28 +2344,28 @@ dependencies = [ "bitflags 1.3.2", "cassowary", "unicode-segmentation", - "unicode-width", + "unicode-width 0.1.14", ] [[package]] name = "redox_syscall" -version = "0.5.1" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469052894dcb553421e483e4209ee581a45100d31b4018de03e5a7ad86374a7e" +checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.7.0", ] [[package]] name = "regex" -version = "1.10.4" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.6", - "regex-syntax 0.8.3", + "regex-automata 0.4.9", + "regex-syntax 0.8.5", ] [[package]] @@ -2136,13 +2379,13 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.6" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.3", + "regex-syntax 0.8.5", ] [[package]] @@ -2153,9 +2396,9 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "repr_offset" @@ -2168,21 +2411,24 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.11.27" +version = "0.12.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" +checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" dependencies = [ "base64", "bytes", "encoding_rs", + "futures-channel", "futures-core", "futures-util", "h2", "http", "http-body", + "http-body-util", "hyper", "hyper-rustls", "hyper-tls", + "hyper-util", "ipnet", "js-sys", "log", @@ -2191,8 +2437,10 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", + "quinn", "rustls", "rustls-pemfile", + "rustls-pki-types", "serde", "serde_json", "serde_urlencoded", @@ -2201,21 +2449,16 @@ dependencies = [ "tokio", "tokio-native-tls", "tokio-rustls", + "tower", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", "webpki-roots", - "winreg", + "windows-registry", ] -[[package]] -name = "residua-zigzag" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b37805477eee599a61753230f511ae94d737f69b536e468e294723ad5f1b75f" - [[package]] name = "ring" version = "0.17.8" @@ -2243,20 +2486,26 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" +[[package]] +name = "rustc-hash" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7fb8039b3032c191086b10f11f319a6e99e1e82889c5cc6046f515c9db1d497" + [[package]] name = "rustc_version" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ "semver", ] [[package]] name = "rustix" -version = "0.37.27" +version = "0.37.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" +checksum = "519165d378b97752ca44bbe15047d5d3409e875f39327546b42ac81d7e18c1b6" dependencies = [ "bitflags 1.3.2", "errno", @@ -2268,61 +2517,73 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.34" +version = "0.38.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +checksum = "a78891ee6bf2340288408954ac787aa063d8e8817e9f53abb37c695c6d834ef6" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.7.0", "errno", "libc", - "linux-raw-sys 0.4.14", - "windows-sys 0.52.0", + "linux-raw-sys 0.4.15", + "windows-sys 0.59.0", ] [[package]] name = "rustls" -version = "0.21.12" +version = "0.23.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +checksum = "8f287924602bf649d949c63dc8ac8b235fa5387d394020705b80c4eb597ce5b8" dependencies = [ - "log", + "once_cell", "ring", + "rustls-pki-types", "rustls-webpki", - "sct", + "subtle", + "zeroize", ] [[package]] name = "rustls-pemfile" -version = "1.0.4" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" dependencies = [ - "base64", + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2bf47e6ff922db3825eb750c4e2ff784c6ff8fb9e13046ef6a1d1c5401b0b37" +dependencies = [ + "web-time", ] [[package]] name = "rustls-webpki" -version = "0.101.7" +version = "0.102.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" dependencies = [ "ring", + "rustls-pki-types", "untrusted", ] [[package]] name = "rustversion" -version = "1.0.17" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" +checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" [[package]] name = "rustyline" -version = "13.0.0" +version = "15.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02a2d683a4ac90aeef5b1013933f6d977bd37d51ff3f4dad829d4931a7e6be86" +checksum = "2ee1e066dc922e513bda599c6ccb5f3bb2b0ea5870a579448f2622993f0a9a2f" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.7.0", "cfg-if", "clipboard-win", "fd-lock", @@ -2334,20 +2595,20 @@ dependencies = [ "radix_trie", "rustyline-derive", "unicode-segmentation", - "unicode-width", + "unicode-width 0.2.0", "utf8parse", - "winapi", + "windows-sys 0.59.0", ] [[package]] name = "rustyline-derive" -version = "0.10.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5af959c8bf6af1aff6d2b463a57f71aae53d1332da58419e30ad8dc7011d951" +checksum = "327e9d075f6df7e25fbf594f1be7ef55cf0d567a6cb5112eeccbbd51ceb48e0d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.96", ] [[package]] @@ -2372,10 +2633,11 @@ dependencies = [ "abi_stable", "bincode", "dwarf", - "heck 0.4.1", + "heck 0.5.0", "log", - "rustc-hash", - "sarzak 2.13.30", + "ordered_hash_map", + "rustc-hash 2.1.0", + "sarzak 2.15.2", "serde", "serde_json", "uuid", @@ -2383,17 +2645,18 @@ dependencies = [ [[package]] name = "sarzak" -version = "2.13.30" -source = "git+https://github.com/uberFoo/sarzak?branch=develop#75e1490224c7c26c09e0f44d0990bf62d166958b" +version = "2.15.2" +source = "git+https://github.com/uberFoo/sarzak?branch=develop#cd95b35537c795f8fa0536ef509fea5d4c42f7d6" dependencies = [ "ansi_term", "bincode", "cfg-if", - "clap 4.5.4", + "clap 4.5.26", "heck 0.4.1", "log", "nut", - "rustc-hash", + "ordered_hash_map", + "rustc-hash 1.1.0", "serde", "serde_json", "snafu 0.7.5", @@ -2403,11 +2666,11 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.23" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -2422,23 +2685,13 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "sct" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "security-framework" -version = "2.11.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c627723fd09706bacdb5cf41499e95098555af3c3c29d014dc3c458ef6be11c0" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.7.0", "core-foundation", "core-foundation-sys", "libc", @@ -2447,9 +2700,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.11.0" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317936bbbd05227752583946b9e66d7ce3b489f84e11a94a510b4437fef407d7" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" dependencies = [ "core-foundation-sys", "libc", @@ -2457,37 +2710,38 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba" [[package]] name = "serde" -version = "1.0.202" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "226b61a0d411b2ba5ff6d7f73a476ac4f8bb900373459cd00fab8512828ba395" +checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.202" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6048858004bcff69094cd972ed40a32500f153bd3be9f716b2eed2e8217c4838" +checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.96", ] [[package]] name = "serde_json" -version = "1.0.117" +version = "1.0.135" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" +checksum = "2b0d7ba2887406110130a978386c4e1befb98c674b4fba677954e4db976630d9" dependencies = [ "itoa", + "memchr", "ryu", "serde", ] @@ -2506,9 +2760,9 @@ dependencies = [ [[package]] name = "sha1_smol" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012" +checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" [[package]] name = "sharded-slab" @@ -2519,6 +2773,12 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "signal-hook" version = "0.3.17" @@ -2531,9 +2791,9 @@ dependencies = [ [[package]] name = "signal-hook-mio" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af" +checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd" dependencies = [ "libc", "mio", @@ -2549,12 +2809,6 @@ dependencies = [ "libc", ] -[[package]] -name = "simdutf8" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a" - [[package]] name = "slab" version = "0.4.9" @@ -2601,19 +2855,19 @@ dependencies = [ [[package]] name = "smol" -version = "2.0.0" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e635339259e51ef85ac7aa29a1cd991b957047507288697a690e80ab97d07cad" +checksum = "a33bd3e260892199c3ccfc487c88b2da2265080acb316cd920da72fdfd7c599f" dependencies = [ "async-channel 2.3.1", "async-executor", "async-fs 2.1.2", - "async-io 2.3.2", - "async-lock 3.3.0", + "async-io 2.4.0", + "async-lock 3.4.0", "async-net 2.0.0", - "async-process 2.2.2", + "async-process 2.3.0", "blocking", - "futures-lite 2.3.0", + "futures-lite 2.5.0", ] [[package]] @@ -2628,11 +2882,11 @@ dependencies = [ [[package]] name = "snafu" -version = "0.8.2" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75976f4748ab44f6e5332102be424e7c2dc18daeaf7e725f2040c3ebb133512e" +checksum = "223891c85e2a29c3fe8fb900c1fae5e69c2e42415e3177752e8718475efa5019" dependencies = [ - "snafu-derive 0.8.2", + "snafu-derive 0.8.5", ] [[package]] @@ -2649,14 +2903,14 @@ dependencies = [ [[package]] name = "snafu-derive" -version = "0.8.2" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4b19911debfb8c2fb1107bc6cb2d61868aaf53a988449213959bb1b5b1ed95f" +checksum = "03c3c6b7927ffe7ecaa769ee0e3994da3b8cafc8f444578982c83ecb161af917" dependencies = [ - "heck 0.4.1", + "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.96", ] [[package]] @@ -2671,9 +2925,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" dependencies = [ "libc", "windows-sys 0.52.0", @@ -2685,17 +2939,23 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "stacker" -version = "0.1.15" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c886bd4480155fd3ef527d45e9ac8dd7118a898a46530b7b94c3e21866259fce" +checksum = "799c883d55abdb5e98af1a7b3f23b9b6de8ecada0ecac058672d7635eb48ca7b" dependencies = [ "cc", "cfg-if", "libc", "psm", - "winapi", + "windows-sys 0.59.0", ] [[package]] @@ -2716,6 +2976,12 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + [[package]] name = "syn" version = "1.0.109" @@ -2729,9 +2995,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.65" +version = "2.0.96" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2863d96a84c6439701d7a38f9de935ec562c8832cc55d1dde0f513b52fad106" +checksum = "d5d0adab1ae378d7f53bdebc67a39f1f151407ef230f0ce2883572f5d8985c80" dependencies = [ "proc-macro2", "quote", @@ -2740,26 +3006,40 @@ dependencies = [ [[package]] name = "sync_wrapper" -version = "0.1.2" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[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.96", +] [[package]] name = "system-configuration" -version = "0.5.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.7.0", "core-foundation", "system-configuration-sys", ] [[package]] name = "system-configuration-sys" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" dependencies = [ "core-foundation-sys", "libc", @@ -2767,14 +3047,16 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.10.1" +version = "3.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +checksum = "9a8a559c81686f576e8cd0290cd2a24a2a9ad80c98b3478856500fcbd7acd704" dependencies = [ "cfg-if", - "fastrand 2.1.0", - "rustix 0.38.34", - "windows-sys 0.52.0", + "fastrand 2.3.0", + "getrandom", + "once_cell", + "rustix 0.38.43", + "windows-sys 0.59.0", ] [[package]] @@ -2792,7 +3074,7 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b319995299c65d522680decf80f2c108d85b861d81dfe340a10d16cee29d9e6" dependencies = [ - "env_logger 0.11.3", + "env_logger 0.11.6", "test-log-macros", "tracing-subscriber", ] @@ -2805,7 +3087,7 @@ checksum = "5999e24eaa32083191ba4e425deb75cdf25efefabe5aaccb7446dd0d4122a3f5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.96", ] [[package]] @@ -2816,22 +3098,42 @@ checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9" [[package]] name = "thiserror" -version = "1.0.61" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ - "thiserror-impl", + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3ac7f54ca534db81081ef1c1e7f6ea8a3ef428d2fc069097c079443d24124d3" +dependencies = [ + "thiserror-impl 2.0.10", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", ] [[package]] name = "thiserror-impl" -version = "1.0.61" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" +checksum = "9e9465d30713b56a37ede7185763c3492a91be2f5fa68d958c44e41ab9248beb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.96", ] [[package]] @@ -2862,11 +3164,21 @@ dependencies = [ "crunchy", ] +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + [[package]] name = "tinyvec" -version = "1.6.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" dependencies = [ "tinyvec_macros", ] @@ -2879,17 +3191,17 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.37.0" +version = "1.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787" +checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" dependencies = [ "backtrace", "bytes", "libc", "mio", "pin-project-lite", - "socket2 0.5.7", - "windows-sys 0.48.0", + "socket2 0.5.8", + "windows-sys 0.52.0", ] [[package]] @@ -2904,9 +3216,9 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.24.1" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" dependencies = [ "rustls", "tokio", @@ -2914,9 +3226,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.11" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" dependencies = [ "bytes", "futures-core", @@ -2934,17 +3246,38 @@ dependencies = [ "serde", ] +[[package]] +name = "tower" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + [[package]] name = "tower-service" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.40" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "pin-project-lite", "tracing-attributes", @@ -2953,20 +3286,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.96", ] [[package]] name = "tracing-core" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ "once_cell", "valuable", @@ -2985,9 +3318,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.18" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" dependencies = [ "matchers", "nu-ansi-term", @@ -3003,9 +3336,9 @@ dependencies = [ [[package]] name = "tracing-tracy" -version = "0.11.0" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6024d04f84a69fd0d1dc1eee3a2b070bd246530a0582f9982ae487cb6c703614" +checksum = "0eaa1852afa96e0fe9e44caa53dc0bd2d9d05e0f2611ce09f97f8677af56e4ba" dependencies = [ "tracing-core", "tracing-subscriber", @@ -3014,9 +3347,9 @@ dependencies = [ [[package]] name = "tracy-client" -version = "0.17.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59fb931a64ff88984f86d3e9bcd1ae8843aa7fe44dd0f8097527bc172351741d" +checksum = "d90a2c01305b02b76fdd89ac8608bae27e173c829a35f7d76a345ab5d33836db" dependencies = [ "loom", "once_cell", @@ -3025,11 +3358,12 @@ dependencies = [ [[package]] name = "tracy-client-sys" -version = "0.22.2" +version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d104d610dfa9dd154535102cc9c6164ae1fa37842bc2d9e83f9ac82b0ae0882" +checksum = "69fff37da548239c3bf9e64a12193d261e8b22b660991c6fd2df057c168f435f" dependencies = [ "cc", + "windows-targets 0.52.6", ] [[package]] @@ -3059,38 +3393,29 @@ version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a" -[[package]] -name = "unicode-bidi" -version = "0.3.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" - [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" [[package]] -name = "unicode-normalization" -version = "0.1.23" +name = "unicode-segmentation" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" -dependencies = [ - "tinyvec", -] +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] -name = "unicode-segmentation" -version = "1.11.0" +name = "unicode-width" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" [[package]] name = "unicode-width" -version = "0.1.12" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f5e5f3158ecfd4b8ff6fe086db7c8467a2dfdac97fe420f2b7c4aa97af66d6" +checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" [[package]] name = "untrusted" @@ -3100,26 +3425,38 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.0" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" 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 = "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 = "uuid" -version = "1.8.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" +checksum = "b913a3b5fe84142e269d63cc62b64319ccaf89b748fc31fe025177f767a756c4" dependencies = [ "getrandom", "serde", @@ -3140,9 +3477,9 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "waker-fn" @@ -3177,46 +3514,47 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.92" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" dependencies = [ "cfg-if", + "once_cell", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.92" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" dependencies = [ "bumpalo", "log", - "once_cell", "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.96", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.42" +version = "0.4.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +checksum = "38176d9b44ea84e9184eff0bc34cc167ed044f816accfe5922e54d84cf48eca2" dependencies = [ "cfg-if", "js-sys", + "once_cell", "wasm-bindgen", "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.92" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3224,28 +3562,38 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.92" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.96", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.92" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" [[package]] name = "web-sys" -version = "0.3.69" +version = "0.3.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" dependencies = [ "js-sys", "wasm-bindgen", @@ -3253,9 +3601,12 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.25.4" +version = "0.26.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" +checksum = "5d642ff16b7e79272ae451b7322067cdc17cadf68c23264be9d94a32319efe7e" +dependencies = [ + "rustls-pki-types", +] [[package]] name = "winapi" @@ -3275,11 +3626,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -3290,12 +3641,12 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows" -version = "0.54.0" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9252e5725dbed82865af151df558e754e4a3c2c30818359eb17465f1346a1b49" +checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" dependencies = [ - "windows-core 0.54.0", - "windows-targets 0.52.5", + "windows-core 0.58.0", + "windows-targets 0.52.6", ] [[package]] @@ -3304,26 +3655,72 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] name = "windows-core" -version = "0.54.0" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-result", + "windows-strings", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-implement" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "windows-interface" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "windows-registry" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12661b9c89351d684a50a8a643ce5f608e20243b9fb84687800163429f161d65" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" dependencies = [ "windows-result", - "windows-targets 0.52.5", + "windows-strings", + "windows-targets 0.52.6", ] [[package]] name = "windows-result" -version = "0.1.1" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "749f0da9cc72d82e600d8d2e44cadd0b9eedb9038f71a1c58556ac1c5791813b" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" dependencies = [ - "windows-targets 0.52.5", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result", + "windows-targets 0.52.6", ] [[package]] @@ -3341,7 +3738,16 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.5", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", ] [[package]] @@ -3361,18 +3767,18 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.5", - "windows_aarch64_msvc 0.52.5", - "windows_i686_gnu 0.52.5", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", "windows_i686_gnullvm", - "windows_i686_msvc 0.52.5", - "windows_x86_64_gnu 0.52.5", - "windows_x86_64_gnullvm 0.52.5", - "windows_x86_64_msvc 0.52.5", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", ] [[package]] @@ -3383,9 +3789,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" @@ -3395,9 +3801,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" @@ -3407,15 +3813,15 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" @@ -3425,9 +3831,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" @@ -3437,9 +3843,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" @@ -3449,9 +3855,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" @@ -3461,19 +3867,21 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] -name = "winreg" -version = "0.50.0" +name = "write16" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" [[package]] name = "yansi" @@ -3481,22 +3889,96 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", + "synstructure", +] + [[package]] name = "zerocopy" -version = "0.7.34" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ + "byteorder", "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.34" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "zerofrom" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.96", ] diff --git a/plugins/sarzak/Cargo.toml b/plugins/sarzak/Cargo.toml index 46da3df0..dc219e32 100644 --- a/plugins/sarzak/Cargo.toml +++ b/plugins/sarzak/Cargo.toml @@ -9,9 +9,10 @@ edition = "2021" abi_stable = "0.11.2" bincode = "1.3.3" dwarf = { path = "../../" } -heck = "0.4.1" +heck = "0.5.0" log = "0.4.19" -rustc-hash = "1.1.0" +ordered_hash_map = { version = "0.4.0", features = ["serde"] } +rustc-hash = "2.1.0" sarzak = { git = "https://github.com/uberFoo/sarzak", branch = "develop", default-features = false, features = [ "sarzak-rwlock", ] } diff --git a/plugins/sarzak/src/lib.rs b/plugins/sarzak/src/lib.rs index 0966e3ae..af47d7d6 100644 --- a/plugins/sarzak/src/lib.rs +++ b/plugins/sarzak/src/lib.rs @@ -1,20 +1,15 @@ -use std::{ - cell::RefCell, - fmt::{self, Display}, - path::Path, - rc::Rc, -}; +use std::fmt::{self, Display}; use abi_stable::{ export_root_module, external_types::crossbeam_channel::RSender, prefix_type::PrefixTypeTrait, sabi_extern_fn, - sabi_trait::prelude::{TD_CanDowncast, TD_Opaque}, - std_types::{RErr, ROk, RResult, RStr, RString, RVec}, + sabi_trait::prelude::TD_Opaque, + std_types::{RErr, ROk, RResult, RStr, RVec}, }; use dwarf::{ - chacha::{ffi_value::FfiValue, value::Value}, + chacha::ffi_value::FfiValue, plug_in::{Error, LambdaCall, Plugin, PluginModRef, PluginModule, PluginType, Plugin_TO}, }; use log::debug; diff --git a/plugins/sqlx/Cargo.lock b/plugins/sqlx/Cargo.lock index c7e9a09c..2782beea 100644 --- a/plugins/sqlx/Cargo.lock +++ b/plugins/sqlx/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "abi_stable" @@ -52,18 +52,18 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.21.0" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ "gimli", ] [[package]] -name = "adler" -version = "1.0.2" +name = "adler2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "ahash" @@ -72,7 +72,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", - "getrandom", "once_cell", "version_check", "zerocopy", @@ -89,9 +88,9 @@ dependencies = [ [[package]] name = "allocator-api2" -version = "0.2.18" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "android-tzdata" @@ -115,7 +114,7 @@ source = "git+https://github.com/uberFoo/ansi-to-tui#84bac8fbfe4d84d023dce0a32f0 dependencies = [ "nom", "ratatui", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -129,9 +128,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.14" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" dependencies = [ "anstyle", "anstyle-parse", @@ -144,58 +143,58 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.7" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" [[package]] name = "anstyle-parse" -version = "0.2.4" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.0.3" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a64c907d4e79225ac72e2a354c9ce84d50ebb4586dee56c82b3ee73004f537f5" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.3" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" +checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" dependencies = [ "anstyle", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "anyhow" -version = "1.0.82" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f538837af36e6f6a9be0faa67f9a314f8119e4e4b5867c6ab40ed60360142519" +checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" [[package]] name = "ariadne" version = "0.3.0" source = "git+https://github.com/uberFoo/ariadne#7f145e849a2a3c80efe4306d90d89de3198dab4f" dependencies = [ - "unicode-width", + "unicode-width 0.1.14", "yansi", ] [[package]] name = "arrayvec" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "as_derive_utils" @@ -232,22 +231,21 @@ dependencies = [ [[package]] name = "async-channel" -version = "2.2.1" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "136d4d23bcc79e27423727b36823d86233aad06dfea531837b038394d11e9928" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" dependencies = [ "concurrent-queue", - "event-listener 5.3.0", - "event-listener-strategy 0.5.2", + "event-listener-strategy", "futures-core", "pin-project-lite", ] [[package]] name = "async-compat" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f68a707c1feb095d8c07f8a65b9f506b117d30af431cab89374357de7c11461b" +checksum = "7bab94bde396a3f7b4962e396fdad640e241ed797d4d8d77fc8c237d14c58fc0" dependencies = [ "futures-core", "futures-io", @@ -270,14 +268,14 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.11.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b10202063978b3351199d68f8b22c4e47e4b1b822f8d43fd862d5ea8c006b29a" +checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" dependencies = [ "async-task", "concurrent-queue", - "fastrand 2.1.0", - "futures-lite 2.3.0", + "fastrand 2.3.0", + "futures-lite 2.5.0", "slab", ] @@ -299,9 +297,9 @@ version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a" dependencies = [ - "async-lock 3.3.0", + "async-lock 3.4.0", "blocking", - "futures-lite 2.3.0", + "futures-lite 2.5.0", ] [[package]] @@ -310,12 +308,12 @@ version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c" dependencies = [ - "async-channel 2.2.1", + "async-channel 2.3.1", "async-executor", - "async-io 2.3.2", - "async-lock 3.3.0", + "async-io 2.4.0", + "async-lock 3.4.0", "blocking", - "futures-lite 2.3.0", + "futures-lite 2.5.0", "once_cell", ] @@ -333,7 +331,7 @@ dependencies = [ "log", "parking", "polling 2.8.0", - "rustix 0.37.27", + "rustix 0.37.28", "slab", "socket2 0.4.10", "waker-fn", @@ -341,21 +339,21 @@ dependencies = [ [[package]] name = "async-io" -version = "2.3.2" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcccb0f599cfa2f8ace422d3555572f47424da5648a4382a9dd0310ff8210884" +checksum = "43a2b323ccce0a1d90b449fd71f2a06ca7faa7c54c2751f06c9bd851fc061059" dependencies = [ - "async-lock 3.3.0", + "async-lock 3.4.0", "cfg-if", "concurrent-queue", "futures-io", - "futures-lite 2.3.0", + "futures-lite 2.5.0", "parking", - "polling 3.7.0", - "rustix 0.38.34", + "polling 3.7.4", + "rustix 0.38.43", "slab", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -369,12 +367,12 @@ dependencies = [ [[package]] name = "async-lock" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d034b430882f8381900d3fe6f0aaa3ad94f2cb4ac519b429692a1bc2dda4ae7b" +checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" dependencies = [ - "event-listener 4.0.3", - "event-listener-strategy 0.4.0", + "event-listener 5.4.0", + "event-listener-strategy", "pin-project-lite", ] @@ -395,9 +393,9 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b948000fad4873c1c9339d60f2623323a0cfd3816e5181033c6a5cb68b2accf7" dependencies = [ - "async-io 2.3.2", + "async-io 2.4.0", "blocking", - "futures-lite 2.3.0", + "futures-lite 2.5.0", ] [[package]] @@ -413,64 +411,63 @@ dependencies = [ "cfg-if", "event-listener 3.1.0", "futures-lite 1.13.0", - "rustix 0.38.34", + "rustix 0.38.43", "windows-sys 0.48.0", ] [[package]] name = "async-process" -version = "2.2.2" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a53fc6301894e04a92cb2584fedde80cb25ba8e02d9dc39d4a87d036e22f397d" +checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb" dependencies = [ - "async-channel 2.2.1", - "async-io 2.3.2", - "async-lock 3.3.0", + "async-channel 2.3.1", + "async-io 2.4.0", + "async-lock 3.4.0", "async-signal", "async-task", "blocking", "cfg-if", - "event-listener 5.3.0", - "futures-lite 2.3.0", - "rustix 0.38.34", + "event-listener 5.4.0", + "futures-lite 2.5.0", + "rustix 0.38.43", "tracing", - "windows-sys 0.52.0", ] [[package]] name = "async-signal" -version = "0.2.6" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afe66191c335039c7bb78f99dc7520b0cbb166b3a1cb33a03f53d8a1c6f2afda" +checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" dependencies = [ - "async-io 2.3.2", - "async-lock 3.3.0", + "async-io 2.4.0", + "async-lock 3.4.0", "atomic-waker", "cfg-if", "futures-core", "futures-io", - "rustix 0.38.34", + "rustix 0.38.43", "signal-hook-registry", "slab", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "async-std" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d" +checksum = "c634475f29802fde2b8f0b505b1bd00dfe4df7d4a000f0b36f7671197d5c3615" dependencies = [ "async-attributes", "async-channel 1.9.0", "async-global-executor", - "async-io 1.13.0", - "async-lock 2.8.0", + "async-io 2.4.0", + "async-lock 3.4.0", "crossbeam-utils", "futures-channel", "futures-core", "futures-io", - "futures-lite 1.13.0", + "futures-lite 2.5.0", "gloo-timers", "kv-log-macro", "log", @@ -516,30 +513,30 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "backtrace" -version = "0.3.71" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", - "cc", "cfg-if", "libc", "miniz_oxide", "object", "rustc-demangle", + "windows-targets 0.52.6", ] [[package]] name = "base64" -version = "0.21.7" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "base64ct" @@ -558,28 +555,26 @@ dependencies = [ [[package]] name = "bitcode" -version = "0.5.1" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a733ab290c6e6b2859bba3e68fd1a4ca3eee0577f21ea46049a3529e500627" +checksum = "ee1bce7608560cd4bf0296a4262d0dbf13e6bcec5ff2105724c8ab88cc7fc784" dependencies = [ + "arrayvec", "bitcode_derive", "bytemuck", - "from_bytes_or_zeroed", - "residua-zigzag", + "glam", "serde", - "simdutf8", ] [[package]] name = "bitcode_derive" -version = "0.5.0" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c25ffc293cbf807499083d016ce3bc0459aaa7fd624c1cc563718a2440cb38a" +checksum = "a539389a13af092cd345a2b47ae7dec12deb306d660b2223d25cd3419b253ebe" dependencies = [ - "packagemerge", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.96", ] [[package]] @@ -590,9 +585,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.5.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +checksum = "1be3f42a67d6d345ecd59f675f3f012d6974981560836e938c22b424b85ce1be" dependencies = [ "serde", ] @@ -608,15 +603,14 @@ dependencies = [ [[package]] name = "blocking" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "495f7104e962b7356f0aeb34247aca1fe7d2e783b346582db7f2904cb5717e88" +checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" dependencies = [ - "async-channel 2.2.1", - "async-lock 3.3.0", + "async-channel 2.3.1", "async-task", "futures-io", - "futures-lite 2.3.0", + "futures-lite 2.5.0", "piper", ] @@ -628,9 +622,9 @@ checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "bytemuck" -version = "1.15.0" +version = "1.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d6d68c57235a3a081186990eca2867354726650f42f7516ca50c28d6281fd15" +checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" [[package]] name = "byteorder" @@ -640,9 +634,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.6.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" +checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" [[package]] name = "cassowary" @@ -652,9 +646,12 @@ checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53" [[package]] name = "cc" -version = "1.0.96" +version = "1.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "065a29261d53ba54260972629f9ca6bffa69bac13cd1fed61420f7fa68b9f8bd" +checksum = "a012a0df96dd6d06ba9a1b29d6402d1a5d77c6befd2566afdc26e10603dc93d7" +dependencies = [ + "shlex", +] [[package]] name = "cfg-if" @@ -662,18 +659,24 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + [[package]] name = "chrono" -version = "0.4.38" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" dependencies = [ "android-tzdata", "iana-time-zone", "js-sys", "num-traits", "wasm-bindgen", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -714,23 +717,23 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.4" +version = "4.5.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0" +checksum = "a8eb5e908ef3a6efbe1ed62520fb7287959888c88485abe072543190ecc66783" dependencies = [ "clap_builder", - "clap_derive 4.5.4", + "clap_derive 4.5.24", ] [[package]] name = "clap_builder" -version = "4.5.2" +version = "4.5.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" +checksum = "96b01801b5fc6a0a232407abc821660c9c6d25a1cafc0d4f85f29fb8d9afc121" dependencies = [ "anstream", "anstyle", - "clap_lex 0.7.0", + "clap_lex 0.7.4", "strsim 0.11.1", ] @@ -749,14 +752,14 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.4" +version = "4.5.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64" +checksum = "54b755194d6389280185988721fffba69495eed5ee9feeee9a599b53db80318c" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.96", ] [[package]] @@ -770,15 +773,15 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.0" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" [[package]] name = "clipboard-win" -version = "5.3.1" +version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79f4473f5144e20d9aceaf2972478f06ddf687831eafeeb434fbaf0acc4144ad" +checksum = "15efe7a882b08f34e38556b14f2fb3daa98769d06c7f0c1b076dfd0d983bc892" dependencies = [ "error-code", ] @@ -795,9 +798,9 @@ dependencies = [ [[package]] name = "colorchoice" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" [[package]] name = "concurrent-queue" @@ -836,9 +839,9 @@ dependencies = [ [[package]] name = "const_panic" -version = "0.2.8" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6051f239ecec86fde3410901ab7860d458d160371533842974fc61f96d15879b" +checksum = "2459fc9262a1aa204eb4b5764ad4f189caec88aea9634389c0a25f8be7f6265e" [[package]] name = "core-foundation" @@ -852,9 +855,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "core_extensions" @@ -873,9 +876,9 @@ checksum = "69f3b219d28b6e3b4ac87bc1fc522e0803ab22e055da177bff0068c4150c61a6" [[package]] name = "cpufeatures" -version = "0.2.12" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" dependencies = [ "libc", ] @@ -910,18 +913,18 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.12" +version = "0.5.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab3db02a9c5b5121e1e42fbdb1aeb65f5e02624cc58c43f2884c6ccac0b82f95" +checksum = "06ba6d68e24814cb8de6bb986db8222d3a027d15872cabc0d18817bc3c0e4471" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-deque" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" dependencies = [ "crossbeam-epoch", "crossbeam-utils", @@ -938,30 +941,30 @@ dependencies = [ [[package]] name = "crossbeam-queue" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.19" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crossterm" -version = "0.27.0" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f476fe445d41c9e991fd07515a6f463074b782242ccf4a5b7b1d1012e70824df" +checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.7.0", "crossterm_winapi", - "libc", "mio", "parking_lot", + "rustix 0.38.43", "signal-hook", "signal-hook-mio", "winapi", @@ -1000,7 +1003,7 @@ checksum = "85b03f0c23c75d79d10ae9e6ea850f795db0b11bb9610d55f7751d8a92272db2" dependencies = [ "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -1032,6 +1035,17 @@ dependencies = [ "subtle", ] +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + [[package]] name = "dlv-list" version = "0.5.2" @@ -1055,7 +1069,7 @@ checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" [[package]] name = "dwarf" -version = "0.8.1" +version = "0.9.0" dependencies = [ "abi_stable", "ansi-to-tui", @@ -1064,7 +1078,7 @@ dependencies = [ "async-compat", "async-condvar-fair", "async-executor", - "async-io 2.3.2", + "async-io 2.4.0", "backtrace", "bincode", "bitcode", @@ -1072,16 +1086,16 @@ dependencies = [ "chrono", "chumsky", "circular-queue", - "clap 4.5.4", + "clap 4.5.26", "color-backtrace", "core_extensions", "crossbeam", "crossterm", "dap", "dotenvy", - "env_logger 0.10.2", - "futures-lite 2.3.0", - "heck 0.4.1", + "env_logger 0.11.6", + "futures-lite 2.5.0", + "heck 0.5.0", "lazy_static", "log", "num-format", @@ -1092,15 +1106,15 @@ dependencies = [ "puteketeke", "regex", "reqwest", - "rustc-hash", + "rustc-hash 2.1.0", "rustyline", "sarzak", "serde", "serde_json", "slab", "smartstring", - "smol 2.0.0", - "snafu 0.8.2", + "smol 2.0.2", + "snafu 0.8.5", "test-log", "threadpool", "tracing", @@ -1114,18 +1128,18 @@ dependencies = [ [[package]] name = "either" -version = "1.11.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" dependencies = [ "serde", ] [[package]] name = "encoding_rs" -version = "0.8.34" +version = "0.8.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" dependencies = [ "cfg-if", ] @@ -1138,11 +1152,12 @@ checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d" [[package]] name = "env_filter" -version = "0.1.0" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a009aa4810eb158359dda09d0c87378e4bbb89b5a801f016885a4707ba24f7ea" +checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" dependencies = [ "log", + "regex", ] [[package]] @@ -1160,11 +1175,14 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.11.3" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b35839ba51819680ba087cd351788c9a3c476841207e0b8cee0b04722343b9" +checksum = "dcaee3d8e3cfc3fd92428d477bc97fc29ec8716d180c0d74c643bb26166660e0" dependencies = [ + "anstream", + "anstyle", "env_filter", + "humantime", "log", ] @@ -1176,19 +1194,19 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.8" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "error-code" -version = "3.2.0" +version = "3.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0474425d51df81997e2f90a21591180b38eccf27292d755f3e30750225c175b" +checksum = "a5d9305ccc6942a704f4335694ecd3de2ea531b114ac2d51f5f843750787a92f" [[package]] name = "etcetera" @@ -1220,20 +1238,9 @@ dependencies = [ [[package]] name = "event-listener" -version = "4.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" -dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", -] - -[[package]] -name = "event-listener" -version = "5.3.0" +version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d9944b8ca13534cdfb2800775f8dd4902ff3fc75a50101466decadfdf322a24" +checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" dependencies = [ "concurrent-queue", "parking", @@ -1242,21 +1249,11 @@ dependencies = [ [[package]] name = "event-listener-strategy" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3" -dependencies = [ - "event-listener 4.0.3", - "pin-project-lite", -] - -[[package]] -name = "event-listener-strategy" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" +checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2" dependencies = [ - "event-listener 5.3.0", + "event-listener 5.4.0", "pin-project-lite", ] @@ -1271,9 +1268,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.1.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "fd-lock" @@ -1282,25 +1279,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e5768da2206272c81ef0b5e951a41862938a6070da63bcea197899942d3b947" dependencies = [ "cfg-if", - "rustix 0.38.34", + "rustix 0.38.43", "windows-sys 0.52.0", ] -[[package]] -name = "finl_unicode" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fcfdc7a0362c9f4444381a9e697c79d435fe65b52a37466fc2c1184cee9edc6" - [[package]] name = "flume" -version = "0.11.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" +checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" dependencies = [ "futures-core", "futures-sink", - "spin 0.9.8", + "spin", ] [[package]] @@ -1309,6 +1300,12 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foldhash" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f" + [[package]] name = "foreign-types" version = "0.3.2" @@ -1333,17 +1330,11 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "from_bytes_or_zeroed" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d25934a78435889223e575c7b0fc36a290c5a312e7a7ae901f10587792e142a" - [[package]] name = "futures-channel" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", "futures-sink", @@ -1351,15 +1342,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" dependencies = [ "futures-core", "futures-task", @@ -1379,9 +1370,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-lite" @@ -1400,11 +1391,11 @@ dependencies = [ [[package]] name = "futures-lite" -version = "2.3.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" +checksum = "cef40d21ae2c515b51041df9ed313ed21e572df340ea58a922a0aefe7e8891a1" dependencies = [ - "fastrand 2.1.0", + "fastrand 2.3.0", "futures-core", "futures-io", "parking", @@ -1413,21 +1404,21 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-util" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-core", "futures-io", @@ -1450,11 +1441,10 @@ dependencies = [ [[package]] name = "generator" -version = "0.8.1" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "186014d53bc231d0090ef8d6f03e0920c54d85a5ed22f4f2f74315ec56cf83fb" +checksum = "cc6bd114ceda131d3b1d665eba35788690ad37f5916457286b32ab6fd3c438dd" dependencies = [ - "cc", "cfg-if", "libc", "log", @@ -1474,26 +1464,34 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", + "js-sys", "libc", "wasi", + "wasm-bindgen", ] [[package]] name = "gimli" -version = "0.28.1" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + +[[package]] +name = "glam" +version = "0.29.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +checksum = "dc46dd3ec48fdd8e693a98d2b8bafae273a2d54c1de02a2a7e3d57d501f39677" [[package]] name = "gloo-timers" -version = "0.2.6" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c" +checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" dependencies = [ "futures-channel", "futures-core", @@ -1503,17 +1501,17 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.26" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e" dependencies = [ + "atomic-waker", "bytes", "fnv", "futures-core", "futures-sink", - "futures-util", "http", - "indexmap 2.2.6", + "indexmap 2.7.0", "slab", "tokio", "tokio-util", @@ -1526,6 +1524,15 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash", +] + [[package]] name = "hashbrown" version = "0.14.5" @@ -1536,13 +1543,24 @@ dependencies = [ "allocator-api2", ] +[[package]] +name = "hashbrown" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash", +] + [[package]] name = "hashlink" -version = "0.8.4" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" +checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" dependencies = [ - "hashbrown 0.14.5", + "hashbrown 0.15.2", ] [[package]] @@ -1550,9 +1568,6 @@ name = "heck" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" -dependencies = [ - "unicode-segmentation", -] [[package]] name = "heck" @@ -1575,6 +1590,12 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" +[[package]] +name = "hermit-abi" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" + [[package]] name = "hex" version = "0.4.3" @@ -1601,18 +1622,18 @@ dependencies = [ [[package]] name = "home" -version = "0.5.9" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "http" -version = "0.2.12" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" dependencies = [ "bytes", "fnv", @@ -1621,26 +1642,32 @@ dependencies = [ [[package]] name = "http-body" -version = "0.4.6" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", "http", - "pin-project-lite", ] [[package]] -name = "httparse" -version = "1.8.0" +name = "http-body-util" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +dependencies = [ + "bytes", + "futures-util", + "http", + "http-body", + "pin-project-lite", +] [[package]] -name = "httpdate" -version = "1.0.3" +name = "httparse" +version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" +checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" [[package]] name = "humantime" @@ -1650,60 +1677,82 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.28" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" +checksum = "256fb8d4bd6413123cc9d91832d78325c48ff41677595be797d90f42969beae0" dependencies = [ "bytes", "futures-channel", - "futures-core", "futures-util", "h2", "http", "http-body", "httparse", - "httpdate", "itoa", "pin-project-lite", - "socket2 0.5.7", + "smallvec", "tokio", - "tower-service", - "tracing", "want", ] [[package]] name = "hyper-rustls" -version = "0.24.2" +version = "0.27.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" dependencies = [ "futures-util", "http", "hyper", + "hyper-util", "rustls", + "rustls-pki-types", "tokio", "tokio-rustls", + "tower-service", + "webpki-roots", ] [[package]] name = "hyper-tls" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", + "http-body-util", "hyper", + "hyper-util", "native-tls", "tokio", "tokio-native-tls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "pin-project-lite", + "socket2 0.5.8", + "tokio", + "tower-service", + "tracing", ] [[package]] name = "iana-time-zone" -version = "0.1.60" +version = "0.1.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -1723,131 +1772,246 @@ dependencies = [ ] [[package]] -name = "idna" -version = "0.5.0" +name = "icu_collections" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "displaydoc", + "yoke", + "zerofrom", + "zerovec", ] [[package]] -name = "indexmap" -version = "1.9.3" +name = "icu_locid" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" dependencies = [ - "autocfg", - "hashbrown 0.12.3", + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", ] [[package]] -name = "indexmap" -version = "2.2.6" +name = "icu_locid_transform" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" dependencies = [ - "equivalent", - "hashbrown 0.14.5", + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", ] [[package]] -name = "instant" -version = "0.1.12" +name = "icu_locid_transform_data" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" -dependencies = [ - "cfg-if", -] +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" [[package]] -name = "io-lifetimes" -version = "1.0.11" +name = "icu_normalizer" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" dependencies = [ - "hermit-abi 0.3.9", - "libc", - "windows-sys 0.48.0", + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", ] [[package]] -name = "ipnet" -version = "2.9.0" +name = "icu_normalizer_data" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" [[package]] -name = "is-terminal" -version = "0.4.12" +name = "icu_properties" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" dependencies = [ - "hermit-abi 0.3.9", - "libc", - "windows-sys 0.52.0", + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", ] [[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.4.19" +name = "icu_properties_data" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a9b56eb56058f43dc66e58f40a214b2ccbc9f3df51861b63d51dec7b65bc3f" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" [[package]] -name = "itertools" -version = "0.12.1" +name = "icu_provider" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" dependencies = [ - "either", + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", ] [[package]] -name = "itoa" -version = "1.0.11" +name = "icu_provider_macros" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] [[package]] -name = "js-sys" -version = "0.3.69" +name = "idna" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" dependencies = [ - "wasm-bindgen", + "idna_adapter", + "smallvec", + "utf8_iter", ] [[package]] -name = "kv-log-macro" -version = "1.0.7" +name = "idna_adapter" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" dependencies = [ - "log", + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", +] + +[[package]] +name = "indexmap" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" +dependencies = [ + "equivalent", + "hashbrown 0.15.2", +] + +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "io-lifetimes" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +dependencies = [ + "hermit-abi 0.3.9", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "ipnet" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" + +[[package]] +name = "is-terminal" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "261f68e344040fbd0edea105bef17c66edf46f984ddb1115b775ce31be948f4b" +dependencies = [ + "hermit-abi 0.4.0", + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + +[[package]] +name = "itoa" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" + +[[package]] +name = "js-sys" +version = "0.3.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "kv-log-macro" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" +dependencies = [ + "log", ] [[package]] name = "lazy_static" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" dependencies = [ - "spin 0.5.2", + "spin", ] [[package]] name = "libc" -version = "0.2.154" +version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae743338b92ff9146ce83992f766a31066a91a8c84a45e0e9f21e7cf6de6d346" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" [[package]] name = "libloading" @@ -1861,17 +2025,16 @@ dependencies = [ [[package]] name = "libm" -version = "0.2.8" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" +checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" [[package]] name = "libsqlite3-sys" -version = "0.27.0" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4e226dcd58b4be396f7bd3c20da8fdee2911400705297ba7d2d7cc2c30f716" +checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149" dependencies = [ - "cc", "pkg-config", "vcpkg", ] @@ -1884,9 +2047,15 @@ checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" [[package]] name = "linux-raw-sys" -version = "0.4.13" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" + +[[package]] +name = "litemap" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" [[package]] name = "lock_api" @@ -1901,9 +2070,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.21" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" dependencies = [ "value-bag", ] @@ -1942,9 +2111,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.2" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "mime" @@ -1960,23 +2129,23 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.2" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +checksum = "4ffbe83022cedc1d264172192511ae958937694cd57ce297164951b8b3568394" dependencies = [ - "adler", + "adler2", ] [[package]] name = "mio" -version = "0.8.11" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ "libc", "log", "wasi", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -1991,11 +2160,10 @@ dependencies = [ [[package]] name = "native-tls" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" dependencies = [ - "lazy_static", "libc", "log", "openssl", @@ -2018,12 +2186,13 @@ dependencies = [ [[package]] name = "nix" -version = "0.27.1" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.7.0", "cfg-if", + "cfg_aliases", "libc", ] @@ -2120,7 +2289,7 @@ version = "1.0.0" source = "git+https://github.com/uberFoo/nut#1f89d402a281ab4ea02478d26512e8480146d12a" dependencies = [ "anyhow", - "clap 4.5.4", + "clap 4.5.26", "diff", "heck 0.4.1", "log", @@ -2139,26 +2308,26 @@ dependencies = [ [[package]] name = "object" -version = "0.32.2" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ "memchr", ] [[package]] name = "once_cell" -version = "1.19.0" +version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "openssl" -version = "0.10.64" +version = "0.10.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" +checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.7.0", "cfg-if", "foreign-types", "libc", @@ -2175,7 +2344,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.96", ] [[package]] @@ -2186,9 +2355,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.102" +version = "0.9.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2" +checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" dependencies = [ "cc", "libc", @@ -2196,6 +2365,16 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "ordered_hash_map" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab0e5f22bf6dd04abd854a8874247813a8fa2c8c1260eba6fbb150270ce7c176" +dependencies = [ + "hashbrown 0.13.2", + "serde", +] + [[package]] name = "os_str_bytes" version = "6.6.1" @@ -2208,26 +2387,17 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" -[[package]] -name = "packagemerge" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0efcf6ee55f8f7a24333bc8d1dd0e541a6cedf903dbc07ae6479d7f8ff32ed08" -dependencies = [ - "itertools 0.4.19", -] - [[package]] name = "parking" -version = "2.2.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot" -version = "0.12.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e4af0ca4f6caed20e900d564c242b8e5d4903fdacf31d3daf527b66fe6f42fb" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", "parking_lot_core", @@ -2241,16 +2411,16 @@ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.1", + "redox_syscall", "smallvec", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] name = "paste" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "pem-rfc7468" @@ -2269,9 +2439,9 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pin-project-lite" -version = "0.2.14" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pin-utils" @@ -2281,12 +2451,12 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "piper" -version = "0.2.1" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" dependencies = [ "atomic-waker", - "fastrand 2.1.0", + "fastrand 2.3.0", "futures-io", ] @@ -2313,9 +2483,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] name = "polling" @@ -2335,24 +2505,27 @@ dependencies = [ [[package]] name = "polling" -version = "3.7.0" +version = "3.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645493cf344456ef24219d02a768cf1fb92ddf8c92161679ae3d91b91a637be3" +checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f" dependencies = [ "cfg-if", "concurrent-queue", - "hermit-abi 0.3.9", + "hermit-abi 0.4.0", "pin-project-lite", - "rustix 0.38.34", + "rustix 0.38.43", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "ppv-lite86" -version = "0.2.17" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] [[package]] name = "pretty_env_logger" @@ -2390,18 +2563,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.81" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d1597b0c024618f09a9c3b8655b7e430397a36d23fdafec26d6965e9eec3eba" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" dependencies = [ "unicode-ident", ] [[package]] name = "psm" -version = "0.1.21" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874" +checksum = "200b9ff220857e53e184257720a14553b2f4aa02577d2ed9842d45d4b9654810" dependencies = [ "cc", ] @@ -2413,9 +2586,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83b1109db5f94e442b059329319e1bc014ee53ce1c1b9a1ad72207e7eb177936" dependencies = [ "async-executor", - "async-io 2.3.2", + "async-io 2.4.0", "crossbeam", - "futures-lite 2.3.0", + "futures-lite 2.5.0", "once_cell", "parking_lot", "slab", @@ -2423,11 +2596,63 @@ dependencies = [ "tracing", ] +[[package]] +name = "quinn" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef" +dependencies = [ + "bytes", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash 2.1.0", + "rustls", + "socket2 0.5.8", + "thiserror 2.0.10", + "tokio", + "tracing", +] + +[[package]] +name = "quinn-proto" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" +dependencies = [ + "bytes", + "getrandom", + "rand", + "ring", + "rustc-hash 2.1.0", + "rustls", + "rustls-pki-types", + "slab", + "thiserror 2.0.10", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c40286217b4ba3a71d644d752e6a0b71f13f1b6a2c5311acfcbe0c2418ed904" +dependencies = [ + "cfg_aliases", + "libc", + "once_cell", + "socket2 0.5.8", + "tracing", + "windows-sys 0.59.0", +] + [[package]] name = "quote" -version = "1.0.36" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" dependencies = [ "proc-macro2", ] @@ -2489,37 +2714,28 @@ dependencies = [ "bitflags 1.3.2", "cassowary", "unicode-segmentation", - "unicode-width", + "unicode-width 0.1.14", ] [[package]] name = "redox_syscall" -version = "0.4.1" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" 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", + "bitflags 2.7.0", ] [[package]] name = "regex" -version = "1.10.4" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.6", - "regex-syntax 0.8.3", + "regex-automata 0.4.9", + "regex-syntax 0.8.5", ] [[package]] @@ -2533,13 +2749,13 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.6" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.3", + "regex-syntax 0.8.5", ] [[package]] @@ -2550,9 +2766,9 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "repr_offset" @@ -2565,21 +2781,24 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.11.27" +version = "0.12.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" +checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" dependencies = [ "base64", "bytes", "encoding_rs", + "futures-channel", "futures-core", "futures-util", "h2", "http", "http-body", + "http-body-util", "hyper", "hyper-rustls", "hyper-tls", + "hyper-util", "ipnet", "js-sys", "log", @@ -2588,8 +2807,10 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", + "quinn", "rustls", "rustls-pemfile", + "rustls-pki-types", "serde", "serde_json", "serde_urlencoded", @@ -2598,21 +2819,16 @@ dependencies = [ "tokio", "tokio-native-tls", "tokio-rustls", + "tower", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", "webpki-roots", - "winreg", + "windows-registry", ] -[[package]] -name = "residua-zigzag" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b37805477eee599a61753230f511ae94d737f69b536e468e294723ad5f1b75f" - [[package]] name = "ring" version = "0.17.8" @@ -2623,16 +2839,16 @@ dependencies = [ "cfg-if", "getrandom", "libc", - "spin 0.9.8", + "spin", "untrusted", "windows-sys 0.52.0", ] [[package]] name = "rsa" -version = "0.9.6" +version = "0.9.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d0e5124fcb30e76a7e79bfee683a2746db83784b86289f6251b54b7950a0dfc" +checksum = "47c75d7c5c6b673e58bf54d8544a9f432e3a925b0e80f7cd3602ab5c50c55519" dependencies = [ "const-oid", "digest", @@ -2650,9 +2866,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc-hash" @@ -2660,20 +2876,26 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" +[[package]] +name = "rustc-hash" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7fb8039b3032c191086b10f11f319a6e99e1e82889c5cc6046f515c9db1d497" + [[package]] name = "rustc_version" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ "semver", ] [[package]] name = "rustix" -version = "0.37.27" +version = "0.37.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" +checksum = "519165d378b97752ca44bbe15047d5d3409e875f39327546b42ac81d7e18c1b6" dependencies = [ "bitflags 1.3.2", "errno", @@ -2685,61 +2907,73 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.34" +version = "0.38.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +checksum = "a78891ee6bf2340288408954ac787aa063d8e8817e9f53abb37c695c6d834ef6" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.7.0", "errno", "libc", - "linux-raw-sys 0.4.13", - "windows-sys 0.52.0", + "linux-raw-sys 0.4.15", + "windows-sys 0.59.0", ] [[package]] name = "rustls" -version = "0.21.12" +version = "0.23.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +checksum = "8f287924602bf649d949c63dc8ac8b235fa5387d394020705b80c4eb597ce5b8" dependencies = [ - "log", + "once_cell", "ring", + "rustls-pki-types", "rustls-webpki", - "sct", + "subtle", + "zeroize", ] [[package]] name = "rustls-pemfile" -version = "1.0.4" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" dependencies = [ - "base64", + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2bf47e6ff922db3825eb750c4e2ff784c6ff8fb9e13046ef6a1d1c5401b0b37" +dependencies = [ + "web-time", ] [[package]] name = "rustls-webpki" -version = "0.101.7" +version = "0.102.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" dependencies = [ "ring", + "rustls-pki-types", "untrusted", ] [[package]] name = "rustversion" -version = "1.0.15" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80af6f9131f277a45a3fba6ce8e2258037bb0477a67e610d3c1fe046ab31de47" +checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" [[package]] name = "rustyline" -version = "13.0.0" +version = "15.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02a2d683a4ac90aeef5b1013933f6d977bd37d51ff3f4dad829d4931a7e6be86" +checksum = "2ee1e066dc922e513bda599c6ccb5f3bb2b0ea5870a579448f2622993f0a9a2f" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.7.0", "cfg-if", "clipboard-win", "fd-lock", @@ -2751,27 +2985,27 @@ dependencies = [ "radix_trie", "rustyline-derive", "unicode-segmentation", - "unicode-width", + "unicode-width 0.2.0", "utf8parse", - "winapi", + "windows-sys 0.59.0", ] [[package]] name = "rustyline-derive" -version = "0.10.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5af959c8bf6af1aff6d2b463a57f71aae53d1332da58419e30ad8dc7011d951" +checksum = "327e9d075f6df7e25fbf594f1be7ef55cf0d567a6cb5112eeccbbd51ceb48e0d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.96", ] [[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" @@ -2784,17 +3018,18 @@ dependencies = [ [[package]] name = "sarzak" -version = "2.13.26" -source = "git+https://github.com/uberFoo/sarzak?branch=develop#45b23aebb5c86bf33e9c5e13d1ef3c406d0d10b0" +version = "2.15.2" +source = "git+https://github.com/uberFoo/sarzak?branch=develop#cd95b35537c795f8fa0536ef509fea5d4c42f7d6" dependencies = [ "ansi_term", "bincode", "cfg-if", - "clap 4.5.4", + "clap 4.5.26", "heck 0.4.1", "log", "nut", - "rustc-hash", + "ordered_hash_map", + "rustc-hash 1.1.0", "serde", "serde_json", "snafu 0.7.5", @@ -2804,11 +3039,11 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.23" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -2823,23 +3058,13 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "sct" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "security-framework" -version = "2.10.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "770452e37cad93e0a50d5abc3990d2bc351c36d0328f86cefec2f2fb206eaef6" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.7.0", "core-foundation", "core-foundation-sys", "libc", @@ -2848,9 +3073,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.10.0" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f3cc463c0ef97e11c3461a9d3787412d30e8e7eb907c79180c4a57bf7c04ef" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" dependencies = [ "core-foundation-sys", "libc", @@ -2858,37 +3083,38 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.22" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" +checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba" [[package]] name = "serde" -version = "1.0.200" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddc6f9cc94d67c0e21aaf7eda3a010fd3af78ebf6e096aa6e2e13c79749cce4f" +checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.200" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "856f046b9400cee3c8c94ed572ecdb752444c24528c035cd35882aad6f492bcb" +checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.96", ] [[package]] name = "serde_json" -version = "1.0.116" +version = "1.0.135" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e17db7126d17feb94eb3fad46bf1a96b034e8aacbc2e775fe81505f8b0b2813" +checksum = "2b0d7ba2887406110130a978386c4e1befb98c674b4fba677954e4db976630d9" dependencies = [ "itoa", + "memchr", "ryu", "serde", ] @@ -2918,9 +3144,9 @@ dependencies = [ [[package]] name = "sha1_smol" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012" +checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" [[package]] name = "sha2" @@ -2942,6 +3168,12 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "signal-hook" version = "0.3.17" @@ -2954,9 +3186,9 @@ dependencies = [ [[package]] name = "signal-hook-mio" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af" +checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd" dependencies = [ "libc", "mio", @@ -2982,12 +3214,6 @@ dependencies = [ "rand_core", ] -[[package]] -name = "simdutf8" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a" - [[package]] name = "slab" version = "0.4.9" @@ -3002,6 +3228,9 @@ name = "smallvec" version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +dependencies = [ + "serde", +] [[package]] name = "smartstring" @@ -3034,19 +3263,19 @@ dependencies = [ [[package]] name = "smol" -version = "2.0.0" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e635339259e51ef85ac7aa29a1cd991b957047507288697a690e80ab97d07cad" +checksum = "a33bd3e260892199c3ccfc487c88b2da2265080acb316cd920da72fdfd7c599f" dependencies = [ - "async-channel 2.2.1", + "async-channel 2.3.1", "async-executor", "async-fs 2.1.2", - "async-io 2.3.2", - "async-lock 3.3.0", + "async-io 2.4.0", + "async-lock 3.4.0", "async-net 2.0.0", - "async-process 2.2.2", + "async-process 2.3.0", "blocking", - "futures-lite 2.3.0", + "futures-lite 2.5.0", ] [[package]] @@ -3061,11 +3290,11 @@ dependencies = [ [[package]] name = "snafu" -version = "0.8.2" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75976f4748ab44f6e5332102be424e7c2dc18daeaf7e725f2040c3ebb133512e" +checksum = "223891c85e2a29c3fe8fb900c1fae5e69c2e42415e3177752e8718475efa5019" dependencies = [ - "snafu-derive 0.8.2", + "snafu-derive 0.8.5", ] [[package]] @@ -3082,14 +3311,14 @@ dependencies = [ [[package]] name = "snafu-derive" -version = "0.8.2" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4b19911debfb8c2fb1107bc6cb2d61868aaf53a988449213959bb1b5b1ed95f" +checksum = "03c3c6b7927ffe7ecaa769ee0e3994da3b8cafc8f444578982c83ecb161af917" dependencies = [ - "heck 0.4.1", + "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.96", ] [[package]] @@ -3104,20 +3333,14 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" dependencies = [ "libc", "windows-sys 0.52.0", ] -[[package]] -name = "spin" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" - [[package]] name = "spin" version = "0.9.8" @@ -3137,17 +3360,6 @@ dependencies = [ "der", ] -[[package]] -name = "sqlformat" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce81b7bd7c4493975347ef60d8c7e8b742d4694f4c49f93e0a12ea263938176c" -dependencies = [ - "itertools 0.12.1", - "nom", - "unicode_categories", -] - [[package]] name = "sqlx" version = "0.1.0" @@ -3157,17 +3369,17 @@ dependencies = [ "chrono", "crossbeam", "dwarf", - "futures-lite 2.3.0", + "futures-lite 2.5.0", "slab", - "sqlx 0.7.4", + "sqlx 0.8.3", "tracing", ] [[package]] name = "sqlx" -version = "0.7.4" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9a2ccff1a000a5a59cd33da541d9f2fdcd9e6e8229cc200565942bff36d0aaa" +checksum = "4410e73b3c0d8442c5f99b425d7a435b5ee0ae4167b3196771dd3f7a01be745f" dependencies = [ "sqlx-core", "sqlx-macros", @@ -3178,33 +3390,28 @@ dependencies = [ [[package]] name = "sqlx-core" -version = "0.7.4" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24ba59a9342a3d9bab6c56c118be528b27c9b60e490080e9711a04dccac83ef6" +checksum = "6a007b6936676aa9ab40207cde35daab0a04b823be8ae004368c0793b96a61e0" dependencies = [ - "ahash", "async-io 1.13.0", "async-std", - "atoi", - "byteorder", "bytes", "chrono", "crc", "crossbeam-queue", "either", - "event-listener 2.5.3", - "futures-channel", + "event-listener 5.4.0", "futures-core", "futures-intrusive", "futures-io", "futures-util", + "hashbrown 0.15.2", "hashlink", - "hex", - "indexmap 2.2.6", + "indexmap 2.7.0", "log", "memchr", "once_cell", - "paste", "percent-encoding", "rustls", "rustls-pemfile", @@ -3212,8 +3419,7 @@ dependencies = [ "serde_json", "sha2", "smallvec", - "sqlformat", - "thiserror", + "thiserror 2.0.10", "tracing", "url", "webpki-roots", @@ -3221,27 +3427,27 @@ dependencies = [ [[package]] name = "sqlx-macros" -version = "0.7.4" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ea40e2345eb2faa9e1e5e326db8c34711317d2b5e08d0d5741619048a803127" +checksum = "3112e2ad78643fef903618d78cf0aec1cb3134b019730edb039b69eaf531f310" dependencies = [ "proc-macro2", "quote", "sqlx-core", "sqlx-macros-core", - "syn 1.0.109", + "syn 2.0.96", ] [[package]] name = "sqlx-macros-core" -version = "0.7.4" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5833ef53aaa16d860e92123292f1f6a3d53c34ba8b1969f152ef1a7bb803f3c8" +checksum = "4e9f90acc5ab146a99bf5061a7eb4976b573f560bc898ef3bf8435448dd5e7ad" dependencies = [ "async-std", "dotenvy", "either", - "heck 0.4.1", + "heck 0.5.0", "hex", "once_cell", "proc-macro2", @@ -3253,20 +3459,20 @@ dependencies = [ "sqlx-mysql", "sqlx-postgres", "sqlx-sqlite", - "syn 1.0.109", + "syn 2.0.96", "tempfile", "url", ] [[package]] name = "sqlx-mysql" -version = "0.7.4" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ed31390216d20e538e447a7a9b959e06ed9fc51c37b514b46eb758016ecd418" +checksum = "4560278f0e00ce64938540546f59f590d60beee33fffbd3b9cd47851e5fff233" dependencies = [ "atoi", "base64", - "bitflags 2.5.0", + "bitflags 2.7.0", "byteorder", "bytes", "chrono", @@ -3296,20 +3502,20 @@ dependencies = [ "smallvec", "sqlx-core", "stringprep", - "thiserror", + "thiserror 2.0.10", "tracing", "whoami", ] [[package]] name = "sqlx-postgres" -version = "0.7.4" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c824eb80b894f926f89a0b9da0c7f435d27cdd35b8c655b114e58223918577e" +checksum = "c5b98a57f363ed6764d5b3a12bfedf62f07aa16e1856a7ddc2a0bb190a959613" dependencies = [ "atoi", "base64", - "bitflags 2.5.0", + "bitflags 2.7.0", "byteorder", "chrono", "crc", @@ -3317,7 +3523,6 @@ dependencies = [ "etcetera", "futures-channel", "futures-core", - "futures-io", "futures-util", "hex", "hkdf", @@ -3335,16 +3540,16 @@ dependencies = [ "smallvec", "sqlx-core", "stringprep", - "thiserror", + "thiserror 2.0.10", "tracing", "whoami", ] [[package]] name = "sqlx-sqlite" -version = "0.7.4" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b244ef0a8414da0bed4bb1910426e890b19e5e9bccc27ada6b797d05c55ae0aa" +checksum = "f85ca71d3a5b24e64e1d08dd8fe36c6c95c339a896cc33068148906784620540" dependencies = [ "atoi", "chrono", @@ -3358,23 +3563,29 @@ dependencies = [ "log", "percent-encoding", "serde", + "serde_urlencoded", "sqlx-core", "tracing", "url", - "urlencoding", ] +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "stacker" -version = "0.1.15" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c886bd4480155fd3ef527d45e9ac8dd7118a898a46530b7b94c3e21866259fce" +checksum = "799c883d55abdb5e98af1a7b3f23b9b6de8ecada0ecac058672d7635eb48ca7b" dependencies = [ "cc", "cfg-if", "libc", "psm", - "winapi", + "windows-sys 0.59.0", ] [[package]] @@ -3385,13 +3596,13 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "stringprep" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb41d74e231a107a1b4ee36bd1214b11285b77768d2e3824aedafa988fd36ee6" +checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" dependencies = [ - "finl_unicode", "unicode-bidi", "unicode-normalization", + "unicode-properties", ] [[package]] @@ -3408,9 +3619,9 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "subtle" -version = "2.5.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" @@ -3425,9 +3636,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.60" +version = "2.0.96" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "909518bc7b1c9b779f1bbf07f2929d35af9f0f37e47c6e9ef7f9dddc1e1821f3" +checksum = "d5d0adab1ae378d7f53bdebc67a39f1f151407ef230f0ce2883572f5d8985c80" dependencies = [ "proc-macro2", "quote", @@ -3436,26 +3647,40 @@ dependencies = [ [[package]] name = "sync_wrapper" -version = "0.1.2" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[package]] +name = "synstructure" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] [[package]] name = "system-configuration" -version = "0.5.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.7.0", "core-foundation", "system-configuration-sys", ] [[package]] name = "system-configuration-sys" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" dependencies = [ "core-foundation-sys", "libc", @@ -3463,14 +3688,16 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.10.1" +version = "3.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +checksum = "9a8a559c81686f576e8cd0290cd2a24a2a9ad80c98b3478856500fcbd7acd704" dependencies = [ "cfg-if", - "fastrand 2.1.0", - "rustix 0.38.34", - "windows-sys 0.52.0", + "fastrand 2.3.0", + "getrandom", + "once_cell", + "rustix 0.38.43", + "windows-sys 0.59.0", ] [[package]] @@ -3488,7 +3715,7 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b319995299c65d522680decf80f2c108d85b861d81dfe340a10d16cee29d9e6" dependencies = [ - "env_logger 0.11.3", + "env_logger 0.11.6", "test-log-macros", "tracing-subscriber", ] @@ -3501,7 +3728,7 @@ checksum = "5999e24eaa32083191ba4e425deb75cdf25efefabe5aaccb7446dd0d4122a3f5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.96", ] [[package]] @@ -3512,22 +3739,42 @@ checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9" [[package]] name = "thiserror" -version = "1.0.59" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0126ad08bff79f29fc3ae6a55cc72352056dfff61e3ff8bb7129476d44b23aa" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ - "thiserror-impl", + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3ac7f54ca534db81081ef1c1e7f6ea8a3ef428d2fc069097c079443d24124d3" +dependencies = [ + "thiserror-impl 2.0.10", ] [[package]] name = "thiserror-impl" -version = "1.0.59" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1cd413b5d558b4c5bf3680e324a6fa5014e7b7c067a51e69dbdf47eb7148b66" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.96", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e9465d30713b56a37ede7185763c3492a91be2f5fa68d958c44e41ab9248beb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", ] [[package]] @@ -3558,11 +3805,21 @@ dependencies = [ "crunchy", ] +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + [[package]] name = "tinyvec" -version = "1.6.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" dependencies = [ "tinyvec_macros", ] @@ -3575,17 +3832,17 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.37.0" +version = "1.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787" +checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" dependencies = [ "backtrace", "bytes", "libc", "mio", "pin-project-lite", - "socket2 0.5.7", - "windows-sys 0.48.0", + "socket2 0.5.8", + "windows-sys 0.52.0", ] [[package]] @@ -3600,9 +3857,9 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.24.1" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" dependencies = [ "rustls", "tokio", @@ -3610,9 +3867,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.11" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" dependencies = [ "bytes", "futures-core", @@ -3630,17 +3887,38 @@ dependencies = [ "serde", ] +[[package]] +name = "tower" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + [[package]] name = "tower-service" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.40" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "log", "pin-project-lite", @@ -3650,20 +3928,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.96", ] [[package]] name = "tracing-core" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ "once_cell", "valuable", @@ -3682,9 +3960,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.18" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" dependencies = [ "matchers", "nu-ansi-term", @@ -3700,9 +3978,9 @@ dependencies = [ [[package]] name = "tracing-tracy" -version = "0.11.0" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6024d04f84a69fd0d1dc1eee3a2b070bd246530a0582f9982ae487cb6c703614" +checksum = "0eaa1852afa96e0fe9e44caa53dc0bd2d9d05e0f2611ce09f97f8677af56e4ba" dependencies = [ "tracing-core", "tracing-subscriber", @@ -3711,9 +3989,9 @@ dependencies = [ [[package]] name = "tracy-client" -version = "0.17.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59fb931a64ff88984f86d3e9bcd1ae8843aa7fe44dd0f8097527bc172351741d" +checksum = "d90a2c01305b02b76fdd89ac8608bae27e173c829a35f7d76a345ab5d33836db" dependencies = [ "loom", "once_cell", @@ -3722,11 +4000,12 @@ dependencies = [ [[package]] name = "tracy-client-sys" -version = "0.22.2" +version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d104d610dfa9dd154535102cc9c6164ae1fa37842bc2d9e83f9ac82b0ae0882" +checksum = "69fff37da548239c3bf9e64a12193d261e8b22b660991c6fd2df057c168f435f" dependencies = [ "cc", + "windows-targets 0.52.6", ] [[package]] @@ -3764,42 +4043,48 @@ checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "unicode-bidi" -version = "0.3.15" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" +checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" [[package]] name = "unicode-normalization" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" +checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" dependencies = [ "tinyvec", ] +[[package]] +name = "unicode-properties" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" + [[package]] name = "unicode-segmentation" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] name = "unicode-width" -version = "0.1.12" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f5e5f3158ecfd4b8ff6fe086db7c8467a2dfdac97fe420f2b7c4aa97af66d6" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" [[package]] -name = "unicode_categories" -version = "0.1.1" +name = "unicode-width" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e" +checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" [[package]] name = "untrusted" @@ -3809,9 +4094,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.0" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", "idna", @@ -3819,22 +4104,28 @@ dependencies = [ ] [[package]] -name = "urlencoding" -version = "2.1.3" +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 = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" +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 = "uuid" -version = "1.8.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" +checksum = "b913a3b5fe84142e269d63cc62b64319ccaf89b748fc31fe025177f767a756c4" dependencies = [ "getrandom", "serde", @@ -3849,9 +4140,9 @@ checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" [[package]] name = "value-bag" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a84c137d37ab0142f0f2ddfe332651fdbf252e7b7dbb4e67b6c1f1b2e925101" +checksum = "3ef4c4aa54d5d05a279399bfa921ec387b7aba77caf7a682ae8d86785b8fdad2" [[package]] name = "vcpkg" @@ -3861,15 +4152,15 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "waker-fn" -version = "1.1.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690" +checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" [[package]] name = "walkdir" @@ -3904,46 +4195,47 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" -version = "0.2.92" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" dependencies = [ "cfg-if", + "once_cell", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.92" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" dependencies = [ "bumpalo", "log", - "once_cell", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.96", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.42" +version = "0.4.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +checksum = "38176d9b44ea84e9184eff0bc34cc167ed044f816accfe5922e54d84cf48eca2" dependencies = [ "cfg-if", "js-sys", + "once_cell", "wasm-bindgen", "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.92" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3951,28 +4243,38 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.92" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.96", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.92" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" [[package]] name = "web-sys" -version = "0.3.69" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" dependencies = [ "js-sys", "wasm-bindgen", @@ -3980,17 +4282,20 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.25.4" +version = "0.26.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" +checksum = "5d642ff16b7e79272ae451b7322067cdc17cadf68c23264be9d94a32319efe7e" +dependencies = [ + "rustls-pki-types", +] [[package]] name = "whoami" -version = "1.5.1" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44ab49fad634e88f55bf8f9bb3abd2f27d7204172a112c7c9987e01c1c94ea9" +checksum = "372d5b87f58ec45c384ba03563b03544dc5fadc3983e434b286913f5b4a9bb6d" dependencies = [ - "redox_syscall 0.4.1", + "redox_syscall", "wasite", ] @@ -4012,11 +4317,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -4027,12 +4332,12 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows" -version = "0.54.0" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9252e5725dbed82865af151df558e754e4a3c2c30818359eb17465f1346a1b49" +checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" dependencies = [ - "windows-core 0.54.0", - "windows-targets 0.52.5", + "windows-core 0.58.0", + "windows-targets 0.52.6", ] [[package]] @@ -4041,26 +4346,72 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] name = "windows-core" -version = "0.54.0" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-result", + "windows-strings", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-implement" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12661b9c89351d684a50a8a643ce5f608e20243b9fb84687800163429f161d65" +checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "windows-interface" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "windows-registry" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" dependencies = [ "windows-result", - "windows-targets 0.52.5", + "windows-strings", + "windows-targets 0.52.6", ] [[package]] name = "windows-result" -version = "0.1.1" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-strings" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "749f0da9cc72d82e600d8d2e44cadd0b9eedb9038f71a1c58556ac1c5791813b" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" dependencies = [ - "windows-targets 0.52.5", + "windows-result", + "windows-targets 0.52.6", ] [[package]] @@ -4078,7 +4429,16 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.5", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", ] [[package]] @@ -4098,18 +4458,18 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.5", - "windows_aarch64_msvc 0.52.5", - "windows_i686_gnu 0.52.5", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", "windows_i686_gnullvm", - "windows_i686_msvc 0.52.5", - "windows_x86_64_gnu 0.52.5", - "windows_x86_64_gnullvm 0.52.5", - "windows_x86_64_msvc 0.52.5", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", ] [[package]] @@ -4120,9 +4480,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" @@ -4132,9 +4492,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" @@ -4144,15 +4504,15 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" @@ -4162,9 +4522,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" @@ -4174,9 +4534,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" @@ -4186,9 +4546,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" @@ -4198,19 +4558,21 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] -name = "winreg" -version = "0.50.0" +name = "write16" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" [[package]] name = "yansi" @@ -4218,28 +4580,96 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", + "synstructure", +] + [[package]] name = "zerocopy" -version = "0.7.33" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "087eca3c1eaf8c47b94d02790dd086cd594b912d2043d4de4bfdd466b3befb7c" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ + "byteorder", "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.33" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f4b6c273f496d8fd4eaf18853e6b448760225dc030ff2c485a786859aea6393" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.96", +] + +[[package]] +name = "zerofrom" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", + "synstructure", ] [[package]] name = "zeroize" -version = "1.7.0" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] diff --git a/plugins/sqlx/Cargo.toml b/plugins/sqlx/Cargo.toml index b93f51d0..390efaee 100644 --- a/plugins/sqlx/Cargo.toml +++ b/plugins/sqlx/Cargo.toml @@ -11,9 +11,9 @@ async-std = { version = "1.12.0", features = ["attributes"] } chrono = "0.4.38" crossbeam = { version = "0.8.4", features = ["crossbeam-channel"] } dwarf = { path = "../../" } -futures-lite = "2.2.0" +futures-lite = "2.5.0" slab = "0.4.9" -sqlx = { version = "0.7", features = [ +sqlx = { version = "0.8.2", features = [ "runtime-async-std-rustls", "postgres", "chrono", diff --git a/plugins/sqlx/ore/lib.ore b/plugins/sqlx/ore/lib.ore index ff773a7b..ba6d68ae 100644 --- a/plugins/sqlx/ore/lib.ore +++ b/plugins/sqlx/ore/lib.ore @@ -103,6 +103,7 @@ impl Pool { query: query, pool: self.inner, bindings: [], + binding_types: [], } } } @@ -155,8 +156,13 @@ struct Map { /// The bindings for the query. /// /// This should be a heterogenous list -- it works as is though, which is scary. + /// Well, not totally scary. Everything that is pushed is a string, so it type + /// checks fine. The scary thing I guess is that SQL manages the type conversions? /// It's not a heterogenous list because dwarf doesn't support that as a type yet. + /// + /// And maybe I'm wrong and it should just be a string. bindings: [string], + binding_types: [Type] } impl Map { @@ -182,8 +188,23 @@ impl Map { /// let map = map.bind("1"); /// # } /// ``` - fn bind(self, value: string) -> Map { + fn bind_string(self, value: string) -> Map { self.bindings.push(value); + self.binding_types.push(Type::String); + + self + } + + fn bind_integer(self, value: int) -> Map { + self.bindings.push(value as string); + self.binding_types.push(Type::Integer); + + self + } + + fn bind_short(self, value: int) -> Map { + self.bindings.push(value as string); + self.binding_types.push(Type::Short); self } @@ -211,7 +232,7 @@ impl Map { fn execute(self) -> Result<[Row], Error> { let rows = self .plugin - .invoke_func("sqlx", "Map", "execute", @[self.query, self.pool, self.bindings]); + .invoke_func("sqlx", "Map", "execute", @[self.query, self.pool, self.bindings, self.binding_types]); match rows { Result::Ok(rows) => Result::<[Row], Error>::Ok(rows), @@ -268,6 +289,7 @@ impl Map { func: bounce, pool: self.pool, bindings: self.bindings, + binding_types: self.binding_types, } } } @@ -282,17 +304,16 @@ struct Query { // func: fn(Row) -> T, pool: int, /// The bindings for the query. - /// - /// This should be a heterogenous list -- it works as is though, which is scary. - /// It's not a heterogenous list because dwarf doesn't support that as a type yet. bindings: [string], + /// The type of each binding. + binding_types: [Type] } impl Query { fn fetch_all(self) -> Result<[Row], Error> { let rows = self .plugin - .invoke_func("sqlx", "Query", "query_all", @[self.query, self.pool, self.func, self.bindings]); + .invoke_func("sqlx", "Query", "query_all", @[self.query, self.pool, self.func, self.bindings, self.binding_types]); match rows { Result::Ok(rows) => Result::<[Row], Error>::Ok(rows), @@ -335,7 +356,7 @@ impl Query { fn fetch_one(self) -> Result { let row = self .plugin - .invoke_func("sqlx", "Query", "query_one", @[self.query, self.pool, self.func, self.bindings]); + .invoke_func("sqlx", "Query", "query_one", @[self.query, self.pool, self.func, self.bindings, self.binding_types]); match row { Result::Ok(row) => Result::::Ok(row), diff --git a/plugins/sqlx/src/lib.rs b/plugins/sqlx/src/lib.rs index 3209d42c..2aaa91ea 100644 --- a/plugins/sqlx/src/lib.rs +++ b/plugins/sqlx/src/lib.rs @@ -12,7 +12,8 @@ use abi_stable::{ std_types::{RBox, RErr, ROk, RResult, RStr, RVec}, }; use dwarf::{ - chacha::{error::ChaChaError, ffi_value::FfiValue}, + bubba::error::BubbaError, + chacha::ffi_value::FfiValue, plug_in::{Error, LambdaCall, Plugin, PluginModRef, PluginModule, PluginType, Plugin_TO}, DwarfInteger, }; @@ -74,6 +75,25 @@ mod postgres { ROk(Plugin_TO::from_value(Sqlx::new(lambda_sender), TD_Opaque)) } + // enum SqlxType { + // Integer, + // Short, + // String, + // Timestamp, + // } + + // impl From<&str> for SqlxType { + // fn from(s: &str) -> Self { + // match s { + // INTEGER => Self::Integer, + // SHORT => Self::Short, + // STRING => Self::String, + // TIMESTAMP => Self::Timestamp, + // _ => panic!("Invalid type: {s}"), + // } + // } + // } + #[derive(Clone)] struct Sqlx { lambda_call: RSender, @@ -122,12 +142,10 @@ mod postgres { match ty.as_str() { "Error" => match func.as_str() { "to_string" => { - let key: DwarfInteger = args - .first() - .unwrap() - .try_into() - .map_err(|e: ChaChaError| Error::Plugin(e.to_string().into())) - .unwrap(); + let key: DwarfInteger = match args.first().unwrap().try_into() { + Ok(key) => key, + Err(e) => return RErr(Error::Plugin(e.to_string().into())), + }; let guard = self.errors.lock().unwrap(); let error = guard.get(key as usize).unwrap(); @@ -138,45 +156,45 @@ mod postgres { }, "Map" => match func.as_str() { "execute" => { - let query: String = args - .first() - .unwrap() - .try_into() - .map_err(|e: ChaChaError| Error::Plugin(e.to_string().into())) - .unwrap(); - - let pool: DwarfInteger = args - .get(1) - .unwrap() - .try_into() - .map_err(|e: ChaChaError| Error::Plugin(e.to_string().into())) - .unwrap(); - - let bindings: Vec = args - .get(2) - .unwrap() - .clone() - .try_into() - .map_err(|e: ChaChaError| Error::Plugin(e.to_string().into())) - .unwrap(); + let query: String = match args.first().unwrap().try_into() { + Ok(query) => query, + Err(e) => return RErr(Error::Plugin(e.to_string().into())), + }; + + let pool: DwarfInteger = match args.get(1).unwrap().try_into() { + Ok(pool) => pool, + Err(e) => return RErr(Error::Plugin(e.to_string().into())), + }; + + let bindings: Vec = match args.get(2).unwrap().try_into() { + Ok(bindings) => bindings, + Err(e) => return RErr(Error::Plugin(e.to_string().into())), + }; + + let binding_types: Vec = match args.get(3).unwrap().try_into() { + Ok(binding_types) => binding_types, + Err(e) => return RErr(Error::Plugin(e.to_string().into())), + }; let guard = self.pools.lock().unwrap(); let pool = guard.get(pool as usize).unwrap(); let mut result = sqlx::query(&query); - for binding in bindings { - match binding { - FfiValue::String(value) => { - result = result.bind(value.to_string()); - } - FfiValue::Integer(value) => { - result = result.bind(value as i64); + for (i, binding) in bindings.iter().enumerate() { + match binding_types[i].as_str() { + INTEGER => { + result = result.bind(binding.parse::().unwrap()) } - _ => { - panic!("Invalid binding"); + SHORT => result = result.bind(binding.parse::().unwrap()), + STRING => result = result.bind(binding), + TIMESTAMP => { + result = result + .bind(binding.parse::().unwrap()) } + ty => panic!("Invalid type: {ty}"), } } + let result = result.execute(pool).await; let result = match result { @@ -194,271 +212,242 @@ mod postgres { } func => Err(Error::Plugin(format!("Invalid function: {func}").into())), }, - "Query" => match func.as_str() { - "query_all" => { - // The first parameter is the query string. - let query: String = args - .first() - .unwrap() - .try_into() - .map_err(|e: ChaChaError| Error::Plugin(e.to_string().into())) - .unwrap(); - - // The second parameter is a handle to the pool. - let pool: DwarfInteger = args - .get(1) - .unwrap() - .try_into() - .map_err(|e: ChaChaError| Error::Plugin(e.to_string().into())) - .unwrap(); - - // The lambda to invoke on the result. - let FfiValue::Lambda(lambda) = args.get(2).unwrap() else { - panic!("Invalid lambda"); - }; + "Query" => { + match func.as_str() { + "query_all" => { + // The first parameter is the query string. + let query: String = + match args.first().unwrap().try_into().map_err( + |e: BubbaError| Error::Plugin(e.to_string().into()), + ) { + Ok(query) => query, + Err(e) => return RErr(e), + }; - let bindings: Vec = args - .get(3) - .unwrap() - .clone() - .try_into() - .map_err(|e: ChaChaError| Error::Plugin(e.to_string().into())) - .unwrap(); + // The second parameter is a handle to the pool. + let pool: DwarfInteger = match args.get(1).unwrap().try_into() { + Ok(pool) => pool, + Err(e) => return RErr(Error::Plugin(e.to_string().into())), + }; + + // The lambda to invoke on the result. + let FfiValue::Lambda(lambda) = args.get(2).unwrap() else { + panic!("Invalid lambda"); + }; + + let bindings: Vec = + match args.get(3).unwrap().try_into().map_err( + |e: BubbaError| Error::Plugin(e.to_string().into()), + ) { + Ok(bindings) => bindings, + Err(e) => return RErr(e), + }; - // Dereference the pool handle - let guard = self.pools.lock().unwrap(); - let pool = guard.get(pool as usize).unwrap(); + let binding_types: Vec = + match args.get(4).unwrap().try_into() { + Ok(binding_types) => binding_types, + Err(e) => return RErr(Error::Plugin(e.to_string().into())), + }; - // Build the query - let mut result = sqlx::query(&query); + // Dereference the pool handle + let guard = self.pools.lock().unwrap(); + let pool = guard.get(pool as usize).unwrap(); - // Add bindings to the query - for binding in bindings { - match binding { - FfiValue::String(value) => { - result = result.bind(value.to_string()); - } - FfiValue::Integer(value) => { - result = result.bind(value as i64); - } - _ => { - panic!("Invalid binding"); + // Build the query + let mut result = sqlx::query(&query); + + // Add bindings to the query + for (i, binding) in bindings.iter().enumerate() { + match binding_types[i].as_str() { + INTEGER => { + result = result.bind(binding.parse::().unwrap()) + } + SHORT => { + result = result.bind(binding.parse::().unwrap()) + } + STRING => result = result.bind(binding), + TIMESTAMP => { + result = result.bind( + binding.parse::().unwrap(), + ) + } + ty => panic!("Invalid type: {ty}"), } } - } - - // Run the query, mapping results to the lambda. - let result = result - .map(|row: sqlx::postgres::PgRow| { - // This is how we get the result of running the lambda. - let (s, result) = crossbeam::channel::bounded(1); - // Store the result locally. We can''t return the row directly -- - // we can only return `FfiValue`''s. - let key = { + // Run the query, mapping results to the lambda. + let result = result + .map(|row: sqlx::postgres::PgRow| { + // This is how we get the result of running the lambda. + let (s, result) = crossbeam::channel::bounded(1); + + // Store the result locally. We can''t return the row directly -- + // we can only return `FfiValue`''s. + let key = { + let mut guard = self.rows.lock().unwrap(); + guard.insert(Arc::new(row)) + }; + + // Invoke the lambda, passing a handle to the row. + let lambda_call = LambdaCall { + lambda: *lambda, + args: vec![FfiValue::Integer(key as DwarfInteger)] + .into(), + result: s.into(), + }; + self.lambda_call.send(lambda_call).unwrap(); + + // Wait for the result. + let result = result.recv().unwrap(); + + // Remove the row. let mut guard = self.rows.lock().unwrap(); - guard.insert(Arc::new(row)) - }; - - // Invoke the lambda, passing a handle to the row. - let lambda_call = LambdaCall { - lambda: *lambda, - args: vec![FfiValue::Integer(key as DwarfInteger)].into(), - result: s.into(), + guard.remove(key); + + // Return the result from the lambda. + result.unwrap() + }) + .fetch_all(pool) + .await; + + // Now we wrap the result up as an RResult that may be sent back + // to dwarf. + let result = match result { + Ok(result) => ROk(RBox::new(result.into())), + Err(e) => { + let mut guard = self.errors.lock().unwrap(); + let entry = guard.vacant_entry(); + let key = entry.key(); + guard.insert(Arc::new(e)); + RErr(RBox::new(FfiValue::Integer(key as DwarfInteger))) + } + }; + Ok(FfiValue::Result(result)) + } + "query_one" => { + let query: String = + match args.first().unwrap().try_into().map_err( + |e: BubbaError| Error::Plugin(e.to_string().into()), + ) { + Ok(query) => query, + Err(e) => return RErr(e), }; - self.lambda_call.send(lambda_call).unwrap(); - // Wait for the result. - let result = result.recv().unwrap(); + let pool: DwarfInteger = match args.get(1).unwrap().try_into() { + Ok(pool) => pool, + Err(e) => return RErr(Error::Plugin(e.to_string().into())), + }; - // Remove the row. - let mut guard = self.rows.lock().unwrap(); - guard.remove(key); + let FfiValue::Lambda(lambda) = args.get(2).unwrap() else { + panic!("Invalid lambda"); + }; - // Return the result from the lambda. - result.unwrap() - }) - .fetch_all(pool) - .await; - - // Now we wrap the result up as an RResult that may be sent back - // to dwarf. - let result = match result { - Ok(result) => ROk(RBox::new(result.into())), - Err(e) => { - let mut guard = self.errors.lock().unwrap(); - let entry = guard.vacant_entry(); - let key = entry.key(); - guard.insert(Arc::new(e)); - RErr(RBox::new(FfiValue::Integer(key as DwarfInteger))) - } - }; - Ok(FfiValue::Result(result)) - } - "query_one" => { - let query: String = args - .first() - .unwrap() - .try_into() - .map_err(|e: ChaChaError| Error::Plugin(e.to_string().into())) - .unwrap(); - - let pool: DwarfInteger = args - .get(1) - .unwrap() - .try_into() - .map_err(|e: ChaChaError| Error::Plugin(e.to_string().into())) - .unwrap(); - - let FfiValue::Lambda(lambda) = args.get(2).unwrap() else { - panic!("Invalid lambda"); - }; + let bindings: Vec = match args.get(3).unwrap().try_into() { + Ok(bindings) => bindings, + Err(e) => return RErr(Error::Plugin(e.to_string().into())), + }; - let bindings: Vec = args - .get(3) - .unwrap() - .clone() - .try_into() - .map_err(|e: ChaChaError| Error::Plugin(e.to_string().into())) - .unwrap(); + let binding_types: Vec = + match args.get(4).unwrap().try_into() { + Ok(binding_types) => binding_types, + Err(e) => return RErr(Error::Plugin(e.to_string().into())), + }; - let guard = self.pools.lock().unwrap(); - let pool = guard.get(pool as usize).unwrap(); + let guard = self.pools.lock().unwrap(); + let pool = guard.get(pool as usize).unwrap(); - // Run the query - let mut result = sqlx::query(&query); - for binding in bindings { - match binding { - FfiValue::String(value) => { - result = result.bind(value.to_string()); - } - FfiValue::Integer(value) => { - result = result.bind(value as i64); - } - _ => { - panic!("Invalid binding"); + // Run the query + let mut result = sqlx::query(&query); + for (i, binding) in bindings.iter().enumerate() { + match binding_types[i].as_str() { + INTEGER => { + result = result.bind(binding.parse::().unwrap()) + } + SHORT => { + result = result.bind(binding.parse::().unwrap()) + } + STRING => result = result.bind(binding), + TIMESTAMP => { + result = result.bind( + binding.parse::().unwrap(), + ) + } + ty => panic!("Invalid type: {ty}"), } } - } - let result = result - .map(|row: sqlx::postgres::PgRow| { - let (s, result) = crossbeam::channel::bounded(1); - let key = { - let mut guard = self.rows.lock().unwrap(); - guard.insert(Arc::new(row)) - }; + let result = result + .map(|row: sqlx::postgres::PgRow| { + let (s, result) = crossbeam::channel::bounded(1); - let lambda_call = LambdaCall { - lambda: *lambda, - args: vec![FfiValue::Integer(key as DwarfInteger)].into(), - result: s.into(), - }; - self.lambda_call.send(lambda_call).unwrap(); - let result = result.recv().unwrap(); + let key = { + let mut guard = self.rows.lock().unwrap(); + guard.insert(Arc::new(row)) + }; - let mut guard = self.rows.lock().unwrap(); - guard.remove(key); + let lambda_call = LambdaCall { + lambda: *lambda, + args: vec![FfiValue::Integer(key as DwarfInteger)] + .into(), + result: s.into(), + }; + self.lambda_call.send(lambda_call).unwrap(); + let result = result.recv().unwrap(); - result.unwrap() - }) - .fetch_one(pool) - .await; + let mut guard = self.rows.lock().unwrap(); + guard.remove(key); - let result = match result { - Ok(result) => ROk(RBox::new(result.into())), - Err(e) => { - let mut guard = self.errors.lock().unwrap(); - let entry = guard.vacant_entry(); - let key = entry.key(); - guard.insert(Arc::new(e)); - RErr(RBox::new(FfiValue::Integer(key as DwarfInteger))) - } - }; + result.unwrap() + }) + .fetch_one(pool) + .await; - Ok(FfiValue::Result(result)) - } - func => Err(Error::Plugin(format!("Invalid function: {func}").into())), - }, - "Row" => match func.as_str() { - "get" => { - // The first parameter is the row handle. - let row: DwarfInteger = args - .first() - .unwrap() - .try_into() - .map_err(|e: ChaChaError| Error::Plugin(e.to_string().into())) - .unwrap(); - - // The second parameter is the name of the column. - let index: String = args - .get(1) - .unwrap() - .try_into() - .map_err(|e: ChaChaError| Error::Plugin(e.to_string().into())) - .unwrap(); - - // The third parameter is the type of the column. - let ty: String = args - .get(2) - .unwrap() - .try_into() - .map_err(|e: ChaChaError| Error::Plugin(e.to_string().into())) - .unwrap(); - - let guard = self.rows.lock().unwrap(); - let row = guard.get(row as usize).unwrap(); - - // Attempt to get the value from the row, according to the presumed - // type. - let result = match ty.as_str() { - INTEGER => match row.try_get::(index.as_str()) { - Ok(result) => FfiValue::Result(ROk(RBox::new( - FfiValue::Integer(result as DwarfInteger), - ))), - Err(e) => { - let mut guard = self.errors.lock().unwrap(); - let entry = guard.vacant_entry(); - let key = entry.key(); - guard.insert(Arc::new(e)); - FfiValue::Result(RErr(RBox::new(FfiValue::Integer( - key as DwarfInteger, - )))) - } - }, - SHORT => match row.try_get::(index.as_str()) { - Ok(result) => FfiValue::Result(ROk(RBox::new( - FfiValue::Integer(result as DwarfInteger), - ))), + let result = match result { + Ok(result) => ROk(RBox::new(result.into())), Err(e) => { let mut guard = self.errors.lock().unwrap(); let entry = guard.vacant_entry(); let key = entry.key(); guard.insert(Arc::new(e)); - FfiValue::Result(RErr(RBox::new(FfiValue::Integer( - key as DwarfInteger, - )))) + RErr(RBox::new(FfiValue::Integer(key as DwarfInteger))) } - }, - STRING => match row.try_get::(index.as_str()) { - Ok(result) => FfiValue::Result(ROk(RBox::new( - FfiValue::String(result.into()), - ))), - Err(e) => { - let mut guard = self.errors.lock().unwrap(); - let entry = guard.vacant_entry(); - let key = entry.key(); - guard.insert(Arc::new(e)); - FfiValue::Result(RErr(RBox::new(FfiValue::Integer( - key as DwarfInteger, - )))) - } - }, - TIMESTAMP => { - match row.try_get::(index.as_str()) - { + }; + + Ok(FfiValue::Result(result)) + } + func => Err(Error::Plugin(format!("Invalid function: {func}").into())), + } + } + "Row" => { + match func.as_str() { + "get" => { + // The first parameter is the row handle. + let row: DwarfInteger = match args.first().unwrap().try_into() { + Ok(row) => row, + Err(e) => return RErr(Error::Plugin(e.to_string().into())), + }; + + // The second parameter is the name of the column. + let index: String = match args.get(1).unwrap().try_into() { + Ok(index) => index, + Err(e) => return RErr(Error::Plugin(e.to_string().into())), + }; + + // The third parameter is the type of the column. + let ty: String = match args.get(2).unwrap().try_into() { + Ok(ty) => ty, + Err(e) => return RErr(Error::Plugin(e.to_string().into())), + }; + + let guard = self.rows.lock().unwrap(); + let row = guard.get(row as usize).unwrap(); + + // Attempt to get the value from the row, according to the presumed + // type. + let result = match ty.as_str() { + INTEGER => match row.try_get::(index.as_str()) { Ok(result) => FfiValue::Result(ROk(RBox::new( - FfiValue::String(result.to_string().into()), + FfiValue::Integer(result as DwarfInteger), ))), Err(e) => { let mut guard = self.errors.lock().unwrap(); @@ -469,17 +458,63 @@ mod postgres { key as DwarfInteger, )))) } + }, + SHORT => match row.try_get::(index.as_str()) { + Ok(result) => FfiValue::Result(ROk(RBox::new( + FfiValue::Integer(result as DwarfInteger), + ))), + Err(e) => { + let mut guard = self.errors.lock().unwrap(); + let entry = guard.vacant_entry(); + let key = entry.key(); + guard.insert(Arc::new(e)); + FfiValue::Result(RErr(RBox::new(FfiValue::Integer( + key as DwarfInteger, + )))) + } + }, + STRING => match row.try_get::(index.as_str()) { + Ok(result) => FfiValue::Result(ROk(RBox::new( + FfiValue::String(result.into()), + ))), + Err(e) => { + let mut guard = self.errors.lock().unwrap(); + let entry = guard.vacant_entry(); + let key = entry.key(); + guard.insert(Arc::new(e)); + FfiValue::Result(RErr(RBox::new(FfiValue::Integer( + key as DwarfInteger, + )))) + } + }, + TIMESTAMP => { + match row + .try_get::(index.as_str()) + { + Ok(result) => FfiValue::Result(ROk(RBox::new( + FfiValue::String(result.to_string().into()), + ))), + Err(e) => { + let mut guard = self.errors.lock().unwrap(); + let entry = guard.vacant_entry(); + let key = entry.key(); + guard.insert(Arc::new(e)); + FfiValue::Result(RErr(RBox::new( + FfiValue::Integer(key as DwarfInteger), + ))) + } + } } - } - ty => { - panic!("Invalid type: {ty}"); - } - }; + ty => { + panic!("Invalid type: {ty}"); + } + }; - Ok(result) + Ok(result) + } + func => Err(Error::Plugin(format!("Invalid function: {func}").into())), } - func => Err(Error::Plugin(format!("Invalid function: {func}").into())), - }, + } ty => Err(Error::Plugin(format!("Invalid type: {ty}").into())), } .into() @@ -496,43 +531,46 @@ mod postgres { ) -> RResult { future::block_on(async { match ty.as_str() { - "Sqlx" => match func.as_str() { - "connect" => { - tracing::trace!("connect enter"); - let connection_string: String = args - .first() - .unwrap() - .try_into() - .map_err(|e: ChaChaError| Error::Plugin(e.to_string().into())) - .unwrap(); - - let pool = PgPoolOptions::new() - .max_connections(5) - .connect(&connection_string) - .await; - - let result = match pool { - Ok(pool) => { - let mut guard = self.pools.lock().unwrap(); - let entry = guard.vacant_entry(); - let key = entry.key(); - guard.insert(pool.into()); - ROk(RBox::new(FfiValue::Integer(key as DwarfInteger))) - } - Err(e) => { - let mut guard = self.errors.lock().unwrap(); - let entry = guard.vacant_entry(); - let key = entry.key(); - guard.insert(Arc::new(e)); - RErr(RBox::new(FfiValue::Integer(key as DwarfInteger))) - } - }; + "Sqlx" => { + match func.as_str() { + "connect" => { + tracing::trace!("connect enter"); + let connection_string: String = + match args.first().unwrap().try_into().map_err( + |e: BubbaError| Error::Plugin(e.to_string().into()), + ) { + Ok(connection_string) => connection_string, + Err(e) => return RErr(e), + }; - tracing::trace!("open exit"); - Ok(FfiValue::Result(result)) + let pool = PgPoolOptions::new() + .max_connections(5) + .connect(&connection_string) + .await; + + let result = match pool { + Ok(pool) => { + let mut guard = self.pools.lock().unwrap(); + let entry = guard.vacant_entry(); + let key = entry.key(); + guard.insert(pool.into()); + ROk(RBox::new(FfiValue::Integer(key as DwarfInteger))) + } + Err(e) => { + let mut guard = self.errors.lock().unwrap(); + let entry = guard.vacant_entry(); + let key = entry.key(); + guard.insert(Arc::new(e)); + RErr(RBox::new(FfiValue::Integer(key as DwarfInteger))) + } + }; + + tracing::trace!("open exit"); + Ok(FfiValue::Result(result)) + } + func => Err(Error::Plugin(format!("Invalid function: {func}").into())), } - func => Err(Error::Plugin(format!("Invalid function: {func}").into())), - }, + } ty => Err(Error::Plugin(format!("Invalid type: {ty}").into())), } .into() diff --git a/plugins/std/Cargo.lock b/plugins/std/Cargo.lock index b2a35e49..365f6382 100644 --- a/plugins/std/Cargo.lock +++ b/plugins/std/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "abi_stable" @@ -52,18 +52,18 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.21.0" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ "gimli", ] [[package]] -name = "adler" -version = "1.0.2" +name = "adler2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "ahash" @@ -88,9 +88,9 @@ dependencies = [ [[package]] name = "allocator-api2" -version = "0.2.18" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "android-tzdata" @@ -114,7 +114,7 @@ source = "git+https://github.com/uberFoo/ansi-to-tui#84bac8fbfe4d84d023dce0a32f0 dependencies = [ "nom", "ratatui", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -128,9 +128,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.14" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" dependencies = [ "anstyle", "anstyle-parse", @@ -143,58 +143,58 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.7" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" [[package]] name = "anstyle-parse" -version = "0.2.4" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.0.3" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a64c907d4e79225ac72e2a354c9ce84d50ebb4586dee56c82b3ee73004f537f5" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.3" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" +checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" dependencies = [ "anstyle", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "anyhow" -version = "1.0.82" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f538837af36e6f6a9be0faa67f9a314f8119e4e4b5867c6ab40ed60360142519" +checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" [[package]] name = "ariadne" version = "0.3.0" source = "git+https://github.com/uberFoo/ariadne#7f145e849a2a3c80efe4306d90d89de3198dab4f" dependencies = [ - "unicode-width", + "unicode-width 0.1.14", "yansi", ] [[package]] name = "arrayvec" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "as_derive_utils" @@ -221,22 +221,21 @@ dependencies = [ [[package]] name = "async-channel" -version = "2.2.1" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "136d4d23bcc79e27423727b36823d86233aad06dfea531837b038394d11e9928" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" dependencies = [ "concurrent-queue", - "event-listener 5.3.0", - "event-listener-strategy 0.5.2", + "event-listener-strategy", "futures-core", "pin-project-lite", ] [[package]] name = "async-compat" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f68a707c1feb095d8c07f8a65b9f506b117d30af431cab89374357de7c11461b" +checksum = "7bab94bde396a3f7b4962e396fdad640e241ed797d4d8d77fc8c237d14c58fc0" dependencies = [ "futures-core", "futures-io", @@ -259,14 +258,14 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.11.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b10202063978b3351199d68f8b22c4e47e4b1b822f8d43fd862d5ea8c006b29a" +checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" dependencies = [ "async-task", "concurrent-queue", - "fastrand 2.1.0", - "futures-lite 2.3.0", + "fastrand 2.3.0", + "futures-lite 2.5.0", "slab", ] @@ -288,9 +287,9 @@ version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a" dependencies = [ - "async-lock 3.3.0", + "async-lock 3.4.0", "blocking", - "futures-lite 2.3.0", + "futures-lite 2.5.0", ] [[package]] @@ -307,7 +306,7 @@ dependencies = [ "log", "parking", "polling 2.8.0", - "rustix 0.37.27", + "rustix 0.37.28", "slab", "socket2 0.4.10", "waker-fn", @@ -315,21 +314,21 @@ dependencies = [ [[package]] name = "async-io" -version = "2.3.2" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcccb0f599cfa2f8ace422d3555572f47424da5648a4382a9dd0310ff8210884" +checksum = "43a2b323ccce0a1d90b449fd71f2a06ca7faa7c54c2751f06c9bd851fc061059" dependencies = [ - "async-lock 3.3.0", + "async-lock 3.4.0", "cfg-if", "concurrent-queue", "futures-io", - "futures-lite 2.3.0", + "futures-lite 2.5.0", "parking", - "polling 3.7.0", - "rustix 0.38.34", + "polling 3.7.4", + "rustix 0.38.43", "slab", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -343,12 +342,12 @@ dependencies = [ [[package]] name = "async-lock" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d034b430882f8381900d3fe6f0aaa3ad94f2cb4ac519b429692a1bc2dda4ae7b" +checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" dependencies = [ - "event-listener 4.0.3", - "event-listener-strategy 0.4.0", + "event-listener 5.4.0", + "event-listener-strategy", "pin-project-lite", ] @@ -369,9 +368,9 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b948000fad4873c1c9339d60f2623323a0cfd3816e5181033c6a5cb68b2accf7" dependencies = [ - "async-io 2.3.2", + "async-io 2.4.0", "blocking", - "futures-lite 2.3.0", + "futures-lite 2.5.0", ] [[package]] @@ -387,46 +386,45 @@ dependencies = [ "cfg-if", "event-listener 3.1.0", "futures-lite 1.13.0", - "rustix 0.38.34", + "rustix 0.38.43", "windows-sys 0.48.0", ] [[package]] name = "async-process" -version = "2.2.2" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a53fc6301894e04a92cb2584fedde80cb25ba8e02d9dc39d4a87d036e22f397d" +checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb" dependencies = [ - "async-channel 2.2.1", - "async-io 2.3.2", - "async-lock 3.3.0", + "async-channel 2.3.1", + "async-io 2.4.0", + "async-lock 3.4.0", "async-signal", "async-task", "blocking", "cfg-if", - "event-listener 5.3.0", - "futures-lite 2.3.0", - "rustix 0.38.34", + "event-listener 5.4.0", + "futures-lite 2.5.0", + "rustix 0.38.43", "tracing", - "windows-sys 0.52.0", ] [[package]] name = "async-signal" -version = "0.2.6" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afe66191c335039c7bb78f99dc7520b0cbb166b3a1cb33a03f53d8a1c6f2afda" +checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" dependencies = [ - "async-io 2.3.2", - "async-lock 3.3.0", + "async-io 2.4.0", + "async-lock 3.4.0", "atomic-waker", "cfg-if", "futures-core", "futures-io", - "rustix 0.38.34", + "rustix 0.38.43", "signal-hook-registry", "slab", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -454,30 +452,30 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "backtrace" -version = "0.3.71" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", - "cc", "cfg-if", "libc", "miniz_oxide", "object", "rustc-demangle", + "windows-targets 0.52.6", ] [[package]] name = "base64" -version = "0.21.7" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "bincode" @@ -490,28 +488,26 @@ dependencies = [ [[package]] name = "bitcode" -version = "0.5.1" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a733ab290c6e6b2859bba3e68fd1a4ca3eee0577f21ea46049a3529e500627" +checksum = "ee1bce7608560cd4bf0296a4262d0dbf13e6bcec5ff2105724c8ab88cc7fc784" dependencies = [ + "arrayvec", "bitcode_derive", "bytemuck", - "from_bytes_or_zeroed", - "residua-zigzag", + "glam", "serde", - "simdutf8", ] [[package]] name = "bitcode_derive" -version = "0.5.0" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c25ffc293cbf807499083d016ce3bc0459aaa7fd624c1cc563718a2440cb38a" +checksum = "a539389a13af092cd345a2b47ae7dec12deb306d660b2223d25cd3419b253ebe" dependencies = [ - "packagemerge", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.96", ] [[package]] @@ -522,21 +518,20 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.5.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +checksum = "1be3f42a67d6d345ecd59f675f3f012d6974981560836e938c22b424b85ce1be" [[package]] name = "blocking" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "495f7104e962b7356f0aeb34247aca1fe7d2e783b346582db7f2904cb5717e88" +checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" dependencies = [ - "async-channel 2.2.1", - "async-lock 3.3.0", + "async-channel 2.3.1", "async-task", "futures-io", - "futures-lite 2.3.0", + "futures-lite 2.5.0", "piper", ] @@ -548,15 +543,21 @@ checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "bytemuck" -version = "1.15.0" +version = "1.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" + +[[package]] +name = "byteorder" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d6d68c57235a3a081186990eca2867354726650f42f7516ca50c28d6281fd15" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.6.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" +checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" [[package]] name = "cassowary" @@ -566,9 +567,12 @@ checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53" [[package]] name = "cc" -version = "1.0.96" +version = "1.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "065a29261d53ba54260972629f9ca6bffa69bac13cd1fed61420f7fa68b9f8bd" +checksum = "a012a0df96dd6d06ba9a1b29d6402d1a5d77c6befd2566afdc26e10603dc93d7" +dependencies = [ + "shlex", +] [[package]] name = "cfg-if" @@ -576,18 +580,24 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + [[package]] name = "chrono" -version = "0.4.38" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" dependencies = [ "android-tzdata", "iana-time-zone", "js-sys", "num-traits", "wasm-bindgen", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -628,23 +638,23 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.4" +version = "4.5.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0" +checksum = "a8eb5e908ef3a6efbe1ed62520fb7287959888c88485abe072543190ecc66783" dependencies = [ "clap_builder", - "clap_derive 4.5.4", + "clap_derive 4.5.24", ] [[package]] name = "clap_builder" -version = "4.5.2" +version = "4.5.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" +checksum = "96b01801b5fc6a0a232407abc821660c9c6d25a1cafc0d4f85f29fb8d9afc121" dependencies = [ "anstream", "anstyle", - "clap_lex 0.7.0", + "clap_lex 0.7.4", "strsim 0.11.1", ] @@ -663,14 +673,14 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.4" +version = "4.5.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64" +checksum = "54b755194d6389280185988721fffba69495eed5ee9feeee9a599b53db80318c" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.96", ] [[package]] @@ -684,15 +694,15 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.0" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" [[package]] name = "clipboard-win" -version = "5.3.1" +version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79f4473f5144e20d9aceaf2972478f06ddf687831eafeeb434fbaf0acc4144ad" +checksum = "15efe7a882b08f34e38556b14f2fb3daa98769d06c7f0c1b076dfd0d983bc892" dependencies = [ "error-code", ] @@ -709,9 +719,9 @@ dependencies = [ [[package]] name = "colorchoice" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" [[package]] name = "concurrent-queue" @@ -744,9 +754,9 @@ dependencies = [ [[package]] name = "const_panic" -version = "0.2.8" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6051f239ecec86fde3410901ab7860d458d160371533842974fc61f96d15879b" +checksum = "2459fc9262a1aa204eb4b5764ad4f189caec88aea9634389c0a25f8be7f6265e" [[package]] name = "core-foundation" @@ -760,9 +770,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "core_extensions" @@ -794,18 +804,18 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.12" +version = "0.5.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab3db02a9c5b5121e1e42fbdb1aeb65f5e02624cc58c43f2884c6ccac0b82f95" +checksum = "06ba6d68e24814cb8de6bb986db8222d3a027d15872cabc0d18817bc3c0e4471" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-deque" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" dependencies = [ "crossbeam-epoch", "crossbeam-utils", @@ -822,30 +832,30 @@ dependencies = [ [[package]] name = "crossbeam-queue" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.19" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crossterm" -version = "0.27.0" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f476fe445d41c9e991fd07515a6f463074b782242ccf4a5b7b1d1012e70824df" +checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.7.0", "crossterm_winapi", - "libc", "mio", "parking_lot", + "rustix 0.38.43", "signal-hook", "signal-hook-mio", "winapi", @@ -874,7 +884,7 @@ checksum = "85b03f0c23c75d79d10ae9e6ea850f795db0b11bb9610d55f7751d8a92272db2" dependencies = [ "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -883,6 +893,17 @@ version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + [[package]] name = "dlv-list" version = "0.5.2" @@ -906,7 +927,7 @@ checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" [[package]] name = "dwarf" -version = "0.8.1" +version = "0.9.0" dependencies = [ "abi_stable", "ansi-to-tui", @@ -915,7 +936,7 @@ dependencies = [ "async-compat", "async-condvar-fair", "async-executor", - "async-io 2.3.2", + "async-io 2.4.0", "backtrace", "bincode", "bitcode", @@ -923,16 +944,16 @@ dependencies = [ "chrono", "chumsky", "circular-queue", - "clap 4.5.4", + "clap 4.5.26", "color-backtrace", "core_extensions", "crossbeam", "crossterm", "dap", "dotenvy", - "env_logger 0.10.2", - "futures-lite 2.3.0", - "heck 0.4.1", + "env_logger 0.11.6", + "futures-lite 2.5.0", + "heck 0.5.0", "lazy_static", "log", "num-format", @@ -943,15 +964,15 @@ dependencies = [ "puteketeke", "regex", "reqwest", - "rustc-hash", + "rustc-hash 2.1.0", "rustyline", "sarzak", "serde", "serde_json", "slab", "smartstring", - "smol 2.0.0", - "snafu 0.8.2", + "smol 2.0.2", + "snafu 0.8.5", "test-log", "threadpool", "tracing", @@ -965,9 +986,9 @@ dependencies = [ [[package]] name = "encoding_rs" -version = "0.8.34" +version = "0.8.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" dependencies = [ "cfg-if", ] @@ -980,11 +1001,12 @@ checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d" [[package]] name = "env_filter" -version = "0.1.0" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a009aa4810eb158359dda09d0c87378e4bbb89b5a801f016885a4707ba24f7ea" +checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" dependencies = [ "log", + "regex", ] [[package]] @@ -1002,11 +1024,14 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.11.3" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b35839ba51819680ba087cd351788c9a3c476841207e0b8cee0b04722343b9" +checksum = "dcaee3d8e3cfc3fd92428d477bc97fc29ec8716d180c0d74c643bb26166660e0" dependencies = [ + "anstream", + "anstyle", "env_filter", + "humantime", "log", ] @@ -1018,19 +1043,19 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.8" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "error-code" -version = "3.2.0" +version = "3.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0474425d51df81997e2f90a21591180b38eccf27292d755f3e30750225c175b" +checksum = "a5d9305ccc6942a704f4335694ecd3de2ea531b114ac2d51f5f843750787a92f" [[package]] name = "event-listener" @@ -1051,20 +1076,9 @@ dependencies = [ [[package]] name = "event-listener" -version = "4.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" -dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", -] - -[[package]] -name = "event-listener" -version = "5.3.0" +version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d9944b8ca13534cdfb2800775f8dd4902ff3fc75a50101466decadfdf322a24" +checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" dependencies = [ "concurrent-queue", "parking", @@ -1073,21 +1087,11 @@ dependencies = [ [[package]] name = "event-listener-strategy" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3" -dependencies = [ - "event-listener 4.0.3", - "pin-project-lite", -] - -[[package]] -name = "event-listener-strategy" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" +checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2" dependencies = [ - "event-listener 5.3.0", + "event-listener 5.4.0", "pin-project-lite", ] @@ -1102,9 +1106,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.1.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "fd-lock" @@ -1113,7 +1117,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e5768da2206272c81ef0b5e951a41862938a6070da63bcea197899942d3b947" dependencies = [ "cfg-if", - "rustix 0.38.34", + "rustix 0.38.43", "windows-sys 0.52.0", ] @@ -1147,32 +1151,27 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "from_bytes_or_zeroed" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d25934a78435889223e575c7b0fc36a290c5a312e7a7ae901f10587792e142a" - [[package]] name = "futures-channel" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", + "futures-sink", ] [[package]] name = "futures-core" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-io" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-lite" @@ -1191,11 +1190,11 @@ dependencies = [ [[package]] name = "futures-lite" -version = "2.3.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" +checksum = "cef40d21ae2c515b51041df9ed313ed21e572df340ea58a922a0aefe7e8891a1" dependencies = [ - "fastrand 2.1.0", + "fastrand 2.3.0", "futures-core", "futures-io", "parking", @@ -1204,24 +1203,25 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-util" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-core", "futures-io", + "futures-sink", "futures-task", "memchr", "pin-project-lite", @@ -1240,11 +1240,10 @@ dependencies = [ [[package]] name = "generator" -version = "0.8.1" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "186014d53bc231d0090ef8d6f03e0920c54d85a5ed22f4f2f74315ec56cf83fb" +checksum = "cc6bd114ceda131d3b1d665eba35788690ad37f5916457286b32ab6fd3c438dd" dependencies = [ - "cc", "cfg-if", "libc", "log", @@ -1254,34 +1253,42 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", + "js-sys", "libc", "wasi", + "wasm-bindgen", ] [[package]] name = "gimli" -version = "0.28.1" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + +[[package]] +name = "glam" +version = "0.29.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +checksum = "dc46dd3ec48fdd8e693a98d2b8bafae273a2d54c1de02a2a7e3d57d501f39677" [[package]] name = "h2" -version = "0.3.26" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e" dependencies = [ + "atomic-waker", "bytes", "fnv", "futures-core", "futures-sink", - "futures-util", "http", - "indexmap 2.2.6", + "indexmap 2.7.0", "slab", "tokio", "tokio-util", @@ -1294,6 +1301,15 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash", +] + [[package]] name = "hashbrown" version = "0.14.5" @@ -1304,6 +1320,12 @@ dependencies = [ "allocator-api2", ] +[[package]] +name = "hashbrown" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" + [[package]] name = "heck" version = "0.4.1" @@ -1331,20 +1353,26 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" +[[package]] +name = "hermit-abi" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" + [[package]] name = "home" -version = "0.5.9" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "http" -version = "0.2.12" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" dependencies = [ "bytes", "fnv", @@ -1353,26 +1381,32 @@ dependencies = [ [[package]] name = "http-body" -version = "0.4.6" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", "http", - "pin-project-lite", ] [[package]] -name = "httparse" -version = "1.8.0" +name = "http-body-util" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +dependencies = [ + "bytes", + "futures-util", + "http", + "http-body", + "pin-project-lite", +] [[package]] -name = "httpdate" -version = "1.0.3" +name = "httparse" +version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" +checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" [[package]] name = "humantime" @@ -1382,60 +1416,82 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.28" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" +checksum = "256fb8d4bd6413123cc9d91832d78325c48ff41677595be797d90f42969beae0" dependencies = [ "bytes", "futures-channel", - "futures-core", "futures-util", "h2", "http", "http-body", "httparse", - "httpdate", "itoa", "pin-project-lite", - "socket2 0.5.7", + "smallvec", "tokio", - "tower-service", - "tracing", "want", ] [[package]] name = "hyper-rustls" -version = "0.24.2" +version = "0.27.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" dependencies = [ "futures-util", "http", "hyper", + "hyper-util", "rustls", + "rustls-pki-types", "tokio", "tokio-rustls", + "tower-service", + "webpki-roots", ] [[package]] name = "hyper-tls" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", + "http-body-util", "hyper", + "hyper-util", "native-tls", "tokio", "tokio-native-tls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "pin-project-lite", + "socket2 0.5.8", + "tokio", + "tower-service", + "tracing", ] [[package]] name = "iana-time-zone" -version = "0.1.60" +version = "0.1.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -1454,14 +1510,143 @@ dependencies = [ "cc", ] +[[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.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +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.96", +] + [[package]] name = "idna" -version = "0.5.0" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +dependencies = [ + "icu_normalizer", + "icu_properties", ] [[package]] @@ -1476,19 +1661,19 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.2.6" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" dependencies = [ "equivalent", - "hashbrown 0.14.5", + "hashbrown 0.15.2", ] [[package]] name = "instant" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" dependencies = [ "cfg-if", ] @@ -1506,59 +1691,54 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.9.0" +version = "2.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" [[package]] name = "is-terminal" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" +checksum = "261f68e344040fbd0edea105bef17c66edf46f984ddb1115b775ce31be948f4b" dependencies = [ - "hermit-abi 0.3.9", + "hermit-abi 0.4.0", "libc", "windows-sys 0.52.0", ] [[package]] name = "is_terminal_polyfill" -version = "1.70.0" +version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" - -[[package]] -name = "itertools" -version = "0.4.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a9b56eb56058f43dc66e58f40a214b2ccbc9f3df51861b63d51dec7b65bc3f" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" [[package]] name = "itoa" -version = "1.0.11" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] name = "js-sys" -version = "0.3.69" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" dependencies = [ + "once_cell", "wasm-bindgen", ] [[package]] name = "lazy_static" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.154" +version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae743338b92ff9146ce83992f766a31066a91a8c84a45e0e9f21e7cf6de6d346" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" [[package]] name = "libloading" @@ -1578,9 +1758,15 @@ checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" [[package]] name = "linux-raw-sys" -version = "0.4.13" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" + +[[package]] +name = "litemap" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" [[package]] name = "lock_api" @@ -1595,9 +1781,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.21" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "loom" @@ -1623,9 +1809,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.2" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "mime" @@ -1641,23 +1827,23 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.2" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +checksum = "4ffbe83022cedc1d264172192511ae958937694cd57ce297164951b8b3568394" dependencies = [ - "adler", + "adler2", ] [[package]] name = "mio" -version = "0.8.11" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ "libc", "log", "wasi", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -1672,11 +1858,10 @@ dependencies = [ [[package]] name = "native-tls" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" dependencies = [ - "lazy_static", "libc", "log", "openssl", @@ -1699,12 +1884,13 @@ dependencies = [ [[package]] name = "nix" -version = "0.27.1" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.7.0", "cfg-if", + "cfg_aliases", "libc", ] @@ -1763,7 +1949,7 @@ version = "1.0.0" source = "git+https://github.com/uberFoo/nut#1f89d402a281ab4ea02478d26512e8480146d12a" dependencies = [ "anyhow", - "clap 4.5.4", + "clap 4.5.26", "diff", "heck 0.4.1", "log", @@ -1782,26 +1968,26 @@ dependencies = [ [[package]] name = "object" -version = "0.32.2" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ "memchr", ] [[package]] name = "once_cell" -version = "1.19.0" +version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "openssl" -version = "0.10.64" +version = "0.10.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" +checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.7.0", "cfg-if", "foreign-types", "libc", @@ -1818,7 +2004,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.96", ] [[package]] @@ -1829,9 +2015,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.102" +version = "0.9.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2" +checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" dependencies = [ "cc", "libc", @@ -1839,6 +2025,16 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "ordered_hash_map" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab0e5f22bf6dd04abd854a8874247813a8fa2c8c1260eba6fbb150270ce7c176" +dependencies = [ + "hashbrown 0.13.2", + "serde", +] + [[package]] name = "os_str_bytes" version = "6.6.1" @@ -1851,26 +2047,17 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" -[[package]] -name = "packagemerge" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0efcf6ee55f8f7a24333bc8d1dd0e541a6cedf903dbc07ae6479d7f8ff32ed08" -dependencies = [ - "itertools", -] - [[package]] name = "parking" -version = "2.2.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot" -version = "0.12.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e4af0ca4f6caed20e900d564c242b8e5d4903fdacf31d3daf527b66fe6f42fb" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", "parking_lot_core", @@ -1886,14 +2073,14 @@ dependencies = [ "libc", "redox_syscall", "smallvec", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] name = "paste" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "percent-encoding" @@ -1903,9 +2090,9 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pin-project-lite" -version = "0.2.14" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pin-utils" @@ -1915,20 +2102,20 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "piper" -version = "0.2.1" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" dependencies = [ "atomic-waker", - "fastrand 2.1.0", + "fastrand 2.3.0", "futures-io", ] [[package]] name = "pkg-config" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] name = "polling" @@ -1948,24 +2135,27 @@ dependencies = [ [[package]] name = "polling" -version = "3.7.0" +version = "3.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645493cf344456ef24219d02a768cf1fb92ddf8c92161679ae3d91b91a637be3" +checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f" dependencies = [ "cfg-if", "concurrent-queue", - "hermit-abi 0.3.9", + "hermit-abi 0.4.0", "pin-project-lite", - "rustix 0.38.34", + "rustix 0.38.43", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "ppv-lite86" -version = "0.2.17" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] [[package]] name = "pretty_env_logger" @@ -2003,18 +2193,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.81" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d1597b0c024618f09a9c3b8655b7e430397a36d23fdafec26d6965e9eec3eba" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" dependencies = [ "unicode-ident", ] [[package]] name = "psm" -version = "0.1.21" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874" +checksum = "200b9ff220857e53e184257720a14553b2f4aa02577d2ed9842d45d4b9654810" dependencies = [ "cc", ] @@ -2026,9 +2216,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83b1109db5f94e442b059329319e1bc014ee53ce1c1b9a1ad72207e7eb177936" dependencies = [ "async-executor", - "async-io 2.3.2", + "async-io 2.4.0", "crossbeam", - "futures-lite 2.3.0", + "futures-lite 2.5.0", "once_cell", "parking_lot", "slab", @@ -2036,11 +2226,63 @@ dependencies = [ "tracing", ] +[[package]] +name = "quinn" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef" +dependencies = [ + "bytes", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash 2.1.0", + "rustls", + "socket2 0.5.8", + "thiserror 2.0.10", + "tokio", + "tracing", +] + +[[package]] +name = "quinn-proto" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" +dependencies = [ + "bytes", + "getrandom", + "rand", + "ring", + "rustc-hash 2.1.0", + "rustls", + "rustls-pki-types", + "slab", + "thiserror 2.0.10", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c40286217b4ba3a71d644d752e6a0b71f13f1b6a2c5311acfcbe0c2418ed904" +dependencies = [ + "cfg_aliases", + "libc", + "once_cell", + "socket2 0.5.8", + "tracing", + "windows-sys 0.59.0", +] + [[package]] name = "quote" -version = "1.0.36" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" dependencies = [ "proc-macro2", ] @@ -2102,28 +2344,28 @@ dependencies = [ "bitflags 1.3.2", "cassowary", "unicode-segmentation", - "unicode-width", + "unicode-width 0.1.14", ] [[package]] name = "redox_syscall" -version = "0.5.1" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469052894dcb553421e483e4209ee581a45100d31b4018de03e5a7ad86374a7e" +checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.7.0", ] [[package]] name = "regex" -version = "1.10.4" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.6", - "regex-syntax 0.8.3", + "regex-automata 0.4.9", + "regex-syntax 0.8.5", ] [[package]] @@ -2137,13 +2379,13 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.6" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.3", + "regex-syntax 0.8.5", ] [[package]] @@ -2154,9 +2396,9 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "repr_offset" @@ -2169,21 +2411,24 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.11.27" +version = "0.12.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" +checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" dependencies = [ "base64", "bytes", "encoding_rs", + "futures-channel", "futures-core", "futures-util", "h2", "http", "http-body", + "http-body-util", "hyper", "hyper-rustls", "hyper-tls", + "hyper-util", "ipnet", "js-sys", "log", @@ -2192,8 +2437,10 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", + "quinn", "rustls", "rustls-pemfile", + "rustls-pki-types", "serde", "serde_json", "serde_urlencoded", @@ -2202,21 +2449,16 @@ dependencies = [ "tokio", "tokio-native-tls", "tokio-rustls", + "tower", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", "webpki-roots", - "winreg", + "windows-registry", ] -[[package]] -name = "residua-zigzag" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b37805477eee599a61753230f511ae94d737f69b536e468e294723ad5f1b75f" - [[package]] name = "ring" version = "0.17.8" @@ -2234,9 +2476,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc-hash" @@ -2244,20 +2486,26 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" +[[package]] +name = "rustc-hash" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7fb8039b3032c191086b10f11f319a6e99e1e82889c5cc6046f515c9db1d497" + [[package]] name = "rustc_version" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ "semver", ] [[package]] name = "rustix" -version = "0.37.27" +version = "0.37.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" +checksum = "519165d378b97752ca44bbe15047d5d3409e875f39327546b42ac81d7e18c1b6" dependencies = [ "bitflags 1.3.2", "errno", @@ -2269,61 +2517,73 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.34" +version = "0.38.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +checksum = "a78891ee6bf2340288408954ac787aa063d8e8817e9f53abb37c695c6d834ef6" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.7.0", "errno", "libc", - "linux-raw-sys 0.4.13", - "windows-sys 0.52.0", + "linux-raw-sys 0.4.15", + "windows-sys 0.59.0", ] [[package]] name = "rustls" -version = "0.21.12" +version = "0.23.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +checksum = "8f287924602bf649d949c63dc8ac8b235fa5387d394020705b80c4eb597ce5b8" dependencies = [ - "log", + "once_cell", "ring", + "rustls-pki-types", "rustls-webpki", - "sct", + "subtle", + "zeroize", ] [[package]] name = "rustls-pemfile" -version = "1.0.4" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" dependencies = [ - "base64", + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2bf47e6ff922db3825eb750c4e2ff784c6ff8fb9e13046ef6a1d1c5401b0b37" +dependencies = [ + "web-time", ] [[package]] name = "rustls-webpki" -version = "0.101.7" +version = "0.102.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" dependencies = [ "ring", + "rustls-pki-types", "untrusted", ] [[package]] name = "rustversion" -version = "1.0.15" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80af6f9131f277a45a3fba6ce8e2258037bb0477a67e610d3c1fe046ab31de47" +checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" [[package]] name = "rustyline" -version = "13.0.0" +version = "15.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02a2d683a4ac90aeef5b1013933f6d977bd37d51ff3f4dad829d4931a7e6be86" +checksum = "2ee1e066dc922e513bda599c6ccb5f3bb2b0ea5870a579448f2622993f0a9a2f" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.7.0", "cfg-if", "clipboard-win", "fd-lock", @@ -2335,27 +2595,27 @@ dependencies = [ "radix_trie", "rustyline-derive", "unicode-segmentation", - "unicode-width", + "unicode-width 0.2.0", "utf8parse", - "winapi", + "windows-sys 0.59.0", ] [[package]] name = "rustyline-derive" -version = "0.10.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5af959c8bf6af1aff6d2b463a57f71aae53d1332da58419e30ad8dc7011d951" +checksum = "327e9d075f6df7e25fbf594f1be7ef55cf0d567a6cb5112eeccbbd51ceb48e0d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.96", ] [[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" @@ -2368,17 +2628,18 @@ dependencies = [ [[package]] name = "sarzak" -version = "2.13.26" -source = "git+https://github.com/uberFoo/sarzak?branch=develop#45b23aebb5c86bf33e9c5e13d1ef3c406d0d10b0" +version = "2.15.2" +source = "git+https://github.com/uberFoo/sarzak?branch=develop#cd95b35537c795f8fa0536ef509fea5d4c42f7d6" dependencies = [ "ansi_term", "bincode", "cfg-if", - "clap 4.5.4", + "clap 4.5.26", "heck 0.4.1", "log", "nut", - "rustc-hash", + "ordered_hash_map", + "rustc-hash 1.1.0", "serde", "serde_json", "snafu 0.7.5", @@ -2388,11 +2649,11 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.23" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -2407,23 +2668,13 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "sct" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "security-framework" -version = "2.10.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "770452e37cad93e0a50d5abc3990d2bc351c36d0328f86cefec2f2fb206eaef6" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.7.0", "core-foundation", "core-foundation-sys", "libc", @@ -2432,9 +2683,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.10.0" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f3cc463c0ef97e11c3461a9d3787412d30e8e7eb907c79180c4a57bf7c04ef" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" dependencies = [ "core-foundation-sys", "libc", @@ -2442,37 +2693,38 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.22" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" +checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba" [[package]] name = "serde" -version = "1.0.200" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddc6f9cc94d67c0e21aaf7eda3a010fd3af78ebf6e096aa6e2e13c79749cce4f" +checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.200" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "856f046b9400cee3c8c94ed572ecdb752444c24528c035cd35882aad6f492bcb" +checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.96", ] [[package]] name = "serde_json" -version = "1.0.116" +version = "1.0.135" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e17db7126d17feb94eb3fad46bf1a96b034e8aacbc2e775fe81505f8b0b2813" +checksum = "2b0d7ba2887406110130a978386c4e1befb98c674b4fba677954e4db976630d9" dependencies = [ "itoa", + "memchr", "ryu", "serde", ] @@ -2491,9 +2743,9 @@ dependencies = [ [[package]] name = "sha1_smol" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012" +checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" [[package]] name = "sharded-slab" @@ -2504,6 +2756,12 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "signal-hook" version = "0.3.17" @@ -2516,9 +2774,9 @@ dependencies = [ [[package]] name = "signal-hook-mio" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af" +checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd" dependencies = [ "libc", "mio", @@ -2534,12 +2792,6 @@ dependencies = [ "libc", ] -[[package]] -name = "simdutf8" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a" - [[package]] name = "slab" version = "0.4.9" @@ -2586,19 +2838,19 @@ dependencies = [ [[package]] name = "smol" -version = "2.0.0" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e635339259e51ef85ac7aa29a1cd991b957047507288697a690e80ab97d07cad" +checksum = "a33bd3e260892199c3ccfc487c88b2da2265080acb316cd920da72fdfd7c599f" dependencies = [ - "async-channel 2.2.1", + "async-channel 2.3.1", "async-executor", "async-fs 2.1.2", - "async-io 2.3.2", - "async-lock 3.3.0", + "async-io 2.4.0", + "async-lock 3.4.0", "async-net 2.0.0", - "async-process 2.2.2", + "async-process 2.3.0", "blocking", - "futures-lite 2.3.0", + "futures-lite 2.5.0", ] [[package]] @@ -2613,11 +2865,11 @@ dependencies = [ [[package]] name = "snafu" -version = "0.8.2" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75976f4748ab44f6e5332102be424e7c2dc18daeaf7e725f2040c3ebb133512e" +checksum = "223891c85e2a29c3fe8fb900c1fae5e69c2e42415e3177752e8718475efa5019" dependencies = [ - "snafu-derive 0.8.2", + "snafu-derive 0.8.5", ] [[package]] @@ -2634,14 +2886,14 @@ dependencies = [ [[package]] name = "snafu-derive" -version = "0.8.2" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4b19911debfb8c2fb1107bc6cb2d61868aaf53a988449213959bb1b5b1ed95f" +checksum = "03c3c6b7927ffe7ecaa769ee0e3994da3b8cafc8f444578982c83ecb161af917" dependencies = [ - "heck 0.4.1", + "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.96", ] [[package]] @@ -2656,9 +2908,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" dependencies = [ "libc", "windows-sys 0.52.0", @@ -2670,17 +2922,23 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "stacker" -version = "0.1.15" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c886bd4480155fd3ef527d45e9ac8dd7118a898a46530b7b94c3e21866259fce" +checksum = "799c883d55abdb5e98af1a7b3f23b9b6de8ecada0ecac058672d7635eb48ca7b" dependencies = [ "cc", "cfg-if", "libc", "psm", - "winapi", + "windows-sys 0.59.0", ] [[package]] @@ -2711,6 +2969,12 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + [[package]] name = "syn" version = "1.0.109" @@ -2724,9 +2988,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.60" +version = "2.0.96" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "909518bc7b1c9b779f1bbf07f2929d35af9f0f37e47c6e9ef7f9dddc1e1821f3" +checksum = "d5d0adab1ae378d7f53bdebc67a39f1f151407ef230f0ce2883572f5d8985c80" dependencies = [ "proc-macro2", "quote", @@ -2735,26 +2999,40 @@ dependencies = [ [[package]] name = "sync_wrapper" -version = "0.1.2" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[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.96", +] [[package]] name = "system-configuration" -version = "0.5.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.7.0", "core-foundation", "system-configuration-sys", ] [[package]] name = "system-configuration-sys" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" dependencies = [ "core-foundation-sys", "libc", @@ -2762,14 +3040,16 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.10.1" +version = "3.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +checksum = "9a8a559c81686f576e8cd0290cd2a24a2a9ad80c98b3478856500fcbd7acd704" dependencies = [ "cfg-if", - "fastrand 2.1.0", - "rustix 0.38.34", - "windows-sys 0.52.0", + "fastrand 2.3.0", + "getrandom", + "once_cell", + "rustix 0.38.43", + "windows-sys 0.59.0", ] [[package]] @@ -2787,7 +3067,7 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b319995299c65d522680decf80f2c108d85b861d81dfe340a10d16cee29d9e6" dependencies = [ - "env_logger 0.11.3", + "env_logger 0.11.6", "test-log-macros", "tracing-subscriber", ] @@ -2800,7 +3080,7 @@ checksum = "5999e24eaa32083191ba4e425deb75cdf25efefabe5aaccb7446dd0d4122a3f5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.96", ] [[package]] @@ -2811,22 +3091,42 @@ checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9" [[package]] name = "thiserror" -version = "1.0.59" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0126ad08bff79f29fc3ae6a55cc72352056dfff61e3ff8bb7129476d44b23aa" +checksum = "a3ac7f54ca534db81081ef1c1e7f6ea8a3ef428d2fc069097c079443d24124d3" dependencies = [ - "thiserror-impl", + "thiserror-impl 2.0.10", ] [[package]] name = "thiserror-impl" -version = "1.0.59" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1cd413b5d558b4c5bf3680e324a6fa5014e7b7c067a51e69dbdf47eb7148b66" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.96", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e9465d30713b56a37ede7185763c3492a91be2f5fa68d958c44e41ab9248beb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", ] [[package]] @@ -2857,11 +3157,21 @@ dependencies = [ "crunchy", ] +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + [[package]] name = "tinyvec" -version = "1.6.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" dependencies = [ "tinyvec_macros", ] @@ -2874,17 +3184,17 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.37.0" +version = "1.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787" +checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" dependencies = [ "backtrace", "bytes", "libc", "mio", "pin-project-lite", - "socket2 0.5.7", - "windows-sys 0.48.0", + "socket2 0.5.8", + "windows-sys 0.52.0", ] [[package]] @@ -2899,9 +3209,9 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.24.1" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" dependencies = [ "rustls", "tokio", @@ -2909,9 +3219,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.11" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" dependencies = [ "bytes", "futures-core", @@ -2929,17 +3239,38 @@ dependencies = [ "serde", ] +[[package]] +name = "tower" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + [[package]] name = "tower-service" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.40" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "pin-project-lite", "tracing-attributes", @@ -2948,20 +3279,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.96", ] [[package]] name = "tracing-core" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ "once_cell", "valuable", @@ -2980,9 +3311,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.18" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" dependencies = [ "matchers", "nu-ansi-term", @@ -2998,9 +3329,9 @@ dependencies = [ [[package]] name = "tracing-tracy" -version = "0.11.0" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6024d04f84a69fd0d1dc1eee3a2b070bd246530a0582f9982ae487cb6c703614" +checksum = "0eaa1852afa96e0fe9e44caa53dc0bd2d9d05e0f2611ce09f97f8677af56e4ba" dependencies = [ "tracing-core", "tracing-subscriber", @@ -3009,9 +3340,9 @@ dependencies = [ [[package]] name = "tracy-client" -version = "0.17.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59fb931a64ff88984f86d3e9bcd1ae8843aa7fe44dd0f8097527bc172351741d" +checksum = "d90a2c01305b02b76fdd89ac8608bae27e173c829a35f7d76a345ab5d33836db" dependencies = [ "loom", "once_cell", @@ -3020,11 +3351,12 @@ dependencies = [ [[package]] name = "tracy-client-sys" -version = "0.22.2" +version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d104d610dfa9dd154535102cc9c6164ae1fa37842bc2d9e83f9ac82b0ae0882" +checksum = "69fff37da548239c3bf9e64a12193d261e8b22b660991c6fd2df057c168f435f" dependencies = [ "cc", + "windows-targets 0.52.6", ] [[package]] @@ -3054,38 +3386,29 @@ version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a" -[[package]] -name = "unicode-bidi" -version = "0.3.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" - [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" [[package]] -name = "unicode-normalization" -version = "0.1.23" +name = "unicode-segmentation" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" -dependencies = [ - "tinyvec", -] +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] -name = "unicode-segmentation" -version = "1.11.0" +name = "unicode-width" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" [[package]] name = "unicode-width" -version = "0.1.12" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f5e5f3158ecfd4b8ff6fe086db7c8467a2dfdac97fe420f2b7c4aa97af66d6" +checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" [[package]] name = "untrusted" @@ -3095,26 +3418,38 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.0" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" 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 = "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 = "uuid" -version = "1.8.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" +checksum = "b913a3b5fe84142e269d63cc62b64319ccaf89b748fc31fe025177f767a756c4" dependencies = [ "getrandom", "serde", @@ -3135,15 +3470,15 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "waker-fn" -version = "1.1.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690" +checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" [[package]] name = "walkdir" @@ -3172,46 +3507,47 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.92" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" dependencies = [ "cfg-if", + "once_cell", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.92" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" dependencies = [ "bumpalo", "log", - "once_cell", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.96", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.42" +version = "0.4.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +checksum = "38176d9b44ea84e9184eff0bc34cc167ed044f816accfe5922e54d84cf48eca2" dependencies = [ "cfg-if", "js-sys", + "once_cell", "wasm-bindgen", "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.92" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3219,28 +3555,38 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.92" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.96", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.92" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" [[package]] name = "web-sys" -version = "0.3.69" +version = "0.3.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" dependencies = [ "js-sys", "wasm-bindgen", @@ -3248,9 +3594,12 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.25.4" +version = "0.26.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" +checksum = "5d642ff16b7e79272ae451b7322067cdc17cadf68c23264be9d94a32319efe7e" +dependencies = [ + "rustls-pki-types", +] [[package]] name = "winapi" @@ -3270,11 +3619,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -3285,12 +3634,12 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows" -version = "0.54.0" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9252e5725dbed82865af151df558e754e4a3c2c30818359eb17465f1346a1b49" +checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" dependencies = [ - "windows-core 0.54.0", - "windows-targets 0.52.5", + "windows-core 0.58.0", + "windows-targets 0.52.6", ] [[package]] @@ -3299,26 +3648,72 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] name = "windows-core" -version = "0.54.0" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-result", + "windows-strings", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-implement" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "windows-interface" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "windows-registry" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12661b9c89351d684a50a8a643ce5f608e20243b9fb84687800163429f161d65" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" dependencies = [ "windows-result", - "windows-targets 0.52.5", + "windows-strings", + "windows-targets 0.52.6", ] [[package]] name = "windows-result" -version = "0.1.1" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-strings" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "749f0da9cc72d82e600d8d2e44cadd0b9eedb9038f71a1c58556ac1c5791813b" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" dependencies = [ - "windows-targets 0.52.5", + "windows-result", + "windows-targets 0.52.6", ] [[package]] @@ -3336,7 +3731,16 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.5", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", ] [[package]] @@ -3356,18 +3760,18 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.5", - "windows_aarch64_msvc 0.52.5", - "windows_i686_gnu 0.52.5", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", "windows_i686_gnullvm", - "windows_i686_msvc 0.52.5", - "windows_x86_64_gnu 0.52.5", - "windows_x86_64_gnullvm 0.52.5", - "windows_x86_64_msvc 0.52.5", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", ] [[package]] @@ -3378,9 +3782,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" @@ -3390,9 +3794,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" @@ -3402,15 +3806,15 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" @@ -3420,9 +3824,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" @@ -3432,9 +3836,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" @@ -3444,9 +3848,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" @@ -3456,19 +3860,21 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] -name = "winreg" -version = "0.50.0" +name = "write16" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" [[package]] name = "yansi" @@ -3476,22 +3882,96 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", + "synstructure", +] + [[package]] name = "zerocopy" -version = "0.7.33" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "087eca3c1eaf8c47b94d02790dd086cd594b912d2043d4de4bfdd466b3befb7c" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ + "byteorder", "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.33" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "zerofrom" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f4b6c273f496d8fd4eaf18853e6b448760225dc030ff2c485a786859aea6393" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.96", ] diff --git a/plugins/std/src/lib.rs b/plugins/std/src/lib.rs index bd9a0c6b..1ca1c5b5 100644 --- a/plugins/std/src/lib.rs +++ b/plugins/std/src/lib.rs @@ -14,7 +14,8 @@ use abi_stable::{ std_types::{RBox, RErr, ROk, RResult, RStr, RVec}, }; use dwarf::{ - chacha::{error::ChaChaError, ffi_value::FfiValue}, + bubba::error::BubbaError, + chacha::ffi_value::FfiValue, plug_in::{Error, LambdaCall, Plugin, PluginModRef, PluginModule, PluginType, Plugin_TO}, DwarfInteger, }; @@ -106,12 +107,10 @@ mod env { match ty.as_str() { "Var" => match func.as_str() { "var" => { - let var: String = args - .first() - .unwrap() - .try_into() - .map_err(|e: ChaChaError| Error::Plugin(e.to_string().into())) - .unwrap(); + let var: String = match args.get(0).unwrap().try_into() { + Ok(var) => var, + Err(e) => return RErr(Error::Plugin(e.to_string().into())), + }; let var = std::env::var(var); let result = match var { @@ -122,19 +121,15 @@ mod env { Ok(FfiValue::Result(result).into()) } "set_var" => { - let key: String = args - .first() - .unwrap() - .try_into() - .map_err(|e: ChaChaError| Error::Plugin(e.to_string().into())) - .unwrap(); - - let value: String = args - .get(1) - .unwrap() - .try_into() - .map_err(|e: ChaChaError| Error::Plugin(e.to_string().into())) - .unwrap(); + let key: String = match args.get(0).unwrap().try_into() { + Ok(var) => var, + Err(e) => return RErr(Error::Plugin(e.to_string().into())), + }; + + let value: String = match args.get(1).unwrap().try_into() { + Ok(var) => var, + Err(e) => return RErr(Error::Plugin(e.to_string().into())), + }; std::env::set_var(key, value); @@ -230,12 +225,10 @@ mod fs { "File" => match func.as_str() { "open" => { tracing::trace!("open enter"); - let path: String = args - .first() - .unwrap() - .try_into() - .map_err(|e: ChaChaError| Error::Plugin(e.to_string().into())) - .unwrap(); + let path: String = match args.get(0).unwrap().try_into() { + Ok(var) => var, + Err(e) => return RErr(Error::Plugin(e.to_string().into())), + }; let file = File::open(path); let result = match file { @@ -257,12 +250,10 @@ mod fs { Ok(FfiValue::Result(result)) } "read" => { - let key: DwarfInteger = args - .first() - .unwrap() - .try_into() - .map_err(|e: ChaChaError| Error::Plugin(e.to_string().into())) - .unwrap(); + let key: DwarfInteger = match args.get(0).unwrap().try_into() { + Ok(var) => var, + Err(e) => return RErr(Error::Plugin(e.to_string().into())), + }; let mut buf = String::new(); let file = self.files.get_mut(key as usize).unwrap(); diff --git a/plugins/test_ffi/.vscode/settings.json b/plugins/test_ffi/.vscode/settings.json new file mode 100644 index 00000000..035794e4 --- /dev/null +++ b/plugins/test_ffi/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "cSpell.words": [ + "sabi" + ] +} \ No newline at end of file diff --git a/plugins/test_ffi/Cargo.lock b/plugins/test_ffi/Cargo.lock new file mode 100644 index 00000000..83b45b27 --- /dev/null +++ b/plugins/test_ffi/Cargo.lock @@ -0,0 +1,3976 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "abi_stable" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69d6512d3eb05ffe5004c59c206de7f99c34951504056ce23fc953842f12c445" +dependencies = [ + "abi_stable_derive", + "abi_stable_shared", + "const_panic", + "core_extensions", + "crossbeam-channel", + "generational-arena", + "libloading", + "lock_api", + "parking_lot", + "paste", + "repr_offset", + "rustc_version", + "serde", + "serde_derive", + "serde_json", +] + +[[package]] +name = "abi_stable_derive" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7178468b407a4ee10e881bc7a328a65e739f0863615cca4429d43916b05e898" +dependencies = [ + "abi_stable_shared", + "as_derive_utils", + "core_extensions", + "proc-macro2", + "quote", + "rustc_version", + "syn 1.0.109", + "typed-arena", +] + +[[package]] +name = "abi_stable_shared" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2b5df7688c123e63f4d4d649cba63f2967ba7f7861b1664fca3f77d3dad2b63" +dependencies = [ + "core_extensions", +] + +[[package]] +name = "addr2line" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" + +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "ansi-to-tui" +version = "3.0.0" +source = "git+https://github.com/uberFoo/ansi-to-tui#84bac8fbfe4d84d023dce0a32f087e900ebf1f73" +dependencies = [ + "nom", + "ratatui", + "thiserror 1.0.69", +] + +[[package]] +name = "ansi_term" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +dependencies = [ + "winapi", +] + +[[package]] +name = "anstream" +version = "0.6.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" + +[[package]] +name = "anstyle-parse" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" +dependencies = [ + "anstyle", + "windows-sys 0.59.0", +] + +[[package]] +name = "anyhow" +version = "1.0.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" + +[[package]] +name = "ariadne" +version = "0.3.0" +source = "git+https://github.com/uberFoo/ariadne#7f145e849a2a3c80efe4306d90d89de3198dab4f" +dependencies = [ + "unicode-width 0.1.14", + "yansi", +] + +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" + +[[package]] +name = "as_derive_utils" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff3c96645900a44cf11941c111bd08a6573b0e2f9f69bc9264b179d8fae753c4" +dependencies = [ + "core_extensions", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "async-channel" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener 2.5.3", + "futures-core", +] + +[[package]] +name = "async-channel" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-compat" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bab94bde396a3f7b4962e396fdad640e241ed797d4d8d77fc8c237d14c58fc0" +dependencies = [ + "futures-core", + "futures-io", + "once_cell", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "async-condvar-fair" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "295cd7b1012ff38050caca55808d99972b6c6ce92fefaa8d98b6571e7d5eff38" +dependencies = [ + "dlv-list", + "parking_lot", + "pin-project-lite", + "smol 1.3.0", +] + +[[package]] +name = "async-executor" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand 2.3.0", + "futures-lite 2.5.0", + "slab", +] + +[[package]] +name = "async-fs" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06" +dependencies = [ + "async-lock 2.8.0", + "autocfg", + "blocking", + "futures-lite 1.13.0", +] + +[[package]] +name = "async-fs" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a" +dependencies = [ + "async-lock 3.4.0", + "blocking", + "futures-lite 2.5.0", +] + +[[package]] +name = "async-io" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" +dependencies = [ + "async-lock 2.8.0", + "autocfg", + "cfg-if", + "concurrent-queue", + "futures-lite 1.13.0", + "log", + "parking", + "polling 2.8.0", + "rustix 0.37.28", + "slab", + "socket2 0.4.10", + "waker-fn", +] + +[[package]] +name = "async-io" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a2b323ccce0a1d90b449fd71f2a06ca7faa7c54c2751f06c9bd851fc061059" +dependencies = [ + "async-lock 3.4.0", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite 2.5.0", + "parking", + "polling 3.7.4", + "rustix 0.38.43", + "slab", + "tracing", + "windows-sys 0.59.0", +] + +[[package]] +name = "async-lock" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" +dependencies = [ + "event-listener 2.5.3", +] + +[[package]] +name = "async-lock" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" +dependencies = [ + "event-listener 5.4.0", + "event-listener-strategy", + "pin-project-lite", +] + +[[package]] +name = "async-net" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0434b1ed18ce1cf5769b8ac540e33f01fa9471058b5e89da9e06f3c882a8c12f" +dependencies = [ + "async-io 1.13.0", + "blocking", + "futures-lite 1.13.0", +] + +[[package]] +name = "async-net" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b948000fad4873c1c9339d60f2623323a0cfd3816e5181033c6a5cb68b2accf7" +dependencies = [ + "async-io 2.4.0", + "blocking", + "futures-lite 2.5.0", +] + +[[package]] +name = "async-process" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea6438ba0a08d81529c69b36700fa2f95837bfe3e776ab39cde9c14d9149da88" +dependencies = [ + "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.43", + "windows-sys 0.48.0", +] + +[[package]] +name = "async-process" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb" +dependencies = [ + "async-channel 2.3.1", + "async-io 2.4.0", + "async-lock 3.4.0", + "async-signal", + "async-task", + "blocking", + "cfg-if", + "event-listener 5.4.0", + "futures-lite 2.5.0", + "rustix 0.38.43", + "tracing", +] + +[[package]] +name = "async-signal" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" +dependencies = [ + "async-io 2.4.0", + "async-lock 3.4.0", + "atomic-waker", + "cfg-if", + "futures-core", + "futures-io", + "rustix 0.38.43", + "signal-hook-registry", + "slab", + "windows-sys 0.59.0", +] + +[[package]] +name = "async-task" +version = "4.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi 0.1.19", + "libc", + "winapi", +] + +[[package]] +name = "autocfg" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" + +[[package]] +name = "backtrace" +version = "0.3.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +dependencies = [ + "addr2line", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "windows-targets 0.52.6", +] + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bitcode" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee1bce7608560cd4bf0296a4262d0dbf13e6bcec5ff2105724c8ab88cc7fc784" +dependencies = [ + "arrayvec", + "bitcode_derive", + "bytemuck", + "glam", + "serde", +] + +[[package]] +name = "bitcode_derive" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a539389a13af092cd345a2b47ae7dec12deb306d660b2223d25cd3419b253ebe" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1be3f42a67d6d345ecd59f675f3f012d6974981560836e938c22b424b85ce1be" + +[[package]] +name = "blocking" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" +dependencies = [ + "async-channel 2.3.1", + "async-task", + "futures-io", + "futures-lite 2.5.0", + "piper", +] + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "bytemuck" +version = "1.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" + +[[package]] +name = "cassowary" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53" + +[[package]] +name = "cc" +version = "1.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a012a0df96dd6d06ba9a1b29d6402d1a5d77c6befd2566afdc26e10603dc93d7" +dependencies = [ + "shlex", +] + +[[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.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + +[[package]] +name = "chrono" +version = "0.4.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "wasm-bindgen", + "windows-targets 0.52.6", +] + +[[package]] +name = "chumsky" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eebd66744a15ded14960ab4ccdbfb51ad3b81f51f3f04a80adac98c985396c9" +dependencies = [ + "hashbrown 0.14.5", + "stacker", +] + +[[package]] +name = "circular-queue" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d34327ead1c743a10db339de35fb58957564b99d248a67985c55638b22c59b5" +dependencies = [ + "version_check", +] + +[[package]] +name = "clap" +version = "3.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123" +dependencies = [ + "atty", + "bitflags 1.3.2", + "clap_derive 3.2.25", + "clap_lex 0.2.4", + "indexmap 1.9.3", + "once_cell", + "strsim 0.10.0", + "termcolor", + "textwrap", +] + +[[package]] +name = "clap" +version = "4.5.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8eb5e908ef3a6efbe1ed62520fb7287959888c88485abe072543190ecc66783" +dependencies = [ + "clap_builder", + "clap_derive 4.5.24", +] + +[[package]] +name = "clap_builder" +version = "4.5.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96b01801b5fc6a0a232407abc821660c9c6d25a1cafc0d4f85f29fb8d9afc121" +dependencies = [ + "anstream", + "anstyle", + "clap_lex 0.7.4", + "strsim 0.11.1", +] + +[[package]] +name = "clap_derive" +version = "3.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae6371b8bdc8b7d3959e9cf7b22d4435ef3e79e138688421ec654acf8c81b008" +dependencies = [ + "heck 0.4.1", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "clap_derive" +version = "4.5.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54b755194d6389280185988721fffba69495eed5ee9feeee9a599b53db80318c" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "clap_lex" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" +dependencies = [ + "os_str_bytes", +] + +[[package]] +name = "clap_lex" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" + +[[package]] +name = "clipboard-win" +version = "5.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15efe7a882b08f34e38556b14f2fb3daa98769d06c7f0c1b076dfd0d983bc892" +dependencies = [ + "error-code", +] + +[[package]] +name = "color-backtrace" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "150fd80a270c0671379f388c8204deb6a746bb4eac8a6c03fe2460b2c0127ea0" +dependencies = [ + "backtrace", + "termcolor", +] + +[[package]] +name = "colorchoice" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" + +[[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 = "const-random" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" +dependencies = [ + "const-random-macro", +] + +[[package]] +name = "const-random-macro" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" +dependencies = [ + "getrandom", + "once_cell", + "tiny-keccak", +] + +[[package]] +name = "const_panic" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2459fc9262a1aa204eb4b5764ad4f189caec88aea9634389c0a25f8be7f6265e" + +[[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 = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "core_extensions" +version = "1.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92c71dc07c9721607e7a16108336048ee978c3a8b129294534272e8bac96c0ee" +dependencies = [ + "core_extensions_proc_macros", +] + +[[package]] +name = "core_extensions_proc_macros" +version = "1.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69f3b219d28b6e3b4ac87bc1fc522e0803ab22e055da177bff0068c4150c61a6" + +[[package]] +name = "crossbeam" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-epoch", + "crossbeam-queue", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ba6d68e24814cb8de6bb986db8222d3a027d15872cabc0d18817bc3c0e4471" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-queue" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[package]] +name = "crossterm" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6" +dependencies = [ + "bitflags 2.7.0", + "crossterm_winapi", + "mio", + "parking_lot", + "rustix 0.38.43", + "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 = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "dap" +version = "0.2.0-alpha1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85b03f0c23c75d79d10ae9e6ea850f795db0b11bb9610d55f7751d8a92272db2" +dependencies = [ + "serde", + "serde_json", + "thiserror 1.0.69", +] + +[[package]] +name = "diff" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "dlv-list" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "442039f5147480ba31067cb00ada1adae6892028e40e45fc5de7b7df6dcc1b5f" +dependencies = [ + "const-random", +] + +[[package]] +name = "doc-comment" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" + +[[package]] +name = "dotenvy" +version = "0.15.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" + +[[package]] +name = "dwarf" +version = "0.9.0" +dependencies = [ + "abi_stable", + "ansi-to-tui", + "ansi_term", + "ariadne", + "async-compat", + "async-condvar-fair", + "async-executor", + "async-io 2.4.0", + "backtrace", + "bincode", + "bitcode", + "cfg-if", + "chrono", + "chumsky", + "circular-queue", + "clap 4.5.26", + "color-backtrace", + "core_extensions", + "crossbeam", + "crossterm", + "dap", + "dotenvy", + "env_logger 0.11.6", + "futures-lite 2.5.0", + "heck 0.5.0", + "lazy_static", + "log", + "num-format", + "num_cpus", + "once_cell", + "parking_lot", + "pretty_env_logger", + "puteketeke", + "regex", + "reqwest", + "rustc-hash 2.1.0", + "rustyline", + "sarzak", + "serde", + "serde_json", + "slab", + "smartstring", + "smol 2.0.2", + "snafu 0.8.5", + "test-log", + "threadpool", + "tracing", + "tracing-subscriber", + "tracing-tracy", + "tracy-client-sys", + "unicode-segmentation", + "uuid", + "walkdir", +] + +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "endian-type" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d" + +[[package]] +name = "env_filter" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" +dependencies = [ + "log", + "regex", +] + +[[package]] +name = "env_logger" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580" +dependencies = [ + "humantime", + "is-terminal", + "log", + "regex", + "termcolor", +] + +[[package]] +name = "env_logger" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcaee3d8e3cfc3fd92428d477bc97fc29ec8716d180c0d74c643bb26166660e0" +dependencies = [ + "anstream", + "anstyle", + "env_filter", + "humantime", + "log", +] + +[[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.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" +dependencies = [ + "libc", + "windows-sys 0.59.0", +] + +[[package]] +name = "error-code" +version = "3.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5d9305ccc6942a704f4335694ecd3de2ea531b114ac2d51f5f843750787a92f" + +[[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.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2" +dependencies = [ + "event-listener 5.4.0", + "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.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + +[[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.43", + "windows-sys 0.52.0", +] + +[[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.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[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 = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[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.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cef40d21ae2c515b51041df9ed313ed21e572df340ea58a922a0aefe7e8891a1" +dependencies = [ + "fastrand 2.3.0", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-core", + "futures-io", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generational-arena" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877e94aff08e743b651baaea359664321055749b398adff8740a7399af7796e7" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "generator" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc6bd114ceda131d3b1d665eba35788690ad37f5916457286b32ab6fd3c438dd" +dependencies = [ + "cfg-if", + "libc", + "log", + "rustversion", + "windows", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi", + "wasm-bindgen", +] + +[[package]] +name = "gimli" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + +[[package]] +name = "glam" +version = "0.29.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc46dd3ec48fdd8e693a98d2b8bafae273a2d54c1de02a2a7e3d57d501f39677" + +[[package]] +name = "h2" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http", + "indexmap 2.7.0", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash", +] + +[[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 = "hashbrown" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[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.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "hermit-abi" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" + +[[package]] +name = "home" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "http" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +dependencies = [ + "bytes", + "futures-util", + "http", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "hyper" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "256fb8d4bd6413123cc9d91832d78325c48ff41677595be797d90f42969beae0" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" +dependencies = [ + "futures-util", + "http", + "hyper", + "hyper-util", + "rustls", + "rustls-pki-types", + "tokio", + "tokio-rustls", + "tower-service", + "webpki-roots", +] + +[[package]] +name = "hyper-tls" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +dependencies = [ + "bytes", + "http-body-util", + "hyper", + "hyper-util", + "native-tls", + "tokio", + "tokio-native-tls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "pin-project-lite", + "socket2 0.5.8", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core 0.52.0", +] + +[[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 = "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.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +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.96", +] + +[[package]] +name = "idna" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", +] + +[[package]] +name = "indexmap" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" +dependencies = [ + "equivalent", + "hashbrown 0.15.2", +] + +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "io-lifetimes" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +dependencies = [ + "hermit-abi 0.3.9", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "ipnet" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" + +[[package]] +name = "is-terminal" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "261f68e344040fbd0edea105bef17c66edf46f984ddb1115b775ce31be948f4b" +dependencies = [ + "hermit-abi 0.4.0", + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + +[[package]] +name = "itoa" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" + +[[package]] +name = "js-sys" +version = "0.3.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "libc" +version = "0.2.169" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" + +[[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 = "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.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" + +[[package]] +name = "litemap" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" + +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", + "serde", +] + +[[package]] +name = "log" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" + +[[package]] +name = "loom" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "419e0dc8046cb947daa77eb95ae174acfbddb7673b4151f56d1eed8e93fbfaca" +dependencies = [ + "cfg-if", + "generator", + "scoped-tls", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[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.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ffbe83022cedc1d264172192511ae958937694cd57ce297164951b8b3568394" +dependencies = [ + "adler2", +] + +[[package]] +name = "mio" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" +dependencies = [ + "libc", + "log", + "wasi", + "windows-sys 0.52.0", +] + +[[package]] +name = "names" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bddcd3bf5144b6392de80e04c347cd7fab2508f6df16a85fc496ecd5cec39bc" +dependencies = [ + "clap 3.2.25", + "rand", +] + +[[package]] +name = "native-tls" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" +dependencies = [ + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "nibble_vec" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a5d83df9f36fe23f0c3648c6bbb8b0298bb5f1939c8f2704431371f4b84d43" +dependencies = [ + "smallvec", +] + +[[package]] +name = "nix" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" +dependencies = [ + "bitflags 2.7.0", + "cfg-if", + "cfg_aliases", + "libc", +] + +[[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 = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "num-format" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" +dependencies = [ + "arrayvec", + "itoa", +] + +[[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_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi 0.3.9", + "libc", +] + +[[package]] +name = "nut" +version = "1.0.0" +source = "git+https://github.com/uberFoo/nut#1f89d402a281ab4ea02478d26512e8480146d12a" +dependencies = [ + "anyhow", + "clap 4.5.26", + "diff", + "heck 0.4.1", + "log", + "names", + "quote", + "rand", + "random-string", + "serde", + "serde_json", + "snafu 0.7.5", + "tempfile", + "toml", + "unicode-segmentation", + "uuid", +] + +[[package]] +name = "object" +version = "0.36.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" + +[[package]] +name = "openssl" +version = "0.10.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" +dependencies = [ + "bitflags 2.7.0", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-sys" +version = "0.9.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "ordered_hash_map" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab0e5f22bf6dd04abd854a8874247813a8fa2c8c1260eba6fbb150270ce7c176" +dependencies = [ + "hashbrown 0.13.2", + "serde", +] + +[[package]] +name = "os_str_bytes" +version = "6.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2355d85b9a3786f481747ced0e0ff2ba35213a1f9bd406ed906554d7af805a1" + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "parking" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" + +[[package]] +name = "parking_lot" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets 0.52.6", +] + +[[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 = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pin-project-lite" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "piper" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" +dependencies = [ + "atomic-waker", + "fastrand 2.3.0", + "futures-io", +] + +[[package]] +name = "pkg-config" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" + +[[package]] +name = "polling" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" +dependencies = [ + "autocfg", + "bitflags 1.3.2", + "cfg-if", + "concurrent-queue", + "libc", + "log", + "pin-project-lite", + "windows-sys 0.48.0", +] + +[[package]] +name = "polling" +version = "3.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi 0.4.0", + "pin-project-lite", + "rustix 0.38.43", + "tracing", + "windows-sys 0.59.0", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "pretty_env_logger" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "865724d4dbe39d9f3dd3b52b88d859d66bcb2d6a0acfd5ea68a65fb66d4bdc1c" +dependencies = [ + "env_logger 0.10.2", + "log", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro2" +version = "1.0.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "psm" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "200b9ff220857e53e184257720a14553b2f4aa02577d2ed9842d45d4b9654810" +dependencies = [ + "cc", +] + +[[package]] +name = "puteketeke" +version = "0.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83b1109db5f94e442b059329319e1bc014ee53ce1c1b9a1ad72207e7eb177936" +dependencies = [ + "async-executor", + "async-io 2.4.0", + "crossbeam", + "futures-lite 2.5.0", + "once_cell", + "parking_lot", + "slab", + "threadpool", + "tracing", +] + +[[package]] +name = "quinn" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef" +dependencies = [ + "bytes", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash 2.1.0", + "rustls", + "socket2 0.5.8", + "thiserror 2.0.10", + "tokio", + "tracing", +] + +[[package]] +name = "quinn-proto" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" +dependencies = [ + "bytes", + "getrandom", + "rand", + "ring", + "rustc-hash 2.1.0", + "rustls", + "rustls-pki-types", + "slab", + "thiserror 2.0.10", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c40286217b4ba3a71d644d752e6a0b71f13f1b6a2c5311acfcbe0c2418ed904" +dependencies = [ + "cfg_aliases", + "libc", + "once_cell", + "socket2 0.5.8", + "tracing", + "windows-sys 0.59.0", +] + +[[package]] +name = "quote" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radix_trie" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c069c179fcdc6a2fe24d8d18305cf085fdbd4f922c041943e203685d6a1c58fd" +dependencies = [ + "endian-type", + "nibble_vec", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "random-string" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f70fd13c3024ae3f17381bb5c4d409c6dc9ea6895c08fa2147aba305bea3c4af" +dependencies = [ + "fastrand 1.9.0", +] + +[[package]] +name = "ratatui" +version = "0.20.1" +source = "git+https://github.com/uberFoo/ratatui#8b3c4548f8fe547687f23a89ac99d38a74d8f657" +dependencies = [ + "bitflags 1.3.2", + "cassowary", + "unicode-segmentation", + "unicode-width 0.1.14", +] + +[[package]] +name = "redox_syscall" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" +dependencies = [ + "bitflags 2.7.0", +] + +[[package]] +name = "regex" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.9", + "regex-syntax 0.8.5", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.5", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" + +[[package]] +name = "repr_offset" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb1070755bd29dffc19d0971cab794e607839ba2ef4b69a9e6fbc8733c1b72ea" +dependencies = [ + "tstr", +] + +[[package]] +name = "reqwest" +version = "0.12.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" +dependencies = [ + "base64", + "bytes", + "encoding_rs", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-tls", + "hyper-util", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "quinn", + "rustls", + "rustls-pemfile", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "system-configuration", + "tokio", + "tokio-native-tls", + "tokio-rustls", + "tower", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots", + "windows-registry", +] + +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom", + "libc", + "spin", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc-hash" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7fb8039b3032c191086b10f11f319a6e99e1e82889c5cc6046f515c9db1d497" + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "0.37.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "519165d378b97752ca44bbe15047d5d3409e875f39327546b42ac81d7e18c1b6" +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.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a78891ee6bf2340288408954ac787aa063d8e8817e9f53abb37c695c6d834ef6" +dependencies = [ + "bitflags 2.7.0", + "errno", + "libc", + "linux-raw-sys 0.4.15", + "windows-sys 0.59.0", +] + +[[package]] +name = "rustls" +version = "0.23.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f287924602bf649d949c63dc8ac8b235fa5387d394020705b80c4eb597ce5b8" +dependencies = [ + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pemfile" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2bf47e6ff922db3825eb750c4e2ff784c6ff8fb9e13046ef6a1d1c5401b0b37" +dependencies = [ + "web-time", +] + +[[package]] +name = "rustls-webpki" +version = "0.102.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "rustversion" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" + +[[package]] +name = "rustyline" +version = "15.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ee1e066dc922e513bda599c6ccb5f3bb2b0ea5870a579448f2622993f0a9a2f" +dependencies = [ + "bitflags 2.7.0", + "cfg-if", + "clipboard-win", + "fd-lock", + "home", + "libc", + "log", + "memchr", + "nix", + "radix_trie", + "rustyline-derive", + "unicode-segmentation", + "unicode-width 0.2.0", + "utf8parse", + "windows-sys 0.59.0", +] + +[[package]] +name = "rustyline-derive" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "327e9d075f6df7e25fbf594f1be7ef55cf0d567a6cb5112eeccbbd51ceb48e0d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "sarzak" +version = "2.15.2" +source = "git+https://github.com/uberFoo/sarzak?branch=develop#cd95b35537c795f8fa0536ef509fea5d4c42f7d6" +dependencies = [ + "ansi_term", + "bincode", + "cfg-if", + "clap 4.5.26", + "heck 0.4.1", + "log", + "nut", + "ordered_hash_map", + "rustc-hash 1.1.0", + "serde", + "serde_json", + "snafu 0.7.5", + "tracing", + "uuid", +] + +[[package]] +name = "schannel" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "security-framework" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags 2.7.0", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba" + +[[package]] +name = "serde" +version = "1.0.217" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.217" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "serde_json" +version = "1.0.135" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b0d7ba2887406110130a978386c4e1befb98c674b4fba677954e4db976630d9" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha1_smol" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[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.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd" +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 = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "smartstring" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fb72c633efbaa2dd666986505016c32c3044395ceaf881518399d2f4127ee29" +dependencies = [ + "autocfg", + "serde", + "static_assertions", + "version_check", +] + +[[package]] +name = "smol" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13f2b548cd8447f8de0fdf1c592929f70f4fc7039a05e47404b0d096ec6987a1" +dependencies = [ + "async-channel 1.9.0", + "async-executor", + "async-fs 1.6.0", + "async-io 1.13.0", + "async-lock 2.8.0", + "async-net 1.8.0", + "async-process 1.8.1", + "blocking", + "futures-lite 1.13.0", +] + +[[package]] +name = "smol" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a33bd3e260892199c3ccfc487c88b2da2265080acb316cd920da72fdfd7c599f" +dependencies = [ + "async-channel 2.3.1", + "async-executor", + "async-fs 2.1.2", + "async-io 2.4.0", + "async-lock 3.4.0", + "async-net 2.0.0", + "async-process 2.3.0", + "blocking", + "futures-lite 2.5.0", +] + +[[package]] +name = "snafu" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4de37ad025c587a29e8f3f5605c00f70b98715ef90b9061a815b9e59e9042d6" +dependencies = [ + "doc-comment", + "snafu-derive 0.7.5", +] + +[[package]] +name = "snafu" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "223891c85e2a29c3fe8fb900c1fae5e69c2e42415e3177752e8718475efa5019" +dependencies = [ + "snafu-derive 0.8.5", +] + +[[package]] +name = "snafu-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990079665f075b699031e9c08fd3ab99be5029b96f3b78dc0709e8f77e4efebf" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "snafu-derive" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03c3c6b7927ffe7ecaa769ee0e3994da3b8cafc8f444578982c83ecb161af917" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "socket2" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "socket2" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "stacker" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799c883d55abdb5e98af1a7b3f23b9b6de8ecada0ecac058672d7635eb48ca7b" +dependencies = [ + "cc", + "cfg-if", + "libc", + "psm", + "windows-sys 0.59.0", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[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.96" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5d0adab1ae378d7f53bdebc67a39f1f151407ef230f0ce2883572f5d8985c80" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[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.96", +] + +[[package]] +name = "system-configuration" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +dependencies = [ + "bitflags 2.7.0", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tempfile" +version = "3.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8a559c81686f576e8cd0290cd2a24a2a9ad80c98b3478856500fcbd7acd704" +dependencies = [ + "cfg-if", + "fastrand 2.3.0", + "getrandom", + "once_cell", + "rustix 0.38.43", + "windows-sys 0.59.0", +] + +[[package]] +name = "termcolor" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "test-log" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b319995299c65d522680decf80f2c108d85b861d81dfe340a10d16cee29d9e6" +dependencies = [ + "env_logger 0.11.6", + "test-log-macros", + "tracing-subscriber", +] + +[[package]] +name = "test-log-macros" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5999e24eaa32083191ba4e425deb75cdf25efefabe5aaccb7446dd0d4122a3f5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "test_ffi" +version = "0.1.0" +dependencies = [ + "abi_stable", + "dwarf", + "tracing", +] + +[[package]] +name = "textwrap" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9" + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3ac7f54ca534db81081ef1c1e7f6ea8a3ef428d2fc069097c079443d24124d3" +dependencies = [ + "thiserror-impl 2.0.10", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e9465d30713b56a37ede7185763c3492a91be2f5fa68d958c44e41ab9248beb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "threadpool" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" +dependencies = [ + "num_cpus", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tinyvec" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "pin-project-lite", + "socket2 0.5.8", + "windows-sys 0.52.0", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "toml" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +dependencies = [ + "serde", +] + +[[package]] +name = "tower" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "tracing-core" +version = "0.1.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", +] + +[[package]] +name = "tracing-tracy" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eaa1852afa96e0fe9e44caa53dc0bd2d9d05e0f2611ce09f97f8677af56e4ba" +dependencies = [ + "tracing-core", + "tracing-subscriber", + "tracy-client", +] + +[[package]] +name = "tracy-client" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d90a2c01305b02b76fdd89ac8608bae27e173c829a35f7d76a345ab5d33836db" +dependencies = [ + "loom", + "once_cell", + "tracy-client-sys", +] + +[[package]] +name = "tracy-client-sys" +version = "0.24.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69fff37da548239c3bf9e64a12193d261e8b22b660991c6fd2df057c168f435f" +dependencies = [ + "cc", + "windows-targets 0.52.6", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "tstr" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f8e0294f14baae476d0dd0a2d780b2e24d66e349a9de876f5126777a37bdba7" +dependencies = [ + "tstr_proc_macros", +] + +[[package]] +name = "tstr_proc_macros" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e78122066b0cb818b8afd08f7ed22f7fdbc3e90815035726f0840d0d26c0747a" + +[[package]] +name = "typed-arena" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a" + +[[package]] +name = "unicode-ident" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" + +[[package]] +name = "unicode-segmentation" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" + +[[package]] +name = "unicode-width" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" + +[[package]] +name = "unicode-width" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +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 = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + +[[package]] +name = "uuid" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b913a3b5fe84142e269d63cc62b64319ccaf89b748fc31fe025177f767a756c4" +dependencies = [ + "getrandom", + "serde", + "sha1_smol", +] + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.99" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" +dependencies = [ + "cfg-if", + "once_cell", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.99" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" +dependencies = [ + "bumpalo", + "log", + "proc-macro2", + "quote", + "syn 2.0.96", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.49" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38176d9b44ea84e9184eff0bc34cc167ed044f816accfe5922e54d84cf48eca2" +dependencies = [ + "cfg-if", + "js-sys", + "once_cell", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.99" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.99" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.99" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" + +[[package]] +name = "web-sys" +version = "0.3.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki-roots" +version = "0.26.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d642ff16b7e79272ae451b7322067cdc17cadf68c23264be9d94a32319efe7e" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" +dependencies = [ + "windows-core 0.58.0", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-core" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-result", + "windows-strings", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-implement" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "windows-interface" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "windows-registry" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" +dependencies = [ + "windows-result", + "windows-strings", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-result" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[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 = "yansi" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" + +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", + "synstructure", +] + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "byteorder", + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "zerofrom" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] diff --git a/plugins/test_ffi/Cargo.toml b/plugins/test_ffi/Cargo.toml new file mode 100644 index 00000000..9dc03333 --- /dev/null +++ b/plugins/test_ffi/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "test_ffi" +version = "0.1.0" +edition = "2021" + +[dependencies] +abi_stable = "0.11.3" +dwarf = { path = "../../" } +tracing = "0.1.40" + + +[lib] +name = "test_ffi" +crate-type = ["cdylib"] diff --git a/plugins/test_ffi/ore/lib.ore b/plugins/test_ffi/ore/lib.ore new file mode 100644 index 00000000..426c241f --- /dev/null +++ b/plugins/test_ffi/ore/lib.ore @@ -0,0 +1,40 @@ +use std::dwarf::Plugin; +use std::result::Result; + +struct TestFfi { + #[proxy(plugin = "test_ffi")] + inner: Plugin, +} + +impl TestFfi { + fn new(theme: string) -> Self { + TestFfi { + inner: Plugin::::new(), + } + } + + fn test_bool(self, b: bool) -> bool { + self.inner + .invoke_func("test_ffi", "TestFfi", "test_bool", [b]) + } + + fn test_empty(self) -> () { + self.inner + .invoke_func("test_ffi", "TestFfi", "test_empty", [()]) + } + + fn test_float(self, f: float) -> float { + self.inner + .invoke_func("test_ffi", "TestFfi", "test_float", [f]) + } + + fn test_integer(self, i: int) -> int { + self.inner + .invoke_func("test_ffi", "TestFfi", "test_integer", [i]) + } + + fn test_list(self, l: [int]) -> [int] { + self.inner + .invoke_func("test_ffi", "TestFfi", "test_list", [l]) + } +} diff --git a/plugins/test_ffi/src/lib.rs b/plugins/test_ffi/src/lib.rs new file mode 100644 index 00000000..9ecc0fa2 --- /dev/null +++ b/plugins/test_ffi/src/lib.rs @@ -0,0 +1,154 @@ +use std::fmt::{self, Display}; + +use abi_stable::{ + export_root_module, + external_types::crossbeam_channel::RSender, + prefix_type::PrefixTypeTrait, + sabi_extern_fn, + sabi_trait::prelude::TD_Opaque, + std_types::{RErr, ROk, RResult, RStr, RVec}, +}; +use dwarf::{ + bubba::error::BubbaError, + chacha::ffi_value::FfiValue, + plug_in::{Error, LambdaCall, Plugin, PluginModRef, PluginModule, PluginType, Plugin_TO}, + DwarfFloat, DwarfInteger, +}; + +#[export_root_module] +pub fn instantiate_root_module() -> PluginModRef { + PluginModule { name, new }.leak_into_prefix() +} + +#[sabi_extern_fn] +pub fn name() -> RStr<'static> { + "test_ffi".into() +} + +/// Instantiates the plugin. +#[sabi_extern_fn] +pub fn new(lambda_sender: RSender, args: RVec) -> RResult { + let plugin = test_ffi::instantiate_root_module(); + let plugin = plugin.new(); + let plugin = plugin(lambda_sender, args).unwrap(); + ROk(Plugin_TO::from_value(plugin, TD_Opaque)) +} + +mod test_ffi { + use super::*; + + pub fn instantiate_root_module() -> PluginModRef { + PluginModule { name, new }.leak_into_prefix() + } + + #[sabi_extern_fn] + pub fn name() -> RStr<'static> { + "test_ffi".into() + } + + /// Instantiates the plugin. + #[sabi_extern_fn] + pub fn new( + _lambda_sender: RSender, + _args: RVec, + ) -> RResult { + ROk(Plugin_TO::from_value(TestFfi::default(), TD_Opaque)) + } + + #[derive(Clone, Debug, Default)] + struct TestFfi {} + + impl Display for TestFfi { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "{:?}", self) + } + } + + impl Plugin for TestFfi { + fn name(&self) -> RStr<'_> { + "TestFfi".into() + } + + #[tracing::instrument] + fn invoke_func( + &self, + module: RStr<'_>, + ty: RStr<'_>, + func: RStr<'_>, + args: RVec, + ) -> RResult { + match ty.as_str() { + "TestFfi" => match func.as_str() { + "test_bool" => { + let FfiValue::Boolean(b) = args.get(0).unwrap() else { + return RErr(Error::Plugin("Invalid boolean".into())); + }; + + Ok(FfiValue::Boolean(*b)) + } + "test_empty" => { + let _arg: () = match args + .get(0) + .unwrap() + .try_into() + .map_err(|e: BubbaError| Error::Plugin(e.to_string().into())) + { + Ok(b) => b, + Err(e) => return RErr(e), + }; + + Ok(FfiValue::Empty) + } + "test_float" => { + let arg: DwarfFloat = match args + .first() + .unwrap() + .try_into() + .map_err(|e: BubbaError| Error::Plugin(e.to_string().into())) + { + Ok(b) => b, + Err(e) => return RErr(e), + }; + + Ok(FfiValue::Float(arg)) + } + "test_integer" => { + let FfiValue::Integer(number) = args.get(0).unwrap() else { + return RErr(Error::Plugin("Invalid integer".into())); + }; + + Ok(FfiValue::Integer(*number as i64)) + } + "test_lambda" => { + let FfiValue::Lambda(number) = args.get(0).unwrap() else { + return RErr(Error::Plugin("Invalid lambda".into())); + }; + + Ok(FfiValue::Lambda(*number as usize)) + } + "test_list" => { + let FfiValue::List(ty, list) = args.get(0).unwrap() else { + return RErr(Error::Plugin("Invalid list".into())); + }; + + Ok(FfiValue::List(ty.clone(), list.clone())) + } + func => Err(Error::Plugin(format!("Invalid function: {func}").into())), + }, + ty => Err(Error::Plugin(format!("Invalid type: {ty}").into())), + } + .into() + } + + #[tracing::instrument] + fn invoke_func_mut( + &mut self, + module: RStr<'_>, + ty: RStr<'_>, + func: RStr<'_>, + args: RVec, + ) -> RResult { + Ok(FfiValue::Empty).into() + } + } +} diff --git a/src/bin/dwarfc.rs b/src/bin/dwarfc.rs index 5f6fc1be..88a42b35 100644 --- a/src/bin/dwarfc.rs +++ b/src/bin/dwarfc.rs @@ -79,6 +79,10 @@ fn find_package_dir(start_dir: &Option) -> Result { if !output.status.success() { return Err(vec![dwarf::dwarf::error::DwarfError::Generic { description: "cargo locate-project failed".to_owned(), + location: location!(), + span: 0..0, + file: "locate-project".to_owned(), + program: "locate-project".to_owned(), }]); } @@ -157,6 +161,7 @@ fn main() -> Result<()> { Some((source_code.clone(), &ast)), &dwarf_home, &env::current_dir().unwrap(), + false, &sarzak, ) { Ok(lu_dog) => lu_dog, diff --git a/src/bin/main.rs b/src/bin/main.rs index 415e37d5..bbc9bdbe 100644 --- a/src/bin/main.rs +++ b/src/bin/main.rs @@ -7,43 +7,27 @@ use std::{ thread, }; -#[cfg(feature = "async")] -use futures_lite::future; - -// #[cfg(feature = "async")] -// use dwarf::chacha::interpreter::Executor; - use clap::{ArgAction, Args, Parser}; use dap::{prelude::BasicClient, server::Server}; use dotenvy::dotenv; -// #[cfg(feature = "async")] -// use smol::future; #[cfg(feature = "async")] use tracing_subscriber::{ fmt::{self, format}, EnvFilter, FmtSubscriber, }; -#[cfg(feature = "async")] -use dwarf::ref_to_inner; - use dwarf::{ bubba::{ compiler::{compile, BubbaCompilerErrorReporter}, error::BubbaErrorReporter, value::Value as BubbaValue, - Program, VM, - }, - chacha::{ - dap::DapAdapter, - error::{ChaChaError, ChaChaErrorReporter}, - interpreter::{banner2, initialize_interpreter, start_func, start_repl}, + Program, RefType, VM, }, + chacha::{banner::banner2, dap::DapAdapter}, dwarf::{new_lu_dog, parse_dwarf}, - new_ref, s_read, sarzak::{ObjectStore as SarzakStore, MODEL as SARZAK_MODEL}, - Context, NewRef, RefType, Value, BUILD_TIME, VERSION, + Context, BUILD_TIME, VERSION, }; use reqwest::Url; #[cfg(feature = "tracy")] @@ -80,7 +64,7 @@ fn validate_source(s: &str) -> Result { long_about = r#" This is dwarf. -This file encompasses the interpreter, the compiler, and the virtual machine. +This file encompasses the compiler, and the virtual machine. By default, with no arguments you will be dropped into a REPL. If you pass a source file, it will be compiled and executed, and then return to your shell. @@ -89,7 +73,7 @@ This default behavior may be modified by using any of the options below. "# )] #[command(propagate_version = true)] -/// This is the dwarf interpreter, ChaCha. +/// This is the dwarf VM. /// /// By default, with no arguments you will be dropped into a REPL. If you pass /// a source file, it will be executed and return to your shell. @@ -143,11 +127,6 @@ struct Arguments { /// The number of threads to use for the executor. Defaults to the number of cpus. #[arg(long)] threads: Option, - /// Use Interpreter - /// - /// With this option the interpreter will be used instead of the VM. - #[arg(long, short, action=ArgAction::SetTrue)] - interpreter: Option, /// Verbose output /// /// Print verbose output. @@ -208,7 +187,6 @@ fn main() -> Result<(), Box> { let is_uber = args.uber.is_some() && args.uber.unwrap(); let print_ast = args.ast.is_some() && args.ast.unwrap(); let threads = args.threads.unwrap_or_else(num_cpus::get); - let interpreter = args.interpreter.is_some() && args.interpreter.unwrap(); let trace = args.trace.is_some() && args.trace.unwrap(); if threads == 0 { @@ -268,7 +246,7 @@ fn main() -> Result<(), Box> { None }; - let dwarf_home = env::var("DWARF_HOME") + let dwarf_home: PathBuf = env::var("DWARF_HOME") .unwrap_or_else(|_| { let mut home = env::var("HOME").unwrap(); home.push_str("/.dwarf"); @@ -296,95 +274,34 @@ fn main() -> Result<(), Box> { if let Some((source_code, dwarf_args, file_name, source_meta)) = input { if args.repl.is_some() && args.repl.unwrap() { - let ctx = match get_context( - &file_name, - &source_code, - &dwarf_home, - &sarzak, - is_uber, - print_ast, - ) { - Some(ctx) => ctx, - None => return Ok(()), - }; - let mut ctx = initialize_interpreter(threads, dwarf_home, ctx).map_err(|e| { - println!("Interpreter exited with: {}", e); - e - })?; - ctx.add_args(dwarf_args); - start_repl(&mut ctx, is_uber, threads, trace) - .map_err(|e| { - println!("Interpreter exited with: {}", e); - e - }) - .unwrap(); - } else if interpreter { - let ctx = match get_context( - &file_name, - &source_code, - &dwarf_home, - &sarzak, - is_uber, - print_ast, - ) { - Some(ctx) => ctx, - None => return Ok(()), - }; - let mut ctx = initialize_interpreter(threads, dwarf_home, ctx)?; - ctx.add_args(dwarf_args); - match start_func("main", false, &mut ctx) { - // 🚧 What's a sensible thing to do with this? - #[allow(unused_variables)] - Ok(value) => { - #[cfg(feature = "async")] - { - unsafe { - let value = std::sync::Arc::into_raw(value); - let value = std::ptr::read(value); - let value = ref_to_inner!(value); - - let value = future::block_on(value); - - let value = std::sync::Arc::into_raw(value); - let value = std::ptr::read(value); - let value = ref_to_inner!(value); - - match value { - Value::Error(msg) => { - let msg = *msg; - eprintln!("Interpreter exited with:"); - eprintln!( - "{}", - ChaChaErrorReporter( - &msg.into(), - is_uber, - &source_code, - &file_name - ) - ); - } - _ => println!("{}", value), - } - } - } - - Ok::<(), ChaChaError>(()) - } - Err(e) => { - eprintln!("Interpreter exited with:"); - eprintln!( - "{}", - ChaChaErrorReporter(&e, is_uber, &source_code, &file_name) - ); - Ok(()) - } - } - .unwrap(); + eprintln!("The REPL is currently out of commission."); + // let ctx = match get_context( + // &file_name, + // &source_code, + // &dwarf_home, + // &sarzak, + // is_uber, + // print_ast, + // ) { + // Some(ctx) => ctx, + // None => return Ok(()), + // }; + // let mut ctx = initialize_interpreter(threads, dwarf_home, ctx).map_err(|e| { + // println!("Interpreter exited with: {}", e); + // e + // })?; + // ctx.add_args(dwarf_args); + // start_repl(&mut ctx, is_uber, threads, trace) + // .map_err(|e| { + // println!("Interpreter exited with: {}", e); + // e + // }) + // .unwrap(); } else { // Running in the VM // // We will check $DWARF_HOME/compiled for a file named according to: - // [hash(path_to_source)]_source_name.[ore|tao|*].gp + // [hash(path_to_source)]_source_name.[ore|tao].gp // If we find it, we will compare timestamps, and recompile if the // source is newer than the gp file. Otherwise we'll just load the // file and go. @@ -412,15 +329,15 @@ fn main() -> Result<(), Box> { // Compare timestamps of source and gp file. let source_meta = source_meta.unwrap(); let gp_meta = fs::metadata(path).map_err(|e| { - eprintln!("Unable to read gp file: {}", e); + eprintln!("Unable to read gp file metadata: {}", e); e })?; let source_time = source_meta.modified().map_err(|e| { - eprintln!("Unable to read source file: {}", e); + eprintln!("Unable to read source file modified time: {}", e); e })?; let gp_time = gp_meta.modified().map_err(|e| { - eprintln!("Unable to read gp file: {}", e); + eprintln!("Unable to read gp file modified time: {}", e); e })?; @@ -433,6 +350,7 @@ fn main() -> Result<(), Box> { is_uber, print_ast, path, + bless, )? } else { let bin_file = fs::File::open(path).map_err(|e| { @@ -457,6 +375,7 @@ fn main() -> Result<(), Box> { is_uber, print_ast, path, + bless, )? } else { program @@ -471,6 +390,7 @@ fn main() -> Result<(), Box> { is_uber, print_ast, path, + bless, )? }; @@ -486,7 +406,7 @@ fn main() -> Result<(), Box> { // Get args and call the VM. let args: Vec> = dwarf_args .into_iter() - .map(|a| new_ref!(BubbaValue, a.into())) + .map(|a| std::sync::Arc::new(std::sync::RwLock::new(a.into()))) .collect(); #[cfg(feature = "async")] @@ -505,7 +425,7 @@ fn main() -> Result<(), Box> { } }; - let value = s_read!(value); + let value = value.read().unwrap(); match &*value { BubbaValue::Error(msg) => { eprintln!( @@ -559,13 +479,14 @@ fn main() -> Result<(), Box> { // } } } else { - let ctx = Context::default(); - let mut ctx = initialize_interpreter(2, dwarf_home, ctx)?; - - start_repl(&mut ctx, is_uber, threads, trace).map_err(|e| { - println!("Interpreter exited with: {}", e); - e - })?; + eprintln!("No source file specified."); + // let ctx = Context::default(); + // let mut ctx = initialize_interpreter(2, dwarf_home, ctx)?; + + // start_repl(&mut ctx, is_uber, threads, trace).map_err(|e| { + // println!("Interpreter exited with: {}", e); + // e + // })?; } Ok(()) @@ -578,6 +499,7 @@ fn get_context( sarzak: &SarzakStore, is_uber: bool, print_ast: bool, + silent: bool, ) -> Option { let ast = match parse_dwarf(&file_name, &source_code) { Ok(ast) => ast, @@ -595,9 +517,10 @@ fn get_context( Some((source_code.clone(), &ast)), &dwarf_home, &env::current_dir().unwrap(), + silent, &sarzak, ) { - Ok(lu_dog) => Some(lu_dog), + Ok(context) => Some(context), Err(errors) => { for err in errors { eprintln!("{}", dwarf::dwarf::error::DwarfErrorReporter(&err, is_uber)); @@ -615,6 +538,7 @@ fn compile_program( is_uber: bool, print_ast: bool, path: &Path, + silent: bool, ) -> Result> { let ctx = match get_context( &file_name, @@ -623,13 +547,14 @@ fn compile_program( &sarzak, is_uber, print_ast, + silent, ) { Some(ctx) => ctx, None => { std::process::exit(1); } }; - match compile(&ctx) { + match compile(&ctx, true) { Ok(program) => { // Write the compiled program to disk. let bin_file = fs::File::create(path)?; diff --git a/src/bubba.rs b/src/bubba.rs index d36749f3..e267e327 100644 --- a/src/bubba.rs +++ b/src/bubba.rs @@ -20,3 +20,50 @@ pub(crate) const STRING: &str = "STRING"; pub(crate) const STRING_ARRAY: &str = "STRING_ARRAY"; pub(crate) const UNKNOWN: &str = "UNKNOWN"; pub(crate) const UUID: &str = "UUID"; + +pub type RefType = std::sync::Arc>; + +impl NewRef for RefType { + fn new_ref(value: T) -> RefType { + std::sync::Arc::new(std::sync::RwLock::new(value)) + } +} + +macro_rules! ref_read { + ($arg:expr) => { + $arg.read().unwrap() + }; +} + +macro_rules! ref_try_read { + ($arg:expr) => { + $arg.try_read() + }; +} + +macro_rules! ref_write { + ($arg:expr) => { + $arg.write().unwrap() + }; +} + +macro_rules! ref_to_inner { + ($arg:expr) => { + $arg.into_inner().unwrap() + }; +} + +macro_rules! new_ref_macro { + ($type:ty, $value:expr) => { + as crate::bubba::NewRef<$type>>::new_ref($value) + }; +} + +pub trait NewRef { + fn new_ref(value: T) -> RefType; +} + +pub(crate) use new_ref_macro as new_ref; +pub(crate) use ref_read as s_read; +pub(crate) use ref_try_read as s_try_read; +pub(crate) use ref_write as s_write; diff --git a/src/bubba/compiler.rs b/src/bubba/compiler.rs index dc296c45..0b270b18 100644 --- a/src/bubba/compiler.rs +++ b/src/bubba/compiler.rs @@ -23,15 +23,14 @@ use crate::{ value::Value, BOOL, CHAR, EMPTY, FLOAT, INTEGER, MAP, RANGE, STRING, STRING_ARRAY, UNKNOWN, UUID, }, - keywords::{OPTION, OPTION_TYPE, RESULT, RESULT_TYPE}, + keywords::{OPTION_TYPE, RESULT_TYPE}, lu_dog::{ BodyEnum, Expression, ExpressionEnum, Function, Map, ObjectStore as LuDogStore, Statement, StatementEnum, ValueType, ValueTypeEnum, }, s_read, s_write, sarzak::{ObjectStore as SarzakStore, Ty}, - Context as ExtruderContext, RefType, Span, BUILD_TIME, ERR_CLR, MERLIN, OTHER_CLR, POP_CLR, - SARZAK, VERSION, + Context as ExtruderContext, RefType, Span, BUILD_TIME, ERR_CLR, OTHER_CLR, POP_CLR, VERSION, }; mod error; @@ -331,8 +330,10 @@ impl<'a, 'b> Context<'a, 'b> { } } -pub fn compile(context: &ExtruderContext) -> Result { - println!("Compiling"); +pub fn compile(context: &ExtruderContext, silent: bool) -> Result { + if !silent { + println!("Compiling"); + } let mut program = Program::new(VERSION.to_owned(), BUILD_TIME.to_owned()); program.set_source(context.source()); @@ -564,8 +565,8 @@ fn compile_function(func: &RefType, context: &mut Context) -> Result, context: &mut Context) -> Result { let external = lu_dog.exhume_external_implementation(block_id).unwrap(); let external = s_read!(external); - let model_name = external.x_model.clone(); - let model_name = if model_name == MERLIN { - SARZAK.to_owned() - } else { - model_name - }; - let models = &context.extruder_context.models; - let model = models.get(&model_name).unwrap(); + // let model_name = external.x_model.clone(); + // let model_name = if model_name == MERLIN { + // SARZAK.to_owned() + // } else { + // model_name + // }; + // let models = &context.extruder_context.models; + // let model = models.get(&model_name).unwrap(); let func_name = external.function.clone(); let object_name = &external.object; let object_name = object_name.to_upper_camel_case(); - dbg!(model, func_name, object_name); + dbg!(func_name, object_name); + thonk.insert_instruction( + Instruction::Push("External Implementation Not Working".into()), + location!(), + ); + thonk.insert_instruction(Instruction::Push((0..0).into()), location!()); + + thonk.insert_instruction(Instruction::HaltAndCatchFire, location!()); } }; @@ -784,7 +792,6 @@ fn get_span(expression: &RefType, lu_dog: &LuDogStore) -> Span { let read = s_read!(span); read.start as usize..read.end as usize } else { - dbg!(&expression, &value); 0..0 }; @@ -800,10 +807,9 @@ mod test { use test_log::test; use crate::{ - bubba::{error::Error, VM}, - dwarf::{new_lu_dog, parse_dwarf}, + bubba::{error::Error, s_read as ref_read, RefType, VM}, + dwarf::{error::DwarfErrorReporter, new_lu_dog, parse_dwarf}, sarzak::MODEL as SARZAK_MODEL, - RefType, }; pub(super) fn get_dwarf_home() -> PathBuf { @@ -822,7 +828,7 @@ mod test { pub(super) fn run_vm(program: &Program) -> Result, Error> { #[cfg(feature = "async")] - let mut vm = VM::new(program, &[], &get_dwarf_home(), THREADS, false); + let mut vm = VM::new(program, &[], &get_dwarf_home(), THREADS, true); #[cfg(not(feature = "async"))] let mut vm = VM::new(program, &[], &get_dwarf_home()); vm.invoke("main", &[]) @@ -860,17 +866,18 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); assert_eq!(program.get_thonk_card(), 1); assert_eq!(program.get_thonk("main").unwrap().instruction_card(), 8); - assert_eq!(&*s_read!(run_vm(&program).unwrap()), &Value::Integer(5)); + assert_eq!(&*ref_read!(run_vm(&program).unwrap()), &Value::Integer(5)); } #[test] @@ -886,18 +893,22 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); assert_eq!(program.get_thonk_card(), 1); assert_eq!(program.get_thonk("main").unwrap().instruction_card(), 2); - assert_eq!(&*s_read!(run_vm(&program).unwrap()), &Value::Boolean(true)); + assert_eq!( + &*ref_read!(run_vm(&program).unwrap()), + &Value::Boolean(true) + ); } #[test] @@ -913,18 +924,22 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); assert_eq!(program.get_thonk_card(), 1); assert_eq!(program.get_thonk("main").unwrap().instruction_card(), 2); - assert_eq!(&*s_read!(run_vm(&program).unwrap()), &Value::Boolean(false)); + assert_eq!( + &*ref_read!(run_vm(&program).unwrap()), + &Value::Boolean(false) + ); } #[test] @@ -951,11 +966,12 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); assert_eq!(program.get_thonk_card(), 2); @@ -964,15 +980,16 @@ mod test { assert_eq!(program.get_thonk("fib").unwrap().instruction_card(), 30); - assert_eq!(&*s_read!(run_vm(&program).unwrap()), &Value::Integer(55)); + assert_eq!(&*ref_read!(run_vm(&program).unwrap()), &Value::Integer(55)); } #[test] - fn use_std_option() { + fn use_std_option() -> Result<(), String> { setup_logging(); let sarzak = SarzakStore::from_bincode(SARZAK_MODEL).unwrap(); let ore = " use std::option::Option; + fn main() -> bool { let foo = Option::Some(1); chacha::assert(foo.is_some()); @@ -990,10 +1007,16 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) - .unwrap(); - let program = compile(&ctx).unwrap(); + .map_err(|e| { + for e in e { + eprintln!("{}", DwarfErrorReporter(&e, true)) + } + "Test failed." + })?; + let program = compile(&ctx, true).unwrap(); println!("{program}"); // assert_eq!(program.get_thonk_card(), 5); @@ -1001,7 +1024,9 @@ mod test { let run = run_vm(&program); eprintln!("{:?}", run); assert!(run.is_ok()); - assert_eq!(&*s_read!(run.unwrap()), &Value::Boolean(true)); + assert_eq!(&*ref_read!(run.unwrap()), &Value::Boolean(true)); + + Ok(()) } #[test] @@ -1020,18 +1045,19 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); - assert_eq!(program.get_thonk_card(), 12); + assert_eq!(program.get_thonk_card(), 14); // assert_eq!(program.get_instruction_card(), 393); let run = run_vm(&program); eprintln!("{:?}", run); assert!(run.is_ok()); - assert_eq!(&*s_read!(run.unwrap()), &Value::Boolean(true)); + assert_eq!(&*ref_read!(run.unwrap()), &Value::Boolean(true)); } // #[test] @@ -1117,10 +1143,11 @@ async fn main() -> Future<()> { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); assert_eq!(program.get_thonk_card(), 13); @@ -1158,10 +1185,11 @@ async fn main() -> Future<()> { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); assert_eq!(program.get_thonk_card(), 2); @@ -1169,7 +1197,7 @@ async fn main() -> Future<()> { assert_eq!(program.get_thonk("foo").unwrap().instruction_card(), 12); let run = run_vm(&program); assert!(run.is_ok()); - assert_eq!(&*s_read!(run.unwrap()), &Value::Integer(6)); + assert_eq!(&*ref_read!(run.unwrap()), &Value::Integer(6)); } #[test] @@ -1196,15 +1224,16 @@ async fn main() -> Future<()> { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); assert_eq!(program.get_thonk_card(), 1); let run = run_vm(&program); assert!(run.is_ok()); - assert_eq!(&*s_read!(run.unwrap()), &Value::Integer(0)); + assert_eq!(&*ref_read!(run.unwrap()), &Value::Integer(0)); } } diff --git a/src/bubba/compiler/expression/a_weight.rs b/src/bubba/compiler/expression/a_weight.rs index 9f06e4ab..c281424c 100644 --- a/src/bubba/compiler/expression/a_weight.rs +++ b/src/bubba/compiler/expression/a_weight.rs @@ -1,4 +1,4 @@ -use snafu::{location, Location}; +use snafu::location; use crate::{ bubba::{ diff --git a/src/bubba/compiler/expression/block.rs b/src/bubba/compiler/expression/block.rs index 19999b83..61b8f9c7 100644 --- a/src/bubba/compiler/expression/block.rs +++ b/src/bubba/compiler/expression/block.rs @@ -1,5 +1,11 @@ +use snafu::location; +use uuid::Uuid; + use crate::{ - bubba::compiler::{compile_statement, CThonk, Context, Result, EMPTY}, + bubba::{ + compiler::{compile_statement, CThonk, Context, Result, EMPTY}, + Instruction, + }, lu_dog::ValueType, s_read, SarzakStorePtr, POP_CLR, }; @@ -17,26 +23,75 @@ pub(in crate::bubba::compiler) fn compile( let lu_dog = s_read!(lu_dog); let block = lu_dog.exhume_block(block).unwrap(); - let stmts = s_read!(block).r18_statement(&lu_dog); - if !stmts.is_empty() { - context.push_scope(); - let mut next = s_read!(block).r71_statement(&lu_dog)[0].clone(); - let mut ty; - - loop { - ty = compile_statement(&next, thonk, context)?; - // compile_statement(&next, thonk, context)?; - - if let Some(ref id) = s_read!(next.clone()).next { - next = lu_dog.exhume_statement(id).unwrap(); - } else { - break; + let block = s_read!(block); + let a_sink = block.a_sink; + if a_sink { + let name = format!("{}", Uuid::new_v4()); + let mut inner_thonk = CThonk::new(name.clone()); + + context.insert_lambda(name.clone(), 0); + let stmts = block.r18_statement(&lu_dog); + if !stmts.is_empty() { + context.push_scope(); + let mut next = block.r71_statement(&lu_dog)[0].clone(); + let mut ty; + + loop { + ty = compile_statement(&next, &mut inner_thonk, context)?; + // compile_statement(&next, thonk, context)?; + + if let Some(ref id) = s_read!(next.clone()).next { + next = lu_dog.exhume_statement(id).unwrap(); + } else { + break; + } } - } - context.pop_scope(); + inner_thonk.insert_instruction(Instruction::Return, location!()); + + context.pop_scope(); + context.get_program().add_thonk(inner_thonk.into()); + + thonk.insert_instruction(Instruction::MakeLambdaPointer(name, 0), location!()); + thonk.insert_instruction(Instruction::CreateTask(0), location!()); - Ok(ty) + Ok(ty) + } else { + thonk.insert_instruction( + Instruction::Push("Empty function body.".into()), + location!(), + ); + thonk.insert_instruction(Instruction::Push((0..0).into()), location!()); + thonk.insert_instruction(Instruction::HaltAndCatchFire, location!()); + Ok(Some(empty)) + } } else { - Ok(Some(empty)) + let stmts = block.r18_statement(&lu_dog); + if !stmts.is_empty() { + context.push_scope(); + let mut next = block.r71_statement(&lu_dog)[0].clone(); + let mut ty; + + loop { + ty = compile_statement(&next, thonk, context)?; + // compile_statement(&next, thonk, context)?; + + if let Some(ref id) = s_read!(next.clone()).next { + next = lu_dog.exhume_statement(id).unwrap(); + } else { + break; + } + } + context.pop_scope(); + + Ok(ty) + } else { + thonk.insert_instruction( + Instruction::Push("Empty function body.".into()), + location!(), + ); + thonk.insert_instruction(Instruction::Push((0..0).into()), location!()); + thonk.insert_instruction(Instruction::HaltAndCatchFire, location!()); + Ok(Some(empty)) + } } } diff --git a/src/bubba/compiler/expression/call.rs b/src/bubba/compiler/expression/call.rs index 824866a4..e7d42a5c 100644 --- a/src/bubba/compiler/expression/call.rs +++ b/src/bubba/compiler/expression/call.rs @@ -1,4 +1,4 @@ -use snafu::{location, Location}; +use snafu::location; use uuid::Uuid; #[cfg(feature = "async")] @@ -14,7 +14,7 @@ use crate::{ value::Value, BOOL, STRING_ARRAY, UUID, }, - chacha::interpreter::{ModelContext, PrintableValueType}, + chacha::{models::ModelContext, pvt::PrintableValueType}, keywords::{ ARGS, ASSERT, ASSERT_EQ, CHACHA, FORMAT, FQ_UUID_TYPE, GET, INSERT, NEW, PLUGIN, REPLACE, TYPEOF, @@ -115,7 +115,6 @@ pub(in crate::bubba::compiler) fn compile_lambda( // let mut name = "(".to_owned(); let name = format!("{}", Uuid::new_v4()); - let mut thonk = CThonk::new(name.clone()); context.insert_lambda(name.clone(), params.len()); @@ -160,8 +159,6 @@ pub(in crate::bubba::compiler) fn compile_lambda( if let Some(ref id) = s_read!(next.clone()).next { next = lu_dog.exhume_statement(id).unwrap(); - // } else if thonk.returned { - // break; } else { if !thonk.returned { thonk.insert_instruction( @@ -384,6 +381,7 @@ fn compile_method_call( } meth => { dbg!(&ty, &meth, &args); + panic!(); } }, _ => {} @@ -461,7 +459,7 @@ fn compile_static_method_call( location!(), ); thonk.insert_instruction_with_span( - Instruction::Push(format!("assertion failed: {span:?}").into()), + Instruction::Push(format!("assertion failed: {span:?}\n").into()), span.clone(), location!(), ); @@ -493,7 +491,7 @@ fn compile_static_method_call( location!(), ); thonk.insert_instruction_with_span( - Instruction::Push(format!("assertion failed: {span:?}").into()), + Instruction::Push(format!("assertion failed: {span:?}\n").into()), span.clone(), location!(), ); @@ -623,8 +621,11 @@ fn compile_static_method_call( }; let func1 = lu_dog.exhume_function(&func1).unwrap(); - let body = s_read!(func1).r19_body(&lu_dog)[0].clone(); + let func1 = s_read!(func1); + let body = func1.r19_body(&lu_dog)[0].clone(); let a_sink = s_read!(body).a_sink; + let ret_ty = func1.r10_value_type(&lu_dog)[0].clone(); + let ret_ty = s_read!(ret_ty).clone(); let func_name = format!("{ty}::{func}"); // These instructions will be patched by the VM. @@ -644,7 +645,7 @@ fn compile_static_method_call( thonk.insert_instruction(Instruction::Call(args.len()), location!()); } - Ok(None) + Ok(Some(ret_ty)) } } } @@ -657,14 +658,15 @@ mod test { use test_log::test; use crate::{ - bubba::compiler::{ - test::{get_dwarf_home, run_vm, run_vm_with_args, setup_logging}, - *, + bubba::{ + compiler::{ + test::{get_dwarf_home, run_vm, run_vm_with_args, setup_logging}, + *, + }, + new_ref, s_read as ref_read, RefType, }, dwarf::{new_lu_dog, parse_dwarf}, - new_ref, sarzak::MODEL as SARZAK_MODEL, - NewRef, }; #[test] @@ -678,10 +680,11 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); assert_eq!(program.get_thonk_card(), 1); assert_eq!(program.get_thonk("main").unwrap().instruction_card(), 2); @@ -702,10 +705,11 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); assert_eq!(program.get_thonk_card(), 3); assert_eq!(program.get_thonk("main").unwrap().instruction_card(), 2); @@ -733,10 +737,11 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); @@ -765,10 +770,11 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); @@ -776,7 +782,7 @@ mod test { assert_eq!(program.get_thonk("main").unwrap().instruction_card(), 7); assert_eq!(program.get_thonk("foo").unwrap().instruction_card(), 6); - assert_eq!(&*s_read!(run_vm(&program).unwrap()), &Value::Integer(6)); + assert_eq!(&*ref_read!(run_vm(&program).unwrap()), &Value::Integer(6)); } #[test] @@ -800,10 +806,11 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); @@ -811,7 +818,7 @@ mod test { assert_eq!(program.get_thonk("main").unwrap().instruction_card(), 7); assert_eq!(program.get_thonk("foo").unwrap().instruction_card(), 18); - assert_eq!(&*s_read!(run_vm(&program).unwrap()), &Value::Integer(12)); + assert_eq!(&*ref_read!(run_vm(&program).unwrap()), &Value::Integer(12)); } #[test] @@ -834,10 +841,11 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); @@ -845,7 +853,7 @@ mod test { assert_eq!(program.get_thonk("main").unwrap().instruction_card(), 7); assert_eq!(program.get_thonk("foo").unwrap().instruction_card(), 29); - assert_eq!(&*s_read!(run_vm(&program).unwrap()), &Value::Empty); + assert_eq!(&*ref_read!(run_vm(&program).unwrap()), &Value::Empty); } #[test] @@ -865,17 +873,18 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); assert_eq!(program.get_thonk_card(), 1); assert_eq!(program.get_thonk("main").unwrap().instruction_card(), 21); - assert_eq!(&*s_read!(run_vm(&program).unwrap()), &"test 1 2 3".into()); + assert_eq!(&*ref_read!(run_vm(&program).unwrap()), &"test 1 2 3".into()); } #[test] @@ -892,17 +901,18 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); assert_eq!(program.get_thonk_card(), 1); assert_eq!(program.get_thonk("main").unwrap().instruction_card(), 11); - assert_eq!(&*s_read!(run_vm(&program).unwrap()), &Value::Empty); + assert_eq!(&*ref_read!(run_vm(&program).unwrap()), &Value::Empty); } #[test] @@ -932,17 +942,18 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); assert_eq!(program.get_thonk_card(), 3); assert_eq!(program.get_thonk("main").unwrap().instruction_card(), 9); - assert_eq!(&*s_read!(run_vm(&program).unwrap()), &42.into()); + assert_eq!(&*ref_read!(run_vm(&program).unwrap()), &42.into()); } #[test] @@ -962,10 +973,11 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); assert_eq!(program.get_thonk_card(), 1); @@ -1001,17 +1013,18 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); assert_eq!(program.get_thonk_card(), 3); assert_eq!(program.get_instruction_card(), 22); - assert_eq!(&*s_read!(run_vm(&program).unwrap()), &45.into()); + assert_eq!(&*ref_read!(run_vm(&program).unwrap()), &45.into()); } #[test] @@ -1035,17 +1048,18 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); assert_eq!(program.get_thonk_card(), 3); assert_eq!(program.get_instruction_card(), 24); - assert_eq!(&*s_read!(run_vm(&program).unwrap()), &Value::Empty); + assert_eq!(&*ref_read!(run_vm(&program).unwrap()), &Value::Empty); } // #[test] @@ -1071,17 +1085,18 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); assert_eq!(program.get_thonk_card(), 5); assert_eq!(program.get_instruction_card(), 34); - assert_eq!(&*s_read!(run_vm(&program).unwrap()), &46.into()); + assert_eq!(&*ref_read!(run_vm(&program).unwrap()), &46.into()); } // #[test] @@ -1123,17 +1138,18 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); assert_eq!(program.get_thonk_card(), 4); // assert_eq!(program.get_instruction_count(), 39); - assert_eq!(&*s_read!(run_vm(&program).unwrap()), &true.into()); + assert_eq!(&*ref_read!(run_vm(&program).unwrap()), &true.into()); } #[test] @@ -1152,10 +1168,11 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); assert_eq!(program.get_thonk_card(), 1); @@ -1163,7 +1180,7 @@ mod test { assert_eq!(program.get_thonk("main").unwrap().instruction_card(), 8); assert_eq!( - &*s_read!(run_vm(&program).unwrap()), + &*ref_read!(run_vm(&program).unwrap()), &"Hello, universe!".into() ); } diff --git a/src/bubba/compiler/expression/field.rs b/src/bubba/compiler/expression/field.rs index 02068cb4..af07bd02 100644 --- a/src/bubba/compiler/expression/field.rs +++ b/src/bubba/compiler/expression/field.rs @@ -1,4 +1,4 @@ -use snafu::{location, Location}; +use snafu::location; use crate::{ bubba::{ @@ -98,9 +98,12 @@ mod test { use std::env; use crate::{ - bubba::compiler::{ - test::{get_dwarf_home, run_vm, setup_logging}, - *, + bubba::{ + compiler::{ + test::{get_dwarf_home, run_vm, setup_logging}, + *, + }, + s_read as ref_read, }, dwarf::{new_lu_dog, parse_dwarf}, sarzak::MODEL as SARZAK_MODEL, @@ -123,15 +126,16 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); let result = run_vm(&program); assert!(result.is_ok()); - assert_eq!(*s_read!(result.unwrap()), 42.into()); + assert_eq!(*ref_read!(result.unwrap()), 42.into()); } } diff --git a/src/bubba/compiler/expression/for_loop.rs b/src/bubba/compiler/expression/for_loop.rs index 51c6e1e7..c638671a 100644 --- a/src/bubba/compiler/expression/for_loop.rs +++ b/src/bubba/compiler/expression/for_loop.rs @@ -1,4 +1,4 @@ -use snafu::{location, Location}; +use snafu::location; use crate::{ bubba::{ @@ -7,6 +7,7 @@ use crate::{ STRING, }, instr::Instruction, + s_read as ref_read, value::Value, }, lu_dog::{ValueType, ValueTypeEnum}, @@ -108,7 +109,7 @@ pub(in crate::bubba::compiler) fn compile( } ValueTypeEnum::Ty(ref ty) => { let ty = sarzak.exhume_ty(ty).unwrap(); - let ty = s_read!(ty); + let ty = ref_read!(ty); match &*ty { Ty::Integer(_) => { @@ -270,7 +271,7 @@ pub(in crate::bubba::compiler) fn compile( } ValueTypeEnum::Ty(ref ty) => { let ty = sarzak.exhume_ty(ty).unwrap(); - let ty = s_read!(ty); + let ty = ref_read!(ty); match &*ty { Ty::ZString(_) => { let string = context.get_type(STRING).unwrap().clone(); @@ -380,7 +381,7 @@ pub(in crate::bubba::compiler) fn compile( } ValueTypeEnum::Ty(ref ty) => { let ty = sarzak.exhume_ty(ty).unwrap(); - let ty = s_read!(ty); + let ty = ref_read!(ty); match &*ty { Ty::ZString(_) => { thonk.insert_instruction_with_span( @@ -452,9 +453,12 @@ mod test { use test_log::test; use crate::{ - bubba::compiler::{ - test::{get_dwarf_home, run_vm, setup_logging}, - *, + bubba::{ + compiler::{ + test::{get_dwarf_home, run_vm, setup_logging}, + *, + }, + s_read as ref_read, }, dwarf::{new_lu_dog, parse_dwarf}, sarzak::MODEL as SARZAK_MODEL, @@ -477,18 +481,19 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); assert_eq!(program.get_thonk_card(), 1); assert_eq!(program.get_thonk("main").unwrap().instruction_card(), 23); - assert_eq!(&*s_read!(run_vm(&program).unwrap()), &Value::Integer(45)); + assert_eq!(&*ref_read!(run_vm(&program).unwrap()), &Value::Integer(45)); } #[test] @@ -508,18 +513,19 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); assert_eq!(program.get_thonk_card(), 1); assert_eq!(program.get_thonk("main").unwrap().instruction_card(), 23); - assert_eq!(&*s_read!(run_vm(&program).unwrap()), &Value::Integer(17)); + assert_eq!(&*ref_read!(run_vm(&program).unwrap()), &Value::Integer(17)); } #[test] @@ -541,18 +547,19 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); assert_eq!(program.get_thonk_card(), 1); assert_eq!(program.get_thonk("main").unwrap().instruction_card(), 40); - assert_eq!(&*s_read!(run_vm(&program).unwrap()), &Value::Integer(900)); + assert_eq!(&*ref_read!(run_vm(&program).unwrap()), &Value::Integer(900)); } #[test] @@ -573,18 +580,19 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); assert_eq!(program.get_thonk_card(), 1); assert_eq!(program.get_thonk("main").unwrap().instruction_card(), 25); - assert_eq!(&*s_read!(run_vm(&program).unwrap()), &Value::Integer(45)); + assert_eq!(&*ref_read!(run_vm(&program).unwrap()), &Value::Integer(45)); } #[test] @@ -608,18 +616,19 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); assert_eq!(program.get_thonk_card(), 2); assert_eq!(program.get_thonk("main").unwrap().instruction_card(), 7); - assert_eq!(&*s_read!(run_vm(&program).unwrap()), &Value::Integer(45)); + assert_eq!(&*ref_read!(run_vm(&program).unwrap()), &Value::Integer(45)); } #[test] @@ -640,18 +649,19 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); assert_eq!(program.get_thonk_card(), 1); assert_eq!(program.get_thonk("main").unwrap().instruction_card(), 37); - assert_eq!(&*s_read!(run_vm(&program).unwrap()), &Value::Integer(15)); + assert_eq!(&*ref_read!(run_vm(&program).unwrap()), &Value::Integer(15)); } #[test] @@ -672,11 +682,12 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); @@ -684,7 +695,7 @@ mod test { assert_eq!(program.get_thonk("main").unwrap().instruction_card(), 36); assert_eq!( - &*s_read!(run_vm(&program).unwrap()), + &*ref_read!(run_vm(&program).unwrap()), &Value::String("uber".to_owned()) ); } diff --git a/src/bubba/compiler/expression/halt_and_catch_fire.rs b/src/bubba/compiler/expression/halt_and_catch_fire.rs index 7133e4d7..63dfa435 100644 --- a/src/bubba/compiler/expression/halt_and_catch_fire.rs +++ b/src/bubba/compiler/expression/halt_and_catch_fire.rs @@ -1,4 +1,4 @@ -use snafu::{location, Location}; +use snafu::location; use crate::{ bubba::{ diff --git a/src/bubba/compiler/expression/if_expr.rs b/src/bubba/compiler/expression/if_expr.rs index 33e997e4..e885723f 100644 --- a/src/bubba/compiler/expression/if_expr.rs +++ b/src/bubba/compiler/expression/if_expr.rs @@ -1,4 +1,4 @@ -use snafu::{location, Location}; +use snafu::location; use crate::{ bubba::{ @@ -82,9 +82,12 @@ mod test { use std::env; use crate::{ - bubba::compiler::{ - test::{get_dwarf_home, run_vm, setup_logging}, - *, + bubba::{ + compiler::{ + test::{get_dwarf_home, run_vm, setup_logging}, + *, + }, + s_read as ref_read, }, dwarf::{new_lu_dog, parse_dwarf}, sarzak::MODEL as SARZAK_MODEL, @@ -107,11 +110,12 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); @@ -119,7 +123,7 @@ mod test { assert_eq!(program.get_thonk("main").unwrap().instruction_card(), 8); - assert_eq!(&*s_read!(run_vm(&program).unwrap()), &Value::Integer(1)); + assert_eq!(&*ref_read!(run_vm(&program).unwrap()), &Value::Integer(1)); } #[test] @@ -139,11 +143,12 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); @@ -151,7 +156,7 @@ mod test { assert_eq!(program.get_thonk("main").unwrap().instruction_card(), 8); - assert_eq!(&*s_read!(run_vm(&program).unwrap()), &Value::Integer(2)); + assert_eq!(&*ref_read!(run_vm(&program).unwrap()), &Value::Integer(2)); } #[test] @@ -189,17 +194,18 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); assert_eq!(program.get_thonk_card(), 1); assert_eq!(program.get_thonk("main").unwrap().instruction_card(), 72); - assert_eq!(&*s_read!(run_vm(&program).unwrap()), &Value::Integer(1)); + assert_eq!(&*ref_read!(run_vm(&program).unwrap()), &Value::Integer(1)); } } diff --git a/src/bubba/compiler/expression/index.rs b/src/bubba/compiler/expression/index.rs index d302c10c..e5578c5d 100644 --- a/src/bubba/compiler/expression/index.rs +++ b/src/bubba/compiler/expression/index.rs @@ -4,8 +4,9 @@ use crate::{ bubba::{ compiler::{compile_expression, BubbaCompilerError, CThonk, Context, Result}, instr::Instruction, + s_read as ref_read, }, - chacha::interpreter::{ModelContext, PrintableValueType}, + chacha::{models::ModelContext, pvt::PrintableValueType}, lu_dog::{ValueType, ValueTypeEnum}, new_ref, s_read, sarzak::Ty, @@ -39,7 +40,7 @@ pub(in crate::bubba::compiler) fn compile( Some(v_ty) => match v_ty.subtype { ValueTypeEnum::Ty(ref ty) => { let ty = sarzak.exhume_ty(ty).unwrap(); - let ty = s_read!(ty); + let ty = ref_read!(ty); match &*ty { Ty::Integer(_) => { thonk.insert_instruction_with_span( @@ -94,9 +95,12 @@ mod test { use std::env; use crate::{ - bubba::compiler::{ - test::{get_dwarf_home, run_vm, setup_logging}, - *, + bubba::{ + compiler::{ + test::{get_dwarf_home, run_vm, setup_logging}, + *, + }, + s_read as ref_read, }, dwarf::{new_lu_dog, parse_dwarf}, sarzak::MODEL as SARZAK_MODEL, @@ -118,18 +122,19 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); assert_eq!(program.get_thonk_card(), 1); assert_eq!(program.get_thonk("main").unwrap().instruction_card(), 13); - assert_eq!(&*s_read!(run_vm(&program).unwrap()), &2.into()); + assert_eq!(&*ref_read!(run_vm(&program).unwrap()), &2.into()); } #[test] @@ -147,11 +152,12 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{}", run_vm(&program).unwrap_err()); } @@ -171,17 +177,18 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); assert_eq!(program.get_thonk_card(), 1); assert_eq!(program.get_instruction_card(), 6); - assert_eq!(&*s_read!(run_vm(&program).unwrap()), &Value::Char('o')); + assert_eq!(&*ref_read!(run_vm(&program).unwrap()), &Value::Char('o')); } } diff --git a/src/bubba/compiler/expression/list.rs b/src/bubba/compiler/expression/list.rs index 94bb52b6..897bae13 100644 --- a/src/bubba/compiler/expression/list.rs +++ b/src/bubba/compiler/expression/list.rs @@ -1,13 +1,15 @@ -use snafu::{location, Location}; +use snafu::location; use crate::{ bubba::{ compiler::{compile_expression, CThonk, Context, Result, EMPTY}, instr::Instruction, + new_ref, s_read as ref_read, value::Value, + RefType, }, lu_dog::ValueType, - new_ref, s_read, NewRef, RefType, SarzakStorePtr, Span, POP_CLR, + s_read, SarzakStorePtr, Span, POP_CLR, }; #[cfg_attr(not(test), tracing::instrument(skip(thonk, context)))] @@ -69,21 +71,24 @@ pub(in crate::bubba::compiler) fn compile_list_expression( next = element.next; } - let expr = &list.r15_expression(&lu_dog)[0]; - let ty = &s_read!(expr).r11_x_value(&lu_dog)[0]; - let ty = s_read!(ty).r24_value_type(&lu_dog)[0].clone(); + // let expr = &list.r15_expression(&lu_dog)[0]; + // let ty = &s_read!(expr).r11_x_value(&lu_dog)[0]; + // let ty = s_read!(ty).r24_value_type(&lu_dog)[0].clone(); + // let ty = s_read!(ty).clone(); + let ty = &list.r257_value_type(&lu_dog)[0]; let ty = s_read!(ty).clone(); thonk.insert_instruction(Instruction::Push(Value::ValueType(ty)), location!()); thonk.insert_instruction(Instruction::NewList(size), location!()); } else { let empty = context.get_type(EMPTY).unwrap().clone(); + let empty = new_ref!(ValueType, empty); let ty = Value::List { - ty: new_ref!(ValueType, empty), + ty: empty, inner: new_ref!(Vec>, vec![]), } .get_value_type(context); - let ty = s_read!(ty).clone(); + let ty = ref_read!(ty).clone(); thonk.insert_instruction(Instruction::Push(Value::ValueType(ty)), location!()); thonk.insert_instruction_with_span(Instruction::NewList(0), entry_span, location!()); } diff --git a/src/bubba/compiler/expression/literal.rs b/src/bubba/compiler/expression/literal.rs index f23be1e3..2f3bca6f 100644 --- a/src/bubba/compiler/expression/literal.rs +++ b/src/bubba/compiler/expression/literal.rs @@ -1,4 +1,4 @@ -use snafu::{location, Location}; +use snafu::location; use crate::{ bubba::{ @@ -143,6 +143,7 @@ pub(in crate::bubba::compiler) fn compile( let literal = lu_dog.exhume_integer_literal(literal).unwrap(); let value = s_read!(literal).x_value; let value = Value::Integer(value); + tracing::debug!(target: "instr", "value: {value:?}"); thonk.insert_instruction_with_span(Instruction::Push(value), span, location!()); context.get_type(INTEGER).unwrap().clone() @@ -228,11 +229,12 @@ fn main() { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); diff --git a/src/bubba/compiler/expression/operator.rs b/src/bubba/compiler/expression/operator.rs index 1cbdba48..f92978df 100644 --- a/src/bubba/compiler/expression/operator.rs +++ b/src/bubba/compiler/expression/operator.rs @@ -1,4 +1,4 @@ -use snafu::{location, Location}; +use snafu::location; use crate::{ bubba::{ @@ -103,7 +103,7 @@ pub(in crate::bubba::compiler) fn compile( context.get_type(EMPTY).unwrap().clone() } _ => { - panic!("In assignment and lhs is not a variable: {lhs:?}") + panic!("Attempt to assign to lhs that is not a variable: {lhs:?}") } } } @@ -250,9 +250,12 @@ mod test { use std::env; use crate::{ - bubba::compiler::{ - test::{get_dwarf_home, run_vm, setup_logging}, - *, + bubba::{ + compiler::{ + test::{get_dwarf_home, run_vm, setup_logging}, + *, + }, + s_read as ref_read, }, dwarf::{new_lu_dog, parse_dwarf}, sarzak::MODEL as SARZAK_MODEL, @@ -271,10 +274,11 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); @@ -282,7 +286,7 @@ mod test { assert_eq!(program.get_thonk("main").unwrap().instruction_card(), 4); assert_eq!( - &*s_read!(run_vm(&program).unwrap()), + &*ref_read!(run_vm(&program).unwrap()), &Value::String("Hello, world!".to_owned()) ); } @@ -300,17 +304,18 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); assert_eq!(program.get_thonk_card(), 1); assert_eq!(program.get_thonk("main").unwrap().instruction_card(), 4); - assert_eq!(&*s_read!(run_vm(&program).unwrap()), &Value::Integer(3)); + assert_eq!(&*ref_read!(run_vm(&program).unwrap()), &Value::Integer(3)); } #[test] @@ -326,18 +331,19 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); assert_eq!(program.get_thonk_card(), 1); assert_eq!(program.get_thonk("main").unwrap().instruction_card(), 4); - assert_eq!(&*s_read!(run_vm(&program).unwrap()), &Value::Integer(10)); + assert_eq!(&*ref_read!(run_vm(&program).unwrap()), &Value::Integer(10)); } #[test] @@ -353,18 +359,19 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); assert_eq!(program.get_thonk_card(), 1); assert_eq!(program.get_thonk("main").unwrap().instruction_card(), 4); - assert_eq!(&*s_read!(run_vm(&program).unwrap()), &Value::Integer(2)); + assert_eq!(&*ref_read!(run_vm(&program).unwrap()), &Value::Integer(2)); } #[test] @@ -382,18 +389,19 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); assert_eq!(program.get_thonk_card(), 1); assert_eq!(program.get_thonk("main").unwrap().instruction_card(), 6); - assert_eq!(&*s_read!(run_vm(&program).unwrap()), &Value::Integer(10)); + assert_eq!(&*ref_read!(run_vm(&program).unwrap()), &Value::Integer(10)); } #[test] @@ -410,17 +418,18 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); assert_eq!(program.get_thonk_card(), 1); assert_eq!(program.get_thonk("main").unwrap().instruction_card(), 4); - assert_eq!(&*s_read!(run_vm(&program).unwrap()), &true.into()); + assert_eq!(&*ref_read!(run_vm(&program).unwrap()), &true.into()); } #[test] @@ -437,17 +446,18 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); assert_eq!(program.get_thonk_card(), 1); assert_eq!(program.get_thonk("main").unwrap().instruction_card(), 4); - assert_eq!(&*s_read!(run_vm(&program).unwrap()), &true.into()); + assert_eq!(&*ref_read!(run_vm(&program).unwrap()), &true.into()); } #[test] @@ -464,17 +474,18 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); assert_eq!(program.get_thonk_card(), 1); assert_eq!(program.get_thonk("main").unwrap().instruction_card(), 3); - assert_eq!(&*s_read!(run_vm(&program).unwrap()), &true.into()); + assert_eq!(&*ref_read!(run_vm(&program).unwrap()), &true.into()); } #[test] @@ -496,11 +507,12 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); @@ -509,7 +521,7 @@ mod test { let result = run_vm(&program); assert!(result.is_ok()); - assert_eq!(&*s_read!(result.unwrap()), &43.into()); + assert_eq!(&*ref_read!(result.unwrap()), &43.into()); } #[test] @@ -527,11 +539,12 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); @@ -540,6 +553,6 @@ mod test { let result = run_vm(&program); assert!(result.is_ok()); - assert_eq!(&*s_read!(result.unwrap()), &true.into()); + assert_eq!(&*ref_read!(result.unwrap()), &true.into()); } } diff --git a/src/bubba/compiler/expression/print.rs b/src/bubba/compiler/expression/print.rs index 60ee46a6..0696e2df 100644 --- a/src/bubba/compiler/expression/print.rs +++ b/src/bubba/compiler/expression/print.rs @@ -1,4 +1,4 @@ -use snafu::{location, Location}; +use snafu::location; use crate::{ bubba::{ @@ -33,9 +33,12 @@ mod test { use std::env; use crate::{ - bubba::compiler::{ - test::{get_dwarf_home, run_vm, setup_logging}, - *, + bubba::{ + compiler::{ + test::{get_dwarf_home, run_vm, setup_logging}, + *, + }, + s_read as ref_read, }, dwarf::{new_lu_dog, parse_dwarf}, sarzak::MODEL as SARZAK_MODEL, @@ -54,10 +57,11 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); @@ -81,10 +85,10 @@ mod test { } "#; - let mut ast = parse_dwarf("format_string_with_func_call", ore); + let mut ast = parse_dwarf("format_string", ore); while let Err(e) = ast { eprintln!("{}", e); - ast = parse_dwarf("format_string_with_func_call", ore); + ast = parse_dwarf("format_string", ore); } let ast = ast.unwrap(); @@ -95,18 +99,19 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); assert_eq!(program.get_thonk_card(), 1); - assert_eq!(program.get_instruction_card(), 25); + assert_eq!(program.get_instruction_card(), 27); let run = run_vm(&program); assert!(run.is_ok()); assert_eq!( - &*s_read!(run.unwrap()), + &*ref_read!(run.unwrap()), &Value::String("MOTD: Hello world!, the magic number is 42.".to_owned()) ); } @@ -123,15 +128,15 @@ mod test { } } - fn main() -> string { - let x = Foo {}; - let y = "Hello"; - let z = "world"; - let α = "MOTD: ${y} ${z}!, the magic number is ${x.magic()}."; - print(α); - α - } - "#; + fn main() -> string { + let x = Foo {}; + let y = "Hello"; + let z = "world"; + let α = "MOTD: ${y} ${z}!, the magic number is ${x.magic()}."; + print(α); + α + } +"#; let mut ast = parse_dwarf("format_string_with_func_call", ore); while let Err(e) = ast { @@ -147,18 +152,19 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); assert_eq!(program.get_thonk_card(), 2); - assert_eq!(program.get_instruction_card(), 32); + assert_eq!(program.get_instruction_card(), 34); let run = run_vm(&program); assert!(run.is_ok()); assert_eq!( - &*s_read!(run.unwrap()), + &*ref_read!(run.unwrap()), &Value::String("MOTD: Hello world!, the magic number is 42.".to_owned()) ); } diff --git a/src/bubba/compiler/expression/ret.rs b/src/bubba/compiler/expression/ret.rs index e9b79213..06b18462 100644 --- a/src/bubba/compiler/expression/ret.rs +++ b/src/bubba/compiler/expression/ret.rs @@ -1,4 +1,4 @@ -use snafu::{location, Location}; +use snafu::location; use crate::{ bubba::{ @@ -35,9 +35,12 @@ mod test { use std::env; use crate::{ - bubba::compiler::{ - test::{get_dwarf_home, run_vm, setup_logging}, - *, + bubba::{ + compiler::{ + test::{get_dwarf_home, run_vm, setup_logging}, + *, + }, + s_read as ref_read, }, dwarf::{new_lu_dog, parse_dwarf}, sarzak::MODEL as SARZAK_MODEL, @@ -57,15 +60,16 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); let result = run_vm(&program); assert!(result.is_ok()); - assert_eq!(&*s_read!(result.unwrap()), &42.into()); + assert_eq!(&*ref_read!(result.unwrap()), &42.into()); } } diff --git a/src/bubba/compiler/expression/struct_expr.rs b/src/bubba/compiler/expression/struct_expr.rs index 9ac5258e..498f9883 100644 --- a/src/bubba/compiler/expression/struct_expr.rs +++ b/src/bubba/compiler/expression/struct_expr.rs @@ -1,4 +1,6 @@ -use snafu::{location, Location}; +use std::sync::{Arc, RwLock}; + +use snafu::location; use crate::{ bubba::{ @@ -67,7 +69,11 @@ pub(in crate::bubba::compiler) fn compile( // be? Now that I think of it, I think the implementation of the nte instruction // checks the cardinality of the fields, and if it's zero it generates a // unit enum. So that's two fishy things. - let value = Value::Enumeration(Enum::Unit(ty, path, s_read!(pe).name.to_owned())); + let value = Value::Enumeration(Enum::Unit( + Arc::new(RwLock::new(s_read!(ty).clone())), + path, + s_read!(pe).name.to_owned(), + )); thonk.insert_instruction(Instruction::Push(value), location!()); } else { let field_count = field_exprs.len(); @@ -137,12 +143,18 @@ pub(in crate::bubba::compiler) fn compile( #[cfg(test)] mod test { - use std::env; + use std::{ + env, + sync::{Arc, RwLock}, + }; use crate::{ - bubba::compiler::{ - test::{get_dwarf_home, run_vm, setup_logging}, - *, + bubba::{ + compiler::{ + test::{get_dwarf_home, run_vm, setup_logging}, + *, + }, + s_read as ref_read, }, chacha::value::Struct, dwarf::{new_lu_dog, parse_dwarf}, @@ -171,10 +183,11 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak_store, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); assert_eq!(program.get_thonk_card(), 1); @@ -186,11 +199,12 @@ mod test { let woog_struct = lu_dog.exhume_woog_struct_id_by_name("::Foo").unwrap(); let woog_struct = lu_dog.exhume_woog_struct(&woog_struct).unwrap(); let ty = crate::lu_dog::ValueType::new_woog_struct(true, &woog_struct, &mut lu_dog); - let mut result = Struct::new("Foo", &ty); + + let mut result = Struct::new("::Foo", &Arc::new(RwLock::new(s_read!(ty).clone()))); result.define_field("x", Value::Integer(42)); result.define_field("y", Value::Float(0.42)); let result = Value::Struct(result); - assert_eq!(&*s_read!(run.unwrap()), &result,); + assert_eq!(&*ref_read!(run.unwrap()), &result,); } } diff --git a/src/bubba/compiler/expression/typecast.rs b/src/bubba/compiler/expression/typecast.rs index 966fb773..a6c71873 100644 --- a/src/bubba/compiler/expression/typecast.rs +++ b/src/bubba/compiler/expression/typecast.rs @@ -1,13 +1,15 @@ -use snafu::{location, Location}; +use snafu::location; use crate::{ bubba::{ compiler::{compile_expression, CThonk, Context, Result}, instr::Instruction, + new_ref, value::Value, + RefType, }, lu_dog::ValueType, - new_ref, s_read, NewRef, RefType, SarzakStorePtr, Span, POP_CLR, + s_read, SarzakStorePtr, Span, POP_CLR, }; #[cfg_attr(not(test), tracing::instrument(skip(thonk, context)))] @@ -43,9 +45,12 @@ mod test { use std::env; use crate::{ - bubba::compiler::{ - test::{get_dwarf_home, run_vm, setup_logging}, - *, + bubba::{ + compiler::{ + test::{get_dwarf_home, run_vm, setup_logging}, + *, + }, + s_read as ref_read, }, dwarf::{new_lu_dog, parse_dwarf}, sarzak::MODEL as SARZAK_MODEL, @@ -65,17 +70,18 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); let result = run_vm(&program); dbg!(&result); assert!(result.is_ok()); - assert_eq!(*s_read!(result.unwrap()), true.into()); + assert_eq!(*ref_read!(result.unwrap()), true.into()); } #[test] @@ -92,17 +98,18 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); let result = run_vm(&program); dbg!(&result); assert!(result.is_ok()); - assert_eq!(*s_read!(result.unwrap()), 42.into()); + assert_eq!(*ref_read!(result.unwrap()), 42.into()); } #[test] @@ -119,17 +126,18 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); let result = run_vm(&program); dbg!(&result); assert!(result.is_ok()); - assert_eq!(*s_read!(result.unwrap()), 42.0.into()); + assert_eq!(*ref_read!(result.unwrap()), 42.0.into()); } #[test] @@ -146,17 +154,18 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); let result = run_vm(&program); dbg!(&result); assert!(result.is_ok()); - assert_eq!(*s_read!(result.unwrap()), "42".into()); + assert_eq!(*ref_read!(result.unwrap()), "42".into()); } #[test] @@ -173,10 +182,11 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); @@ -184,7 +194,7 @@ mod test { dbg!(&result); assert!(result.is_ok()); assert_eq!( - *s_read!(result.unwrap()), + *ref_read!(result.unwrap()), uuid::Uuid::parse_str("7056c5ba-4f49-404f-abd5-e5c6a5879fac") .unwrap() .into() diff --git a/src/bubba/compiler/expression/variable.rs b/src/bubba/compiler/expression/variable.rs index 62ee4bbe..e93b6186 100644 --- a/src/bubba/compiler/expression/variable.rs +++ b/src/bubba/compiler/expression/variable.rs @@ -1,4 +1,4 @@ -use snafu::{location, Location}; +use snafu::location; use crate::{ bubba::{ diff --git a/src/bubba/compiler/expression/xmatch.rs b/src/bubba/compiler/expression/xmatch.rs index a273a89c..6c85b31a 100644 --- a/src/bubba/compiler/expression/xmatch.rs +++ b/src/bubba/compiler/expression/xmatch.rs @@ -1,4 +1,4 @@ -use snafu::{location, Location}; +use snafu::location; use uuid::Uuid; use crate::{ @@ -26,7 +26,23 @@ pub(in crate::bubba::compiler) fn compile( let match_expr = lu_dog.exhume_x_match(expr).unwrap(); let match_expr = s_read!(match_expr); - let patterns = match_expr.r87_pattern(&lu_dog); + // This only returns the first one found. That's a bug. + let mut pattern = match_expr.r87_pattern(&lu_dog)[0].clone(); + let mut patterns = Vec::new(); + // Iterate over the previous until we reach the beginning. + while !s_read!(pattern).r256c_pattern(&lu_dog).is_empty() { + let pat = s_read!(pattern).r256c_pattern(&lu_dog)[0].clone(); + pattern = pat; + } + + patterns.push(pattern.clone()); + + while !s_read!(pattern).r256_pattern(&lu_dog).is_empty() { + let pat = s_read!(pattern).r256_pattern(&lu_dog)[0].clone(); + pattern = pat; + patterns.push(pattern.clone()); + } + let scrutinee = match_expr.r91_expression(&lu_dog)[0].clone(); let label = format!("{}", Uuid::new_v4()); @@ -208,20 +224,24 @@ pub(in crate::bubba::compiler) fn compile( #[cfg(test)] mod test { - use std::env; + use std::{ + env, + sync::{Arc, RwLock}, + }; use test_log::test; use crate::{ - bubba::compiler::{ - test::{get_dwarf_home, run_vm, setup_logging}, - *, + bubba::{ + compiler::{ + test::{get_dwarf_home, run_vm, setup_logging}, + *, + }, + new_ref, s_read as ref_read, RefType, }, chacha::value::{Enum, TupleEnum}, dwarf::{new_lu_dog, parse_dwarf}, - new_ref, sarzak::MODEL as SARZAK_MODEL, - NewRef, }; #[test] @@ -243,18 +263,19 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); assert_eq!(program.get_thonk_card(), 1); assert_eq!(program.get_thonk("main").unwrap().instruction_card(), 31); - assert_eq!(&*s_read!(run_vm(&program).unwrap()), &Value::Integer(1)); + assert_eq!(&*ref_read!(run_vm(&program).unwrap()), &Value::Integer(1)); } #[test] @@ -279,18 +300,19 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); assert_eq!(program.get_thonk_card(), 1); assert_eq!(program.get_thonk("main").unwrap().instruction_card(), 33); - assert_eq!(&*s_read!(run_vm(&program).unwrap()), &4.into()); + assert_eq!(&*ref_read!(run_vm(&program).unwrap()), &4.into()); } #[test] @@ -303,7 +325,7 @@ mod test { 1 => 1, 2 => 2, 3 => 3, - _ => 4, + 4 => 4, } }"; let ast = parse_dwarf("match_expression", ore).unwrap(); @@ -312,44 +334,46 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); assert_eq!(program.get_thonk_card(), 1); - assert_eq!(program.get_thonk("main").unwrap().instruction_card(), 31); + assert_eq!(program.get_thonk("main").unwrap().instruction_card(), 29); - assert_eq!(&*s_read!(run_vm(&program).unwrap()), &3.into()); + assert_eq!(&*ref_read!(run_vm(&program).unwrap()), &3.into()); } #[test] fn match_string_literal_expression() { setup_logging(); let sarzak = SarzakStore::from_bincode(SARZAK_MODEL).unwrap(); - let ore = " + let ore = r#" fn main() -> string { - match \"foo\" { - \"bar\" => \"bar\", - \"foo\" => \"foo\", - \"baz\" => \"baz\", - _ => \"qux\", + match "foo" { + "bar" => "bar", + "foo" => "foo", + "baz" => "baz", + _ => "qux", } - }"; + }"#; let ast = parse_dwarf("match_expression", ore).unwrap(); let ctx = new_lu_dog( "match_expression".to_owned(), Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); assert_eq!(program.get_thonk_card(), 1); @@ -357,7 +381,7 @@ mod test { assert_eq!(program.get_thonk("main").unwrap().instruction_card(), 31); assert_eq!( - &*s_read!(run_vm(&program).unwrap()), + &*ref_read!(run_vm(&program).unwrap()), &Value::String("foo".to_owned()) ); } @@ -385,6 +409,7 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); @@ -397,7 +422,7 @@ mod test { ValueType::new_enumeration(true, &woog_enum, &mut lu_dog) }; - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); assert_eq!(program.get_thonk_card(), 1); @@ -405,8 +430,12 @@ mod test { assert_eq!(program.get_thonk("main").unwrap().instruction_card(), 32); assert_eq!( - &*s_read!(run_vm(&program).unwrap()), - &Value::Enumeration(Enum::Unit(ty, "::Foo".to_owned(), "Bar".to_owned())) + &*ref_read!(run_vm(&program).unwrap()), + &Value::Enumeration(Enum::Unit( + Arc::new(RwLock::new(s_read!(ty).clone())), + "::Foo".to_owned(), + "Bar".to_owned() + )) ); } @@ -433,6 +462,7 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak, ) .unwrap(); @@ -444,10 +474,10 @@ mod test { .unwrap(); let woog_enum = s_read!(lu_dog).exhume_enumeration(&id).unwrap(); let ty = ValueType::new_enumeration(true, &woog_enum, &mut s_write!(lu_dog)); - let user_enum = TupleEnum::new("Bar", new_ref!(Value, Value::Integer(42))); + let user_enum = TupleEnum::new("Bar", new_ref!(Value, 42.into())); let user_enum = new_ref!(TupleEnum, user_enum); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); assert_eq!(program.get_thonk_card(), 1); @@ -455,8 +485,14 @@ mod test { assert_eq!(program.get_thonk("main").unwrap().instruction_card(), 65); assert_eq!( - &*s_read!(run_vm(&program).unwrap()), - &Value::Enumeration(Enum::Tuple((ty, "::Foo".to_owned()), user_enum)) + &*ref_read!(run_vm(&program).unwrap()), + &Value::Enumeration(Enum::Tuple( + ( + Arc::new(RwLock::new(s_read!(ty).clone())), + "::Foo".to_owned() + ), + user_enum + )) ); } @@ -484,18 +520,19 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak_store, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); assert_eq!(program.get_thonk_card(), 1); assert_eq!(program.get_thonk("main").unwrap().instruction_card(), 50); - assert_eq!(&*s_read!(run_vm(&program).unwrap()), &Value::Integer(42)); + assert_eq!(&*ref_read!(run_vm(&program).unwrap()), &Value::Integer(42)); } #[test] @@ -522,18 +559,19 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak_store, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); assert_eq!(program.get_thonk_card(), 1); assert_eq!(program.get_thonk("main").unwrap().instruction_card(), 56); - assert_eq!(&*s_read!(run_vm(&program).unwrap()), &Value::Integer(42)); + assert_eq!(&*ref_read!(run_vm(&program).unwrap()), &Value::Integer(42)); } #[test] @@ -566,18 +604,19 @@ mod test { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak_store, ) .unwrap(); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); assert_eq!(program.get_thonk_card(), 1); assert_eq!(program.get_thonk("main").unwrap().instruction_card(), 58); - assert_eq!(&*s_read!(run_vm(&program).unwrap()), &Value::Integer(42)); + assert_eq!(&*ref_read!(run_vm(&program).unwrap()), &Value::Integer(42)); } #[test] @@ -586,12 +625,15 @@ mod test { let sarzak_store = SarzakStore::from_bincode(SARZAK_MODEL).unwrap(); let ore = " use std::result::Result; + struct A { inner: int, } + struct B { inner: int, - } +} + fn main() -> Result { let result = Result::Err(96); let foo = match result { @@ -607,6 +649,7 @@ fn main() -> Result { Some((ore.to_owned(), &ast)), &get_dwarf_home(), &env::current_dir().unwrap(), + true, &sarzak_store, ) .unwrap_or_else(|e| { @@ -616,7 +659,7 @@ fn main() -> Result { panic!("Failed to create lu_dog"); }); - let program = compile(&ctx).unwrap(); + let program = compile(&ctx, true).unwrap(); println!("{program}"); assert_eq!(program.get_thonk_card(), 4); diff --git a/src/bubba/error.rs b/src/bubba/error.rs index 1a726908..80a42471 100644 --- a/src/bubba/error.rs +++ b/src/bubba/error.rs @@ -3,7 +3,10 @@ use std::fmt; use ariadne::{Color, Label, Report, ReportKind, Source}; use snafu::{prelude::*, Backtrace, Location}; -use crate::{bubba::value::Value, Span, ERR_CLR, OK_CLR, OTHER_CLR, POP_CLR}; +use crate::{ + bubba::{value::Value, Program}, + Span, ERR_CLR, OK_CLR, OTHER_CLR, POP_CLR, +}; #[derive(Debug, Snafu)] pub enum BubbaError { @@ -44,7 +47,11 @@ pub enum BubbaError { // #[snafu(display("\n{}: value error: {value}\n\t--> {}:{}:{}", ERR_CLR.bold().paint("error"), location.file, location.line, location.column))] // ValueError { value: Value, location: Location }, #[snafu(display("\n{}: vm panic: {message}\n\t--> {}:{}:{}", ERR_CLR.bold().paint("error"), location.file, location.line, location.column))] - VmPanic { message: String, location: Location }, + VmPanic { + message: String, + program: Program, + location: Location, + }, } pub type Result = std::result::Result; @@ -112,6 +119,25 @@ impl fmt::Display for BubbaErrorReporter<'_, '_, '_> { .map_err(|_| fmt::Error)?; write!(f, "{}", String::from_utf8_lossy(&std_err)) } + BubbaError::VmPanic { + message, + program, + location, + } => { + let mut note = format!("VM Panic: {}\n", POP_CLR.paint(format!("{message}"))); + + if is_uber { + note += &format!( + " --> {}:{}:{}\n", + OTHER_CLR.paint(location.file.to_string()), + POP_CLR.paint(format!("{}", location.line)), + OK_CLR.paint(format!("{}", location.column)), + ); + } + + write!(f, "Program:\n{program}\n")?; + write!(f, "{note}") + } _ => write!(f, "{}", self.0), } } diff --git a/src/bubba/instr.rs b/src/bubba/instr.rs index 4896bbac..99d7a053 100644 --- a/src/bubba/instr.rs +++ b/src/bubba/instr.rs @@ -4,7 +4,10 @@ use ansi_term::Colour; use rustc_hash::FxHashMap as HashMap; use serde::{Deserialize, Serialize}; -use crate::{bubba::value::Value, s_read, RefType, Span}; +use crate::{ + bubba::{s_read, value::Value, RefType}, + Span, +}; /// Instruction /// @@ -68,6 +71,7 @@ pub enum Instruction { /// -- from 16 bytes to 24. /// Comment(String), + CreateTask(usize), /// Deconstruct a struct expression /// /// Given a struct expression, like Foo::Bar(x, y), this instruction will pop the @@ -189,6 +193,13 @@ pub enum Instruction { LocalCardinality(String), /// Make a Lambda Pointer Value /// + /// This is a precursor to a task. The [`AsyncCall`] and [`AsyncSpawn`] + /// instructions. Or rather the input to those instructions. + /// + /// It takes a string which is the name of the function we are calling, and + /// a usize which is the arity of the function. + /// + /// It will return a [`LambdaPointer`] value. MakeLambdaPointer(String, usize), /// Map Get /// @@ -468,6 +479,12 @@ impl fmt::Display for Instruction { opcode_style.paint("nop "), operand_style.paint(comment) ), + Instruction::CreateTask(arity) => write!( + f, + "{} {}", + opcode_style.paint("ctsk"), + operand_style.paint(arity.to_string()) + ), Instruction::DeconstructStructExpression => write!(f, "{}", opcode_style.paint("dse ")), Instruction::Divide => write!(f, "{}", opcode_style.paint("div ")), Instruction::Dup => write!(f, "{}", opcode_style.paint("dup ")), @@ -611,7 +628,7 @@ impl fmt::Display for Instruction { Instruction::TestLessThan => write!(f, "{}", opcode_style.paint("lt ")), Instruction::TestLessThanOrEqual => write!(f, "{}", opcode_style.paint("lte ")), Instruction::TestNotEqual => write!(f, "{}", opcode_style.paint("ne ")), - Instruction::ToString => write!(f, "{}", opcode_style.paint("ts ")), + Instruction::ToString => write!(f, "{}", opcode_style.paint("tostr")), Instruction::TypeCast(name) => write!( f, "{} {}", @@ -659,6 +676,10 @@ impl Program { self.symbols.get(name) } + pub(crate) fn dump_symbols(&self) { + dbg!(&self.symbols); + } + pub(crate) fn add_thonk(&mut self, thonk: Thonk) { self.thonks.insert(thonk.name.clone(), thonk); } @@ -736,12 +757,14 @@ impl Thonk { } } + /// Push an instruction onto the thonk. pub(crate) fn add_instruction(&mut self, instr: Instruction, span: Option) -> usize { self.instructions.push(instr); self.spans.push(span.unwrap_or_default()); self.instructions.len() - 1 } + /// Prefix an instruction onto the thonk. pub(crate) fn prefix_instruction(&mut self, instr: Instruction, span: Option) -> usize { self.instructions.insert(0, instr); self.spans.insert(0, span.unwrap_or_default()); diff --git a/src/bubba/value.rs b/src/bubba/value.rs index 8106d440..68539c18 100644 --- a/src/bubba/value.rs +++ b/src/bubba/value.rs @@ -1,10 +1,16 @@ -use std::{collections::HashMap, fmt, io::Write, ops::Range}; +use std::{ + collections::HashMap, + fmt, + io::Write, + ops::Range, + sync::{Arc, RwLock}, +}; use ansi_term::Colour; #[cfg(feature = "async")] use puteketeke::AsyncTask; use serde::{Deserialize, Serialize}; -use snafu::{location, Backtrace, Location}; +use snafu::{location, Backtrace}; // #[cfg(feature = "async")] // use smol::future; @@ -14,16 +20,18 @@ use crate::{ bubba::{ compiler::Context, error::{BubbaError, Error}, + new_ref, s_read as ref_read, s_try_read, RefType, }, chacha::value::{Enum, Struct}, lu_dog::{ValueType, ValueTypeEnum}, - new_ref, plug_in::PluginType, - s_read, s_try_read, + s_read, sarzak::Ty, - DwarfFloat, DwarfInteger, NewRef, RefType, VmValueResult, + DwarfFloat, DwarfInteger, }; +pub type ValueResult = Result, Error>; + #[derive(Default, Deserialize, Serialize)] pub enum Value { AnyList(RefType>>), @@ -70,7 +78,7 @@ pub enum Value { Task { name: String, running: bool, - task: RefType>>, + task: RefType>>, }, Uuid(uuid::Uuid), ValueType(ValueType), @@ -83,38 +91,6 @@ pub enum HashMapKey { Uuid(Uuid), } -// #[cfg(feature = "async")] -// impl Future for Value { -// type Output = RefType; - -// fn poll( -// self: std::pin::Pin<&mut Self>, -// _cx_: &mut std::task::Context<'_>, -// ) -> std::task::Poll { -// let this = std::pin::Pin::into_inner(self); - -// match this { -// Self::Task { -// name: _, -// running: _, -// task, -// } => { -// if let Some(task) = task.take() { -// match future::block_on(task) { -// Ok(value) => std::task::Poll::Ready(value), -// Err(e) => { -// std::task::Poll::Ready(new_ref!(Value, Value::Error(Box::new(e)))) -// } -// } -// } else { -// std::task::Poll::Ready(new_ref!(Value, Value::Empty)) -// } -// } -// _ => std::task::Poll::Ready(new_ref!(Value, Value::Empty)), -// } -// } -// } - impl Value { #[inline] pub fn to_inner_string(&self) -> String { @@ -129,7 +105,7 @@ impl Value { match self { Self::AnyList(list) => { write!(f, "[")?; - let list = s_read!(list); + let list = ref_read!(list); let mut first_time = true; for i in &*list { if first_time { @@ -138,7 +114,7 @@ impl Value { write!(f, ", ")?; } - write!(f, "{}", s_read!(i))?; + write!(f, "{}", ref_read!(i))?; } write!(f, "]") } @@ -157,16 +133,16 @@ impl Value { } => { write!( f, - "FubarPointer {{ name: {name}, frame_size: {frame_size}, captures: [" + "LambdaPointer {{ name: {name}, frame_size: {frame_size}, captures: [" )?; for i in captures { - let i = s_read!(i); + let i = ref_read!(i); write!(f, "{i}, ")?; } write!(f, "] }}") } - Self::List { ty: _, inner } => { - let inner = s_read!(inner); + Self::List { inner, .. } => { + let inner = ref_read!(inner); let mut first_time = true; write!(f, "[")?; for i in &*inner { @@ -176,25 +152,21 @@ impl Value { write!(f, ", ")?; } - write!(f, "{}", s_read!(i))?; + write!(f, "{}", ref_read!(i))?; } write!(f, "]") } - Self::Map { - // key_ty: _, - // value_ty: _, - inner, - } => { + Self::Map { inner } => { write!(f, "{{")?; let mut first_time = true; - for (key, value) in &*s_read!(inner) { + for (key, value) in &*ref_read!(inner) { if first_time { first_time = false; } else { write!(f, ", ")?; } - write!(f, "{key}: {value}", key = key, value = s_read!(value))?; + write!(f, "{key}: {value}", key = key, value = ref_read!(value))?; } write!(f, "}}") } @@ -214,9 +186,9 @@ impl Value { } pub(crate) fn get_value_type(&self, context: &Context) -> RefType { - let sarzak = context.sarzak_heel().clone(); + let sarzak = context.sarzak_heel(); let sarzak = &s_read!(sarzak); - let lu_dog = context.lu_dog_heel().clone(); + let lu_dog = context.lu_dog_heel(); let lu_dog = &s_read!(lu_dog); match &self { @@ -225,7 +197,7 @@ impl Value { for vt in lu_dog.iter_value_type() { if let ValueTypeEnum::Ty(_ty) = s_read!(vt).subtype { if ty.read().unwrap().id() == _ty { - return vt.clone(); + return Arc::new(RwLock::new(s_read!(vt).clone())); } } } @@ -234,7 +206,7 @@ impl Value { Value::Char(_) => { for vt in lu_dog.iter_value_type() { if let ValueTypeEnum::Char(_) = s_read!(vt).subtype { - return vt.clone(); + return Arc::new(RwLock::new(s_read!(vt).clone())); } } unreachable!() @@ -242,14 +214,14 @@ impl Value { Value::Empty => { for vt in lu_dog.iter_value_type() { if let ValueTypeEnum::Empty(_) = s_read!(vt).subtype { - return vt.clone(); + return Arc::new(RwLock::new(s_read!(vt).clone())); } } unreachable!() } Value::Enumeration(var) => match var { Enum::Unit(t, _, _) => t.clone(), - Enum::Struct(ut) => s_read!(ut).get_type().clone(), + Enum::Struct(ut) => ref_read!(ut).get_type().clone(), Enum::Tuple((ty, _), _) => ty.clone(), }, Value::Float(_) => { @@ -257,7 +229,7 @@ impl Value { for vt in lu_dog.iter_value_type() { if let ValueTypeEnum::Ty(_ty) = s_read!(vt).subtype { if ty.read().unwrap().id() == _ty { - return vt.clone(); + return Arc::new(RwLock::new(s_read!(vt).clone())); } } } @@ -268,7 +240,7 @@ impl Value { for vt in lu_dog.iter_value_type() { if let ValueTypeEnum::Ty(_ty) = s_read!(vt).subtype { if ty.read().unwrap().id() == _ty { - return vt.clone(); + return Arc::new(RwLock::new(s_read!(vt).clone())); } } } @@ -279,8 +251,8 @@ impl Value { if let ValueTypeEnum::List(id) = s_read!(vt).subtype { let list = lu_dog.exhume_list(&id).unwrap(); let list_ty = s_read!(list).r36_value_type(lu_dog)[0].clone(); - if *s_read!(ty) == *s_read!(list_ty) { - return vt.clone(); + if ref_read!(ty).subtype == s_read!(list_ty).subtype { + return Arc::new(RwLock::new(s_read!(vt).clone())); } } } @@ -291,7 +263,7 @@ impl Value { if let ValueTypeEnum::XPlugin(id) = s_read!(vt).subtype { let plugin = lu_dog.exhume_x_plugin(&id).unwrap(); if s_read!(plugin).name == name.as_str() { - return vt.clone(); + return Arc::new(RwLock::new(s_read!(vt).clone())); } } } @@ -300,7 +272,7 @@ impl Value { Value::Range(_) => { for vt in lu_dog.iter_value_type() { if let ValueTypeEnum::Range(_) = s_read!(vt).subtype { - return vt.clone(); + return Arc::new(RwLock::new(s_read!(vt).clone())); } } unreachable!() @@ -310,7 +282,7 @@ impl Value { for vt in lu_dog.iter_value_type() { if let ValueTypeEnum::Ty(_ty) = s_read!(vt).subtype { if ty.read().unwrap().id() == _ty { - return vt.clone(); + return Arc::new(RwLock::new(s_read!(vt).clone())); } } } @@ -322,7 +294,7 @@ impl Value { for vt in lu_dog.iter_value_type() { if let ValueTypeEnum::Ty(_ty) = s_read!(vt).subtype { if ty.read().unwrap().id() == _ty { - return vt.clone(); + return Arc::new(RwLock::new(s_read!(vt).clone())); } } } @@ -332,7 +304,7 @@ impl Value { log::error!("Value::get_type() not implemented for {:?}", value); for vt in lu_dog.iter_value_type() { if let ValueTypeEnum::Unknown(_) = s_read!(vt).subtype { - return vt.clone(); + return Arc::new(RwLock::new(s_read!(vt).clone())); } } unreachable!() @@ -346,7 +318,7 @@ impl std::fmt::Debug for Value { match self { Self::AnyList(list) => { write!(f, "[")?; - let list = s_read!(list); + let list = ref_read!(list); let mut first_time = true; for i in &*list { if first_time { @@ -355,7 +327,7 @@ impl std::fmt::Debug for Value { write!(f, ", ")?; } - write!(f, "{:?}", s_read!(i))?; + write!(f, "{:?}", ref_read!(i))?; } write!(f, "]") } @@ -373,16 +345,16 @@ impl std::fmt::Debug for Value { } => { write!( f, - "FubarPointer {{ name: {name}, frame_size: {frame_size}, captures: [" + "LambdaPointer {{ name: {name}, frame_size: {frame_size}, captures: [" )?; for i in captures { - let i = s_read!(i); + let i = ref_read!(i); write!(f, "{i}, ")?; } write!(f, "] }}") } Self::List { ty: _, inner } => { - let inner = s_read!(inner); + let inner = ref_read!(inner); let mut first_time = true; write!(f, "[")?; for i in &*inner { @@ -392,7 +364,7 @@ impl std::fmt::Debug for Value { write!(f, ", ")?; } - write!(f, "{}", s_read!(i))?; + write!(f, "{}", ref_read!(i))?; } write!(f, "]") } @@ -403,14 +375,14 @@ impl std::fmt::Debug for Value { } => { write!(f, "{{")?; let mut first_time = true; - for (key, value) in &*s_read!(inner) { + for (key, value) in &*ref_read!(inner) { if first_time { first_time = false; } else { write!(f, ", ")?; } - write!(f, "{key:?}: {value:?}", key = key, value = s_read!(value))?; + write!(f, "{key:?}: {value:?}", key = key, value = ref_read!(value))?; } write!(f, "}}") } @@ -490,7 +462,7 @@ impl fmt::Display for Value { match self { Self::AnyList(list) => { write!(f, "[")?; - let list = s_read!(list); + let list = ref_read!(list); let mut first_time = true; for i in &*list { if first_time { @@ -522,7 +494,7 @@ impl fmt::Display for Value { } => { write!( f, - "FubarPointer {{ name: {name}, frame_size: {frame_size}, captures: [" + "LambdaPointer {{ name: {name}, frame_size: {frame_size}, captures: [" )?; let mut first_time = true; for i in captures { @@ -540,8 +512,8 @@ impl fmt::Display for Value { } write!(f, "] }}") } - Self::List { ty: _, inner } => { - let inner = s_read!(inner); + Self::List { inner, .. } => { + let inner = ref_read!(inner); let mut first_time = true; write!(f, "[")?; for i in &*inner { @@ -560,14 +532,10 @@ impl fmt::Display for Value { } write!(f, "]") } - Self::Map { - // key_ty: _, - // value_ty: _, - inner, - } => { + Self::Map { inner } => { write!(f, "{{")?; let mut first_time = true; - for (key, value) in &*s_read!(inner) { + for (key, value) in &*ref_read!(inner) { if first_time { first_time = false; } else { @@ -688,11 +656,9 @@ impl From>> for Value { impl TryFrom<&Value> for HashMap> { type Error = Error; - fn try_from( - value: &Value, - ) -> Result> as TryFrom<&Value>>::Error> { + fn try_from(value: &Value) -> Result>::Error> { match value { - Value::Map { inner, .. } => Ok(s_read!(inner).clone()), + Value::Map { inner, .. } => Ok(ref_read!(inner).clone()), _ => Err(BubbaError::Conversion { src: value.to_string(), dst: "HashMap>".to_owned(), @@ -709,7 +675,7 @@ impl TryFrom<&Value> for Vec> { fn try_from(value: &Value) -> Result> as TryFrom<&Value>>::Error> { match value { - Value::List { ty: _, inner } => Ok(s_read!(inner).clone()), + Value::List { ty: _, inner } => Ok(ref_read!(inner).clone()), _ => Err(BubbaError::Conversion { src: value.to_string(), dst: "Vec>".to_owned(), @@ -1467,15 +1433,15 @@ impl std::cmp::PartialEq for Value { fn eq(&self, other: &Self) -> bool { match (self, other) { (Value::AnyList(a), Value::AnyList(b)) => { - let a = s_read!(a); - let b = s_read!(b); + let a = ref_read!(a); + let b = ref_read!(b); if a.len() != b.len() { return false; } for (i, v) in a.iter().enumerate() { - if !s_read!(v).eq(&s_read!(b[i])) { + if !ref_read!(v).eq(&ref_read!(b[i])) { return false; } } @@ -1492,19 +1458,22 @@ impl std::cmp::PartialEq for Value { (Value::Integer(a), Value::Integer(b)) => a == b, (Value::Integer(a), Value::Float(b)) => (*a as DwarfFloat) == *b, (Value::List { ty: ty_a, inner: a }, Value::List { ty: ty_b, inner: b }) => { - if *s_read!(ty_a) != *s_read!(ty_b) { + // Compare the types + if ref_read!(ty_a).subtype != ref_read!(ty_b).subtype { return false; } - let a = s_read!(a); - let b = s_read!(b); + let a = ref_read!(a); + let b = ref_read!(b); + // Compare the lengths if a.len() != b.len() { return false; } + // Compare the values for (i, v) in a.iter().enumerate() { - if !s_read!(v).eq(&s_read!(b[i])) { + if !ref_read!(v).eq(&ref_read!(b[i])) { return false; } } @@ -1512,15 +1481,15 @@ impl std::cmp::PartialEq for Value { true } (Value::Map { inner: a }, Value::Map { inner: b }) => { - let a = s_read!(a); - let b = s_read!(b); + let a = ref_read!(a); + let b = ref_read!(b); if a.len() != b.len() { return false; } for (k, v) in a.iter() { - if !s_read!(v).eq(&s_read!(b[k])) { + if !ref_read!(v).eq(&ref_read!(b[k])) { return false; } } diff --git a/src/bubba/vm.rs b/src/bubba/vm.rs index a383cbbe..6ae487c4 100644 --- a/src/bubba/vm.rs +++ b/src/bubba/vm.rs @@ -3,7 +3,6 @@ use std::{ env, path::{Path, PathBuf}, sync::Mutex, - thread, }; #[cfg(feature = "async")] @@ -17,19 +16,21 @@ use tracy_client::{non_continuous_frame, span, Client}; use abi_stable::{ library::{lib_header_from_path, LibrarySuffix, RawLibrary}, - std_types::{RBox, RErr, ROk, ROption, RResult, Tuple2}, + std_types::{RErr, ROk}, }; use ansi_term::Colour; use crossbeam::channel::{unbounded, Receiver, Sender}; use once_cell::sync::OnceCell; use rustc_hash::{FxHashMap as HashMap, FxHashSet as HashSet}; -use snafu::{location, Location}; +use snafu::location; +use threadpool::ThreadPool; use crate::{ bubba::{ error::{BubbaError, Error, Result}, + new_ref, s_read as ref_read, s_write, value::Value, - STRING, + RefType, STRING, }, chacha::{ ffi_value::FfiValue, @@ -37,11 +38,9 @@ use crate::{ }, keywords::{INVOKE_FUNC, INVOKE_FUNC_MUT, NONE, OPTION, OPTION_TYPE, RESULT_TYPE, SOME}, lu_dog::{ValueType, ValueTypeEnum}, - new_ref, plug_in::{Error as FfiError, LambdaCall, PluginModRef, PluginType}, - s_read, s_write, sarzak::{ObjectStore as SarzakStore, Ty, MODEL as SARZAK_MODEL}, - DwarfInteger, NewRef, RefType, Span, LAMBDA_FUNCS, + DwarfInteger, Span, LAMBDA_FUNCS, }; use super::instr::{Instruction, Program}; @@ -51,6 +50,8 @@ static mut EXECUTOR: OnceCell = OnceCell::new(); static mut WRITE_MUTEX: OnceCell> = OnceCell::new(); +const MAX_PRINT_LEN: usize = 80; + #[derive(Debug)] enum StackValue { Pointer(RefType), @@ -69,7 +70,7 @@ impl StackValue { #[inline] fn into_value(self) -> Value { match self { - StackValue::Pointer(p) => s_read!(p).clone(), + StackValue::Pointer(p) => ref_read!(p).clone(), StackValue::Value(v) => v, } } @@ -78,7 +79,9 @@ impl StackValue { impl PartialEq for StackValue { fn eq(&self, other: &Self) -> bool { match (self, other) { - (StackValue::Pointer(p1), StackValue::Pointer(p2)) => &*s_read!(p1) == &*s_read!(p2), + (StackValue::Pointer(p1), StackValue::Pointer(p2)) => { + &*ref_read!(p1) == &*ref_read!(p2) + } (StackValue::Value(v1), StackValue::Value(v2)) => v1 == v2, _ => false, } @@ -97,7 +100,7 @@ impl Clone for StackValue { impl std::fmt::Display for StackValue { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { - StackValue::Pointer(p) => write!(f, "{}", *s_read!(p)), + StackValue::Pointer(p) => write!(f, "{}", *ref_read!(p)), StackValue::Value(v) => write!(f, "{}", v), } } @@ -129,6 +132,7 @@ pub struct VM { #[cfg(feature = "async")] thread_count: usize, backtrace: bool, + lambda_pool: ThreadPool, lambda_sender: Sender, lambda_receiver: Receiver, trace: bool, @@ -171,8 +175,7 @@ impl VM { ) -> Self { #[cfg(feature = "tracy-client")] Client::start(); - // println!("{}", program); - // dbg!(&program); + let Some(Value::ValueType(str_ty)) = program.get_symbol(STRING) else { panic!("No STRING symbol found.") }; @@ -182,6 +185,8 @@ impl VM { } let backtrace = env::var("DWARF_BACKTRACE").is_ok(); + + let lambda_pool = ThreadPool::new(thread_count); let (lambda_sender, lambda_receiver) = unbounded(); let mut vm = VM { @@ -204,6 +209,7 @@ impl VM { #[cfg(feature = "async")] thread_count, backtrace, + lambda_pool, lambda_sender, lambda_receiver, trace, @@ -252,17 +258,13 @@ impl VM { panic!("Missing symbols: {:?}", missing_symbols); } - // 🚧 This is such an ugly hack. There should probably be a thread pool. - // OTOH, if this is sufficient... - let mut vm_clone = vm.clone(); - thread::spawn(move || loop { - vm_clone.lambda_listen(); - }); - - let mut vm_clone = vm.clone(); - thread::spawn(move || loop { - vm_clone.lambda_listen(); - }); + // We start threads to handle lambda calls. + for _ in 0..thread_count { + let mut vm_clone = vm.clone(); + vm.lambda_pool.execute(move || loop { + vm_clone.lambda_listen(); + }); + } vm } @@ -290,7 +292,7 @@ impl VM { let result = self.invoke_lambda(&λ, &args); let result = match result { - Ok(value) => ROk(>::into(s_read!(value).clone())), + Ok(value) => ROk(>::into(ref_read!(value).clone())), Err(e) => RErr(FfiError::Plugin(e.to_string().into())), }; lambda_call.result.send(result).unwrap(); @@ -308,10 +310,12 @@ impl VM { stack.push(Value::Integer(0).into()); stack.push(Value::Integer(0).into()); stack.push(Value::Integer(0).into()); + // This is really lame. The call code expects stack_len - 2 - arity to be - // an address (an integer) ar it doesn't do anything with it. In any case + // an address (an integer) and it doesn't do anything with it. In any case // it needs to be here. So this is junk. stack.push(Value::Empty.into()); + // The next parameter is the number of locals on the stack -or- a LambdaPointer. stack.push(lambda.to_owned().into()); @@ -344,50 +348,58 @@ impl VM { } pub fn invoke(&mut self, func_name: &str, args: &[RefType]) -> Result> { - let (ip, frame_size) = self.func_map.get(func_name).unwrap(); - let frame_size = *frame_size; + if let Some((ip, frame_size)) = self.func_map.get(func_name) { + let frame_size = *frame_size; - let mut stack = Vec::new(); + let mut stack = Vec::new(); - // Address of the function to invoke. - stack.push(Value::Integer(*ip as DwarfInteger).into()); - // Number of parameters and locals in the function. - stack.push(Value::Integer(frame_size as DwarfInteger).into()); + // Address of the function to invoke. + stack.push(Value::Integer(*ip as DwarfInteger).into()); + // Number of parameters and locals in the function. + stack.push(Value::Integer(frame_size as DwarfInteger).into()); - for arg in args.iter() { - stack.push(arg.clone().into()); - } - for _ in 0..frame_size - args.len() { - stack.push(Value::Empty.into()); - } + for arg in args.iter() { + stack.push(arg.clone().into()); + } + for _ in 0..frame_size - args.len() { + stack.push(Value::Empty.into()); + } - // Arity - stack.push(StackValue::Value( - Value::Integer(args.len() as DwarfInteger), - )); - // Frame size - stack.push(StackValue::Value(Value::Integer( - (frame_size + 2) as DwarfInteger, - ))); - // This is the IP sentinel value. - stack.push(Value::Empty.into()); - // Setup the frame pointer and it's sentinel. - stack.push(Value::Empty.into()); + // Arity + stack.push(StackValue::Value( + Value::Integer(args.len() as DwarfInteger), + )); + // Frame size + stack.push(StackValue::Value(Value::Integer( + (frame_size + 2) as DwarfInteger, + ))); + // This is the IP sentinel value. + stack.push(Value::Empty.into()); + // Setup the frame pointer and it's sentinel. + stack.push(Value::Empty.into()); - let fp = frame_size + 5; - let ip = *ip as isize; + let fp = frame_size + 5; + let ip = *ip as isize; - let result = self.inner_run( - func_name, - ip, - fp, - stack, - args.len(), - frame_size, - self.program.clone(), - ); + let result = self.inner_run( + func_name, + ip, + fp, + stack, + args.len(), + frame_size, + self.program.clone(), + ); - result + result + } else { + Err(BubbaError::VmPanic { + message: format!("No such function: `{}`", func_name.to_owned()), + program: self.program.clone(), + location: location!(), + } + .into()) + } } fn inner_run( @@ -413,8 +425,6 @@ impl VM { } if self.trace { - // let mutex = WRITE_MUTEX.get_or_init(|| Mutex::new(())); - // let guard = mutex.lock().unwrap(); let mutex = match unsafe { WRITE_MUTEX.get() } { Some(mutex) => mutex, None => { @@ -426,9 +436,10 @@ impl VM { } }; let _guard = mutex.lock().unwrap(); + print_stack(&stack, fp); println!("\t{} ->\t{cx}", Colour::Green.bold().paint("cx")); - println!("{}: {name}", Colour::Green.bold().paint("Thread")); + println!("{}: {name}", Colour::Green.bold().paint("Task")); print_instrs(ip, &program, &self.instrs, &self.source_map); println!(); } @@ -461,9 +472,12 @@ impl VM { #[cfg(feature = "tracy-client")] let _span = span!("AsyncCall"); + // This is the only difference between this and AsyncSpawn below. + // The only difference is that we don't capture the environment. + // Isn't that odd? self.captures = None; - self.start_task(&mut stack, *func_arity, arity, &program)?; + self.start_task(true, &mut stack, *func_arity, arity, &program)?; 1 } @@ -472,7 +486,7 @@ impl VM { #[cfg(feature = "tracy-client")] let _span = span!("AsyncSpawn"); - self.start_task(&mut stack, *func_arity, arity, &program)?; + self.start_task(true, &mut stack, *func_arity, arity, &program)?; 1 } @@ -481,8 +495,8 @@ impl VM { #[cfg(feature = "tracy-client")] let _span = span!("Await"); - let future = stack.pop().unwrap().into_pointer(); - let mut expression = &mut *s_write!(future); + let task = stack.pop().unwrap().into_pointer(); + let mut expression = &mut *s_write!(task); // dbg!(&expression); let executor = match unsafe { EXECUTOR.get() } { @@ -505,6 +519,7 @@ impl VM { if let Some(task) = s_write!(task).take() { if !*running { tracing::trace!(target: "vm", "Starting task: {name}"); + *running = true; executor.start_task(&task); } @@ -538,15 +553,15 @@ impl VM { match method.as_str() { INVOKE_FUNC => { - let plugin = s_read!(plugin); + let plugin = ref_read!(plugin); let args = stack.pop().clone().unwrap().into_value(); let Value::List { inner, .. } = args else { panic!("Expected a vector of arguments.") }; - let args = s_read!(inner) + let args = ref_read!(inner) .iter() .map(|v| { - >::into(s_read!(v).clone()) + >::into(ref_read!(v).clone()) }) .collect::>(); let func = stack.pop().clone().unwrap().into_value(); @@ -576,6 +591,7 @@ impl VM { RErr(e) => { return Err(BubbaError::VmPanic { message: format!("Plugin error: {:?}\nAttempting to call {module}::{ty}::{func}", e), + program: self.program.clone(), location: location!(), } .into()) @@ -588,10 +604,10 @@ impl VM { let Value::List { inner, .. } = args else { panic!("Expected a vector of arguments.") }; - let args = s_read!(inner) + let args = ref_read!(inner) .iter() .map(|v| { - >::into(s_read!(v).clone()) + >::into(ref_read!(v).clone()) }) .collect::>(); let func = stack.pop().clone().unwrap().into_value(); @@ -621,6 +637,7 @@ impl VM { RErr(e) => { return Err(BubbaError::VmPanic { message: format!("Plugin error: {:?}\nAttempting to call {module}::{ty}::{func}", e), + program: self.program.clone(), location: location!(), } .into()) @@ -630,6 +647,7 @@ impl VM { _ => { return Err(BubbaError::VmPanic { message: format!("Unknown method: {method}.",), + program: self.program.clone(), location: location!(), } .into()) @@ -672,6 +690,7 @@ impl VM { message: format!( "Unexpected value: {stack_local_count:?}.", ), + program: self.program.clone(), location: location!(), } .into()) @@ -704,7 +723,7 @@ impl VM { // let result = self.inner_run(arity, local_count, trace)?; // Move the frame pointer back - // fp = (&*s_read!(stack[fp])).try_into().unwrap(); + // fp = (&*ref_read!(stack[fp])).try_into().unwrap(); // fp = old_fp; // ip = old_ip; @@ -727,82 +746,23 @@ impl VM { // Maybe this could be configurable? Feature flag? Maybe // even something at runtime, although we'd need to see // how much that extra condition costs. - // let value = s_read!(captures[*from]).clone(); + // let value = ref_read!(captures[*from]).clone(); let value = captures[*from].clone(); stack[fp - arity - local_count - 3 + to] = value.into(); 1 } Instruction::Comment(_) => 1, - // Instruction::DeconstructStructExpression => { - // fn decode_expression( - // value: RefType, - // ) -> Result<(RefType, Option>)> - // { - // let read = s_read!(value); - // match &*read { - // Value::Enumeration(value) => match value { - // // 🚧 I can't tell if this is gross, or a sweet hack. - // // I think I'm referring to using the name as the scrutinee? - // EnumVariant::Unit(_, ty, value) => Ok(( - // new_ref!(Value, Value::String(ty.to_owned())), - // Some(new_ref!(Value, Value::String(value.to_owned()))), - // )), - // // EnumFieldVariant::Struct(value) => ( - // // *value.type_name().to_owned(), - // // Some(*value.get_value()), - // // ), - // EnumVariant::Tuple((ty, path), value) => { - // let path = path.split(PATH_SEP).collect::>(); - // let mut path = VecDeque::from(path); - // let name = path.pop_front().unwrap().to_owned(); - // if name.is_empty() { - // Ok(( - // new_ref!( - // Value, - // Value::String( - // s_read!(value).variant().to_owned() - // ) - // ), - // Some(s_read!(value).value().clone()), - // )) - // } else { - // Ok(( - // new_ref!(Value, Value::String(name)), - // Some(new_ref!( - // Value, - // Value::Enumeration(EnumVariant::Tuple( - // ( - // ty.clone(), - // path.into_iter() - // .collect::>() - // .join(PATH_SEP) - // ), - // value.clone(), - // )) - // )), - // )) - // } - // } - // _ => unimplemented!(), - // }, - // _ => Ok((value.clone(), None)), - // } - // } - - // let mut variant = stack.pop().unwrap(); - // while let Ok((name, value)) = decode_expression(variant.into_pointer()) { - // dbg!(&name, &value); - // stack.push(name.into()); - // if let Some(value) = value { - // variant = value.into(); - // } else { - // break; - // } - // } - - // 1 - // } + #[cfg(feature = "async")] + Instruction::CreateTask(func_arity) => { + #[cfg(feature = "tracy-client")] + let _span = span!("CreateTask"); + + // Create a task in the paused state. + self.start_task(false, &mut stack, *func_arity, arity, &program)?; + + 1 + } Instruction::Divide => { let b = stack.pop().unwrap(); let a = stack.pop().unwrap(); @@ -832,6 +792,7 @@ impl VM { } return Err(BubbaError::VmPanic { message: format!("Expected enum, found: {user_enum:?}."), + program: self.program.clone(), location: location!(), } .into()); @@ -842,7 +803,7 @@ impl VM { stack.push(Value::String(value.to_owned()).into()); } Enum::Tuple(_, value) => { - stack.push(s_read!(value).value().clone().into()); + stack.push(ref_read!(value).value().clone().into()); } _ => unimplemented!(), } @@ -905,6 +866,7 @@ impl VM { return Err::, Error>( BubbaError::VmPanic { message: format!("FieldRead unexpected value: {value}."), + program: self.program.clone(), location: location!(), } .into(), @@ -943,6 +905,7 @@ impl VM { return Err::, Error>( BubbaError::VmPanic { message: format!("Unexpected value. type: {value}."), + program: self.program.clone(), location: location!(), } .into(), @@ -958,6 +921,7 @@ impl VM { } else { return Err(BubbaError::VmPanic { location: location!(), + program: self.program.clone(), message: format!("Unknown label: {label}."), } .into()); @@ -1015,11 +979,11 @@ impl VM { let index = stack.pop().unwrap().into_value(); let list = stack.pop().unwrap(); let list = list.into_pointer(); - let list = s_read!(list); + let list = ref_read!(list); let index: usize = index.try_into()?; match &*list { Value::AnyList(vec) => { - let vec = s_read!(vec); + let vec = ref_read!(vec); if index < vec.len() { stack.push(vec[index].clone().into()); } else { @@ -1038,7 +1002,7 @@ impl VM { } } Value::List { ty: _, inner: vec } => { - let vec = s_read!(vec); + let vec = ref_read!(vec); if index < vec.len() { stack.push(vec[index].clone().into()); } else { @@ -1095,11 +1059,11 @@ impl VM { let end: usize = stack.pop().unwrap().into_value().try_into()?; let list = stack.pop().unwrap(); let list = list.into_pointer(); - let list = s_read!(list); + let list = ref_read!(list); match &*list { Value::List { ty, inner: vec } => { - let vec = s_read!(vec); + let vec = ref_read!(vec); if end < vec.len() { let list = new_ref!( Value, @@ -1161,13 +1125,13 @@ impl VM { let sep = stack.pop().unwrap(); let list = stack.pop().unwrap(); let list = list.into_pointer(); - let list = s_read!(list); + let list = ref_read!(list); match &*list { Value::List { inner, .. } => { - let inner = s_read!(inner); + let inner = ref_read!(inner); let result = inner .iter() - .map(|v| s_read!(v).to_inner_string()) + .map(|v| ref_read!(v).to_inner_string()) .collect::>() .join(sep.into_value().to_inner_string().as_str()); stack.push(Value::String(result).into()); @@ -1180,18 +1144,18 @@ impl VM { Instruction::ListLength => { let list = stack.pop().unwrap(); let list = list.into_pointer(); - let list = s_read!(list); + let list = ref_read!(list); match &*list { Value::AnyList(vec) => { - let vec = s_read!(vec); + let vec = ref_read!(vec); stack.push(Value::Integer(vec.len() as DwarfInteger).into()); } Value::List { inner, .. } => { - let inner = s_read!(inner); + let inner = ref_read!(inner); stack.push(Value::Integer(inner.len() as DwarfInteger).into()); } Value::Map { inner } => { - let inner = s_read!(inner); + let inner = ref_read!(inner); stack.push(Value::Integer(inner.len() as DwarfInteger).into()); } Value::String(str) => { @@ -1208,13 +1172,15 @@ impl VM { let list = stack.pop().unwrap(); let list = list.into_pointer(); - let list = s_read!(list); + let list = ref_read!(list); match &*list { Value::AnyList(vec) => { - let vec = s_read!(vec); + let vec = ref_read!(vec); let result = vec .iter() - .map(|v| self.invoke_lambda(&lambda, &vec![s_read!(v).clone()])) + .map(|v| { + self.invoke_lambda(&lambda, &vec![ref_read!(v).clone()]) + }) .collect::>>>()?; let result = new_ref!( Value, @@ -1222,11 +1188,13 @@ impl VM { ); stack.push(result.into()); } - Value::List { inner, ty } => { - let inner = s_read!(inner); + Value::List { ty, inner } => { + let inner = ref_read!(inner); let result = inner .iter() - .map(|v| self.invoke_lambda(&lambda, &vec![s_read!(v).clone()])) + .map(|v| { + self.invoke_lambda(&lambda, &vec![ref_read!(v).clone()]) + }) .collect::>>>()?; stack.push( Value::List { @@ -1245,7 +1213,7 @@ impl VM { let element = stack.pop().unwrap(); let list = stack.pop().unwrap(); let list = list.into_pointer(); - match &*s_read!(list) { + match &*ref_read!(list) { Value::List { inner, .. } => { let mut inner = s_write!(inner); inner.push(element.into_pointer()); @@ -1285,10 +1253,10 @@ impl VM { let map = stack.pop().unwrap(); let map = map.into_pointer(); - let map = s_read!(map); + let map = ref_read!(map); match &*map { Value::Map { inner, .. } => { - let inner = s_read!(inner); + let inner = ref_read!(inner); let ty = program.get_symbol(OPTION_TYPE).expect( "The {OPTION_TYPE} symbol is missing from the program.", ); @@ -1349,10 +1317,10 @@ impl VM { Instruction::MapLength => { let map = stack.pop().unwrap(); let map = map.into_pointer(); - let map = s_read!(map); + let map = ref_read!(map); match &*map { Value::Map { inner, .. } => { - let inner = s_read!(inner); + let inner = ref_read!(inner); stack.push(Value::Integer(inner.len() as DwarfInteger).into()); } _ => panic!("Expected a map."), @@ -1371,7 +1339,7 @@ impl VM { let ty = match ty.into_value() { Value::Enumeration(variant) => match variant { Enum::Struct(ty) => { - let ty = s_read!(ty); + let ty = ref_read!(ty); let name = ty.type_name(); name.to_owned() } @@ -1401,6 +1369,7 @@ impl VM { } else { return Err(BubbaError::VmPanic { message: format!("Missing function definition: {func}"), + program: self.program.clone(), location: location!(), } .into()); @@ -1415,6 +1384,7 @@ impl VM { let Value::Integer(value) = value else { return Err(BubbaError::VmPanic { message: format!("Expected integer, found: {value:?}."), + program: self.program.clone(), location: location!(), } .into()); @@ -1569,6 +1539,7 @@ impl VM { return Err::, Error>( BubbaError::VmPanic { message: format!("Unknown stream: {stream}."), + program: self.program.clone(), location: location!(), } .into(), @@ -1609,6 +1580,7 @@ impl VM { } BubbaError::VmPanic { message: format!("Plug-in error: {e}."), + program: self.program.clone(), location: location!(), } })?; @@ -1661,6 +1633,7 @@ impl VM { "Expected an integer, but got: {:?}.", stack.pop().unwrap() ), + program: self.program.clone(), location: location!(), } .into()); @@ -1754,6 +1727,7 @@ impl VM { let Value::String(string) = string else { return Err(BubbaError::VmPanic { message: format!("Expected a string, but got: {string:?}."), + program: self.program.clone(), location: location!(), } .into()); @@ -1776,6 +1750,7 @@ impl VM { let Value::String(replace) = replace else { return Err(BubbaError::VmPanic { message: format!("Expected a string, but got: {replace:?}."), + program: self.program.clone(), location: location!(), } .into()); @@ -1783,6 +1758,7 @@ impl VM { let Value::String(needle) = needle else { return Err(BubbaError::VmPanic { message: format!("Expected a string, but got: {needle:?}."), + program: self.program.clone(), location: location!(), } .into()); @@ -1790,6 +1766,7 @@ impl VM { let Value::String(haystack) = haystack else { return Err(BubbaError::VmPanic { message: format!("Expected a string, but got: {haystack:?}."), + program: self.program.clone(), location: location!(), } .into()); @@ -1865,12 +1842,13 @@ impl VM { 1 } Instruction::TypeCast(as_ty) => { - let Value::ValueType(as_ty) = &*s_read!(as_ty) else { + let Value::ValueType(as_ty) = &*ref_read!(as_ty) else { return Err(BubbaError::VmPanic { message: format!( "Expected a ValueType, but got: {as_ty:?}.", as_ty = *as_ty ), + program: self.program.clone(), location: location!(), } .into()); @@ -1878,7 +1856,7 @@ impl VM { let lhs = stack.pop().unwrap(); let lhs = lhs.into_pointer(); - let lhs = s_read!(lhs); + let lhs = ref_read!(lhs); let value = match &as_ty.subtype { ValueTypeEnum::List(_) => { @@ -1911,6 +1889,7 @@ impl VM { ref alpha => { return Err(BubbaError::VmPanic { message: format!("Unexpected type: {alpha:?}.",), + program: self.program.clone(), location: location!(), } .into()) @@ -1921,6 +1900,7 @@ impl VM { ty => { return Err(BubbaError::VmPanic { message: format!("Unexpected type: {ty:?}.",), + program: self.program.clone(), location: location!(), } .into()) @@ -1949,6 +1929,7 @@ impl VM { #[cfg(feature = "async")] fn start_task( &mut self, + running: bool, mut stack: &mut Vec, func_arity: usize, arity: usize, @@ -1956,7 +1937,7 @@ impl VM { ) -> Result<()> { use puteketeke::AsyncTask; - use crate::VmValueResult; + use crate::bubba::value::ValueResult; let callee = &stack[stack.len() - func_arity - 2].clone(); let stack_local_count = &stack[stack.len() - func_arity - 1].clone(); @@ -1999,6 +1980,7 @@ impl VM { _ => { return Err(BubbaError::VmPanic { message: format!("Unexpected value: {stack_local_count:?}.",), + program: self.program.clone(), location: location!(), } .into()) @@ -2059,18 +2041,23 @@ impl VM { } } }; + let worker = executor.new_worker(); - let child_task = worker.spawn_task(future).unwrap(); - executor.start_task(&child_task); + let child_task = worker.create_task(future).unwrap(); - tracing::trace!(target: "vm", "Task started: {name} {child_task:?}."); + tracing::trace!(target: "vm", "Task created: {name} {child_task:?}."); + + if running { + executor.start_task(&child_task); + tracing::trace!(target: "vm", "Task started: {name} {child_task:?}."); + } let value = new_ref!( Value, Value::Task { name, - running: true, - task: new_ref!(Option>, Some(child_task)) + running, + task: new_ref!(Option>, Some(child_task)) } ); @@ -2080,87 +2067,6 @@ impl VM { } } -// I think that this is here for the benefit of the Result type. -impl From<(FfiValue, &Value)> for Value { - fn from((ffi_value, ty): (FfiValue, &Value)) -> Self { - match ffi_value { - FfiValue::Boolean(bool_) => Self::Boolean(bool_), - FfiValue::Empty => Self::Empty, - // FfiValue::Error(e) => Self::Error(e.into()), - FfiValue::Float(num) => Self::Float(num), - FfiValue::Integer(num) => Self::Integer(num), - FfiValue::List(list) => { - let Value::ValueType(ty) = ty else { - unreachable!() - }; - let ty = ty.clone(); - let vec: Vec<_> = list - .into_iter() - .map(|v| new_ref!(Value, v.into())) - .collect(); - let list = std::sync::Arc::new(std::sync::RwLock::new(vec)); - Self::List { - ty: new_ref!(ValueType, ty), - inner: list, - } - } - FfiValue::Map(map) => { - let map: StdHashMap = map - .0 - .into_iter() - .map(|Tuple2(k, v)| (k.into(), new_ref!(Value, v.into()))) - .collect(); - let map = std::sync::Arc::new(std::sync::RwLock::new(map)); - Self::Map { inner: map } - } - FfiValue::Option(option) => match option { - ROption::RNone => Self::Empty, - ROption::RSome(value) => { - <(FfiValue, &Value) as Into>::into((RBox::into_inner(value), ty)) - } - }, - // FfiValue::ProxyType(plugin) => Self::ProxyType { - // module: plugin.module.into(), - // obj_ty: plugin.ty.into(), - // id: plugin.id.into(), - // plugin: new_ref!(PluginType, plugin.plugin), - // }, - FfiValue::Range(range) => Self::Range(range.start..range.end), - FfiValue::Result(result) => { - let tuple = match result { - RResult::RErr(err) => TupleEnum { - variant: "Err".to_owned(), - value: new_ref!( - Value, - <(FfiValue, &Value) as Into>::into((RBox::into_inner(err), ty)) - ), - }, - RResult::ROk(ok) => TupleEnum { - variant: "Ok".to_owned(), - value: new_ref!( - Value, - <(FfiValue, &Value) as Into>::into((RBox::into_inner(ok), ty)) - ), - }, - }; - - let Value::ValueType(ty) = ty else { - unreachable!() - }; - - Value::Enumeration(Enum::Tuple( - (new_ref!(ValueType, ty.to_owned()), "Result".to_owned()), - new_ref!(TupleEnum, tuple), - )) - } - FfiValue::String(str_) => Self::String(str_.into()), - FfiValue::Struct(struct_) => Self::Struct(struct_.into()), - FfiValue::Uuid(uuid) => Self::Uuid(uuid.into()), - _ => panic!("Unexpected FfiValue: {ffi_value:?}."), - } - } -} - fn print_stack(stack: &[StackValue], fp: usize) { for (i, entry) in stack.iter().enumerate() { if i == fp { @@ -2168,7 +2074,13 @@ fn print_stack(stack: &[StackValue], fp: usize) { } else { eprint!("\t \t"); } - eprintln!("stack {i}:\t{}", entry); + let string = format!("{entry}"); + let snip = string.chars().take(MAX_PRINT_LEN).collect::(); + if string.len() > MAX_PRINT_LEN { + eprintln!("stack {i}:\t{snip}..."); + } else { + eprintln!("stack {i}:\t{snip}"); + } } } @@ -2213,11 +2125,7 @@ mod tests { use tracy_client::Client; use crate::{ - bubba::instr::Thonk, - dwarf::{DwarfFloat, DwarfInteger}, - interpreter::{initialize_interpreter, PrintableValueType}, - lu_dog::ObjectStore as LuDogStore, - Context, + bubba::instr::Thonk, dwarf::DwarfInteger, lu_dog::ObjectStore as LuDogStore, s_read, }; use super::*; @@ -2230,6 +2138,7 @@ mod tests { let mut thonk = Thonk::new("test".to_string()); thonk.add_instruction(Instruction::Push(42.into()), None); + thonk.add_instruction(Instruction::Return, None); println!("{}", thonk); let mut program = Program::new(VERSION.to_owned(), BUILD_TIME.to_owned()); @@ -2249,7 +2158,7 @@ mod tests { println!("{:?}", result); println!("{:?}", vm); - assert!(result.is_err()); + assert!(result.is_ok()); } #[test] @@ -2281,7 +2190,7 @@ mod tests { assert!(result.is_ok()); - let as_int: DwarfInteger = (&*s_read!(result.unwrap())).try_into().unwrap(); + let as_int: DwarfInteger = (&*ref_read!(result.unwrap())).try_into().unwrap(); assert_eq!(as_int, 42); // let mut frame = vm.frames.pop(); @@ -2319,7 +2228,7 @@ mod tests { assert!(result.is_ok()); - let as_int: DwarfInteger = (&*s_read!(result.unwrap())).try_into().unwrap(); + let as_int: DwarfInteger = (&*ref_read!(result.unwrap())).try_into().unwrap(); assert_eq!(as_int, 111); // let mut frame = vm.frames.pop(); @@ -2357,7 +2266,7 @@ mod tests { assert!(result.is_ok()); - let as_int: DwarfInteger = (&*s_read!(result.unwrap())).try_into().unwrap(); + let as_int: DwarfInteger = (&*ref_read!(result.unwrap())).try_into().unwrap(); assert_eq!(as_int, 42); // assert_eq!(frame.ip, 4); @@ -2394,7 +2303,7 @@ mod tests { assert!(result.is_ok()); - let as_int: DwarfInteger = (&*s_read!(result.unwrap())).try_into().unwrap(); + let as_int: DwarfInteger = (&*ref_read!(result.unwrap())).try_into().unwrap(); assert_eq!(as_int, 2898); } @@ -2430,7 +2339,7 @@ mod tests { assert!(result.is_ok()); - let as_bool: bool = (&*s_read!(result.unwrap())).try_into().unwrap(); + let as_bool: bool = (&*ref_read!(result.unwrap())).try_into().unwrap(); assert!(!as_bool); // assert_eq!(frame.ip, 4); @@ -2465,7 +2374,7 @@ mod tests { assert!(result.is_ok()); - let as_bool: bool = (&*s_read!(result.unwrap())).try_into().unwrap(); + let as_bool: bool = (&*ref_read!(result.unwrap())).try_into().unwrap(); assert!(as_bool); // assert_eq!(frame.ip, 4); @@ -2500,7 +2409,7 @@ mod tests { assert!(result.is_ok()); - let as_bool: bool = (&*s_read!(result.unwrap())).try_into().unwrap(); + let as_bool: bool = (&*ref_read!(result.unwrap())).try_into().unwrap(); assert!(as_bool); // let mut frame = vm.frames.pop(); @@ -2548,7 +2457,7 @@ mod tests { assert!(result.is_ok()); - let result: String = (&*s_read!(result.unwrap())).try_into().unwrap(); + let result: String = (&*ref_read!(result.unwrap())).try_into().unwrap(); assert_eq!(result, "you rock!"); // let mut frame = vm.frames.pop(); @@ -2587,91 +2496,7 @@ mod tests { assert!(result.is_ok()); - let result: DwarfInteger = (&*s_read!(result.unwrap())).try_into().unwrap(); + let result: DwarfInteger = (&*ref_read!(result.unwrap())).try_into().unwrap(); assert_eq!(result, 42); } - - #[test] - fn test_instr_field() { - use crate::{ - chacha::value::Struct, - lu_dog::{Field, ValueType, WoogStruct}, - PATH_ROOT, - }; - use sarzak::sarzak::{ObjectStore as SarzakStore, Ty, MODEL as SARZAK_MODEL}; - - #[cfg(feature = "tracy")] - Client::start(); - - let sarzak = SarzakStore::from_bincode(SARZAK_MODEL).unwrap(); - - let ctx = Context::default(); - let struct_ty = { - let mut lu_dog = s_write!(ctx.lu_dog); - - // We need to create a WoogStruct and add some fields to it - let foo = WoogStruct::new( - "Foo".to_owned(), - PATH_ROOT.to_owned(), - None, - None, - &mut lu_dog, - ); - // let _ = WoogItem::new_woog_struct(source, &mt, lu_dog); - let struct_ty = ValueType::new_woog_struct(true, &foo, &mut lu_dog); - let ty = Ty::new_integer(&sarzak); - let ty = ValueType::new_ty(true, &ty, &mut lu_dog); - let _ = Field::new("bar".to_owned(), &foo, &ty, &mut lu_dog); - let ty = Ty::new_float(&sarzak); - let ty = ValueType::new_ty(true, &ty, &mut lu_dog); - let _ = Field::new("baz".to_owned(), &foo, &ty, &mut lu_dog); - struct_ty - }; - - let ty = Ty::new_z_string(&sarzak); - let ty = ValueType::new_ty(true, &ty, &mut s_write!(ctx.lu_dog)); - let ty = Value::ValueType((*s_read!(ty)).clone()); - - // Now we need an instance. - let dwarf_home = env::var("DWARF_HOME") - .unwrap_or_else(|_| { - let mut home = env::var("HOME").unwrap(); - home.push_str("/.dwarf"); - home - }) - .into(); - - let ctx = initialize_interpreter(2, dwarf_home, ctx).unwrap(); - let ty_name = PrintableValueType(false, struct_ty.clone(), ctx.models()); - let mut foo_inst = Struct::new(ty_name.to_string(), &struct_ty); - foo_inst.define_field("bar", 42.into()); - foo_inst.define_field("baz", std::f64::consts::PI.into()); - - let mut thonk = Thonk::new("test".to_string()); - thonk.add_instruction(Instruction::Push(Value::Struct(foo_inst)), None); - thonk.add_instruction(Instruction::Push("baz".into()), None); - thonk.add_instruction(Instruction::FieldRead, None); - thonk.add_instruction(Instruction::Return, None); - println!("{}", thonk); - let mut program = Program::new(VERSION.to_owned(), BUILD_TIME.to_owned()); - program.add_thonk(thonk); - - program.add_symbol("STRING".to_owned(), ty); - - #[cfg(feature = "async")] - let mut vm = VM::new(&program, &[], &PathBuf::new(), 1, true); - #[cfg(not(feature = "async"))] - let mut vm = VM::new(&program, &[], &PathBuf::new()); - - let result = vm.invoke("test", &[]); - println!("{:?}", result); - println!("{:?}", vm); - - // assert!(vm.stack.is_empty()); - - assert!(result.is_ok()); - - let result: DwarfFloat = (&*s_read!(result.unwrap())).try_into().unwrap(); - assert_eq!(result, std::f64::consts::PI); - } } diff --git a/src/chacha.rs b/src/chacha.rs index c90139f9..d109492b 100644 --- a/src/chacha.rs +++ b/src/chacha.rs @@ -1,8 +1,6 @@ +pub mod banner; pub mod dap; -pub mod error; pub mod ffi_value; -pub mod interpreter; -pub mod memory; +pub mod models; +pub mod pvt; pub mod value; - -pub use memory::MemoryUpdateMessage; diff --git a/src/chacha/interpreter/banner.rs b/src/chacha/banner.rs similarity index 100% rename from src/chacha/interpreter/banner.rs rename to src/chacha/banner.rs diff --git a/src/chacha/error.rs b/src/chacha/error.rs deleted file mode 100644 index dc965ad3..00000000 --- a/src/chacha/error.rs +++ /dev/null @@ -1,481 +0,0 @@ -use std::{fmt, io}; - -use ariadne::{Color, Label, Report, ReportKind, Source}; -use crossbeam::channel::SendError; -#[cfg(feature = "repl")] -use rustyline::error::ReadlineError; -use snafu::{prelude::*, Backtrace, Location}; - -use crate::{lu_dog::ValueType, s_read, RefType, Span, Value, ERR_CLR, OK_CLR, OTHER_CLR, POP_CLR}; - -#[derive(Debug, Snafu)] -pub struct Error(pub(super) ChaChaError); -pub(super) type Result = std::result::Result; - -#[derive(Debug, Snafu)] -#[snafu(visibility(pub))] -pub enum ChaChaError { - Addition { - left: Value, - right: Value, - }, - #[snafu(display("\n{}: assertion failed at {}.\n --> Found `{}`, expected `{}`.\n", ERR_CLR.bold().paint("error"), POP_CLR.underline().paint(code), s_read!(found), s_read!(expected)))] - AssertEqual { - found: RefType, - expected: RefType, - code: String, - }, - #[snafu(display("\n{}: assertion failed at {}.\n --> Found `{}`.\n", ERR_CLR.bold().paint("error"), POP_CLR.underline().paint(code), s_read!(found)))] - AssertTrue { - found: RefType, - code: String, - }, - #[snafu(display("\n{}: async not supported.", ERR_CLR.bold().paint("error")))] - AsyncNotSupported, - #[snafu(display("\n{}: internal error: {message}\n --> {}:{}:{}", ERR_CLR.bold().paint("error"), location.file, location.line, location.column))] - BadnessHappened { - message: String, - location: Location, - }, - Bang { - value: Value, - }, - #[snafu(display("\n{}: could not convert `{}` to `{}`", ERR_CLR.bold().paint("error"), src, dst))] - Conversion { - src: String, - dst: String, - }, - Division { - left: Value, - right: Value, - }, - #[snafu(display("\n{}: evaluation error", ERR_CLR.bold().paint("error")))] - Eval { - src: String, - span: Span, - }, - #[snafu(display("\n{}: ffi error: {}", ERR_CLR.bold().paint("error"), message))] - FfiError { - message: String, - }, - /// Index out of bounds - /// - #[snafu(display("\n{}: index `{}` is out of bounds for array of length `{}`.", ERR_CLR.bold().paint("error"), POP_CLR.paint(index.to_string()), POP_CLR.paint(len.to_string())))] - IndexOutOfBounds { - index: usize, - len: usize, - span: Span, - location: Location, - }, - #[snafu(display("\n{}: internal error: {}", ERR_CLR.bold().paint("error"), message))] - InternalCompilerChannel { - source: SendError, - message: String, - }, - #[snafu(display("\n{}: error with input/output `{}`.", ERR_CLR.bold().paint("error"), OTHER_CLR.paint(message)))] - IO { - message: String, - source: std::io::Error, - }, - #[snafu(display("\n{}: named item `main` found, but it is not a function.", ERR_CLR.bold().paint("error")))] - MainIsNotAFunction, - #[snafu(display("\n{}: missing definition `{}` --> {}", ERR_CLR.bold().paint("error"), OTHER_CLR.paint(name), ERR_CLR.italic().paint("this should be caught by the extruder!")))] - MissingDefinition { - name: String, - span: Span, - }, - Multiplication { - left: Value, - right: Value, - }, - Negation { - value: Value, - }, - #[snafu(display("\n{}: `{}` is not a function.", ERR_CLR.bold().paint("error"), POP_CLR.paint(value.to_string())))] - NotAFunction { - value: Value, - span: Span, - location: Location, - }, - #[snafu(display("\n{}: not an instance", ERR_CLR.bold().paint("error")))] - NotAnInstance, - #[snafu(display("\n{}: not indexable.", ERR_CLR.bold().paint("error")))] - NotIndexable { - span: Span, - location: Location, - }, - #[snafu(display("\n{}: `main` function not found.", ERR_CLR.bold().paint("error")))] - NoMainFunction, - NoSuchField { - field: String, - ty: String, - }, - #[snafu(display("\n{}: no such method `{}`.", ERR_CLR.bold().paint("error"), OTHER_CLR.paint(method)))] - NoSuchMethod { - method: String, - span: Span, - location: Location, - }, - #[snafu(display("\n{}: could not find static method `{}::{}`.", ERR_CLR.bold().paint("error"), OTHER_CLR.paint(ty), OTHER_CLR.paint(method)))] - NoSuchStaticMethod { - method: String, - ty: String, - span: Span, - location: Location, - }, - #[snafu(display("\n{}: parse error: {}", ERR_CLR.bold().paint("error"), src))] - Parse { - src: String, - span: Span, - }, - #[snafu(display("\n{}: plugin error: {}", ERR_CLR.bold().paint("error"), message))] - PluginError { - message: String, - }, - #[snafu(display("\n{}: {message}\n --> {}:{}:{}", ERR_CLR.bold().paint("error"), location.file, location.line, location.column))] - Unimplemented { - message: String, - location: Location, - }, - #[snafu(display("\nThat was the last stack frame 🥞. Your secret value is {}.", OK_CLR.paint(s_read!(value).to_string())))] - Return { - value: RefType, - ty: RefType, - }, - #[snafu(display("\n{}: chacha was not built with repl support.\n", ERR_CLR.bold().paint("error")))] - ReplNotEnabled, - #[cfg(feature = "repl")] - RustyLine { - source: ReadlineError, - }, - Store { - source: io::Error, - }, - Subtraction { - left: Value, - right: Value, - }, - #[snafu(display("\n{}: type mismatch -- expected `{}`, found `{}`", ERR_CLR.bold().paint("error"), OK_CLR.paint(expected.to_string()), ERR_CLR.bold().paint(found.to_string())))] - TypeMismatch { - expected: String, - found: String, - // expected_span: Span, - // found_span: Span, - span: Span, - location: Location, - }, - /// A Variable was not found - /// - /// While happily interpreting away, we ran into a variable that we could - /// not resolve. - #[snafu(display("\n{}: variable `{}` not found.", ERR_CLR.bold().paint("error"), POP_CLR.paint(var)))] - VariableNotFound { - var: String, - span: Span, - location: Location, - backtrace: Backtrace, - }, - #[snafu(display("\n{}: wrong number of arguments. Expected `{}`, found `{}`.", ERR_CLR.bold().paint("error"), OK_CLR.paint(expected.to_string()), ERR_CLR.bold().paint(got.to_string())))] - WrongNumberOfArguments { - expected: usize, - got: usize, - defn_span: Span, - invocation_span: Span, - location: Location, - }, -} - -pub struct ChaChaErrorReporter<'a, 'b, 'c>(pub &'a Error, pub bool, pub &'b str, pub &'c str); -impl fmt::Display for ChaChaErrorReporter<'_, '_, '_> { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - let is_uber = self.1; - let program = &self.2; - let file_name = &self.3; - - let mut std_err = Vec::new(); - - match &self.0 .0 { - ChaChaError::IndexOutOfBounds { - index, - len, - span, - location, - } => { - let mut note = format!( - "and the length of the array is {}", - POP_CLR.paint(format!("{len}")) - ); - - if is_uber { - note += &format!( - " --> {}:{}:{}", - OTHER_CLR.paint(location.file.to_string()), - POP_CLR.paint(format!("{}", location.line)), - OK_CLR.paint(format!("{}", location.column)), - ); - } - - Report::build(ReportKind::Error, file_name, span.start) - .with_message("index out of bounds 💥") - .with_label( - Label::new((file_name, span.to_owned())) - .with_message(format!( - "the index is {}", - POP_CLR.paint(format!("{index}")) - )) - .with_color(Color::Red), - ) - .with_note(note) - .finish() - .write((file_name, Source::from(&program)), &mut std_err) - .map_err(|_| fmt::Error)?; - write!(f, "{}", String::from_utf8_lossy(&std_err)) - } - ChaChaError::NoSuchMethod { - method, - span, - location, - } => { - let report = Report::build(ReportKind::Error, file_name, span.start) - .with_message("no such method") - .with_label( - Label::new((file_name, span.to_owned())) - .with_message(format!( - "in this invocation: {}", - POP_CLR.paint(method.to_string()) - )) - .with_color(Color::Red), - ); - - let report = if is_uber { - report.with_note(format!( - "{}:{}:{}", - OTHER_CLR.paint(location.file.to_string()), - POP_CLR.paint(format!("{}", location.line)), - OK_CLR.paint(format!("{}", location.column)), - )) - } else { - report - }; - - report - .finish() - .write((file_name, Source::from(&program)), &mut std_err) - .map_err(|_| fmt::Error)?; - write!(f, "{}", String::from_utf8_lossy(&std_err)) - } - ChaChaError::NoSuchStaticMethod { - method, - ty, - span, - location, - } => { - let report = Report::build(ReportKind::Error, file_name, span.start) - .with_message("no such static method") - .with_label( - Label::new((file_name, span.to_owned())) - .with_message("in this invocation".to_string()) - .with_color(Color::Red), - ); - - let report = if is_uber { - report.with_note(format!( - "{}:{}:{}", - OTHER_CLR.paint(location.file.to_string()), - POP_CLR.paint(format!("{}", location.line)), - OK_CLR.paint(format!("{}", location.column)), - )) - } else { - report.with_note(format!( - "{} does not have a static method named {}", - POP_CLR.paint(ty.to_string()), - POP_CLR.paint(method.to_string()) - )) - }; - - report - .finish() - .write((file_name, Source::from(&program)), &mut std_err) - .map_err(|_| fmt::Error)?; - write!(f, "{}", String::from_utf8_lossy(&std_err)) - } - ChaChaError::NotAFunction { - value, - span, - location, - } => { - let report = Report::build(ReportKind::Error, file_name, span.start) - .with_message(format!("{value} is not a function")) - .with_label( - Label::new((file_name, span.to_owned())) - .with_message("in this invocation") - .with_color(Color::Red), - ); - - let report = if is_uber { - report.with_note(format!( - "{}:{}:{}", - OTHER_CLR.paint(location.file.to_string()), - POP_CLR.paint(format!("{}", location.line)), - OK_CLR.paint(format!("{}", location.column)), - )) - } else { - report.with_note(value.to_string()) - }; - - report - .finish() - .write((file_name, Source::from(&program)), &mut std_err) - .map_err(|_| fmt::Error)?; - write!(f, "{}", String::from_utf8_lossy(&std_err)) - } - ChaChaError::NotIndexable { span, location } => { - let report = Report::build(ReportKind::Error, file_name, span.start) - .with_message("not indexable") - .with_label( - Label::new((file_name, span.to_owned())) - .with_message("in this expression") - .with_color(Color::Red), - ); - - let report = if is_uber { - report.with_note(format!( - "{}:{}:{}", - OTHER_CLR.paint(location.file.to_string()), - POP_CLR.paint(format!("{}", location.line)), - OK_CLR.paint(format!("{}", location.column)), - )) - } else { - report - }; - - report - .finish() - .write((file_name, Source::from(&program)), &mut std_err) - .map_err(|_| fmt::Error)?; - write!(f, "{}", String::from_utf8_lossy(&std_err)) - } - ChaChaError::TypeMismatch { - expected, - found, - // expected_span, - // found_span, - span, - location, - } => { - let msg = format!("Type mismatch: expected `{expected}`, found `{found}`."); - - let report = Report::build(ReportKind::Error, file_name, span.start) - .with_message(&msg) - .with_label( - Label::new((file_name, span.to_owned())) - .with_message(format!("expected {}", POP_CLR.paint(expected))) - .with_color(Color::Yellow), - ) - .with_label( - Label::new((file_name, span.to_owned())) - .with_message(format!("found {}", POP_CLR.paint(found))) - .with_color(Color::Red), - ); - - let report = if is_uber { - report.with_note(format!( - "{}:{}:{}", - OTHER_CLR.paint(location.file.to_string()), - POP_CLR.paint(format!("{}", location.line)), - OK_CLR.paint(format!("{}", location.column)), - )) - } else if expected == found { - report - .with_note("The types have the same name, but they are two distinct types.") - } else { - report - }; - - report - .finish() - .write((file_name, Source::from(&program)), &mut std_err) - .map_err(|_| fmt::Error)?; - write!(f, "{}", String::from_utf8_lossy(&std_err)) - } - ChaChaError::VariableNotFound { - var, - span, - location, - backtrace, - } => { - let report = Report::build(ReportKind::Error, file_name, span.start) - .with_message(format!("variable `{}` not found", POP_CLR.paint(var))) - .with_label( - Label::new((file_name, span.clone())) - .with_message("used here") - .with_color(Color::Red), - ); - - let report = if is_uber { - report.with_note(format!( - "{}:{}:{}\n{}", - OTHER_CLR.paint(location.file.to_string()), - POP_CLR.paint(format!("{}", location.line)), - OK_CLR.paint(format!("{}", location.column)), - backtrace - )) - } else if var == "assert_eq" || var == "time" || var == "eps" { - report.with_note(format!( - "This is a built-in function. Try adding `chacha::` before \ - the name, e.g. `chacha::{}`.", - POP_CLR.paint(var) - )) - } else { - report - }; - - report - .finish() - .write((file_name, Source::from(&program)), &mut std_err) - .map_err(|_| fmt::Error)?; - write!(f, "{}", String::from_utf8_lossy(&std_err)) - } - ChaChaError::WrongNumberOfArguments { - expected, - got, - defn_span, - invocation_span, - location, - } => { - let msg = format!("expected `{expected}`, found `{got}`."); - - let report = Report::build(ReportKind::Error, file_name, invocation_span.start) - .with_message("wrong number of arguments") - .with_label( - Label::new((file_name, defn_span.clone())) - .with_message("for function defined here") - .with_color(Color::Yellow), - ) - .with_label( - Label::new((file_name, invocation_span.clone())) - .with_message(msg) - .with_color(Color::Red), - ); - - let report = if is_uber { - report.with_note(format!( - "{}:{}:{}\n", - OTHER_CLR.paint(location.file.to_string()), - POP_CLR.paint(format!("{}", location.line)), - OK_CLR.paint(format!("{}", location.column)), - )) - } else { - report - }; - - report - .finish() - .write((file_name, Source::from(&program)), &mut std_err) - .map_err(|_| fmt::Error)?; - write!(f, "{}", String::from_utf8_lossy(&std_err)) - } - _ => write!(f, "{}", self.0), - } - } -} diff --git a/src/chacha/ffi_value.rs b/src/chacha/ffi_value.rs index dd58646b..5e1bcf54 100644 --- a/src/chacha/ffi_value.rs +++ b/src/chacha/ffi_value.rs @@ -5,25 +5,29 @@ use std::{ }; use abi_stable::{ - std_types::{RBox, RHashMap, ROption, RResult, RString, RVec, Tuple2}, + std_types::{RBox, RHashMap, RNone, ROption, RResult, RSome, RString, RVec, Tuple2}, StableAbi, }; use ansi_term::Colour; use rustc_hash::FxHashMap as HashMap; +use snafu::{location, Backtrace}; use uuid::Uuid; use crate::{ - bubba::value::Value as VmValue, + bubba::{ + error::{BubbaError, Result}, + new_ref, s_read, + value::Value, + RefType, + }, chacha::{ - error::{ChaChaError, Result}, value::_struct::StructAttributes, value::{Enum, Struct, TupleEnum}, }, - keywords::{ERR, OK, RESULT, RESULT_TYPE}, - lu_dog::{ObjectStore as LuDogStore, ValueType, ValueTypeEnum}, - new_ref, + keywords::{ERR, OK, RESULT_TYPE}, + lu_dog::{ValueType, ValueTypeEnum}, plug_in::PluginType, - s_read, DwarfFloat, DwarfInteger, NewRef, RefType, Value, LAMBDA_FUNCS, PATH_SEP, + DwarfFloat, DwarfInteger, LAMBDA_FUNCS, PATH_SEP, }; #[repr(C)] @@ -51,7 +55,7 @@ impl std::fmt::Display for FfiProxy { /// A value that can be passed across FFI boundaries. /// /// This is a simplified version of the `Value` type, which is used to represent -/// values in the interpreter. Using the `VmValue` type we can send values from +/// values in the interpreter. Using the `Value` type we can send values from /// the VM as well. /// #[repr(C)] @@ -86,7 +90,7 @@ pub enum FfiValue { /// List /// /// A list of values; aka a Vec. - List(RVec), + List(ROption, RVec), Map(FfiHashMap), /// Option /// @@ -140,7 +144,7 @@ impl std::fmt::Display for FfiValue { Self::Float(num) => write!(f, "{num}"), Self::Integer(num) => write!(f, "{num}"), Self::Lambda(n) => write!(f, "lambda {n}"), - Self::List(vec) => { + Self::List(_, vec) => { let mut first_time = true; write!(f, "[")?; for i in vec { @@ -224,61 +228,25 @@ where } } -impl From for FfiValue { - fn from(value: Value) -> Self { - match &value { - Value::Boolean(bool_) => Self::Boolean(bool_.to_owned()), - Value::Empty => Self::Empty, - Value::Float(num) => Self::Float(num.to_owned()), - Value::Integer(num) => Self::Integer(num.to_owned()), - Value::ProxyType { - module, - obj_ty, - id, - plugin, - } => Self::ProxyType(FfiProxy { - module: module.to_owned().into(), - ty: obj_ty.to_owned().into(), - id: id.to_owned().into(), - plugin: s_read!(plugin).clone(), - }), - Value::Range(range) => Self::Range(FfiRange { - start: range.start, - end: range.end, - }), - Value::String(str_) => Self::String(str_.to_owned().into()), - Value::Uuid(uuid) => Self::Uuid(uuid.to_owned().into()), - _ => Self::Unknown, - } - } -} +impl fmt::Display for FfiHashMap { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + let mut attrs = self.0.iter().collect::>(); + attrs.sort_by(|Tuple2(k1, _), Tuple2(k2, _)| k1.cmp(k2)); -impl From for Value { - fn from(value: FfiValue) -> Self { - match value { - FfiValue::Boolean(bool_) => Self::Boolean(bool_), - FfiValue::Empty => Self::Empty, - FfiValue::Float(num) => Self::Float(num), - FfiValue::Integer(num) => Self::Integer(num), - FfiValue::ProxyType(plugin) => Self::ProxyType { - module: plugin.module.into(), - obj_ty: plugin.ty.into(), - id: plugin.id.into(), - plugin: new_ref!(PluginType, plugin.plugin), - }, - FfiValue::Range(range) => Self::Range(range.start..range.end), - FfiValue::String(str_) => Self::String(str_.into()), - FfiValue::Uuid(uuid) => Self::Uuid(uuid.into()), - _ => Self::Unknown, + let mut out = f.debug_map(); + for Tuple2(k, v) in attrs { + out.entry(k, &format_args!("{v}")); } + + out.finish() } } -impl From for FfiValue { - fn from(value: VmValue) -> Self { +impl From for FfiValue { + fn from(value: Value) -> Self { match &value { - VmValue::Boolean(bool_) => Self::Boolean(bool_.to_owned()), - VmValue::Enumeration(e) => match e { + Value::Boolean(bool_) => Self::Boolean(bool_.to_owned()), + Value::Enumeration(e) => match e { Enum::Struct(s) => { dbg!(s); panic!() @@ -287,10 +255,10 @@ impl From for FfiValue { if ty_name == RESULT_TYPE { let t = s_read!(t); match t.variant.as_str() { - "Err" => Self::Result(RResult::RErr(RBox::new( + ERR => Self::Result(RResult::RErr(RBox::new( s_read!(t.value).clone().into(), ))), - "Ok" => Self::Result(RResult::ROk(RBox::new( + OK => Self::Result(RResult::ROk(RBox::new( s_read!(t.value).clone().into(), ))), _ => panic!(), @@ -305,9 +273,9 @@ impl From for FfiValue { Self::String(format!("{ty_name}::{v}").into()) } }, - VmValue::Empty => Self::Empty, - VmValue::Float(num) => Self::Float(num.to_owned()), - lambda @ VmValue::LambdaPointer { .. } => { + Value::Empty => Self::Empty, + Value::Float(num) => Self::Float(num.to_owned()), + lambda @ Value::LambdaPointer { .. } => { let λ = match LAMBDA_FUNCS.get() { Some(λ) => λ, None => { @@ -327,25 +295,27 @@ impl From for FfiValue { Self::Lambda(key) } - VmValue::List { ty: _, inner } => { + Value::List { ty, inner } => { + let ty = s_read!(ty); + let ty: FfiValueType = ty.clone().into(); let inner = s_read!(inner); let inner = inner.iter().map(|v| s_read!(v).clone().into()).collect(); - Self::List(inner) + Self::List(RSome(ty), inner) } - VmValue::Integer(num) => Self::Integer(num.to_owned()), - VmValue::Plugin((_name, plugin)) => Self::PlugIn(s_read!(plugin).clone()), - VmValue::Range(range) => Self::Range(FfiRange { + Value::Integer(num) => Self::Integer(num.to_owned()), + Value::Plugin((_name, plugin)) => Self::PlugIn(s_read!(plugin).clone()), + Value::Range(range) => Self::Range(FfiRange { start: range.start, end: range.end, }), - VmValue::String(str_) => Self::String(str_.to_owned().into()), - VmValue::Struct(s) => Self::Struct(s.into()), + Value::String(str_) => Self::String(str_.to_owned().into()), + Value::Struct(s) => Self::Struct(s.into()), x => panic!("Unknown FfiValue: {x}"), } } } -impl From for VmValue { +impl From for Value { fn from(value: FfiValue) -> Self { match value { FfiValue::Boolean(bool_) => Self::Boolean(bool_), @@ -362,10 +332,10 @@ impl From for VmValue { let inner = map .0 .into_iter() - .map(|Tuple2(k, v)| (k.into(), new_ref!(VmValue, v.into()))) - .collect::>>(); + .map(|Tuple2(k, v)| (k.into(), new_ref!(Value, v.into()))) + .collect::>>(); Self::Map { - inner: new_ref!(StdHashMap>, inner), + inner: new_ref!(StdHashMap>, inner), } } FfiValue::Range(range) => Self::Range(range.start..range.end), @@ -376,100 +346,136 @@ impl From for VmValue { } } -impl From<(FfiValue, &LuDogStore)> for Value { - fn from(value: (FfiValue, &LuDogStore)) -> Self { - let lu_dog = value.1; - match value.0 { +impl From<(FfiValue, &Value)> for Value { + fn from((ffi_value, ty): (FfiValue, &Value)) -> Self { + match ffi_value { FfiValue::Boolean(bool_) => Self::Boolean(bool_), FfiValue::Empty => Self::Empty, + // FfiValue::Error(e) => Self::Error(), FfiValue::Float(num) => Self::Float(num), FfiValue::Integer(num) => Self::Integer(num), + FfiValue::List(ty, list) => { + let vec: Vec<_> = list + .into_iter() + .map(|v| new_ref!(Value, v.into())) + .collect(); + let list = std::sync::Arc::new(std::sync::RwLock::new(vec)); + if let RSome(ty) = ty { + Self::List { + ty: new_ref!(ValueType, ty.into()), + inner: list, + } + } else { + Self::AnyList(list) + } + } + FfiValue::Map(map) => { + let map: StdHashMap = map + .0 + .into_iter() + .map(|Tuple2(k, v)| (k.into(), new_ref!(Value, v.into()))) + .collect(); + let map = std::sync::Arc::new(std::sync::RwLock::new(map)); + Self::Map { inner: map } + } FfiValue::Option(option) => match option { ROption::RNone => Self::Empty, - ROption::RSome(value) => <(FfiValue, &LuDogStore) as Into>::into(( - RBox::into_inner(value), - lu_dog, - )), - }, - FfiValue::ProxyType(plugin) => Self::ProxyType { - module: plugin.module.into(), - obj_ty: plugin.ty.into(), - id: plugin.id.into(), - plugin: new_ref!(PluginType, plugin.plugin), + ROption::RSome(value) => { + <(FfiValue, &Value) as Into>::into((RBox::into_inner(value), ty)) + } }, + // FfiValue::ProxyType(plugin) => Self::ProxyType { + // module: plugin.module.into(), + // obj_ty: plugin.ty.into(), + // id: plugin.id.into(), + // plugin: new_ref!(PluginType, plugin.plugin), + // }, FfiValue::Range(range) => Self::Range(range.start..range.end), FfiValue::Result(result) => { - let Some(ty) = lu_dog.exhume_enumeration_id_by_name(RESULT_TYPE) else { - panic!("Result type not found") - }; - let ty = lu_dog.exhume_enumeration(&ty).unwrap(); - let ty = s_read!(ty).r1_value_type(lu_dog)[0].clone(); - // let Some(ty) = lu_dog.iter_value_type().find(|vt| { - // if let ValueTypeEnum::Enumeration(id) = s_read!(vt).subtype { - // let id = lu_dog.exhume_enumeration(&id).unwrap(); - // if s_read!(id).id == s_read!(ty).id { - // return true; - // } - // } - // false - // }) else { - // unreachable!() - // }; - let tuple = match result { RResult::RErr(err) => TupleEnum { - variant: ERR.to_owned(), + variant: "Err".to_owned(), value: new_ref!( Value, - <(FfiValue, &LuDogStore) as Into>::into(( - RBox::into_inner(err), - lu_dog, - )) + <(FfiValue, &Value) as Into>::into((RBox::into_inner(err), ty)) ), }, RResult::ROk(ok) => TupleEnum { - variant: OK.to_owned(), + variant: "Ok".to_owned(), value: new_ref!( Value, - <(FfiValue, &LuDogStore) as Into>::into(( - RBox::into_inner(ok), - lu_dog, - )) + <(FfiValue, &Value) as Into>::into((RBox::into_inner(ok), ty)) ), }, }; + let Value::ValueType(ty) = ty else { + unreachable!() + }; + Value::Enumeration(Enum::Tuple( - (ty.clone(), RESULT.to_owned()), + (new_ref!(ValueType, ty.to_owned()), RESULT_TYPE.to_owned()), new_ref!(TupleEnum, tuple), )) } FfiValue::String(str_) => Self::String(str_.into()), - // FfiValue::UserType(uuid) => Self::UserType(new_ref!(UserType, uuid.into())), + FfiValue::Struct(struct_) => Self::Struct(struct_.into()), FfiValue::Uuid(uuid) => Self::Uuid(uuid.into()), - // FfiValue::Vector(vec) => { - // Self::Vector(vec.into_iter().map(|v| new_ref!(Value, v.into())).collect()) - // } - _ => Self::Unknown, + _ => panic!("Unexpected FfiValue: {ffi_value:?}."), } } } -impl> TryFrom for Vec { - type Error = ChaChaError; +impl TryFrom<&FfiValue> for StdHashMap +where + V: TryFrom, +{ + type Error = BubbaError; - fn try_from(value: FfiValue) -> Result { + fn try_from(value: &FfiValue) -> Result>::Error> { + match value { + FfiValue::Map(map) => { + let result: Result, _> = map + .0 + .iter() + .map(|Tuple2(k, v)| Ok((k.to_string(), v.to_owned().try_into()?))) + .collect(); + result.map_err(|_: BubbaError| BubbaError::Conversion { + src: map.to_string(), + dst: "HashMap".to_owned(), + location: location!(), + backtrace: Backtrace::capture(), + }) + } + _ => Err(BubbaError::Conversion { + src: value.to_string(), + dst: "HashMap".to_owned(), + location: location!(), + backtrace: Backtrace::capture(), + }), + } + } +} + +impl + std::fmt::Debug> TryFrom<&FfiValue> for Vec { + type Error = BubbaError; + + fn try_from(value: &FfiValue) -> Result { match value.clone() { - FfiValue::List(vec) => { + FfiValue::List(_, vec) => { let result: Result, _> = vec.into_iter().map(|v| v.try_into()).collect(); - result.map_err(|_| ChaChaError::Conversion { + result.map_err(|_| BubbaError::Conversion { src: value.to_string(), dst: "Vec".to_owned(), + location: location!(), + backtrace: Backtrace::capture(), }) } - _ => Err(ChaChaError::Conversion { + _ => Err(BubbaError::Conversion { src: value.to_string(), dst: "Vec".to_owned(), + location: location!(), + backtrace: Backtrace::capture(), }), } } @@ -481,7 +487,7 @@ impl> From> for FfiValue { .into_iter() .map(|v| v.into()) .collect::>(); - FfiValue::List(vec) + FfiValue::List(RNone, vec) } } @@ -498,88 +504,126 @@ impl From for FfiValue { } impl TryFrom for String { - type Error = ChaChaError; + type Error = BubbaError; - fn try_from(value: FfiValue) -> Result { + fn try_from(value: FfiValue) -> Result { match value { + FfiValue::Boolean(b) => Ok(b.to_string().into()), + FfiValue::Empty => Ok("()".to_owned()), + FfiValue::Error(e) => Ok(e.into()), + FfiValue::Float(f) => Ok(f.to_string().into()), + FfiValue::Integer(i) => Ok(i.to_string().into()), + FfiValue::Lambda(l) => Ok(l.to_string().into()), + FfiValue::Range(r) => Ok(format!("{}..{}", r.start, r.end).into()), FfiValue::String(s) => Ok(s.into()), - _ => Err(ChaChaError::Conversion { + FfiValue::Struct(s) => Ok(s.to_string().into()), + FfiValue::Unknown => Ok("".to_owned()), + FfiValue::Uuid(u) => Ok(u.to_string().into()), + _ => Err(BubbaError::Conversion { src: value.to_string(), dst: "String".to_owned(), - }), + location: location!(), + backtrace: Backtrace::capture(), + } + .into()), } } } impl TryFrom<&FfiValue> for String { - type Error = ChaChaError; + type Error = BubbaError; - fn try_from(value: &FfiValue) -> Result { + fn try_from(value: &FfiValue) -> Result { match value { + FfiValue::Boolean(b) => Ok(b.to_string().into()), + FfiValue::Empty => Ok("()".to_owned()), + FfiValue::Error(e) => Ok(e.to_owned().into()), + FfiValue::Float(f) => Ok(f.to_string().into()), + FfiValue::Integer(i) => Ok(i.to_string().into()), + FfiValue::Lambda(l) => Ok(l.to_string().into()), + FfiValue::Range(r) => Ok(format!("{}..{}", r.start, r.end).into()), FfiValue::String(s) => Ok(s.to_owned().into()), - _ => Err(ChaChaError::Conversion { + FfiValue::Struct(s) => Ok(s.to_string().into()), + FfiValue::Unknown => Ok("".to_owned()), + FfiValue::Uuid(u) => Ok(u.to_string().into()), + _ => Err(BubbaError::Conversion { src: value.to_string(), dst: "String".to_owned(), - }), + location: location!(), + backtrace: Backtrace::capture(), + } + .into()), } } } -// impl TryFrom<&FfiValue> for Callback -// where -// F: Fn(FfiValue) -> FfiValue + 'static, -// { -// type Error = ChaChaError; +impl TryFrom<&FfiValue> for DwarfInteger { + type Error = BubbaError; -// fn try_from(value: &FfiValue) -> Result { -// match value { -// FfiValue::Callback(c) => Ok(c.to_owned().into()), -// _ => Err(ChaChaError::Conversion { -// src: value.to_string(), -// dst: "String".to_owned(), -// }), -// } -// } -// } + fn try_from(value: &FfiValue) -> Result { + match value { + FfiValue::Integer(i) => Ok(*i), + _ => Err(BubbaError::Conversion { + src: value.to_string(), + dst: "i64".to_owned(), + location: location!(), + backtrace: Backtrace::capture(), + } + .into()), + } + } +} -impl TryFrom<&FfiValue> for i64 { - type Error = ChaChaError; +impl TryFrom<&FfiValue> for DwarfFloat { + type Error = BubbaError; - fn try_from(value: &FfiValue) -> Result { + fn try_from(value: &FfiValue) -> Result { match value { - FfiValue::Integer(i) => Ok(*i), - _ => Err(ChaChaError::Conversion { + FfiValue::Float(f) => Ok(*f), + _ => Err(BubbaError::Conversion { src: value.to_string(), dst: "i64".to_owned(), - }), + location: location!(), + backtrace: Backtrace::capture(), + } + .into()), } } } -// #[repr(C)] -// #[derive(Clone, Debug, StableAbi)] -// pub struct Callback -// where -// F: Fn(FfiValue) -> FfiValue + 'static, -// { -// callback: RBox, -// } - -// impl Callback -// where -// F: Fn(FfiValue) -> FfiValue + 'static, -// { -// pub fn new(callback: F) -> Self { -// let foo = Box::new(callback); -// let callback = RBox::from_box(foo); -// Self { callback } -// } - -// #[sabi_extern_fn] -// pub fn call(&self, i: FfiValue) -> FfiValue { -// (self.callback)(i) -// } -// } +impl TryFrom<&FfiValue> for bool { + type Error = BubbaError; + + fn try_from(value: &FfiValue) -> Result { + match value { + FfiValue::Boolean(b) => Ok(*b), + _ => Err(BubbaError::Conversion { + src: value.to_string(), + dst: "i64".to_owned(), + location: location!(), + backtrace: Backtrace::capture(), + } + .into()), + } + } +} + +impl TryFrom<&FfiValue> for () { + type Error = BubbaError; + + fn try_from(value: &FfiValue) -> Result { + match value { + FfiValue::Empty => Ok(()), + _ => Err(BubbaError::Conversion { + src: value.to_string(), + dst: "i64".to_owned(), + location: location!(), + backtrace: Backtrace::capture(), + } + .into()), + } + } +} #[repr(C)] #[derive(Clone, Debug, StableAbi)] @@ -635,7 +679,7 @@ where } } -impl From for Struct { +impl From for Struct { fn from(value: FfiStruct) -> Self { let attrs = value.attrs.clone(); let attrs = attrs @@ -680,7 +724,7 @@ where pub struct FfiValueType { pub subtype: FfiValueTypeEnum, pub bogus: bool, - pub id: usize, + pub id: FfiUuid, } impl From<&ValueType> for FfiValueType { @@ -688,7 +732,17 @@ impl From<&ValueType> for FfiValueType { Self { subtype: value.subtype.clone().into(), bogus: value.bogus, - id: value.id, + id: value.id.into(), + } + } +} + +impl From for FfiValueType { + fn from(value: ValueType) -> Self { + Self { + subtype: value.subtype.into(), + bogus: value.bogus, + id: value.id.into(), } } } @@ -698,7 +752,7 @@ impl From for ValueType { Self { subtype: value.subtype.into(), bogus: value.bogus, - id: value.id, + id: value.id.into(), } } } @@ -715,20 +769,20 @@ pub enum FfiValueTypeEnum { AnyList(FfiUuid), Char(FfiUuid), Empty(FfiUuid), - EnumGeneric(usize), - Enumeration(usize), - FuncGeneric(usize), - Function(usize), - XFuture(usize), - Import(usize), - Lambda(usize), - List(usize), - Map(usize), - ZObjectStore(usize), - XPlugin(usize), + EnumGeneric(FfiUuid), + Enumeration(FfiUuid), + FuncGeneric(FfiUuid), + Function(FfiUuid), + XFuture(FfiUuid), + Import(FfiUuid), + Lambda(FfiUuid), + List(FfiUuid), + Map(FfiUuid), + ZObjectStore(FfiUuid), + XPlugin(FfiUuid), Range(FfiUuid), - WoogStruct(usize), - StructGeneric(usize), + WoogStruct(FfiUuid), + StructGeneric(FfiUuid), Task(FfiUuid), Ty(FfiUuid), Unknown(FfiUuid), @@ -740,20 +794,20 @@ impl From for FfiValueTypeEnum { ValueTypeEnum::AnyList(uuid) => Self::AnyList(uuid.into()), ValueTypeEnum::Char(uuid) => Self::Char(uuid.into()), ValueTypeEnum::Empty(uuid) => Self::Empty(uuid.into()), - ValueTypeEnum::EnumGeneric(id) => Self::EnumGeneric(id), - ValueTypeEnum::Enumeration(id) => Self::Enumeration(id), - ValueTypeEnum::FuncGeneric(id) => Self::FuncGeneric(id), - ValueTypeEnum::Function(id) => Self::Function(id), - ValueTypeEnum::XFuture(id) => Self::XFuture(id), - ValueTypeEnum::Import(id) => Self::Import(id), - ValueTypeEnum::Lambda(id) => Self::Lambda(id), - ValueTypeEnum::List(id) => Self::List(id), - ValueTypeEnum::Map(id) => Self::Map(id), - ValueTypeEnum::ZObjectStore(id) => Self::ZObjectStore(id), - ValueTypeEnum::XPlugin(id) => Self::XPlugin(id), + ValueTypeEnum::EnumGeneric(id) => Self::EnumGeneric(id.into()), + ValueTypeEnum::Enumeration(id) => Self::Enumeration(id.into()), + ValueTypeEnum::FuncGeneric(id) => Self::FuncGeneric(id.into()), + ValueTypeEnum::Function(id) => Self::Function(id.into()), + ValueTypeEnum::XFuture(id) => Self::XFuture(id.into()), + ValueTypeEnum::Import(id) => Self::Import(id.into()), + ValueTypeEnum::Lambda(id) => Self::Lambda(id.into()), + ValueTypeEnum::List(id) => Self::List(id.into()), + ValueTypeEnum::Map(id) => Self::Map(id.into()), + ValueTypeEnum::ZObjectStore(id) => Self::ZObjectStore(id.into()), + ValueTypeEnum::XPlugin(id) => Self::XPlugin(id.into()), ValueTypeEnum::Range(uuid) => Self::Range(uuid.into()), - ValueTypeEnum::WoogStruct(id) => Self::WoogStruct(id), - ValueTypeEnum::StructGeneric(id) => Self::StructGeneric(id), + ValueTypeEnum::WoogStruct(id) => Self::WoogStruct(id.into()), + ValueTypeEnum::StructGeneric(id) => Self::StructGeneric(id.into()), ValueTypeEnum::Task(uuid) => Self::Task(uuid.into()), ValueTypeEnum::Ty(uuid) => Self::Ty(uuid.into()), ValueTypeEnum::Unknown(uuid) => Self::Unknown(uuid.into()), @@ -767,20 +821,20 @@ impl From for ValueTypeEnum { FfiValueTypeEnum::AnyList(uuid) => ValueTypeEnum::AnyList(uuid.into()), FfiValueTypeEnum::Char(uuid) => ValueTypeEnum::Char(uuid.into()), FfiValueTypeEnum::Empty(uuid) => ValueTypeEnum::Empty(uuid.into()), - FfiValueTypeEnum::EnumGeneric(id) => ValueTypeEnum::EnumGeneric(id), - FfiValueTypeEnum::Enumeration(id) => ValueTypeEnum::Enumeration(id), - FfiValueTypeEnum::FuncGeneric(id) => ValueTypeEnum::FuncGeneric(id), - FfiValueTypeEnum::Function(id) => ValueTypeEnum::Function(id), - FfiValueTypeEnum::XFuture(id) => ValueTypeEnum::XFuture(id), - FfiValueTypeEnum::Import(id) => ValueTypeEnum::Import(id), - FfiValueTypeEnum::Lambda(id) => ValueTypeEnum::Lambda(id), - FfiValueTypeEnum::List(id) => ValueTypeEnum::List(id), - FfiValueTypeEnum::Map(id) => ValueTypeEnum::Map(id), - FfiValueTypeEnum::ZObjectStore(id) => ValueTypeEnum::ZObjectStore(id), - FfiValueTypeEnum::XPlugin(id) => ValueTypeEnum::XPlugin(id), + FfiValueTypeEnum::EnumGeneric(id) => ValueTypeEnum::EnumGeneric(id.into()), + FfiValueTypeEnum::Enumeration(id) => ValueTypeEnum::Enumeration(id.into()), + FfiValueTypeEnum::FuncGeneric(id) => ValueTypeEnum::FuncGeneric(id.into()), + FfiValueTypeEnum::Function(id) => ValueTypeEnum::Function(id.into()), + FfiValueTypeEnum::XFuture(id) => ValueTypeEnum::XFuture(id.into()), + FfiValueTypeEnum::Import(id) => ValueTypeEnum::Import(id.into()), + FfiValueTypeEnum::Lambda(id) => ValueTypeEnum::Lambda(id.into()), + FfiValueTypeEnum::List(id) => ValueTypeEnum::List(id.into()), + FfiValueTypeEnum::Map(id) => ValueTypeEnum::Map(id.into()), + FfiValueTypeEnum::ZObjectStore(id) => ValueTypeEnum::ZObjectStore(id.into()), + FfiValueTypeEnum::XPlugin(id) => ValueTypeEnum::XPlugin(id.into()), FfiValueTypeEnum::Range(uuid) => ValueTypeEnum::Range(uuid.into()), - FfiValueTypeEnum::WoogStruct(id) => ValueTypeEnum::WoogStruct(id), - FfiValueTypeEnum::StructGeneric(id) => ValueTypeEnum::StructGeneric(id), + FfiValueTypeEnum::WoogStruct(id) => ValueTypeEnum::WoogStruct(id.into()), + FfiValueTypeEnum::StructGeneric(id) => ValueTypeEnum::StructGeneric(id.into()), FfiValueTypeEnum::Task(uuid) => ValueTypeEnum::Task(uuid.into()), FfiValueTypeEnum::Ty(uuid) => ValueTypeEnum::Ty(uuid.into()), FfiValueTypeEnum::Unknown(uuid) => ValueTypeEnum::Unknown(uuid.into()), @@ -801,46 +855,46 @@ impl From for RefType { new_ref!(ValueTypeEnum, ValueTypeEnum::Empty(uuid.into())) } FfiValueTypeEnum::EnumGeneric(id) => { - new_ref!(ValueTypeEnum, ValueTypeEnum::EnumGeneric(id)) + new_ref!(ValueTypeEnum, ValueTypeEnum::EnumGeneric(id.into())) } FfiValueTypeEnum::Enumeration(id) => { - new_ref!(ValueTypeEnum, ValueTypeEnum::Enumeration(id)) + new_ref!(ValueTypeEnum, ValueTypeEnum::Enumeration(id.into())) } FfiValueTypeEnum::FuncGeneric(id) => { - new_ref!(ValueTypeEnum, ValueTypeEnum::FuncGeneric(id)) + new_ref!(ValueTypeEnum, ValueTypeEnum::FuncGeneric(id.into())) } FfiValueTypeEnum::Function(id) => { - new_ref!(ValueTypeEnum, ValueTypeEnum::Function(id)) + new_ref!(ValueTypeEnum, ValueTypeEnum::Function(id.into())) } FfiValueTypeEnum::XFuture(id) => { - new_ref!(ValueTypeEnum, ValueTypeEnum::XFuture(id)) + new_ref!(ValueTypeEnum, ValueTypeEnum::XFuture(id.into())) } FfiValueTypeEnum::Import(id) => { - new_ref!(ValueTypeEnum, ValueTypeEnum::Import(id)) + new_ref!(ValueTypeEnum, ValueTypeEnum::Import(id.into())) } FfiValueTypeEnum::Lambda(id) => { - new_ref!(ValueTypeEnum, ValueTypeEnum::Lambda(id)) + new_ref!(ValueTypeEnum, ValueTypeEnum::Lambda(id.into())) } FfiValueTypeEnum::List(id) => { - new_ref!(ValueTypeEnum, ValueTypeEnum::List(id)) + new_ref!(ValueTypeEnum, ValueTypeEnum::List(id.into())) } FfiValueTypeEnum::Map(id) => { - new_ref!(ValueTypeEnum, ValueTypeEnum::Map(id)) + new_ref!(ValueTypeEnum, ValueTypeEnum::Map(id.into())) } FfiValueTypeEnum::ZObjectStore(id) => { - new_ref!(ValueTypeEnum, ValueTypeEnum::ZObjectStore(id)) + new_ref!(ValueTypeEnum, ValueTypeEnum::ZObjectStore(id.into())) } FfiValueTypeEnum::XPlugin(id) => { - new_ref!(ValueTypeEnum, ValueTypeEnum::XPlugin(id)) + new_ref!(ValueTypeEnum, ValueTypeEnum::XPlugin(id.into())) } FfiValueTypeEnum::Range(uuid) => { new_ref!(ValueTypeEnum, ValueTypeEnum::Range(uuid.into())) } FfiValueTypeEnum::WoogStruct(id) => { - new_ref!(ValueTypeEnum, ValueTypeEnum::WoogStruct(id)) + new_ref!(ValueTypeEnum, ValueTypeEnum::WoogStruct(id.into())) } FfiValueTypeEnum::StructGeneric(id) => { - new_ref!(ValueTypeEnum, ValueTypeEnum::StructGeneric(id)) + new_ref!(ValueTypeEnum, ValueTypeEnum::StructGeneric(id.into())) } FfiValueTypeEnum::Task(uuid) => { new_ref!(ValueTypeEnum, ValueTypeEnum::Task(uuid.into())) diff --git a/src/chacha/interpreter.rs b/src/chacha/interpreter.rs deleted file mode 100644 index 281b5202..00000000 --- a/src/chacha/interpreter.rs +++ /dev/null @@ -1,731 +0,0 @@ -use std::{ops::Range, path::PathBuf}; - -#[cfg(feature = "async")] -use smol::future; - -use ansi_term::Colour; -use circular_queue::CircularQueue; -use lazy_static::lazy_static; -use log::{self, log_enabled, Level::Debug}; -use parking_lot::{Condvar, Mutex}; -use snafu::{location, prelude::*, Location}; -#[cfg(feature = "tracy")] -use tracy_client::{span, Client}; -use uuid::Uuid; - -#[cfg(feature = "async")] -use puteketeke::Executor; - -use crate::{ - chacha::{ - error::{Error, Result, UnimplementedSnafu}, - memory::{Memory, MemoryUpdateMessage}, - value::Struct, - }, - lu_dog::{ - Block, Expression, ExpressionEnum, LocalVariable, ObjectStore as LuDogStore, Span, - Statement, StatementEnum, ValueType, ValueTypeEnum, Variable, XValue, - }, - new_ref, s_read, s_write, ChaChaError, Context as ExtruderContext, Dirty, ModelStore, NewRef, - RefType, Value, -}; - -mod banner; -mod context; -mod expression; -mod func_call; -mod lambda; -pub(crate) mod pvt; -mod repl; -mod statement; -mod tui; - -pub use banner::banner2; -pub(crate) use context::ModelContext; -pub(crate) use pvt::PrintableValueType; - -#[cfg(feature = "repl")] -pub use repl::start_repl; - -#[cfg(all( - feature = "tui", - not(any(feature = "single", feature = "single-vec", feature = "multi-nd-vec")) -))] -pub use tui::start_tui_repl; - -use context::Context; -use expression::{ - block, call, debugger, field, for_loop, if_expr, index, list, literal, match_expr, operator, - print, range, ret, struct_expr, typecast, variable, -}; -use func_call::eval_function_call; -use lambda::eval_lambda_expression; - -macro_rules! function { - () => {{ - fn f() {} - fn type_name_of(_: T) -> &'static str { - std::any::type_name::() - } - let name = type_name_of(f); - name.strip_suffix("::f").unwrap() - }}; -} -pub(crate) use function; - -macro_rules! trace { - ($($arg:tt)*) => { - log::trace!( - target: "chacha", - "{}: {}\n --> {}:{}:{}", - Colour::Green.dimmed().italic().paint(function!()), - format_args!($($arg)*), - file!(), - line!(), - column!() - ); - }; -} -pub(crate) use trace; - -macro_rules! debug { - ($($arg:tt)*) => { - log::debug!( - target: "chacha", - "{}: {}\n --> {}:{}:{}", - Colour::Cyan.dimmed().italic().paint(function!()), - format_args!($($arg)*), - file!(), - line!(), - column!() - ); - }; -} -pub(crate) use debug; - -macro_rules! error { - ($($arg:tt)*) => { - log::error!( - target: "chacha", - "{}: {}\n --> {}:{}:{}", - Colour::Red.dimmed().italic().paint(function!()), - format_args!($($arg)*), - file!(), - line!(), - column!() - ); - }; -} -pub(crate) use error; - -const TIMING_COUNT: usize = 1_000; - -lazy_static! { - pub(super) static ref RUNNING: Mutex = Mutex::new(true); - pub(super) static ref CVAR: Condvar = Condvar::new(); - pub(crate) static ref STEPPING: Mutex = Mutex::new(false); - pub(super) static ref EXEC_MUTEX: Mutex<()> = Mutex::new(()); -} - -pub fn shutdown_interpreter() { - let mut running = RUNNING.lock(); - *running = false; - CVAR.notify_all(); -} - -/// Initialize the interpreter -/// -pub fn initialize_interpreter( - thread_count: usize, - dwarf_home: PathBuf, - e_context: ExtruderContext, -) -> Result { - debug!("initialize_interpreter with {thread_count} threads"); - - let mut lu_dog = s_write!(e_context.lu_dog); - - // Initialize the stack with stuff from the compiled source. - let block = Block::new(false, Uuid::new_v4(), None, None, &mut lu_dog); - let (mut stack, receiver) = Memory::new(); - - // We don't really care about the dirty flag because we are just stuffing - // everything in below. - let dirty = vec![]; - - // Insert the functions in the root frame. - let funcs = lu_dog.iter_function().collect::>(); - for func in funcs { - inter_func(func, &block, &mut stack, &mut lu_dog); - } - - // Insert static methods for each struct. They go into the meta table. - for user_type in lu_dog.iter_woog_struct() { - inter_struct(user_type, &mut stack, &lu_dog); - } - - // Insert static methods for each store. They go into the meta table. - for store in lu_dog.iter_z_object_store() { - inter_store(store, &mut stack, &lu_dog); - } - - #[cfg(feature = "tracy")] - Client::start(); - - #[cfg(feature = "async")] - { - let executor = Executor::new(thread_count); - - Ok(Context::new( - format!("{} ", Colour::Blue.normal().paint("道:>")), - block, - stack, - e_context.lu_dog.clone(), - e_context.sarzak.clone(), - new_ref!(ModelStore, e_context.models), - receiver, - None, - CircularQueue::with_capacity(TIMING_COUNT), - 0, - 0, - None, - dwarf_home, - dirty, - e_context.source_path.to_owned(), - executor, - e_context.scopes, - e_context.imports, - thread_count, - )) - } - #[cfg(not(feature = "async"))] - Ok(Context::new( - format!("{} ", Colour::Blue.normal().paint("道:>")), - block, - stack, - e_context.lu_dog.clone(), - e_context.sarzak.clone(), - new_ref!(ModelStore, e_context.models), - receiver, - std_out_send, - std_out_recv, - None, - CircularQueue::with_capacity(TIMING_COUNT), - 0, - 0, - None, - dwarf_home, - dirty, - e_context.source_path.to_owned(), - e_context.scopes, - e_context.imports, - )) -} - -#[allow(unused_variables)] -fn chacha_print>(result: S, context: &mut Context) -> Result<()> { - let result_style = Colour::Green.bold(); - cfg_if::cfg_if! { - if #[cfg(feature = "print-std-out")] { - print!("{}", result_style.paint(result.as_ref())); - std::io::Write::flush(&mut std::io::stdout()).unwrap(); - } else { - context - .std_out_send() - .send(format!("{}", result_style.paint(result.as_ref()))) - .context(crate::chacha::error::InternalCompilerChannelSnafu { - message: "error writing to std out queue".to_owned(), - })?; - } - } - Ok(()) -} - -fn eval_expression( - expression: RefType, - context: &mut Context, -) -> Result> { - let lu_dog = context.lu_dog_heel().clone(); - - // context.tracy.span(span_location!("eval_expression"), 0); - // context - // .tracy - // .non_continuous_frame(frame_name!("eval_expression")); - #[cfg(feature = "tracy")] - span!("eval_expression"); - - { - let mut running = RUNNING.lock(); - if !*running { - if let Some(sender) = &context.debug_status_writer() { - let value = &s_read!(expression).r11_x_value(&s_read!(lu_dog))[0]; - debug!("value {value:#?}"); - - let span = &s_read!(value).r63_span(&s_read!(lu_dog))[0]; - - let read = s_read!(span); - let span = read.start as usize..read.end as usize; - sender.send(DebuggerStatus::Paused(span)).unwrap(); - } - debug!("waiting"); - CVAR.wait(&mut running); - debug!("notified"); - } - - if *STEPPING.lock() { - debug!("stepping"); - *running = false; - } - - debug!("running: {expression:#?}"); - trace!("stack: {:#?}", context.memory()); - } - - // Timing goodness - context.increment_expression_count(1); - - // This is nifty. With the `exec` target you get to see the expression - // being evaluated. - if log_enabled!(target: "exec", Debug) { - let value = &s_read!(expression).r11_x_value(&s_read!(lu_dog))[0]; - let span = &s_read!(value).r63_span(&s_read!(lu_dog))[0]; - let span = s_read!(span); - let span = span.start as usize..span.end as usize; - let source = context.source(); - log::debug!(target: "exec", "`{}`", source[span].to_owned()); - } - - match s_read!(expression).subtype { - #[cfg(feature = "async")] - ExpressionEnum::AWait(ref expression) => { - debug!("evaluating await"); - let expr = s_read!(lu_dog).exhume_a_wait(expression).unwrap(); - let expr = s_read!(expr).r98_expression(&s_read!(lu_dog))[0].clone(); - - let mut child = context.clone(); - let value = eval_expression(expr, &mut child)?; - - let executor = context.executor(); - - let mut write_value = s_write!(value); - match &mut *write_value { - Value::Future { - name: _, - task, - executor, - } => { - if let Some(task) = task.take() { - executor.start_task(&task); - future::block_on(task) - } else { - panic!("Who took my task!?"); - } - } - Value::Task { - worker: _, - parent: None, - } => Ok(value.clone()), - Value::Task { - worker: None, - parent: Some(parent), - } => { - executor.start_task(parent); - future::block_on(parent) - } - Value::Task { - worker: Some(worker), - // worker: _, - parent: Some(parent), - } => { - worker.start_task(parent); - future::block_on(parent) - } - huh => { - unreachable!("{huh}") - } - } - // Ok(new_ref!(Value, Value::Empty)) - } - ExpressionEnum::Block(ref block) => block::eval(block, context), - ExpressionEnum::Call(ref call) => call::eval(call, &expression, context), - ExpressionEnum::XDebugger(_) => debugger::eval(context), - ExpressionEnum::EmptyExpression(_) => Ok(new_ref!(Value, Value::Empty)), - // ExpressionEnum::EnumField(ref enum_field) => enumeration::eval(enum_field, context), - ExpressionEnum::FieldAccess(ref field) => field::field_access::eval(field, context), - ExpressionEnum::FieldExpression(ref field_expr) => { - field::field_expression::eval(field_expr, context) - } - ExpressionEnum::ForLoop(ref for_loop) => for_loop::eval(for_loop, context), - ExpressionEnum::Index(ref index) => index::eval_index(index, context), - // - // Lambda - // - // I know it's called eval_expression, but we don't actually want to - // evaluate the lambda, we just want to return it. - // It's eventually evaluated by ExpressionEnum::Call. - // - ExpressionEnum::Lambda(ref lambda) => { - let lambda = s_read!(lu_dog).exhume_lambda(lambda).unwrap(); - Ok(new_ref!(Value, Value::Lambda(lambda))) - } - ExpressionEnum::ListElement(ref element) => list::eval_list_element(element, context), - ExpressionEnum::ListExpression(ref list) => list::eval_list_expression(list, context), - ExpressionEnum::Literal(ref literal) => literal::eval(literal, context), - ExpressionEnum::Operator(ref operator) => { - operator::eval_operator(operator, &expression, context) - } - ExpressionEnum::XPrint(ref print) => print::eval(print, context), - ExpressionEnum::RangeExpression(ref range) => range::eval_range(range, context), - ExpressionEnum::StructExpression(ref expr) => struct_expr::eval(expr, context), - ExpressionEnum::TypeCast(ref expr) => typecast::eval(expr, context), - ExpressionEnum::VariableExpression(ref expr) => variable::eval(expr, &expression, context), - ExpressionEnum::XIf(ref expr) => if_expr::eval_if_expression(expr, context), - ExpressionEnum::XMatch(ref expr) => match_expr::eval(expr, context), - ExpressionEnum::XReturn(ref expr) => ret::eval(expr, context), - ref alpha => { - ensure!( - false, - UnimplementedSnafu { - message: format!("Hey! Implement expression: {:?}!", alpha), - location: location!(), - } - ); - - Ok(new_ref!(Value, Value::Empty)) - } - } -} - -pub fn eval_statement( - statement: RefType, - context: &mut Context, -) -> Result> { - let lu_dog = context.lu_dog_heel().clone(); - - debug!("eval_statement statement {statement:?}"); - trace!("eval_statement stack {:?}", context.memory()); - - #[cfg(feature = "tracy")] - span!("eval_statement"); - - // This is the entrypoint from the REPL, which is where the dirty thing comes - // into play. - for dirty in context.dirty() { - match dirty { - Dirty::Func(f) => inter_func( - f.clone(), - &context.block().clone(), - context.memory(), - &mut s_write!(lu_dog), - ), - Dirty::Store(ref s_id) => { - let store = s_read!(lu_dog).exhume_z_object_store(s_id).unwrap(); - inter_store(store, context.memory(), &s_read!(lu_dog)); - } - Dirty::Struct(s) => inter_struct(s.clone(), context.memory(), &s_read!(lu_dog)), - foobar => { - dbg!(foobar); - } - } - } - - context.clear_dirty(); - - match s_read!(statement).subtype { - StatementEnum::ExpressionStatement(ref stmt) => { - let stmt = s_read!(lu_dog).exhume_expression_statement(stmt).unwrap(); - let stmt = s_read!(stmt); - let expr = stmt.r31_expression(&s_read!(lu_dog))[0].clone(); - let _value = eval_expression(expr, context)?; - - Ok(new_ref!(Value, Value::Empty)) - } - StatementEnum::LetStatement(ref stmt) => { - let stmt = s_read!(lu_dog).exhume_let_statement(stmt).unwrap(); - let stmt = s_read!(stmt); - debug!("StatementEnum::LetStatement: stmt {stmt:?}"); - - let expr = stmt.r20_expression(&s_read!(lu_dog))[0].clone(); - debug!("expr {expr:?}"); - - let value = eval_expression(expr, context)?; - debug!("value {value:?}"); - - let var = s_read!(stmt.r21_local_variable(&s_read!(lu_dog))[0]).clone(); - let var = s_read!(var.r12_variable(&s_read!(lu_dog))[0]).clone(); - - debug!("allocating space for `{} = {}`", var.name, s_read!(value)); - context.memory().insert(var.name, value); - - Ok(new_ref!(Value, Value::Empty)) - } - StatementEnum::ResultStatement(ref stmt) => { - let stmt = s_read!(lu_dog).exhume_result_statement(stmt).unwrap(); - let stmt = s_read!(stmt); - debug!("StatementEnum::ResultStatement: stmt {stmt:?}"); - - let expr = stmt.r41_expression(&s_read!(lu_dog))[0].clone(); - debug!("StatementEnum::ResultStatement expr {expr:?}"); - - let value = eval_expression(expr, context)?; - debug!("StatementEnum::ResultStatement value {value:?}"); - - Ok(value) - } - StatementEnum::ItemStatement(_) => Ok(new_ref!(Value, Value::Empty)), - } -} - -#[derive(Debug)] -pub enum DebuggerStatus { - Error(String), - Paused(Range), - Running, - StdOut(String), - Stopped(RefType, RefType), -} - -pub enum DebuggerControl { - ExecuteInput(String), - Run, - SetBreakpoint(usize), - StepInto, - StepOver, - Stop, -} - -/// This runs the main function, assuming it exists. -pub fn start_func( - name: &str, - stopped: bool, - context: &mut Context, -) -> Result, Error> { - { - let mut running = RUNNING.lock(); - *running = !stopped; - } - - let stack = context.memory(); - - if let Some(main) = stack.get(name) { - // This should fail if it's not a function. Actually, I think that it _has_ - // to be a function. Unless there's another named item that I'm not thinking - // of. I mean, maybe `use main;` would trigger this to return OK(()), and - // not do anything? - if let Value::Function(ref main) = *s_read!(main) { - let main = s_read!(context.lu_dog_heel()) - .exhume_function(&s_read!(main).id) - .unwrap(); - - let value_ty = &s_read!(main).r1_value_type(&s_read!(context.lu_dog_heel()))[0]; - let span = &s_read!(value_ty).r62_span(&s_read!(context.lu_dog_heel()))[0]; - - let result = eval_function_call(main, &[], None, true, span, context)?; - - #[allow(clippy::redundant_clone)] - // ^^^^^^^^^^^^^^^ : It's not redundant. - // The macro is just hiding the fact that it isn't. - // This is redundant: the above is not redundant. - Ok(result) - } else { - Err(Error(ChaChaError::MainIsNotAFunction)) - } - } else { - Err(Error(ChaChaError::NoMainFunction)) - } -} - -fn typecheck( - lhs: &RefType, - rhs: &RefType, - span: &RefType, - location: Location, - context: &Context, -) -> Result<()> { - cfg_if::cfg_if! { - if #[cfg(any(feature = "single", feature = "single-vec", feature = "single-vec-tracy", feature = "debug"))] { - if std::rc::Rc::as_ptr(lhs) == std::rc::Rc::as_ptr(rhs) { - return Ok(()); - } - } else { - if std::sync::Arc::as_ptr(lhs) == std::sync::Arc::as_ptr(rhs) { - return Ok(()); - } - } - } - - let (lhs_t, rhs_t) = (&s_read!(lhs).subtype, &s_read!(rhs).subtype); - - // If it's a lambda we test the function signature: return type, and parameters. - // 🚧 looks like I'm only testing the return type. - if let ValueTypeEnum::Lambda(l) = lhs_t { - if let ValueTypeEnum::Lambda(r) = rhs_t { - let l = s_read!(context.lu_dog_heel()).exhume_lambda(l).unwrap(); - let r = s_read!(context.lu_dog_heel()).exhume_lambda(r).unwrap(); - let lrt = s_read!(l).return_type; - let rrt = s_read!(r).return_type; - let l = s_read!(context.lu_dog_heel()) - .exhume_value_type(&lrt) - .unwrap(); - let r = s_read!(context.lu_dog_heel()) - .exhume_value_type(&rrt) - .unwrap(); - let l = &s_read!(l).subtype; - let r = &s_read!(r).subtype; - if l == r { - return Ok(()); - } - } - } - - if let ValueTypeEnum::Enumeration(a) = lhs_t { - if let ValueTypeEnum::Enumeration(b) = rhs_t { - let lu_dog = context.lu_dog_heel(); - let lu_dog = s_read!(lu_dog); - - let a = lu_dog.exhume_enumeration(a).unwrap(); - let b = lu_dog.exhume_enumeration(b).unwrap(); - let a = s_read!(a); - let b = s_read!(b); - - let a_name = if let Some(next) = a.name.split('<').next() { - next - } else { - &a.name - }; - let b_name = if let Some(next) = b.name.split('<').next() { - next - } else { - &b.name - }; - - if a_name == b_name { - return Ok(()); - } - } - } - - // Checking for proxy type/woog struct equivalence. - if let ValueTypeEnum::WoogStruct(rhs_id) = rhs_t { - if let ValueTypeEnum::Ty(lhs_id) = lhs_t { - let woog_struct = s_read!(context.lu_dog_heel()) - .exhume_woog_struct(rhs_id) - .unwrap(); - if s_read!(woog_struct).object == Some(*lhs_id) { - return Ok(()); - } - } - } - - if matches!( - lhs_t, - ValueTypeEnum::FuncGeneric(_) - | ValueTypeEnum::EnumGeneric(_) - | ValueTypeEnum::StructGeneric(_) - ) { - return Ok(()); - } - - if lhs_t == rhs_t { - Ok(()) - } else { - let lhs = PrintableValueType(true, lhs.to_owned(), context.models()); - let rhs = PrintableValueType(true, rhs.to_owned(), context.models()); - Err(ChaChaError::TypeMismatch { - expected: lhs.to_string(), - found: rhs.to_string(), - span: s_read!(span).start as usize..s_read!(span).end as usize, - location, - }) - } -} - -fn inter_func( - func: RefType, - block: &RefType, - stack: &mut Memory, - lu_dog: &mut LuDogStore, -) { - let imp = s_read!(func).r9_implementation_block(lu_dog); - if imp.is_empty() { - let name = s_read!(func).name.clone(); - let value = Value::Function(func.clone()); - let ty = s_read!(func).r1_value_type(lu_dog)[0].clone(); - - // Build the local in the AST. - let local = LocalVariable::new(Uuid::new_v4(), lu_dog); - let var = Variable::new_local_variable(name.clone(), &local, lu_dog); - let _value = XValue::new_variable(block, &ty, &var, lu_dog); - - trace!("inserting local function {}", name); - stack.insert(name, new_ref!(Value, value)); - } -} - -fn inter_struct( - woog_struct: RefType, - stack: &mut Memory, - lu_dog: &LuDogStore, -) { - let woog_struct = s_read!(woog_struct); - // Create a meta table for each struct. - debug!("inserting struct in meta table {}", woog_struct.name); - stack.insert_meta_table(woog_struct.name.to_owned()); - let impl_ = woog_struct.r8c_implementation_block(lu_dog); - if !impl_.is_empty() { - // For each function in the impl, insert the function. I should probably - // check and only insert the static functions. - for func in s_read!(impl_[0]).r9_function(lu_dog) { - let insert = if let Some(param) = s_read!(func).r82_parameter(lu_dog).first() { - let var = &s_read!(param).r12_variable(lu_dog)[0]; - let var = s_read!(var); - var.name != "self" - } else { - true - }; - - if insert { - debug!("inserting static function {}", s_read!(func).name); - stack.insert_meta( - &woog_struct.name, - s_read!(func).name.to_owned(), - new_ref!(Value, Value::Function(func.clone(),)), - ) - } - } - } -} - -fn inter_store( - store: RefType, - stack: &mut Memory, - lu_dog: &LuDogStore, -) { - let store = s_read!(store); - // Create a meta table for each struct. - debug!("inserting store in meta table {}", store.domain); - stack.insert_meta_table(store.name.to_owned()); - let impl_ = store.r83c_implementation_block(lu_dog); - if !impl_.is_empty() { - // For each function in the impl, insert the function. I should probably - // check and only insert the static functions. - // 🚧 Only insert the static functions - for func in s_read!(impl_[0]).r9_function(lu_dog) { - let insert = if let Some(param) = s_read!(func).r82_parameter(lu_dog).first() { - let var = &s_read!(param).r12_variable(lu_dog)[0]; - let var = s_read!(var); - var.name != "self" - } else { - true - }; - - if insert { - debug!("inserting static function {}", s_read!(func).name); - stack.insert_meta( - &store.name, - s_read!(func).name.to_owned(), - new_ref!(Value, Value::Function(func.clone(),)), - ) - } - } - } -} diff --git a/src/chacha/interpreter/context.rs b/src/chacha/interpreter/context.rs deleted file mode 100644 index ae43ea6e..00000000 --- a/src/chacha/interpreter/context.rs +++ /dev/null @@ -1,377 +0,0 @@ -use std::path::PathBuf; - -#[cfg(feature = "async")] -use puteketeke::{Executor, Worker}; - -use circular_queue::CircularQueue; -use crossbeam::channel::{unbounded, Receiver, Sender}; -use rustc_hash::{FxHashMap as HashMap, FxHashSet as HasSet}; - -use crate::{ - interpreter::{DebuggerStatus, Memory, MemoryUpdateMessage}, - lu_dog::{Block, ObjectStore as LuDogStore, ValueType}, - new_ref, - plug_in::LambdaCall, - s_read, s_write, - sarzak::{ObjectStore as SarzakStore, Ty}, - Dirty, ModelStore, NewRef, RefType, Value, -}; - -#[derive(Clone, Debug)] -pub struct ModelContext { - lu_dog: RefType, - sarzak: RefType, - models: RefType, -} - -impl ModelContext { - pub fn new( - lu_dog: RefType, - sarzak: RefType, - models: RefType, - ) -> Self { - Self { - lu_dog, - sarzak, - models, - } - } - - pub fn lu_dog(&self) -> &RefType { - &self.lu_dog - } - - pub fn sarzak(&self) -> &RefType { - &self.sarzak - } - - pub fn models(&self) -> &RefType { - &self.models - } -} - -#[derive(Clone, Debug)] -pub struct Context { - models: ModelContext, - /// The prompt to display in the REPL - prompt: String, - /// The root block, used by the REPL - block: RefType, - memory: Memory, - mem_update_recv: Receiver, - #[allow(dead_code)] - std_out_send: Sender, - std_out_recv: Receiver, - debug_status_writer: Option>, - // obj_file_path: Option, - timings: CircularQueue, - expr_count: usize, - func_calls: usize, - args: Option>, - dwarf_home: PathBuf, - dirty: Vec, - #[cfg(feature = "async")] - worker: Option, - #[cfg(feature = "async")] - executor: Executor, - source_file: String, - scopes: HashMap, - imports: HasSet, - #[cfg(feature = "async")] - thread_count: usize, - lambda_sender: Sender, - lambda_receiver: Receiver, -} - -/// Save the lu_dog model when the context is dropped -/// -/// NB: This doesn't work. The thread that started us apparently goes away -/// before we get a chance to run this to completion. That's my current -/// working hypothesis. -/// -/// Shouldn't this work if we are joining the threads? Maybe I wasn't doing that? -/// Do I still need this? -/// I do if we want to save the model on exit. -// impl Drop for Context { -// fn drop(&mut self) { -// // s_read!(self.lu_dog) -// // .unwrap() -// // .persist_bincode(&self.obj_file_path) -// // .unwrap(); -// } -// } - -impl Context { - #[cfg(feature = "async")] - #[allow(clippy::too_many_arguments)] - pub fn new( - prompt: String, - block: RefType, - memory: Memory, - lu_dog: RefType, - sarzak: RefType, - models: RefType, - mem_update_recv: Receiver, - debug_status_writer: Option>, - timings: CircularQueue, - expr_count: usize, - func_calls: usize, - args: Option>, - dwarf_home: PathBuf, - dirty: Vec, - source_file: String, - executor: Executor, - scopes: HashMap, - imports: HasSet, - thread_count: usize, - ) -> Self { - let (std_out_send, std_out_recv) = unbounded(); - let (lambda_sender, lambda_receiver) = unbounded(); - - Self { - prompt, - block, - memory, - models: ModelContext::new(lu_dog, sarzak, models), - mem_update_recv, - std_out_send, - std_out_recv, - debug_status_writer, - timings, - expr_count, - func_calls, - args, - dwarf_home, - dirty, - source_file, - worker: Some(executor.root_worker()), - executor, - scopes, - imports, - thread_count, - lambda_sender, - lambda_receiver, - } - } - - #[cfg(not(feature = "async"))] - #[allow(clippy::too_many_arguments)] - pub fn new( - prompt: String, - block: RefType, - memory: Memory, - lu_dog: RefType, - sarzak: RefType, - models: RefType, - mem_update_recv: Receiver, - debug_status_writer: Option>, - timings: CircularQueue, - expr_count: usize, - func_calls: usize, - args: Option>, - dwarf_home: PathBuf, - dirty: Vec, - source_file: String, - scopes: HashMap, - imports: HasSet, - ) -> Self { - let (std_out_send, std_out_recv) = unbounded(); - let (lambda_sender, lambda_receiver) = unbounded(); - - Self { - prompt, - block, - memory, - models: ModelContext::new(lu_dog, sarzak, models), - mem_update_recv, - std_out_send, - std_out_recv, - debug_status_writer, - timings, - expr_count, - func_calls, - args, - dwarf_home, - dirty, - source_file, - scopes, - imports, - lambda_sender, - lambda_receiver, - } - } - - pub fn lambda_sender(&self) -> Sender { - self.lambda_sender.clone() - } - - pub fn lambda_receiver(&self) -> Receiver { - self.lambda_receiver.clone() - } - - #[cfg(feature = "async")] - pub fn thread_count(&self) -> usize { - self.thread_count - } - - pub fn imports(&mut self) -> &mut HasSet { - &mut self.imports - } - - pub fn scopes(&mut self) -> &mut HashMap { - &mut self.scopes - } - - pub fn get_source_file(&self) -> &str { - self.source_file.as_str() - } - - #[cfg(feature = "async")] - pub fn worker(&self) -> Option<&Worker> { - self.worker.as_ref() - } - - #[cfg(feature = "async")] - pub fn executor(&self) -> &Executor { - &self.executor - } - - #[cfg(feature = "async")] - pub fn new_worker(&self) -> Self { - let mut result = self.clone(); - result.worker = Some(self.executor.new_worker()); - result - } - - pub fn dirty(&self) -> Vec { - self.dirty.clone() - } - - pub fn clear_dirty(&mut self) { - self.dirty.clear(); - } - - pub fn set_dirty(&mut self, dirty: Vec) { - self.dirty = dirty; - } - - pub fn std_out_recv(&self) -> &Receiver { - &self.std_out_recv - } - - pub fn debug_status_writer(&self) -> Option<&Sender> { - self.debug_status_writer.as_ref() - } - - pub fn set_debug_status_writer(&mut self, writer: Sender) { - self.debug_status_writer = Some(writer); - } - - pub fn add_args(&mut self, args: Vec) { - let ty = Ty::new_z_string(&s_read!(self.sarzak_heel())); - let ty = ValueType::new_ty(true, &ty, &mut s_write!(self.lu_dog_heel())); - let inner: Vec> = args - .into_iter() - .map(|a| new_ref!(Value, a.into())) - .collect(); - let inner = new_ref!(Vec>, inner); - self.args = Some(new_ref!(Value, Value::List { ty, inner })); - } - - // pub fn register_model

(&self, model_name: String, model_path: P) -> Result<()> - // where - // P: AsRef, - // { - // let model = - // SarzakStore::load(model_path.as_ref()).map_err(|e| ChaChaError::Store { source: e })?; - - // s_write!(self.models).insert(model_name, model); - - // Ok(()) - // } - - pub fn register_memory_updates(&self) -> Receiver { - self.mem_update_recv.clone() - } - - pub fn std_out_send(&self) -> &Sender { - &self.std_out_send - } - - pub fn get_std_out(&self) -> Receiver { - self.std_out_recv.clone() - } - - pub fn drain_std_out(&self) -> Vec { - let mut out = Vec::new(); - while let Ok(line) = self.std_out_recv.try_recv() { - out.push(line); - } - out - } - - pub fn get_args(&self) -> Option> { - self.args.clone() - } - - pub fn get_home(&self) -> &PathBuf { - &self.dwarf_home - } - - pub fn memory(&mut self) -> &mut Memory { - &mut self.memory - } - - pub fn prompt(&self) -> &str { - &self.prompt - } - - #[inline] - pub fn increment_expression_count(&mut self, count: usize) { - self.expr_count += count; - } - - #[inline] - pub fn increment_call_count(&mut self) { - self.func_calls += 1; - } - - #[inline] - pub fn get_expression_count(&self) -> usize { - self.expr_count - } - - pub fn get_timings(&self) -> Vec { - self.timings.iter().copied().collect() - } - - #[inline] - pub fn new_timing(&mut self, timing: f64) { - self.timings.push(timing); - } - - pub fn source(&self) -> String { - let source = s_read!(self.models.lu_dog()) - .iter_dwarf_source_file() - .next() - .unwrap(); - let source = s_read!(source); - source.source.clone() - } - - pub fn lu_dog_heel(&self) -> &RefType { - self.models.lu_dog() - } - - pub fn block(&self) -> &RefType { - &self.block - } - - pub fn sarzak_heel(&self) -> &RefType { - self.models.sarzak() - } - - pub fn models(&self) -> &ModelContext { - &self.models - } -} diff --git a/src/chacha/interpreter/expression.rs b/src/chacha/interpreter/expression.rs deleted file mode 100644 index 5296c5aa..00000000 --- a/src/chacha/interpreter/expression.rs +++ /dev/null @@ -1,18 +0,0 @@ -pub(super) mod block; -pub(super) mod call; -pub(super) mod debugger; -// (super)pub mod enumeration; -pub(super) mod field; -pub(super) mod for_loop; -pub(super) mod if_expr; -pub(super) mod index; -pub(super) mod list; -pub(super) mod literal; -pub(super) mod match_expr; -pub(super) mod operator; -pub(super) mod print; -pub(super) mod range; -pub(super) mod ret; -pub(super) mod struct_expr; -pub(super) mod typecast; -pub(super) mod variable; diff --git a/src/chacha/interpreter/expression/block.rs b/src/chacha/interpreter/expression/block.rs deleted file mode 100644 index 4500723d..00000000 --- a/src/chacha/interpreter/expression/block.rs +++ /dev/null @@ -1,72 +0,0 @@ -#[cfg(feature = "async")] -use tracing::{debug_span, Instrument}; - -use crate::{ - chacha::error::Result, - interpreter::{eval_statement, Context}, - lu_dog::Block, - new_ref, s_read, NewRef, RefType, SarzakStorePtr, Value, -}; - -pub fn eval(block_id: &SarzakStorePtr, context: &mut Context) -> Result> { - let lu_dog = context.lu_dog_heel().clone(); - - let block = s_read!(lu_dog).exhume_block(block_id).unwrap(); - - #[cfg(feature = "async")] - { - if s_read!(block).a_sink { - let mut cloned_context = context.clone(); - let span = debug_span!("async block", target = "async"); - let future = async move { eval_inner(block, &mut cloned_context) }.instrument(span); - let task = context.worker().unwrap().create_task(future).unwrap(); - - let value = new_ref!( - Value, - Value::Future { - name: "block".to_owned(), - task: Some(task), - executor: context.executor().clone() - } - ); - - Ok(value) - } else { - eval_inner(block, context) - } - } - #[cfg(not(feature = "async"))] - eval_inner(block, context) -} - -pub fn eval_inner(block: RefType, context: &mut Context) -> Result> { - let lu_dog = context.lu_dog_heel().clone(); - - let stmts = s_read!(block).r18_statement(&s_read!(lu_dog)); - - if !stmts.is_empty() { - context.memory().push_frame(); - let mut value; - let mut next = s_read!(block).r71_statement(&s_read!(lu_dog))[0].clone(); - - loop { - value = eval_statement(next.clone(), context).map_err(|e| { - context.memory().pop_frame(); - e - })?; - - if let Some(ref id) = s_read!(next.clone()).next { - next = s_read!(lu_dog).exhume_statement(id).unwrap(); - } else { - break; - } - } - - // Clean up - context.memory().pop_frame(); - - Ok(value) - } else { - Ok(new_ref!(Value, Value::Empty)) - } -} diff --git a/src/chacha/interpreter/expression/call.rs b/src/chacha/interpreter/expression/call.rs deleted file mode 100644 index 33f20b02..00000000 --- a/src/chacha/interpreter/expression/call.rs +++ /dev/null @@ -1,1323 +0,0 @@ -use std::{collections::VecDeque, path::Path, time::Duration, time::Instant}; - -use abi_stable::library::{lib_header_from_path, LibrarySuffix, RawLibrary}; -use ansi_term::Colour; - -#[cfg(feature = "async")] -use async_io::Timer; - -#[cfg(feature = "async")] -use tracing::{debug_span, Instrument}; - -#[cfg(feature = "async")] -use crate::keywords::{ASLEEP, ONE_SHOT, SPAWN, SPAWN_NAMED, TIMER}; - -use abi_stable::std_types::{RErr, ROk}; -use snafu::{location, prelude::*, Location}; -use uuid::Uuid; - -use crate::{ - chacha::{ - error::{ - ChaChaError::WrongNumberOfArguments, NoSuchStaticMethodSnafu, Result, TypeMismatchSnafu, - }, - ffi_value::FfiValue, - }, - interpreter::{ - debug, error, eval_expression, eval_function_call, eval_lambda_expression, function, - ChaChaError, Context, PrintableValueType, - }, - keywords::{ - ARGS, ASSERT, ASSERT_EQ, CHACHA, EPS, EVAL, FN_NEW, FORMAT, FQ_UUID_TYPE, INVOKE_FUNC, - IS_DIGIT, LEN, LINES, MAP, MAX, NEW, PARSE, PLUGIN, PUSH, SLEEP, SPLIT, SUM, TIME, - TO_DIGIT, TRIM, TYPEOF, UUID_TYPE, - }, - lu_dog::{CallEnum, Expression, ValueType, ValueTypeEnum}, - new_ref, - plug_in::{PluginModRef, PluginType}, - s_read, s_write, - sarzak::Ty, - DwarfInteger, NewRef, RefType, SarzakStorePtr, Value, ValueResult, PATH_SEP, -}; - -mod chacha; - -// 🚧 I feel like this could use a good looking at. It smells bad. -pub fn eval( - call_id: &SarzakStorePtr, - expression: &RefType, - context: &mut Context, -) -> ValueResult { - let lu_dog = context.lu_dog_heel().clone(); - let sarzak = context.sarzak_heel().clone(); - - let call = s_read!(lu_dog).exhume_call(call_id).unwrap(); - let first_arg = s_read!(call).argument; - debug!("call {call:?}"); - let mut args = s_read!(call).r28_argument(&s_read!(lu_dog)); - debug!("args {args:?}"); - - let arg_check = s_read!(call).arg_check; - if arg_check { - // Here we are just clearing the flag -- the actual check happens at - // the call site. - s_write!(call).arg_check = false; - } - - let value = &s_read!(expression).r11_x_value(&s_read!(lu_dog))[0]; - let span = s_read!(value).r63_span(&s_read!(lu_dog))[0].clone(); - - // This optional expression is the LHS of the call. - let value = if let Some(ref expr) = s_read!(call).expression { - let expr = s_read!(lu_dog).exhume_expression(expr).unwrap(); - // Evaluate the LHS to get at the underlying value/instance. - let value = eval_expression(expr, context)?; - debug!("ExpressionEnum::Call LHS value {:?}", s_read!(value)); - - let mut eval_lhs = || -> Result> { - // Below we are reading the value of the LHS, and then using that - // to determine what to do with the RHS. - let read_value = s_read!(value); - match &*read_value { - Value::Function(ref func) => { - let func = s_read!(lu_dog).exhume_function(&s_read!(func).id).unwrap(); - debug!("ExpressionEnum::Call func: {func:?}"); - let value = - eval_function_call(func, &args, first_arg, arg_check, &span, context)?; - debug!("value {value:?}"); - Ok(value) - } - Value::Lambda(ref ƛ) => { - let ƛ = s_read!(lu_dog).exhume_lambda(&s_read!(ƛ).id).unwrap(); - debug!("ExpressionEnum::Call ƛ: {ƛ:?}"); - let args: Vec> = args - .iter() - .map(|arg| { - let expression = s_read!(arg).expression; - let expression = - s_read!(lu_dog).exhume_expression(&expression).unwrap(); - eval_expression(expression, context).unwrap() - }) - .collect(); - - let value = eval_lambda_expression(ƛ, &args, arg_check, &span, context)?; - debug!("value {value:?}"); - Ok(value) - } - _ => Ok(value.clone()), - } - }; - - let ty = s_read!(value).get_value_type(&s_read!(sarzak), &s_read!(lu_dog)); - - // First we need to check the type of the LHS to see if there are - // any instance methods on the type. This seems weird. I'm not sure - // where to put it in my brain just yet. - // But basically it comes down to allowing things like - // `"dwarf".len()` - // Or iterator things like - // `[1, 2, 3].iter().map(|x| x + 1)` - // `["hello", "I", "am", "dwarf!"].sort(); - let x = match &s_read!(ty).subtype { - ValueTypeEnum::Char(_) => value, - ValueTypeEnum::Ty(ref id) => { - let ty = s_read!(sarzak).exhume_ty(id).unwrap(); - // ZString is here because we have methods on that type - // 🚧 We need to add Vector or whatever as well. - let x = match &*ty.read().unwrap() { - Ty::ZString(_) => value, - _ => eval_lhs()?, - }; - x - } - _ => eval_lhs()?, - }; - x - } else { - new_ref!(Value, Value::Empty) - }; - - // So we need to figure out the type that this is being called upon. - let subtype = &s_read!(call).subtype; - let call_result = match (subtype, value) { - (CallEnum::MacroCall(_), _) => unimplemented!(), - // - // FunctionCall - // - // We already handled this above. - (CallEnum::FunctionCall(_), value) => Ok(value), - // - // MethodCall - // - (CallEnum::MethodCall(ref meth), ref value) => { - let meth = s_read!(lu_dog).exhume_method_call(meth).unwrap(); - let meth_name = &s_read!(meth).name; - debug!("MethodCall method {meth:?}"); - debug!("MethodCall value {value:?}"); - - let read_value = s_read!(value); - match &*read_value { - Value::Char(c) => match meth_name.as_str() { - IS_DIGIT => { - let value = c.is_ascii_digit(); - - Ok(new_ref!(Value, Value::Boolean(value))) - } - TO_DIGIT => { - let value = c.to_digit(10).unwrap(); - - Ok(new_ref!(Value, Value::Integer(value as DwarfInteger))) - } - _ => { - let value = &s_read!(expression).r11_x_value(&s_read!(lu_dog))[0]; - let span = &s_read!(value).r63_span(&s_read!(lu_dog))[0]; - let read = s_read!(span); - let span = read.start as usize..read.end as usize; - - return Err(ChaChaError::NoSuchMethod { - method: meth_name.to_owned(), - span, - location: location!(), - }); - } - }, - Value::Enumeration(variant) => { - // Below is all wrapped up to avoid a double borrow. - let woog_enum = { - let ty = variant.get_type(); - let x = if let ValueTypeEnum::Enumeration(woog_enum) = s_read!(ty).subtype { - woog_enum - } else { - unreachable!(); - }; - #[allow(clippy::let_and_return)] - x - }; - - let woog_enum = s_read!(lu_dog).exhume_enumeration(&woog_enum).unwrap(); - let woog_enum = s_read!(woog_enum); - - if let Some(impl_) = &woog_enum - .r84c_implementation_block(&s_read!(lu_dog)) - .first() - { - let x = if let Some(func) = s_read!(impl_) - .r9_function(&s_read!(lu_dog)) - .iter() - .find(|f| s_read!(f).name == *meth_name) - { - let value = &s_read!(expression).r11_x_value(&s_read!(lu_dog))[0]; - let span = &s_read!(value).r63_span(&s_read!(lu_dog))[0]; - - eval_function_call( - (*func).clone(), - &args, - first_arg, - arg_check, - span, - context, - ) - } else { - let value = &s_read!(expression).r11_x_value(&s_read!(lu_dog))[0]; - let span = &s_read!(value).r63_span(&s_read!(lu_dog))[0]; - let read = s_read!(span); - let span = read.start as usize..read.end as usize; - - return Err(ChaChaError::NoSuchMethod { - method: meth_name.to_owned(), - span, - location: location!(), - }); - }; - x - } else { - let value = &s_read!(expression).r11_x_value(&s_read!(lu_dog))[0]; - let span = &s_read!(value).r63_span(&s_read!(lu_dog))[0]; - let read = s_read!(span); - let span = read.start as usize..read.end as usize; - - return Err(ChaChaError::NoSuchMethod { - method: meth_name.to_owned(), - span, - location: location!(), - }); - } - } - Value::Integer(i) => match meth_name.as_str() { - MAX => { - let other = args.pop().unwrap(); - let other = s_read!(other).r37_expression(&s_read!(lu_dog))[0].clone(); - let other = eval_expression(other.clone(), context).unwrap(); - let other = &*s_read!(other); - let other = if let Value::Integer(other) = other { - other - } else { - return Err(ChaChaError::TypeMismatch { - expected: "Integer".to_owned(), - found: other.to_string(), - span: 0..0, - location: location!(), - }); - }; - - let value = *i.max(other); - - Ok(new_ref!(Value, Value::Integer(value))) - } - _ => { - let value = &s_read!(expression).r11_x_value(&s_read!(lu_dog))[0]; - let span = &s_read!(value).r63_span(&s_read!(lu_dog))[0]; - let read = s_read!(span); - let span = read.start as usize..read.end as usize; - - return Err(ChaChaError::NoSuchMethod { - method: meth_name.to_owned(), - span, - location: location!(), - }); - } - }, - Value::Plugin((_name, plugin)) => match meth_name.as_str() { - INVOKE_FUNC => { - // self is tacked on. - if args.len() - 1 != 4 { - let value = &s_read!(expression).r11_x_value(&s_read!(lu_dog))[0]; - let span = &s_read!(value).r63_span(&s_read!(lu_dog))[0]; - let read = s_read!(span); - let span = read.start as usize..read.end as usize; - - return Err(WrongNumberOfArguments { - expected: 4, - got: args.len(), - defn_span: 0..0, - invocation_span: span, - location: location!(), - }); - } - - let mut arg_values = VecDeque::with_capacity(args.len()); - - // Gotta do this goofy thing because we don't have a first pointer, - // and they aren't in order. - let next = args - .iter() - .find(|a| s_read!(a).r27c_argument(&s_read!(lu_dog)).is_empty()) - .unwrap() - .clone(); - - // This is because of the self parameter that is added by the extruder. - if let Some(next_id) = s_read!(next).next { - let mut next = s_read!(lu_dog).exhume_argument(&next_id).unwrap(); - - // We iterate over the arguments to the `format` call. For each one - // we evaluate it and store it in a vac. - loop { - let expr = s_read!(lu_dog) - .exhume_expression(&s_read!(next).expression) - .unwrap(); - - let value = eval_expression(expr, context)?; - debug!("value {value:?}"); - - // This is where the magic happens and we turn the value - // into a string. - arg_values.push_back(value); - - let next_id = s_read!(next).next; - if let Some(ref id) = next_id { - next = s_read!(lu_dog).exhume_argument(id).unwrap(); - } else { - break; - } - } - }; - - let Value::List { inner, .. } = &*s_read!(arg_values[3]) else { - return Err(ChaChaError::TypeMismatch { - expected: "Vector".to_owned(), - found: s_read!(arg_values[3]).to_string(), - span: 0..0, - location: location!(), - }); - }; - let inner = s_read!(inner) - .iter() - .map(|v| >::into((*s_read!(v)).clone())) - .collect::>(); - - let plugin = s_write!(plugin); - let x = match plugin.invoke_func( - s_read!(arg_values[0]).to_inner_string().as_str().into(), - s_read!(arg_values[1]).to_inner_string().as_str().into(), - s_read!(arg_values[2]).to_inner_string().as_str().into(), - inner.into(), - ) { - ROk(value) => Ok(new_ref!(Value, (value, &*s_read!(lu_dog)).into())), - RErr(e) => Err(ChaChaError::PluginError { - message: e.to_string(), - }), - }; - x - } - _ => { - let value = &s_read!(expression).r11_x_value(&s_read!(lu_dog))[0]; - let span = &s_read!(value).r63_span(&s_read!(lu_dog))[0]; - let read = s_read!(span); - let span = read.start as usize..read.end as usize; - - return Err(ChaChaError::NoSuchMethod { - method: meth_name.to_owned(), - span, - location: location!(), - }); - } - }, - Value::ProxyType { - module: _, - obj_ty: ref id, - id: _, - plugin: _proxy, - } => { - // Q: How do I invoke a function on an instance without - // actually grabbing the instance from memory? - // A: It's eval'd above, and in the `value` variable, which - // is deconstructed into this ProxyType. So that is bad. - // 🚧 We need to store a pointer to an in-memory value of - // this struct - let vt = s_read!(lu_dog); - let mut vt = vt.iter_value_type(); - let woog_struct = loop { - if let Some(vt) = vt.next() { - if let ValueTypeEnum::WoogStruct(woog) = s_read!(vt).subtype { - let woog = s_read!(lu_dog).exhume_woog_struct(&woog).unwrap(); - let object = s_read!(woog).object; - if let Some(ref obj_id) = object { - if id == obj_id { - break woog; - } - } - } - } else { - unreachable!() - } - }; - let woog_struct = s_read!(woog_struct); - let impl_ = &woog_struct.r8c_implementation_block(&s_read!(lu_dog))[0]; - let x = if let Some(func) = s_read!(impl_) - .r9_function(&s_read!(lu_dog)) - .iter() - .find(|f| s_read!(f).name == *meth_name) - { - let value = &s_read!(expression).r11_x_value(&s_read!(lu_dog))[0]; - let span = &s_read!(value).r63_span(&s_read!(lu_dog))[0]; - - eval_function_call( - (*func).clone(), - &args, - first_arg, - arg_check, - span, - context, - ) - } else { - let value = &s_read!(expression).r11_x_value(&s_read!(lu_dog))[0]; - let span = &s_read!(value).r63_span(&s_read!(lu_dog))[0]; - let read = s_read!(span); - let span = read.start as usize..read.end as usize; - - return Err(ChaChaError::NoSuchMethod { - method: meth_name.to_owned(), - span, - location: location!(), - }); - }; - x - } - Value::Range(range) => match meth_name.as_str() { - MAP => { - debug!("evaluating Range::map"); - let func = args.pop().unwrap(); - let func = s_read!(func).r37_expression(&s_read!(lu_dog))[0].clone(); - let ƛ = eval_expression(func.clone(), context).unwrap(); - let ƛ = s_read!(ƛ); - let ƛ = if let Value::Lambda(ƛ) = &*ƛ { - ƛ - } else { - unreachable!() - }; - let ret_ty = s_read!(ƛ).return_type; - let ret_ty = s_read!(lu_dog).exhume_value_type(&ret_ty).unwrap(); - - let result = (range.start..range.end) - .map(|i| { - eval_lambda_expression( - ƛ.clone(), - &[new_ref!(Value, Value::Integer(i))], - false, - &span, - context, - ) - }) - .collect::>>>()?; - - let result = new_ref!(Vec>, result); - Ok(new_ref!( - Value, - Value::List { - ty: ret_ty, - inner: result - } - )) - } - _ => { - let value = &s_read!(expression).r11_x_value(&s_read!(lu_dog))[0]; - let span = &s_read!(value).r63_span(&s_read!(lu_dog))[0]; - let read = s_read!(span); - let span = read.start as usize..read.end as usize; - - return Err(ChaChaError::NoSuchMethod { - method: meth_name.to_owned(), - span, - location: location!(), - }); - } - }, - Value::String(string) => match meth_name.as_str() { - FORMAT => { - debug!("evaluating String::format"); - - let arg_values = if !args.is_empty() { - // The VecDeque is so that I can pop off the args, and then push them - // back onto a queue in the same order. What? That doesn't make sense. - // 🚧 I feel like I'm doing something stupid here -- take a look please! - let mut arg_values = VecDeque::with_capacity(args.len()); - - // Gotta do this goofy thing because we don't have a first pointer, - // and they aren't in order. - let next = args - .iter() - .find(|a| s_read!(a).r27c_argument(&s_read!(lu_dog)).is_empty()) - .unwrap() - .clone(); - - // This is because of the self parameter that is added by the extruder. - let x = if let Some(next_id) = s_read!(next).next { - let mut next = s_read!(lu_dog).exhume_argument(&next_id).unwrap(); - - // We iterate over the arguments to the `format` call. For each one - // we evaluate it and store it in a vac. - loop { - let expr = s_read!(lu_dog) - .exhume_expression(&s_read!(next).expression) - .unwrap(); - - let value = eval_expression(expr, context)?; - debug!("value {value:?}"); - - // This is where the magic happens and we turn the value - // into a string. - arg_values.push_back(s_read!(value).to_inner_string()); - - let next_id = s_read!(next).next; - if let Some(ref id) = next_id { - next = s_read!(lu_dog).exhume_argument(id).unwrap(); - } else { - break; - } - } - - arg_values - } else { - VecDeque::new() - }; - x - } else { - VecDeque::new() - }; - - enum State { - Normal, - InBrace, - } - let mut state = State::Normal; - let mut result = String::new(); - let mut current = String::new(); - for c in string.chars() { - match state { - State::Normal => { - if c == '{' { - state = State::InBrace; - } else { - result.push(c); - } - } - State::InBrace => { - if c == '}' { - if let Ok(index) = current.parse::() { - // 🚧 Should check index bounds here. - let value = arg_values[index].clone(); - result.push_str(&value); - current.clear(); - state = State::Normal; - } else if let Some(value) = context.memory().get(¤t) { - result.push_str(&s_read!(value).to_inner_string()); - current.clear(); - state = State::Normal; - } else { - // 🚧 this is the wrong error - return Err(ChaChaError::NoSuchMethod { - method: current.to_owned(), - span: 0..0, - location: location!(), - }); - } - } else { - current.push(c); - } - } - } - } - - Ok(new_ref!(Value, Value::String(result))) - } - LEN => { - debug!("evaluating String::len"); - let len = unicode_segmentation::UnicodeSegmentation::graphemes( - string.as_str(), - true, - ) - .collect::>() - .len(); - Ok(new_ref!(Value, Value::Integer(len as i64))) - } - LINES => { - let ty = Ty::new_z_string(&s_read!(sarzak)); - let ty = ValueType::new_ty(true, &ty, &mut s_write!(lu_dog)); - - let inner = string - .lines() - .map(|line| new_ref!(Value, Value::String(line.to_owned()))) - .collect(); - let inner = new_ref!(Vec>, inner); - - Ok(new_ref!(Value, Value::List { ty, inner })) - } - SPLIT => { - let separator = args.pop().unwrap(); - let separator = - s_read!(separator).r37_expression(&s_read!(lu_dog))[0].clone(); - let separator = eval_expression(separator.clone(), context).unwrap(); - let separator = &*s_read!(separator); - let separator = if let Value::String(separator) = separator { - separator - } else { - return Err(ChaChaError::TypeMismatch { - expected: "String".to_owned(), - found: separator.to_string(), - span: 0..0, - location: location!(), - }); - }; - - let ty = Ty::new_z_string(&s_read!(sarzak)); - let ty = ValueType::new_ty(true, &ty, &mut s_write!(lu_dog)); - - let inner = string - .split(separator) - .map(|line| new_ref!(Value, Value::String(line.to_owned()))) - .collect(); - - let inner = new_ref!(Vec>, inner); - - Ok(new_ref!(Value, Value::List { ty, inner })) - } - TRIM => { - let value = string.trim().to_owned(); - - Ok(new_ref!(Value, Value::String(value))) - } - value_ => { - let value = &s_read!(expression).r11_x_value(&s_read!(lu_dog))[0]; - debug!("value {value:?}"); - - let span = &s_read!(value).r63_span(&s_read!(lu_dog))[0]; - - let read = s_read!(span); - let span = read.start as usize..read.end as usize; - - return Err(ChaChaError::NoSuchMethod { - method: value_.to_owned(), - span, - location: location!(), - }); - } - }, - Value::Struct(ut) => { - // Below is all wrapped up to avoid a double borrow. - let woog_struct = { - let ut_read = s_read!(ut); - let ty = ut_read.get_type(); - let ty = s_read!(ty); - if let ValueTypeEnum::WoogStruct(woog_struct) = &ty.subtype { - *woog_struct - } else { - unreachable!(); - } - }; - - let woog_struct = s_read!(lu_dog).exhume_woog_struct(&woog_struct).unwrap(); - let woog_struct = s_read!(woog_struct); - let impl_ = &woog_struct.r8c_implementation_block(&s_read!(lu_dog))[0]; - let x = if let Some(func) = s_read!(impl_) - .r9_function(&s_read!(lu_dog)) - .iter() - .find(|f| s_read!(f).name == *meth_name) - { - let value = &s_read!(expression).r11_x_value(&s_read!(lu_dog))[0]; - let span = &s_read!(value).r63_span(&s_read!(lu_dog))[0]; - - eval_function_call( - (*func).clone(), - &args, - first_arg, - arg_check, - span, - context, - ) - } else { - let value = &s_read!(expression).r11_x_value(&s_read!(lu_dog))[0]; - let span = &s_read!(value).r63_span(&s_read!(lu_dog))[0]; - let read = s_read!(span); - let span = read.start as usize..read.end as usize; - - return Err(ChaChaError::NoSuchMethod { - method: meth_name.to_owned(), - span, - location: location!(), - }); - }; - x - } - Value::List { ty, inner } => match meth_name.as_str() { - MAP => { - debug!("evaluating Vector::map"); - let func = args.pop().unwrap(); - let func = s_read!(func).r37_expression(&s_read!(lu_dog))[0].clone(); - let ƛ = eval_expression(func.clone(), context).unwrap(); - let ƛ = s_read!(ƛ); - let ƛ = if let Value::Lambda(ƛ) = &*ƛ { - ƛ - } else { - panic!("Should be a lambda"); - }; - - let result = s_read!(inner) - .iter() - .map(|value| { - eval_lambda_expression( - ƛ.clone(), - &[value.clone()], - false, - &span, - context, - ) - }) - .collect::>>>()?; - - Ok(new_ref!( - Value, - Value::List { - ty: ty.clone(), - inner: new_ref!(Vec>, result) - } - )) - } - PUSH => { - let value = args.pop().unwrap(); - let value = s_read!(value).r37_expression(&s_read!(lu_dog))[0].clone(); - let value = eval_expression(value.clone(), context).unwrap(); - - s_write!(inner).push(value); - - Ok(new_ref!(Value, Value::Empty)) - } - SUM => { - let mut sum = 0; - for value in &*s_read!(inner) { - let value = s_read!(value); - match &*value { - Value::Integer(i) => sum += i, - v => { - panic!("Should sum handle this type? {v:#?}") - } - } - } - Ok(new_ref!(Value, Value::Integer(sum))) - } - _ => { - let value = &s_read!(expression).r11_x_value(&s_read!(lu_dog))[0]; - let span = &s_read!(value).r63_span(&s_read!(lu_dog))[0]; - let read = s_read!(span); - let span = read.start as usize..read.end as usize; - - return Err(ChaChaError::NoSuchMethod { - method: meth_name.to_owned(), - span, - location: location!(), - }); - } - }, - bar => panic!("need to deal with Value {:?}", bar), - } - } - // - // StaticMethodCall - // - (CallEnum::StaticMethodCall(ref meth), _) => { - let meth = s_read!(lu_dog).exhume_static_method_call(meth).unwrap(); - - let arg_check = s_read!(call).arg_check; - if arg_check { - s_write!(call).arg_check = false; - } - - let mut arg_values = { - let args = s_read!(call).r28_argument(&s_read!(lu_dog)); - if !args.is_empty() { - let mut arg_values = VecDeque::with_capacity(args.len()); - // Find the first one. - let mut next = args - .iter() - .find(|a| s_read!(a).r27c_argument(&s_read!(lu_dog)).is_empty()) - .unwrap() - .clone(); - - loop { - let expr = s_read!(lu_dog) - .exhume_expression(&s_read!(next).expression) - .unwrap(); - let x_value = &s_read!(expr).r11_x_value(&s_read!(lu_dog))[0]; - let span = &s_read!(x_value).r63_span(&s_read!(lu_dog))[0]; - let span = s_read!(span).start as usize..s_read!(span).end as usize; - let value = eval_expression(expr, context)?; - arg_values.push_back((value, span)); - - let next_id = { s_read!(next).next }; - if let Some(ref id) = next_id { - next = s_read!(lu_dog).exhume_argument(id).unwrap(); - } else { - break; - } - } - - arg_values - } else { - VecDeque::new() - } - }; - - let ty = &s_read!(meth).ty; - let func = &s_read!(meth).func; - debug!("StaticMethodCall ty {ty:?}"); - debug!("StaticMethodCall func {func:?}"); - - match ty.as_str() { - UUID_TYPE | FQ_UUID_TYPE if func == FN_NEW => { - let value = Value::Uuid(Uuid::new_v4()); - - Ok(new_ref!(Value, value)) - } - CHACHA => { - match func.as_str() { - ARGS => { - debug!("evaluating chacha::args"); - - if let Some(args) = &context.get_args() { - Ok(args.clone()) - } else { - let ty = Ty::new_z_string(&s_read!(sarzak)); - let ty = ValueType::new_ty(true, &ty, &mut s_write!(lu_dog)); - - Ok(new_ref!( - Value, - Value::List { - ty, - inner: new_ref!(Vec>, Vec::new()) - } - )) - } - } - #[cfg(feature = "async")] - ASLEEP => { - let (duration, _) = arg_values.pop_front().unwrap(); - let millis = &*s_read!(duration); - let millis: u64 = millis.try_into()?; - let duration = Duration::from_millis(millis); - - let span = - debug_span!("asleep", duration = ?duration, target = "async"); - let executor = context.executor().clone(); - let future = async move { - debug!("sleeping for {duration:?}"); - // dbg!("start", duration); - let _instant = executor.timer(duration).await; - // dbg!("end", duration); - debug!("done sleeping"); - Ok(new_ref!(Value, Value::Empty)) - } - .instrument(span); - let task = context.worker().unwrap().create_task(future).unwrap(); - - context.executor().start_task(&task); - - Ok(new_ref!( - Value, - Value::Future { - name: "sleep".to_owned(), - task: Some(task), - executor: context.executor().clone() - } - )) - } - ASSERT => chacha::assert(arg_values, expression, lu_dog), - ASSERT_EQ => chacha::assert_eq(arg_values, expression, lu_dog), - EPS => { - debug!("evaluating chacha::eps"); - let mut timings = context.get_timings().to_vec(); - timings.sort_by(|a, b| a.partial_cmp(b).unwrap()); - - let mean = timings.iter().sum::() / timings.len() as f64; - let std_dev = timings.iter().map(|x| (x - mean).powi(2)).sum::() - / timings.len() as f64; - let median = timings[timings.len() / 2]; - - let result = format!( - "expressions (mean/std_dev/median) ((10k)/sec): {:.1} / {:.1} / {:.1}\n", - mean, - std_dev, - median - ); - // chacha_print(result, context)?; - - Ok(new_ref!(Value, Value::String(result))) - } - EVAL => chacha::eval_dwarf(arg_values, expression, context), - PARSE => chacha::parse_dwarf(arg_values, expression, context), - SLEEP => { - let (duration, _) = arg_values.pop_front().unwrap(); - let millis = &*s_read!(duration); - let millis: u64 = millis.try_into()?; - let duration = Duration::from_millis(millis); - - std::thread::sleep(duration); - Ok(new_ref!(Value, Value::Empty)) - } - #[cfg(feature = "async")] - SPAWN => spawn("task".to_owned(), &mut arg_values, expression, context), - #[cfg(feature = "async")] - SPAWN_NAMED => { - let (name, _) = arg_values.pop_front().unwrap(); - let name: String = (&*s_read!(name)).try_into()?; - spawn(name, &mut arg_values, expression, context) - } - TIME => { - debug!("evaluating chacha::time"); - // 🚧 I should be checking that there is an argument before - // I go unwrapping it. - let (func, span) = arg_values.pop_front().unwrap(); - let func = s_read!(func); - ensure!( - matches!(&*func, Value::Lambda(_)) - || matches!(&*func, Value::Function(_)), - { - // 🚧 I'm not really sure what to do about this here. It's - // all really a hack for now anyway. - // 🚧 Sadly I don't know what I'm talking about any longer. - let ty = - func.get_value_type(&s_read!(sarzak), &s_read!(lu_dog)); - let ty = PrintableValueType(true, ty, context.models()); - let ty = ty.to_string(); - TypeMismatchSnafu { - expected: "".to_string(), - found: ty, - span, - location: location!(), - } - } - ); - - let value = &s_read!(expression).r11_x_value(&s_read!(lu_dog))[0]; - let span = &s_read!(value).r63_span(&s_read!(lu_dog))[0]; - - let now = Instant::now(); - if let Value::Function(func) = &*func { - let _result = eval_function_call( - func.clone(), - &[], - None, - true, - span, - context, - )?; - } else if let Value::Lambda(ƛ) = &*func { - let _result = - eval_lambda_expression(ƛ.clone(), &[], true, span, context)?; - } else { - panic!("missing implementation for timing this type: {func:?}"); - }; - let elapsed = now.elapsed(); - - Ok(new_ref!(Value, Value::Float(elapsed.as_secs_f64()))) - } - // This returns a string because that's the easy button given what - // I have to work with. Once I get enums into the language, I'll - // be able to return a proper enum. - TYPEOF => { - debug!("evaluating chacha::typeof"); - let arg = arg_values.pop_front().unwrap().0; - let ty = - s_read!(arg).get_value_type(&s_read!(sarzak), &s_read!(lu_dog)); - let pvt_ty = PrintableValueType(false, ty, context.models()); - - Ok(new_ref!(Value, pvt_ty.to_string().into())) - } - method => { - let value = &s_read!(expression).r11_x_value(&s_read!(lu_dog))[0]; - let span = &s_read!(value).r63_span(&s_read!(lu_dog))[0]; - let read = s_read!(span); - let span = read.start as usize..read.end as usize; - - Err(ChaChaError::NoSuchStaticMethod { - ty: ty.strip_prefix(PATH_SEP).unwrap().to_owned(), - method: method.to_owned(), - span, - location: location!(), - }) - } - } - } - #[cfg(feature = "async")] - TIMER => { - match func.as_str() { - ONE_SHOT => { - // 🚧 I should be checking that there is an argument before - // I go unwrapping it. - let (duration, _) = arg_values.pop_front().unwrap(); - let millis = &*s_read!(duration); - let millis: u64 = millis.try_into()?; - let duration = Duration::from_millis(millis); - - let (func, span) = arg_values.pop_front().unwrap(); - // let read_func = s_read!(func); - ensure!( - matches!(&*s_read!(func), Value::Lambda(_)) - || matches!(&*s_read!(func), Value::Function(_)), - { - // 🚧 I'm not really sure what to do about this here. It's - // all really a hack for now anyway. - // 🚧 WTF? I clearly copy/pasted this from elsewhere. - let ty = s_read!(func) - .get_value_type(&s_read!(sarzak), &s_read!(lu_dog)); - let ty = PrintableValueType(true, ty, context.models()); - let ty = ty.to_string(); - TypeMismatchSnafu { - expected: "".to_string(), - found: ty, - span, - location: location!(), - } - } - ); - - let value = &s_read!(expression).r11_x_value(&s_read!(lu_dog))[0]; - let span = s_read!(value).r63_span(&s_read!(lu_dog))[0].clone(); - let func = s_read!(func).clone(); - - let mut fubar = context.clone(); - // let mut baz = fubar.executor().clone(); - let future = async move { - debug!("sleeping for {duration:?}"); - let _instant = Timer::after(duration).await; - debug!("done sleeping"); - - if let Value::Function(func) = &func { - eval_function_call( - func.clone(), - &[], - None, - true, - &span, - &mut fubar, - ) - } else if let Value::Lambda(ƛ) = &func { - eval_lambda_expression(ƛ.clone(), &[], true, &span, &mut fubar) - } else { - panic!("missing implementation for timing this type: {func:?}"); - } - }; - - let task = context.worker().unwrap().create_task(future).unwrap(); - - let value = new_ref!( - Value, - Value::Future { - name: "sleep".to_owned(), - task: Some(task), - executor: context.executor().clone() - } - ); - - Ok(value) - } - missing_method => { - let value = &s_read!(expression).r11_x_value(&s_read!(lu_dog))[0]; - let span = &s_read!(value).r63_span(&s_read!(lu_dog))[0]; - let read = s_read!(span); - let span = read.start as usize..read.end as usize; - - Err(ChaChaError::NoSuchStaticMethod { - ty: ty.strip_prefix(PATH_SEP).unwrap().to_owned(), - method: missing_method.to_owned(), - span, - location: location!(), - }) - } - } - } - ty => { - if Some(Some(PLUGIN)) == ty.split('<').next().map(|s| s.split(PATH_SEP).last()) - { - match func.as_str() { - NEW => { - let plugin = - ty.split('<').nth(1).unwrap().strip_suffix('>').unwrap(); - let plugin = - s_read!(lu_dog).exhume_x_plugin_id_by_name(plugin).unwrap(); - let plugin = s_read!(lu_dog).exhume_x_plugin(&plugin).unwrap(); - let plugin = s_read!(plugin); - let path = &plugin.x_path; - let plugin_root = path.split(PATH_SEP).next().unwrap(); - let args = if let Some(path) = path.split(PATH_SEP).nth(1) { - vec![Value::String(path.to_owned()).into()] - } else { - Vec::new() - }; - // kts -- I have a hard time finding this. - let library_path = RawLibrary::path_in_directory( - Path::new(&format!( - "{}/extensions/{plugin_root}/lib", - context.get_home().display() - )), - plugin_root, - LibrarySuffix::NoSuffix, - ); - let root_module = (|| { - let header = lib_header_from_path(&library_path)?; - header.init_root_module::() - })() - .map_err(|e| { - eprintln!("{e}"); - ChaChaError::BadnessHappened { - message: "Plug-in error".to_owned(), - location: location!(), - } - })?; - - let ctor = root_module.new(); - let plugin = - ctor(context.lambda_sender().into(), args.into()).unwrap(); - let name = plugin.name().to_string(); - let plugin = new_ref!(PluginType, plugin); - - let value = new_ref!(Value, Value::Plugin((name, plugin))); - - Ok(value) - } - missing_method => { - let value = &s_read!(expression).r11_x_value(&s_read!(lu_dog))[0]; - let span = &s_read!(value).r63_span(&s_read!(lu_dog))[0]; - let read = s_read!(span); - let span = read.start as usize..read.end as usize; - - Err(ChaChaError::NoSuchStaticMethod { - ty: ty.strip_prefix(PATH_SEP).unwrap().to_owned(), - method: missing_method.to_owned(), - span, - location: location!(), - }) - } - } - } else if let Some(value) = context.memory().get_meta(ty, func) { - debug!("StaticMethodCall meta value {value:?}"); - match &*s_read!(value) { - Value::Function(func) => { - debug!("StaticMethodCall meta func {func:?}"); - let value = &s_read!(expression).r11_x_value(&s_read!(lu_dog))[0]; - debug!("StaticMethodCall::Function {value:?}"); - let span = &s_read!(value).r63_span(&s_read!(lu_dog))[0]; - let value = eval_function_call( - func.clone(), - &args, - first_arg, - arg_check, - span, - context, - )?; - debug!("StaticMethodCall meta value {value:?}"); - Ok(value) - } - value => { - error!("deal with call expression {value:?}"); - Ok(new_ref!(Value, Value::Empty)) - } - } - } else if let Some(value) = context.memory().get(ty) { - debug!("StaticMethodCall frame value {value:?}"); - match &mut *s_write!(value) { - Value::Function(ref func) => { - let value = &s_read!(expression).r11_x_value(&s_read!(lu_dog))[0]; - let span = &s_read!(value).r63_span(&s_read!(lu_dog))[0]; - let func = - s_read!(lu_dog).exhume_function(&s_read!(func).id).unwrap(); - debug!("StaticMethodCall frame func {func:?}"); - let value = eval_function_call( - func, &args, first_arg, arg_check, span, context, - )?; - debug!("StaticMethodCall frame value {value:?}"); - Ok(value) - } - Value::ProxyType { - module: _, - obj_ty: _, - id: _, - plugin: _, - } => { - unimplemented!(); - // debug!("StaticMethodCall proxy {ut:?}"); - // s_write!(ut).call( - // func, - // &mut arg_values.iter().map(|v| v.0 .0.clone()).collect(), - // ) - } - // Value::StoreType(ref mut store_type) => { - // // We should actually know what's behind the curtain, since - // // we requested it with `stack.get(ty)`, above. - // match store_type { - // StoreType::Inflection(ref mut inf) => { - // let args: Vec = Vec::new(); - // inf.call(func, &args) - // } - // _ => Ok(( - // Value::Error("make point work".to_owned()), - // ValueType::new_empty(true, ), - // )), - // } - // } - value => { - error!("deal with call expression {value}"); - panic!("fix this"); - } - } - } else { - ensure!(false, { - let value = &s_read!(expression).r11_x_value(&s_read!(lu_dog))[0]; - let span = &s_read!(value).r63_span(&s_read!(lu_dog))[0]; - let read = s_read!(span); - let span = read.start as usize..read.end as usize; - - NoSuchStaticMethodSnafu { - ty: ty.strip_prefix(PATH_SEP).unwrap().to_owned(), - method: func.to_owned(), - span, - location: location!(), - } - }); - - unreachable!(); - } - } - } - } - }; - - call_result -} - -#[cfg(feature = "async")] -fn spawn( - name: String, - arg_values: &mut VecDeque<(RefType, std::ops::Range)>, - expression: &RefType, - context: &mut Context, -) -> Result> { - let sarzak = context.sarzak_heel().clone(); - let lu_dog = context.lu_dog_heel().clone(); - - debug!("evaluating chacha::spawn"); - // 🚧 I should be checking that there is an argument before - // I go unwrapping it. - let (func, span) = arg_values.pop_front().unwrap(); - let func = s_read!(func); - ensure!( - matches!(&*func, Value::Lambda(_)) || matches!(&*func, Value::Function(_)), - { - let ty = func.get_value_type(&s_read!(sarzak), &s_read!(lu_dog)); - let ty = PrintableValueType(true, ty, context.models()); - let ty = ty.to_string(); - TypeMismatchSnafu { - expected: "".to_string(), - found: ty, - span, - location: location!(), - } - } - ); - - let func = func.to_owned(); - let expression = expression.clone(); - let mut nested_context = context.clone(); - - let child_context = context.new_worker(); - let child_worker = child_context.worker().unwrap().clone(); - - let t_span = debug_span!("spawn_span", target = "async", name = ?name); - let future = async move { - let value = &s_read!(expression).r11_x_value(&s_read!(lu_dog))[0]; - let span = &s_read!(value).r63_span(&s_read!(lu_dog))[0]; - if let Value::Function(func) = &func { - eval_function_call(func.clone(), &[], None, true, span, &mut nested_context) - } else if let Value::Lambda(ƛ) = &func { - eval_lambda_expression(ƛ.clone(), &[], true, span, &mut nested_context) - } else { - unreachable!() - } - } - .instrument(t_span); - - let child_task = child_worker.spawn_task(future).unwrap(); - - let worker = child_worker.clone(); - let task = context - .worker() - .unwrap() - .create_task(async move { - let result = child_task.await; - worker.destroy(); - result - }) - .unwrap(); - - // This can also happen during the await processing. I'm not sure if this - // even actually starts anything. - // child_worker.start_task(&task); - - let value = new_ref!( - Value, - Value::Task { - worker: Some(child_worker), - parent: Some(task), - } - ); - - Ok(value) -} diff --git a/src/chacha/interpreter/expression/call/chacha.rs b/src/chacha/interpreter/expression/call/chacha.rs deleted file mode 100644 index 3101f1a6..00000000 --- a/src/chacha/interpreter/expression/call/chacha.rs +++ /dev/null @@ -1,253 +0,0 @@ -use std::{collections::VecDeque, env}; - -use ansi_term::Colour; -use snafu::{location, prelude::*, Location}; - -use crate::{ - chacha::error::{Result, WrongNumberOfArgumentsSnafu}, - dwarf::{new_lu_dog, Spanned}, - interpreter::{ - chacha_print, debug, function, initialize_interpreter, start_func, ChaChaError, Context, - }, - lu_dog::{Expression, ObjectStore as LuDogStore}, - new_ref, s_read, Context as InterContext, NewRef, RefType, Value, -}; - -/// Evaluate a parsed string -/// -pub(crate) fn eval_dwarf( - mut arg_values: VecDeque>>, - expression: &RefType, - context: &mut Context, -) -> Result> { - debug!("evaluating dwarf code"); - - let value = &s_read!(expression).r11_x_value(&s_read!(context.lu_dog_heel()))[0]; - let span = &s_read!(value).r63_span(&s_read!(context.lu_dog_heel()))[0]; - let read = s_read!(span); - let span = read.start as usize..read.end as usize; - - ensure!(arg_values.len() > 1, { - WrongNumberOfArgumentsSnafu { - expected: 2usize, - got: arg_values.len(), - defn_span: 0..0, - invocation_span: span, - location: location!(), - } - }); - - let name = "eval_dwarf"; - let ctx = arg_values.pop_front().unwrap().0; - let ctx: InterContext = (*s_read!(ctx)).clone().try_into()?; - let func = arg_values.pop_front().unwrap().0; - let func: String = (*s_read!(func)).clone().try_into()?; - let mut args = Vec::new(); - while let Some(arg) = arg_values.pop_front() { - args.push((*s_read!(arg.0)).clone().try_into()?); - } - - let mut ctx = - initialize_interpreter(2, context.get_home().clone(), ctx.clone()).map_err(|e| { - chacha_print( - crate::chacha::error::ChaChaErrorReporter(&e, false, &ctx.source(), name) - .to_string(), - context, - ) - .unwrap(); - ChaChaError::Eval { - src: ctx.source(), - span: span.clone(), - } - })?; - - ctx.add_args(args); - - let result = start_func(&func, false, &mut ctx.clone()).map_err(|e| { - chacha_print( - crate::chacha::error::ChaChaErrorReporter(&e, false, &ctx.source(), name).to_string(), - context, - ) - .unwrap(); - ChaChaError::Eval { - src: ctx.source(), - span, - } - })?; - - Ok(result) -} - -/// Parse a string into a LuDogStore -/// -pub(crate) fn parse_dwarf( - mut arg_values: VecDeque>>, - expression: &RefType, - context: &Context, -) -> Result> { - debug!("parsing dwarf source"); - - let value = &s_read!(expression).r11_x_value(&s_read!(context.lu_dog_heel()))[0]; - let span = &s_read!(value).r63_span(&s_read!(context.lu_dog_heel()))[0]; - let read = s_read!(span); - let span = read.start as usize..read.end as usize; - - ensure!(arg_values.len() == 1, { - WrongNumberOfArgumentsSnafu { - expected: 1usize, - got: arg_values.len(), - defn_span: 0..0, - invocation_span: span, - location: location!(), - } - }); - - let name = "parse_dwarf"; - - let source_code = arg_values.pop_front().unwrap().0; - let source_code: String = (*s_read!(source_code)).clone().try_into()?; - - let ast = crate::dwarf::parse_dwarf(name, &source_code).map_err(|e| { - eprintln!("{}", crate::dwarf::error::DwarfErrorReporter(&e, false)); - - ChaChaError::Parse { - src: source_code.clone(), - span: span.clone(), - } - })?; - - let ctx = new_lu_dog( - name.to_owned(), - Some((source_code.clone(), &ast)), - context.get_home(), - &env::current_dir().unwrap(), - &s_read!(context.sarzak_heel()), - ) - .map_err(|errors| { - for err in errors { - eprintln!("{}", crate::dwarf::error::DwarfErrorReporter(&err, false)); - } - - ChaChaError::Parse { - src: source_code, - span, - } - })?; - - Ok(new_ref!(Value, Value::ParsedDwarf(ctx))) -} - -/// Compare the two arguments and return a boolean value. -/// -/// We put some effort into making error reporting as useful as possible. -pub(crate) fn assert_eq( - mut arg_values: VecDeque>>, - expression: &RefType, - lu_dog: RefType, -) -> Result> { - debug!("evaluating chacha::assert_eq"); - ensure!(arg_values.len() == 2, { - let value = &s_read!(expression).r11_x_value(&s_read!(lu_dog))[0]; - let span = &s_read!(value).r63_span(&s_read!(lu_dog))[0]; - let read = s_read!(span); - let span = read.start as usize..read.end as usize; - - WrongNumberOfArgumentsSnafu { - expected: 2usize, - got: arg_values.len(), - defn_span: 0..0, - invocation_span: span, - location: location!(), - } - }); - - let lhs = arg_values.pop_front().unwrap().0; - let rhs = arg_values.pop_front().unwrap().0; - - debug!("lhs: {lhs:?}, rhs {rhs:?}"); - - let value = Value::Boolean(*s_read!(lhs) == *s_read!(rhs)); - - if let Value::Boolean(result) = value { - if result { - Ok(new_ref!(Value, value)) - } else { - let source = s_read!(lu_dog).iter_dwarf_source_file().next().unwrap(); - let source = s_read!(source); - let source = &source.source; - - let value = &s_read!(expression).r11_x_value(&s_read!(lu_dog))[0]; - - let span = &s_read!(value).r63_span(&s_read!(lu_dog))[0]; - - let read = s_read!(span); - let span = read.start as usize..read.end as usize; - - Err(ChaChaError::AssertEqual { - found: lhs, - expected: rhs, - code: source[span].to_owned(), - }) - } - } else { - unreachable!() - } -} - -/// Compare the argument to the truth. -/// -/// We put some effort into making error reporting as useful as possible. -pub(crate) fn assert( - mut arg_values: VecDeque>>, - expression: &RefType, - lu_dog: RefType, -) -> Result> { - debug!("evaluating chacha::assert"); - // 🚧 This should be happening in the extruder. - ensure!(arg_values.len() == 1, { - let value = &s_read!(expression).r11_x_value(&s_read!(lu_dog))[0]; - let span = &s_read!(value).r63_span(&s_read!(lu_dog))[0]; - let read = s_read!(span); - let span = read.start as usize..read.end as usize; - - WrongNumberOfArgumentsSnafu { - expected: 1usize, - got: arg_values.len(), - defn_span: 0..0, - invocation_span: span, - location: location!(), - } - }); - - let truth = arg_values.pop_front().unwrap().0; - - debug!("truth: {truth:?}"); - let truth_value = &*s_read!(truth); - let truth_value: bool = truth_value.try_into()?; - - let value = Value::Boolean(truth_value); - - if let Value::Boolean(result) = value { - if result { - Ok(new_ref!(Value, value)) - } else { - let source = s_read!(lu_dog).iter_dwarf_source_file().next().unwrap(); - let source = s_read!(source); - let source = &source.source; - - let value = &s_read!(expression).r11_x_value(&s_read!(lu_dog))[0]; - - let span = &s_read!(value).r63_span(&s_read!(lu_dog))[0]; - - let read = s_read!(span); - let span = read.start as usize..read.end as usize; - - Err(ChaChaError::AssertTrue { - found: truth.clone(), - code: source[span].to_owned(), - }) - } - } else { - unreachable!() - } -} diff --git a/src/chacha/interpreter/expression/debugger.rs b/src/chacha/interpreter/expression/debugger.rs deleted file mode 100644 index cbfe7f40..00000000 --- a/src/chacha/interpreter/expression/debugger.rs +++ /dev/null @@ -1,15 +0,0 @@ -use ansi_term::Colour; - -use crate::{ - chacha::error::Result, - interpreter::{debug, function, Context, RUNNING, STEPPING}, - new_ref, NewRef, RefType, Value, -}; - -pub fn eval(_context: &mut Context) -> Result> { - debug!("StatementEnum::Debugger"); - let mut running = RUNNING.lock(); - *running = false; - *STEPPING.lock() = true; - Ok(new_ref!(Value, Value::Empty)) -} diff --git a/src/chacha/interpreter/expression/enumeration.rs b/src/chacha/interpreter/expression/enumeration.rs deleted file mode 100644 index 1a83a22d..00000000 --- a/src/chacha/interpreter/expression/enumeration.rs +++ /dev/null @@ -1,73 +0,0 @@ -use ansi_term::Colour; - -use crate::{ - chacha::{ - error::Result, - value::EnumFieldVariant, - value::{UserEnum, UserStruct}, - vm::VM, - }, - interpreter::{debug, eval_expression, function, Context}, - lu_dog::EnumFieldEnum, - new_ref, s_read, NewRef, RefType, SarzakStorePtr, Value, -}; - -pub fn eval( - enum_field: &SarzakStorePtr, - context: &mut Context, - vm: &mut VM, -) -> Result> { - debug!("eval enum_field: {enum_field}"); - - let lu_dog = context.lu_dog_heel().clone(); - - let field = s_read!(lu_dog).exhume_enum_field(enum_field).unwrap(); - let field = s_read!(field); - let woog_enum = &field.r88_enumeration(&s_read!(lu_dog))[0]; - let woog_enum = s_read!(woog_enum); - let ty = woog_enum.r1_value_type(&s_read!(lu_dog))[0].clone(); - - let value = match field.subtype { - EnumFieldEnum::Plain(_) => new_ref!( - Value, - Value::EnumVariant(EnumFieldVariant::Plain(field.name.to_string())) - ), - EnumFieldEnum::StructField(ref sf) => { - let struct_field = s_read!(lu_dog).exhume_struct_field(sf).unwrap(); - let struct_field = s_read!(struct_field); - let expr = struct_field.expression.unwrap(); - let expr = s_read!(lu_dog).exhume_expression(&expr).unwrap(); - let value = eval_expression(expr, context, vm)?; - let value = s_read!(value); - if let Value::Struct(struct_value) = &*value { - let struct_value = s_read!(struct_value); - new_ref!( - Value, - Value::EnumVariant(EnumFieldVariant::Struct( - field.name.to_owned(), - new_ref!(UserStruct, struct_value.clone()) - )) - ) - } else { - unreachable!() - } - } - EnumFieldEnum::TupleField(ref tf) => { - let tuple = s_read!(lu_dog).exhume_tuple_field(tf).unwrap(); - let _ty = s_read!(tuple).r86_value_type(&s_read!(lu_dog))[0].clone(); - // 🚧 Note that indexing into this is doing an implicit unwrap on - // the optional expression relationship. - let expr = s_read!(tuple).r90_expression(&s_read!(lu_dog))[0].clone(); - let value = eval_expression(expr, context, vm)?; - new_ref!( - Value, - Value::EnumVariant(EnumFieldVariant::Tuple(field.name.to_owned(), value)) - ) - } - }; - - let user_enum = UserEnum::new(woog_enum.name.clone(), &ty, value); - let user_enum = new_ref!(UserEnum, user_enum); - - Ok(new_ref!(Value, Value::Enum(user_enum))) -} diff --git a/src/chacha/interpreter/expression/field.rs b/src/chacha/interpreter/expression/field.rs deleted file mode 100644 index 71051b1a..00000000 --- a/src/chacha/interpreter/expression/field.rs +++ /dev/null @@ -1,120 +0,0 @@ -use ansi_term::Colour; -use snafu::{location, Location}; - -use crate::{ - chacha::error::Result, - interpreter::{debug, eval_expression, function, ChaChaError, Context}, - lu_dog::FieldAccessTargetEnum, - new_ref, s_read, s_write, NewRef, RefType, SarzakStorePtr, Value, -}; - -pub mod field_access { - use super::*; - - pub fn eval(field: &SarzakStorePtr, context: &mut Context) -> Result> { - let lu_dog = context.lu_dog_heel().clone(); - - let field = s_read!(lu_dog).exhume_field_access(field).unwrap(); - let fat = &s_read!(field).r65_field_access_target(&s_read!(lu_dog))[0]; - let field_name = match s_read!(fat).subtype { - FieldAccessTargetEnum::EnumField(ref field) => { - let field = s_read!(lu_dog).exhume_enum_field(field).unwrap(); - let field = s_read!(field); - field.name.to_owned() - } - FieldAccessTargetEnum::Field(ref field) => { - let field = s_read!(lu_dog).exhume_field(field).unwrap(); - let field = s_read!(field); - field.name.to_owned() - } - FieldAccessTargetEnum::Function(ref func) => { - let func = s_read!(lu_dog).exhume_function(func).unwrap(); - let func = s_read!(func); - func.name.to_owned() - } - }; - - debug!("field_name: {field_name}"); - - // What we're doing below is actually dereferencing a pointer. I wonder - // if there is a way to make this less confusing and error prone? A - // macro wouldn't work because the pointer is stored under various - // names. So it would be a function on the referrer. Like relationship - // navigation, actually. - // `let expr = field.expression(lu_dog).unwrap()` - // Something like that. - // A macro could maybe do it, if we pass the name of the field storing - // the pointer, actually. - // - let expr = &s_read!(field).expression; - let expr = s_read!(lu_dog).exhume_expression(expr).unwrap(); - // dereference!(field, expression, lu_dog); - - debug!("expression: {expr:?}"); - - let value = eval_expression(expr, context)?; - - debug!("value: {value:?}"); - - let value = s_read!(value).clone(); - match &value { - Value::ProxyType { - module, - obj_ty: _, - id: _, - plugin: ref proxy, - } => { - let proxy = s_write!(proxy); - match proxy - .invoke_func( - module.as_str().into(), - "self".into(), - "get_field_value".into(), - vec![Value::String(field_name.clone()).into()].into(), - ) - .into() - { - Ok(value) => { - debug!("ProxyType return value: {value:?}"); - - let value: Value = (value, &*s_read!(lu_dog)).into(); - debug!("ProxyType value: {value:?}"); - - Ok(new_ref!(Value, value)) - } - Err(e) => { - // 🚧 This needs it's own error. Lazy me. - Err(ChaChaError::BadnessHappened { - message: format!("{e}: `{field_name}`"), - location: location!(), - }) - } - } - } - Value::Struct(value) => { - let value = s_read!(value); - let value = value.get_field_value(&field_name).unwrap().clone(); - - Ok(new_ref!(Value, value)) - } - // 🚧 This needs it's own error. Lazy me. - bad => Err(ChaChaError::BadnessHappened { - message: format!("Bad value ({bad}) in field access"), - location: location!(), - }), - } - } -} - -pub mod field_expression { - use super::*; - - pub fn eval(field_expr: &SarzakStorePtr, context: &mut Context) -> Result> { - let lu_dog = context.lu_dog_heel().clone(); - - let field_expr = s_read!(lu_dog).exhume_field_expression(field_expr).unwrap(); - let expr = s_read!(field_expr).r38_expression(&s_read!(lu_dog))[0].clone(); - - eval_expression(expr, context) - } -} diff --git a/src/chacha/interpreter/expression/for_loop.rs b/src/chacha/interpreter/expression/for_loop.rs deleted file mode 100644 index b5d110d2..00000000 --- a/src/chacha/interpreter/expression/for_loop.rs +++ /dev/null @@ -1,65 +0,0 @@ -use ansi_term::Colour; -use snafu::{location, Location}; - -use crate::{ - chacha::error::Result, - interpreter::{debug, eval_expression, function, ChaChaError, Context}, - new_ref, s_read, NewRef, RefType, SarzakStorePtr, Value, -}; - -pub fn eval(for_loop: &SarzakStorePtr, context: &mut Context) -> Result> { - let lu_dog = context.lu_dog_heel().clone(); - - let for_loop = s_read!(lu_dog).exhume_for_loop(for_loop).unwrap(); - let for_loop = s_read!(for_loop); - let ident = for_loop.ident.to_owned(); - - let block = s_read!(lu_dog).exhume_expression(&for_loop.block).unwrap(); - let list = s_read!(lu_dog) - .exhume_expression(&for_loop.expression) - .unwrap(); - - let list = eval_expression(list, context)?; - let list = if let Value::List { ty: _, inner: vec } = &*s_read!(list) { - vec.to_owned() - } else if let Value::String(str) = &*s_read!(list) { - new_ref!( - Vec>, - str.chars() - .map(|c| new_ref!(Value, Value::Char(c))) - .collect() - ) - } else if let Value::Range(range) = &*s_read!(list) { - let mut vec = Vec::new(); - for i in range.start..range.end { - vec.push(new_ref!(Value, Value::Integer(i))); - } - new_ref!(Vec>, vec) - } else { - return Err(ChaChaError::BadnessHappened { - message: "For loop expression is not a list".to_owned(), - location: location!(), - }); - }; - - debug!("for loop {ident} in {list:?}"); - - context.memory().push_frame(); - for item in &*s_read!(list) { - context.memory().insert(ident.clone(), item.clone()); - let expr_ty = eval_expression(block.clone(), context); - match expr_ty { - Ok(_) => {} - Err(e) => { - context.memory().pop_frame(); - return Err(e); - } - } - } - context.memory().pop_frame(); - - let result = Ok(new_ref!(Value, Value::Empty)); - - #[allow(clippy::let_and_return)] - result -} diff --git a/src/chacha/interpreter/expression/if_expr.rs b/src/chacha/interpreter/expression/if_expr.rs deleted file mode 100644 index d4bea10f..00000000 --- a/src/chacha/interpreter/expression/if_expr.rs +++ /dev/null @@ -1,41 +0,0 @@ -use ansi_term::Colour; - -use crate::{ - chacha::error::Result, - interpreter::{debug, eval_expression, function, Context}, - new_ref, s_read, NewRef, RefType, SarzakStorePtr, Value, -}; - -pub fn eval_if_expression(expr: &SarzakStorePtr, context: &mut Context) -> Result> { - let lu_dog = context.lu_dog_heel().clone(); - let lu_dog = s_read!(lu_dog); - - let expr = lu_dog.exhume_x_if(expr).unwrap(); - let expr = s_read!(expr); - debug!("ExpressionEnum::XIf {expr:?}"); - - let cond_expr = lu_dog.exhume_expression(&expr.test).unwrap(); - - let cond = eval_expression(cond_expr, context)?; - debug!("ExpressionEnum::XIf conditional {cond:?}"); - - let cond = s_read!(cond); - Ok(if (&*cond).try_into()? { - // Evaluate the true block - let block = lu_dog.exhume_block(&expr.true_block).unwrap(); - let block = s_read!(block).r15_expression(&lu_dog)[0].clone(); - - eval_expression(block, context)? - } else { - debug!("ExpressionEnum::XIf else"); - if let Some(expr) = &expr.false_block { - debug!("ExpressionEnum::XIf false block"); - // Evaluate the false block - let expr = lu_dog.exhume_expression(expr).unwrap(); - - eval_expression(expr, context)? - } else { - new_ref!(Value, Value::Empty) - } - }) -} diff --git a/src/chacha/interpreter/expression/index.rs b/src/chacha/interpreter/expression/index.rs deleted file mode 100644 index 4b1881e6..00000000 --- a/src/chacha/interpreter/expression/index.rs +++ /dev/null @@ -1,140 +0,0 @@ -use std::ops::Range; - -use ansi_term::Colour; -use snafu::{location, Location}; - -use crate::{ - chacha::error::Result, - interpreter::{debug, eval_expression, function, ChaChaError, Context}, - new_ref, s_read, NewRef, RefType, SarzakStorePtr, Value, -}; - -pub fn eval_index(index: &SarzakStorePtr, context: &mut Context) -> Result> { - let lu_dog = context.lu_dog_heel().clone(); - - let index = s_read!(lu_dog).exhume_index(index).unwrap(); - let index = s_read!(index); - let target = s_read!(lu_dog).exhume_expression(&index.target).unwrap(); - let index_expr = s_read!(lu_dog).exhume_expression(&index.index).unwrap(); - - debug!("index {target:?}[{index:?}]"); - - let index = eval_expression(index_expr.clone(), context)?; - let index = s_read!(index).clone(); - match &index { - Value::Integer(index) => { - let index = *index as usize; - let list = eval_expression(target.clone(), context)?; - let list = s_read!(list); - if let Value::List { ty: _, inner: vec } = &list.clone() { - let vec = s_read!(vec); - if index < vec.len() { - Ok(vec[index].to_owned()) - } else { - let value = &s_read!(index_expr).r11_x_value(&s_read!(lu_dog))[0]; - let span = &s_read!(value).r63_span(&s_read!(lu_dog))[0]; - let read = s_read!(span); - let span = read.start as usize..read.end as usize; - - Err(ChaChaError::IndexOutOfBounds { - index, - len: vec.len(), - span, - location: location!(), - }) - } - } else if let Value::String(str) = &*list { - let str = unicode_segmentation::UnicodeSegmentation::graphemes(str.as_str(), true) - .collect::>(); - - if index < str.len() { - Ok(new_ref!( - Value, - Value::Char(str[index..index + 1].join("").chars().next().unwrap(),) - )) - } else { - let value = &s_read!(index_expr).r11_x_value(&s_read!(lu_dog))[0]; - let span = &s_read!(value).r63_span(&s_read!(lu_dog))[0]; - let read = s_read!(span); - let span = read.start as usize..read.end as usize; - - Err(ChaChaError::IndexOutOfBounds { - index, - len: str.len(), - span, - location: location!(), - }) - } - } else { - let value = &s_read!(target).r11_x_value(&s_read!(lu_dog))[0]; - let span = &s_read!(value).r63_span(&s_read!(lu_dog))[0]; - let read = s_read!(span); - let span = read.start as usize..read.end as usize; - - Err(ChaChaError::NotIndexable { - span, - location: location!(), - }) - } - } - Value::Range(_) => { - let range: Range = index.try_into()?; - let list = eval_expression(target.clone(), context)?; - let list = s_read!(list); - if let Value::List { ty, inner: vec } = &list.clone() { - let vec = s_read!(vec); - if range.end < vec.len() { - Ok(new_ref!( - Value, - Value::List { - ty: ty.clone(), - inner: new_ref!(Vec>, vec[range].to_owned()) - } - )) - } else { - let value = &s_read!(index_expr).r11_x_value(&s_read!(lu_dog))[0]; - let span = &s_read!(value).r63_span(&s_read!(lu_dog))[0]; - let read = s_read!(span); - let span = read.start as usize..read.end as usize; - - Err(ChaChaError::IndexOutOfBounds { - index: range.end, - len: vec.len(), - span, - location: location!(), - }) - } - } else if let Value::String(str) = &*list { - let str = unicode_segmentation::UnicodeSegmentation::graphemes(str.as_str(), true) - .collect::>(); - - if range.end < str.len() { - Ok(new_ref!(Value, Value::String(str[range].join(""),))) - } else { - let value = &s_read!(index_expr).r11_x_value(&s_read!(lu_dog))[0]; - let span = &s_read!(value).r63_span(&s_read!(lu_dog))[0]; - let read = s_read!(span); - let span = read.start as usize..read.end as usize; - - Err(ChaChaError::IndexOutOfBounds { - index: range.end, - len: str.len(), - span, - location: location!(), - }) - } - } else { - let value = &s_read!(target).r11_x_value(&s_read!(lu_dog))[0]; - let span = &s_read!(value).r63_span(&s_read!(lu_dog))[0]; - let read = s_read!(span); - let span = read.start as usize..read.end as usize; - - Err(ChaChaError::NotIndexable { - span, - location: location!(), - }) - } - } - _ => unreachable!(), - } -} diff --git a/src/chacha/interpreter/expression/list.rs b/src/chacha/interpreter/expression/list.rs deleted file mode 100644 index 874f42b6..00000000 --- a/src/chacha/interpreter/expression/list.rs +++ /dev/null @@ -1,79 +0,0 @@ -use ansi_term::Colour; - -use crate::{ - chacha::error::Result, - interpreter::{debug, eval_expression, function, Context}, - lu_dog::ValueType, - new_ref, s_read, s_write, NewRef, RefType, SarzakStorePtr, Value, -}; - -pub fn eval_list_element( - element: &SarzakStorePtr, - context: &mut Context, -) -> Result> { - let lu_dog = context.lu_dog_heel().clone(); - - debug!("list element {element:?}"); - - let element = s_read!(lu_dog).exhume_list_element(element).unwrap(); - let element = s_read!(element); - let expr = element.r55_expression(&s_read!(lu_dog))[0].clone(); - eval_expression(expr, context) -} - -pub fn eval_list_expression( - list: &SarzakStorePtr, - context: &mut Context, -) -> Result> { - let lu_dog = context.lu_dog_heel().clone(); - - let list = s_read!(lu_dog).exhume_list_expression(list).unwrap(); - let list = s_read!(list); - - if let Some(ref element) = list.elements { - // 🚧 This seems like the sort of thing that can be sorted out by the - // extruder. - // This is the first element in the list. We need to give this list - // a type, and I'm going to do the easy thing here and take the type - // to be whatever the first element evaluates as. - let element = s_read!(lu_dog).exhume_list_element(element).unwrap(); - let element = s_read!(element); - - let expr = element.r15_expression(&s_read!(lu_dog))[0].clone(); - - let ty = &s_read!(expr).r11_x_value(&s_read!(lu_dog))[0]; - let ty = s_read!(ty).r24_value_type(&s_read!(lu_dog))[0].clone(); - - let value = eval_expression(expr, context)?; - - let mut values = vec![value.clone()]; - - let mut next = element.next; - while let Some(ref id) = next { - let element = s_read!(lu_dog).exhume_list_element(id).unwrap(); - let element = s_read!(element); - let expr = element.r15_expression(&s_read!(lu_dog))[0].clone(); - let value = eval_expression(expr, context)?; - values.push(value); - next = element.next; - } - - Ok(new_ref!( - Value, - Value::List { - ty, - inner: new_ref!(Vec>, values) - } - )) - } else { - let ty = ValueType::new_empty(true, &mut s_write!(lu_dog)); - - Ok(new_ref!( - Value, - Value::List { - ty, - inner: new_ref!(Vec>, vec![]) - } - )) - } -} diff --git a/src/chacha/interpreter/expression/literal.rs b/src/chacha/interpreter/expression/literal.rs deleted file mode 100644 index 0a3bf984..00000000 --- a/src/chacha/interpreter/expression/literal.rs +++ /dev/null @@ -1,118 +0,0 @@ -use ansi_term::Colour; - -use crate::{ - chacha::error::Result, - interpreter::{debug, eval_expression, function, Context}, - lu_dog::{BooleanLiteralEnum, FormatBitEnum, LiteralEnum}, - new_ref, s_read, NewRef, RefType, SarzakStorePtr, Value, -}; - -pub fn eval(literal: &SarzakStorePtr, context: &mut Context) -> Result> { - let lu_dog = context.lu_dog_heel().clone(); - let lu_dog = s_read!(lu_dog); - - let literal = lu_dog.exhume_literal(literal).unwrap(); - - debug!("literal {literal:?}"); - - let z = match &s_read!(literal).subtype { - // - // BooleanLiteral - // - LiteralEnum::BooleanLiteral(ref literal) => { - let literal = lu_dog.exhume_boolean_literal(literal).unwrap(); - let literal = s_read!(literal); - - match literal.subtype { - BooleanLiteralEnum::FalseLiteral(_) => Ok(new_ref!(Value, Value::Boolean(false,))), - BooleanLiteralEnum::TrueLiteral(_) => Ok(new_ref!(Value, Value::Boolean(true,))), - } - } - // - // CharLiteral - // - LiteralEnum::CharLiteral(ref literal) => { - let literal = lu_dog.exhume_char_literal(literal).unwrap(); - let literal = std::char::from_u32(s_read!(literal).x_value as u32).unwrap(); - let value = Value::Char(literal); - Ok(new_ref!(Value, value)) - } - // - // FloatLiteral - // - LiteralEnum::FloatLiteral(ref literal) => { - let literal = lu_dog.exhume_float_literal(literal).unwrap(); - let value = s_read!(literal).x_value; - let value = Value::Float(value); - Ok(new_ref!(Value, value)) - } - // - // FormatString - // - LiteralEnum::FormatString(ref string) => { - let string = lu_dog.exhume_format_string(string).unwrap(); - let string = s_read!(string); - if let Some(ref first) = string.first_format_bit { - let mut next = lu_dog.exhume_format_bit(first).unwrap(); - - let mut result = String::new(); - loop { - { - let current = s_read!(next); - match current.subtype { - FormatBitEnum::ExpressionBit(ref expr) => { - let expr_bit = lu_dog.exhume_expression_bit(expr).unwrap(); - let expr_bit = s_read!(expr_bit); - let expr = lu_dog.exhume_expression(&expr_bit.expression).unwrap(); - let value = eval_expression(expr, context)?; - - result += &s_read!(value).to_inner_string(); - } - FormatBitEnum::StringBit(ref string) => { - let string_bit = lu_dog.exhume_string_bit(string).unwrap(); - let string_bit = s_read!(string_bit); - let string = - lu_dog.exhume_string_literal(&string_bit.z_string).unwrap(); - let string = s_read!(string); - - result += &string.x_value; - } - } - } - - if let Some(ref id) = s_read!(next.clone()).next { - next = lu_dog.exhume_format_bit(id).unwrap(); - } else { - break; - } - } - - Ok(new_ref!(Value, result.into())) - } else { - Ok(new_ref!(Value, Value::Empty)) - } - } - // - // IntegerLiteral - // - LiteralEnum::IntegerLiteral(ref literal) => { - let literal = lu_dog.exhume_integer_literal(literal).unwrap(); - let value = s_read!(literal).x_value; - let value = Value::Integer(value); - Ok(new_ref!(Value, value)) - } - // - // StringLiteral - // - LiteralEnum::StringLiteral(ref literal) => { - let literal = lu_dog.exhume_string_literal(literal).unwrap(); - // 🚧 It'd be great if this were an Rc... - let value = Value::String(s_read!(literal).x_value.clone()); - Ok(new_ref!(Value, value)) - } - _ => unimplemented!(), - }; - - #[allow(clippy::let_and_return)] - z -} diff --git a/src/chacha/interpreter/expression/match_expr.rs b/src/chacha/interpreter/expression/match_expr.rs deleted file mode 100644 index f90496b7..00000000 --- a/src/chacha/interpreter/expression/match_expr.rs +++ /dev/null @@ -1,195 +0,0 @@ -use std::collections::VecDeque; - -use crate::{ - chacha::{error::Result, value::Enum}, - interpreter::{eval_expression, Context}, - lu_dog::ExpressionEnum, - new_ref, s_read, NewRef, RefType, SarzakStorePtr, Value, PATH_SEP, -}; - -pub fn eval(match_expr: &SarzakStorePtr, context: &mut Context) -> Result> { - let lu_dog = context.lu_dog_heel().clone(); - let lu_dog = s_read!(lu_dog); - - let match_expr = lu_dog.exhume_x_match(match_expr).unwrap(); - let match_expr = s_read!(match_expr); - - let patterns = match_expr.r87_pattern(&lu_dog); - let scrutinee = match_expr.r91_expression(&lu_dog)[0].clone(); - - let scrutinee = eval_expression(scrutinee, context)?; - - // Check each pattern for a match. - // 🚧 Darn. Match arms need to be ordered the same as they are written, and - // they are not ordered in the model. - for pattern in patterns { - let match_expr = s_read!(pattern).r87_expression(&lu_dog)[0].clone(); - let pattern_expr = s_read!(pattern).r92_expression(&lu_dog)[0].clone(); - - let match_expr_read = s_read!(match_expr); - match &match_expr_read.subtype { - ExpressionEnum::EmptyExpression(ref _id) => { - let value = eval_expression(pattern_expr, context)?; - return Ok(value); - } - ExpressionEnum::Literal(ref _id) => { - let value = eval_expression(match_expr.clone(), context)?; - let value = s_read!(value); - if *s_read!(scrutinee) == *value { - let value = eval_expression(pattern_expr, context)?; - return Ok(value); - } - } - ExpressionEnum::StructExpression(ref id) => { - let struct_expr = lu_dog.exhume_struct_expression(id).unwrap(); - let field_exprs = s_read!(struct_expr).r26_field_expression(&lu_dog); - // let data_struct = &s_read!(struct_expr).r39_data_structure(&lu_dog)[0]; - - // This thing tears apart a value exposing each element as a (string, value) tuple. - fn decode_expression(value: RefType) -> (String, Option>) { - match &*s_read!(value) { - Value::Boolean(value) => (value.to_string(), None), - Value::Enumeration(value) => match value { - // 🚧 I can't tell if this is gross, or a sweet hack. - // I think I'm referring to using the name as the scrutinee? - Enum::Unit(_, ty, value) => ( - ty.to_owned(), - Some(new_ref!(Value, Value::String(value.to_owned()))), - ), - // EnumFieldVariant::Struct(value) => ( - // s_read!(value).type_name().to_owned(), - // Some(s_read!(value).get_value()), - // ), - Enum::Tuple((ty, path), value) => { - let path = path.split(PATH_SEP).collect::>(); - let mut path = VecDeque::from(path); - let name = path.pop_front().unwrap().to_owned(); - if name.is_empty() { - ( - s_read!(value).variant().to_owned(), - Some(s_read!(value).value().clone()), - ) - } else { - ( - name, - Some(new_ref!( - Value, - Value::Enumeration(Enum::Tuple( - ( - ty.clone(), - path.into_iter() - .collect::>() - .join(PATH_SEP) - ), - value.clone(), - )) - )), - ) - } - } - _ => unimplemented!(), - }, - Value::String(value) => (value.to_owned(), None), - huh => panic!("match encountered {huh}"), - } - } - - // Below we are iterating over each element in the expression path - // and testing it against the scrutinee value. - - let x_path = &lu_dog.exhume_x_path(&s_read!(struct_expr).x_path).unwrap(); - // We know that there is always a pe. It's only in an option so that - // we can construct everything. - let mut pe = s_read!(x_path).r97_path_element(&lu_dog)[0].clone(); - - let mut matched = false; - let (name, mut scrutinee) = decode_expression(scrutinee.clone()); - if name == s_read!(pe).name { - while s_read!(pe).next.is_some() && scrutinee.is_some() { - let id = { - let id = &s_read!(pe).next; - #[allow(clippy::clone_on_copy)] - id.as_ref().unwrap().clone() - }; - pe = lu_dog.exhume_path_element(&id).unwrap(); - let (name, s) = decode_expression(scrutinee.unwrap()); - scrutinee = s; - - if name == s_read!(pe).name { - matched = true; - continue; - } else { - // kts -- if something breaks -- it might be this. - // matched = false; - break; - } - } - } - - // Assuming that we matched the path we need to now evaluate the - // pattern expression. - match (matched, field_exprs.len()) { - (true, 0) => { - let value = eval_expression(pattern_expr, context)?; - return Ok(value); - } - (true, _) => { - // 🚧 We are only working on the first one? - let field_expr = s_read!(field_exprs[0]).r38_expression(&lu_dog)[0].clone(); - let field_expr_read = s_read!(field_expr); - match field_expr_read.subtype { - ExpressionEnum::Literal(ref _id) => { - let value = eval_expression(field_expr.clone(), context)?; - let value = s_read!(value); - if *s_read!(scrutinee.unwrap()) == *value { - let value = eval_expression(pattern_expr, context)?; - return Ok(value); - } - } - ExpressionEnum::VariableExpression(ref var) => { - let var = lu_dog.exhume_variable_expression(var).unwrap(); - - context.memory().push_frame(); - context - .memory() - .insert(s_read!(var).name.to_owned(), scrutinee.unwrap()); - let value = eval_expression(pattern_expr, context)?; - - context.memory().pop_frame(); - - return Ok(value); - } - _ => unimplemented!(), - } - } - (false, _) => {} - } - } - ExpressionEnum::VariableExpression(ref id) => { - let var = lu_dog.exhume_variable_expression(id).unwrap(); - - context.memory().push_frame(); - - context - .memory() - .insert(s_read!(var).name.to_owned(), scrutinee); - let value = eval_expression(pattern_expr, context)?; - - context.memory().pop_frame(); - return Ok(value); - } - oops => panic!("{oops:?}"), - } - } - - // 🚧 I'm torn about this. Returning Empty makes if let work, but if a - // match expression falls through we get here. I suppose the right answer - // is to test the match expression in the extruder to make sure that nothing - // can actually fall through. Well, nothing but the if let. - Ok(new_ref!(Value, Value::Empty)) - - // Err(ChaChaError::BadnessHappened { - // message: "fall through match expression".to_owned(), - // location: location!(), - // }) -} diff --git a/src/chacha/interpreter/expression/operator.rs b/src/chacha/interpreter/expression/operator.rs deleted file mode 100644 index 10604b89..00000000 --- a/src/chacha/interpreter/expression/operator.rs +++ /dev/null @@ -1,36 +0,0 @@ -use ansi_term::Colour; - -use crate::{ - chacha::error::Result, - interpreter::{debug, function, Context}, - lu_dog::{Expression, OperatorEnum}, - s_read, RefType, SarzakStorePtr, Value, -}; - -pub mod binary; -pub mod comparison; -pub mod unary; - -pub fn eval_operator( - operator: &SarzakStorePtr, - expression: &RefType, - context: &mut Context, -) -> Result> { - let lu_dog = context.lu_dog_heel().clone(); - - let operator = s_read!(lu_dog).exhume_operator(operator).unwrap(); - let lhs_expr = s_read!(lu_dog) - .exhume_expression(&s_read!(operator).lhs) - .unwrap(); - - debug!("operator {operator:?}"); - - let match_expr = s_read!(operator); - match &match_expr.subtype { - OperatorEnum::Binary(ref binary) => { - binary::eval(binary, &lhs_expr, &operator, expression, context) - } - OperatorEnum::Comparison(ref comp) => comparison::eval(comp, &lhs_expr, &operator, context), - OperatorEnum::Unary(ref unary) => unary::eval(unary, &lhs_expr, context), - } -} diff --git a/src/chacha/interpreter/expression/operator/binary.rs b/src/chacha/interpreter/expression/operator/binary.rs deleted file mode 100644 index d9a3b45e..00000000 --- a/src/chacha/interpreter/expression/operator/binary.rs +++ /dev/null @@ -1,45 +0,0 @@ -use ansi_term::Colour; - -use crate::{ - chacha::error::Result, - interpreter::{debug, function, Context}, - lu_dog::{BinaryEnum, Expression, Operator}, - s_read, RefType, SarzakStorePtr, Value, -}; - -pub mod addition; -pub mod assignment; -pub mod boolean_operator; -pub mod division; -pub mod multiplication; -pub mod subtraction; - -pub fn eval( - binary: &SarzakStorePtr, - lhs_expr: &RefType, - operator: &RefType, - expression: &RefType, - context: &mut Context, -) -> Result> { - let lu_dog = context.lu_dog_heel().clone(); - - let binary = s_read!(lu_dog).exhume_binary(binary).unwrap(); - let binary = s_read!(binary); - - debug!("Evaluating binary operator: {:?}", binary.subtype); - - match &binary.subtype { - BinaryEnum::Addition(_) => addition::eval_addition(lhs_expr, operator, context), - BinaryEnum::Assignment(_) => { - assignment::eval_assignment(lhs_expr, operator, expression, context) - } - BinaryEnum::BooleanOperator(ref op) => { - boolean_operator::eval_boolean_operator(op, lhs_expr, operator, context) - } - BinaryEnum::Division(_) => division::eval_division(lhs_expr, operator, context), - BinaryEnum::Subtraction(_) => subtraction::eval_subtraction(lhs_expr, operator, context), - BinaryEnum::Multiplication(_) => { - multiplication::eval_multiplication(lhs_expr, operator, context) - } - } -} diff --git a/src/chacha/interpreter/expression/operator/binary/addition.rs b/src/chacha/interpreter/expression/operator/binary/addition.rs deleted file mode 100644 index 5e1f732a..00000000 --- a/src/chacha/interpreter/expression/operator/binary/addition.rs +++ /dev/null @@ -1,29 +0,0 @@ -use ansi_term::Colour; - -use crate::{ - chacha::error::Result, - interpreter::{debug, eval_expression, function, Context}, - lu_dog::{Expression, Operator}, - new_ref, s_read, NewRef, RefType, Value, -}; - -pub fn eval_addition( - lhs_expr: &RefType, - operator: &RefType, - context: &mut Context, -) -> Result> { - let lhs = eval_expression(lhs_expr.clone(), context)?; - let rhs = { - let rhs = s_read!(operator).rhs.unwrap(); - let rhs = s_read!(context.lu_dog_heel()) - .exhume_expression(&rhs) - .unwrap(); - eval_expression(rhs, context)? - }; - - let value = s_read!(lhs).clone() + s_read!(rhs).clone(); - - debug!("addition {lhs:?} + {rhs:?} = {value:?}"); - - Ok(new_ref!(Value, value)) -} diff --git a/src/chacha/interpreter/expression/operator/binary/assignment.rs b/src/chacha/interpreter/expression/operator/binary/assignment.rs deleted file mode 100644 index 5fb225b6..00000000 --- a/src/chacha/interpreter/expression/operator/binary/assignment.rs +++ /dev/null @@ -1,156 +0,0 @@ -use ansi_term::Colour; -use snafu::{location, Location}; - -use crate::{ - chacha::error::Result, - interpreter::{debug, eval_expression, function, ChaChaError, Context}, - lu_dog::{Expression, ExpressionEnum, FieldAccessTargetEnum, Operator}, - new_ref, s_read, s_write, NewRef, RefType, Value, -}; - -pub fn eval_assignment( - lhs_expr: &RefType, - operator: &RefType, - _expression: &RefType, - context: &mut Context, -) -> Result> { - let lu_dog = context.lu_dog_heel().clone(); - - debug!("Evaluating assignment lhs: {lhs_expr:?}"); - - // Type checking has already been handled by the compiler. - match &s_read!(lhs_expr).subtype { - ExpressionEnum::FieldAccess(field) => { - let rhs = { - let rhs = s_read!(operator).rhs.unwrap(); - let rhs = s_read!(lu_dog).exhume_expression(&rhs).unwrap(); - eval_expression(rhs, context)? - }; - let field = s_read!(lu_dog).exhume_field_access(field).unwrap(); - - let fat = &s_read!(field).r65_field_access_target(&s_read!(lu_dog))[0]; - let field_name = match s_read!(fat).subtype { - FieldAccessTargetEnum::EnumField(ref field) => { - let field = s_read!(lu_dog).exhume_enum_field(field).unwrap(); - let field = s_read!(field); - field.name.to_owned() - } - FieldAccessTargetEnum::Field(ref field) => { - let field = s_read!(lu_dog).exhume_field(field).unwrap(); - let field = s_read!(field); - field.name.to_owned() - } - FieldAccessTargetEnum::Function(_) => { - return Err(ChaChaError::BadnessHappened { - message: "Attempt to assign to function".to_owned(), - location: location!(), - }) - } - }; - - debug!("field access: rhs: {rhs:?}, field: {field_name}"); - - let expr = &s_read!(field).expression; - let expr = s_read!(lu_dog).exhume_expression(expr).unwrap(); - let value = eval_expression(expr, context)?; - - debug!("value: {value:?}"); - - let value = s_read!(value); - match &*value { - Value::ProxyType { - module, - obj_ty: _, - id: _, - plugin: ref proxy, - } => { - let proxy = s_write!(proxy); - let result = proxy.invoke_func( - module.as_str().into(), - "self".into(), - "set_field_value".into(), - vec![ - Value::String(field_name.clone()).into(), - (*s_read!(rhs)).clone().into(), - ] - .into(), - ); - if let Err(e) = result.into() { - // 🚧 This needs it's own error. Lazy me. - return Err(ChaChaError::BadnessHappened { - message: format!("{e}"), - location: location!(), - }); - } - } - Value::Struct(value) => { - s_write!(value).set_field_value(&field_name, (*s_read!(rhs)).clone()); - } - // 🚧 This needs it's own error. - _value => { - return Err(ChaChaError::BadnessHappened { - message: "Attempt to assign to non-struct".to_owned(), - location: location!(), - }) - } - } - - Ok(new_ref!(Value, Value::Empty)) - } - ExpressionEnum::TypeCast(expr) => { - let rhs = { - let rhs = s_read!(operator).rhs.unwrap(); - let rhs = s_read!(lu_dog).exhume_expression(&rhs).unwrap(); - eval_expression(rhs, context)? - }; - let expr = s_read!(lu_dog).exhume_type_cast(expr).unwrap(); - let expr = s_read!(expr).r68_expression(&s_read!(lu_dog))[0].clone(); - // We are going to assume that the lhs, that we just read, is - // in fact a variable expression. I honestly don't know what else - // it could be, since LHS expression manipulation is weird. I - // don't think it really makes any sense, but maybe I'm wrong. - let result = if let ExpressionEnum::VariableExpression(ref id) = s_read!(expr).subtype { - let expr = s_read!(lu_dog).exhume_variable_expression(id).unwrap(); - let name = s_read!(expr).name.clone(); - let value = context.memory().get(&name).unwrap(); - let mut value = s_write!(value); - *value = s_read!(rhs).clone(); - Ok(rhs) - } else { - Err(ChaChaError::BadnessHappened { - message: "Attempt to assign to non-variable".to_owned(), - location: location!(), - }) - }; - - #[allow(clippy::let_and_return)] - result - } - // 🚧 I'm sort of duplicating work here. It's not exactly the same - // as the general expression handling code, but I think it's close - // enough that I could make it work if I wanted to. And so I should. - // - // Hm. I've already processed the lhs above, and I'm basically doing - // it again here. - ExpressionEnum::VariableExpression(expr) => { - let rhs = { - let rhs = s_read!(operator).rhs.unwrap(); - let rhs = s_read!(lu_dog).exhume_expression(&rhs).unwrap(); - eval_expression(rhs, context)? - }; - let expr = s_read!(lu_dog).exhume_variable_expression(expr).unwrap(); - let expr = s_read!(expr); - let name = expr.name.clone(); - let value = context.memory().get(&name).unwrap(); - let mut value = s_write!(value); - *value = s_read!(rhs).clone(); - Ok(rhs) - } - lhs => Err(ChaChaError::BadnessHappened { - message: format!("Bad LHS in assignment: {lhs:?}"), - location: location!(), - }), - } - - // Ok((lhs, lhs_ty)) -} diff --git a/src/chacha/interpreter/expression/operator/binary/boolean_operator.rs b/src/chacha/interpreter/expression/operator/binary/boolean_operator.rs deleted file mode 100644 index a5ac5dd4..00000000 --- a/src/chacha/interpreter/expression/operator/binary/boolean_operator.rs +++ /dev/null @@ -1,46 +0,0 @@ -use ansi_term::Colour; - -use crate::{ - chacha::error::Result, - interpreter::{debug, eval_expression, function, Context}, - lu_dog::{BooleanOperatorEnum, Expression, Operator}, - new_ref, s_read, NewRef, RefType, SarzakStorePtr, Value, -}; - -pub fn eval_boolean_operator( - op: &SarzakStorePtr, - lhs_expr: &RefType, - operator: &RefType, - context: &mut Context, -) -> Result> { - let lu_dog = context.lu_dog_heel().clone(); - - let lhs = eval_expression(lhs_expr.clone(), context)?; - let rhs = { - let rhs = s_read!(operator).rhs.unwrap(); - let rhs = s_read!(lu_dog).exhume_expression(&rhs).unwrap(); - eval_expression(rhs, context)? - }; - let boolean_operator = s_read!(lu_dog).exhume_boolean_operator(op).unwrap(); - let boolean_operator = s_read!(boolean_operator); - - debug!( - "Evaluating boolean operator: {:?}", - boolean_operator.subtype - ); - - match &boolean_operator.subtype { - BooleanOperatorEnum::And(_) => { - let value = Value::Boolean( - (&*s_read!(lhs)).try_into().unwrap() && (&*s_read!(rhs)).try_into().unwrap(), - ); - Ok(new_ref!(Value, value)) - } - BooleanOperatorEnum::Or(_) => { - let value = Value::Boolean( - (&*s_read!(lhs)).try_into().unwrap() || (&*s_read!(rhs)).try_into().unwrap(), - ); - Ok(new_ref!(Value, value)) - } - } -} diff --git a/src/chacha/interpreter/expression/operator/binary/division.rs b/src/chacha/interpreter/expression/operator/binary/division.rs deleted file mode 100644 index dec41690..00000000 --- a/src/chacha/interpreter/expression/operator/binary/division.rs +++ /dev/null @@ -1,28 +0,0 @@ -use ansi_term::Colour; - -use crate::{ - chacha::error::Result, - interpreter::{debug, eval_expression, function, Context}, - lu_dog::{Expression, Operator}, - new_ref, s_read, NewRef, RefType, Value, -}; - -pub fn eval_division( - lhs_expr: &RefType, - operator: &RefType, - context: &mut Context, -) -> Result> { - let lu_dog = context.lu_dog_heel().clone(); - - let lhs = eval_expression(lhs_expr.clone(), context)?; - let rhs = { - let rhs = s_read!(operator).rhs.unwrap(); - let rhs = s_read!(lu_dog).exhume_expression(&rhs).unwrap(); - eval_expression(rhs, context)? - }; - let value = s_read!(lhs).clone() / s_read!(rhs).clone(); - - debug!("Evaluating division: {lhs:?} / {rhs:?} = {value:?}"); - - Ok(new_ref!(Value, value)) -} diff --git a/src/chacha/interpreter/expression/operator/binary/multiplication.rs b/src/chacha/interpreter/expression/operator/binary/multiplication.rs deleted file mode 100644 index 26e4cff4..00000000 --- a/src/chacha/interpreter/expression/operator/binary/multiplication.rs +++ /dev/null @@ -1,27 +0,0 @@ -use ansi_term::Colour; - -use crate::{ - chacha::error::Result, - interpreter::{debug, eval_expression, function, Context}, - lu_dog::{Expression, Operator}, - new_ref, s_read, NewRef, RefType, Value, -}; - -pub fn eval_multiplication( - lhs_expr: &RefType, - operator: &RefType, - context: &mut Context, -) -> Result> { - let lu_dog = context.lu_dog_heel().clone(); - let lhs = eval_expression(lhs_expr.clone(), context)?; - let rhs = { - let rhs = s_read!(operator).rhs.unwrap(); - let rhs = s_read!(lu_dog).exhume_expression(&rhs).unwrap(); - eval_expression(rhs, context)? - }; - let value = s_read!(lhs).clone() * s_read!(rhs).clone(); - - debug!("Evaluating multiplication: {lhs:?} * {rhs:?} = {value:?}"); - - Ok(new_ref!(Value, value)) -} diff --git a/src/chacha/interpreter/expression/operator/binary/subtraction.rs b/src/chacha/interpreter/expression/operator/binary/subtraction.rs deleted file mode 100644 index f3cf8629..00000000 --- a/src/chacha/interpreter/expression/operator/binary/subtraction.rs +++ /dev/null @@ -1,28 +0,0 @@ -use ansi_term::Colour; - -use crate::{ - chacha::error::Result, - interpreter::{debug, eval_expression, function, Context}, - lu_dog::{Expression, Operator}, - new_ref, s_read, NewRef, RefType, Value, -}; - -pub fn eval_subtraction( - lhs_expr: &RefType, - operator: &RefType, - context: &mut Context, -) -> Result> { - let lu_dog = context.lu_dog_heel().clone(); - - let lhs = eval_expression(lhs_expr.clone(), context)?; - let rhs = { - let rhs = s_read!(operator).rhs.unwrap(); - let rhs = s_read!(lu_dog).exhume_expression(&rhs).unwrap(); - eval_expression(rhs, context)? - }; - let value = s_read!(lhs).clone() - s_read!(rhs).clone(); - - debug!("Evaluating subtraction: {lhs:?} - {rhs:?} = {value:?}"); - - Ok(new_ref!(Value, value)) -} diff --git a/src/chacha/interpreter/expression/operator/comparison.rs b/src/chacha/interpreter/expression/operator/comparison.rs deleted file mode 100644 index 7add28dd..00000000 --- a/src/chacha/interpreter/expression/operator/comparison.rs +++ /dev/null @@ -1,67 +0,0 @@ -use ansi_term::Colour; - -use crate::{ - chacha::error::Result, - interpreter::{debug, eval_expression, function, Context}, - lu_dog::{ComparisonEnum, Expression, Operator}, - new_ref, s_read, NewRef, RefType, SarzakStorePtr, Value, -}; - -pub fn eval( - comp: &SarzakStorePtr, - lhs_expr: &RefType, - operator: &RefType, - context: &mut Context, -) -> Result> { - let lu_dog = context.lu_dog_heel().clone(); - - let lhs = eval_expression(lhs_expr.clone(), context)?; - let rhs = { - let rhs = s_read!(operator).rhs.unwrap(); - let rhs = s_read!(lu_dog).exhume_expression(&rhs).unwrap(); - eval_expression(rhs, context)? - }; - let comp = s_read!(lu_dog).exhume_comparison(comp).unwrap(); - - debug!("eval_comparison: {lhs:?} {comp:?} {rhs:?}"); - - let comp = s_read!(comp); - match comp.subtype { - ComparisonEnum::Equal(_) => { - let value = *s_read!(lhs) == *s_read!(rhs); - let value = Value::Boolean(value); - - Ok(new_ref!(Value, value)) - } - ComparisonEnum::GreaterThan(_) => { - let value = s_read!(lhs).gt(&s_read!(rhs)); - let value = Value::Boolean(value); - - Ok(new_ref!(Value, value)) - } - ComparisonEnum::GreaterThanOrEqual(_) => { - let value = s_read!(lhs).gte(&s_read!(rhs)); - let value = Value::Boolean(value); - - Ok(new_ref!(Value, value)) - } - ComparisonEnum::LessThan(_) => { - let value = s_read!(lhs).lt(&s_read!(rhs)); - let value = Value::Boolean(value); - - Ok(new_ref!(Value, value)) - } - ComparisonEnum::LessThanOrEqual(_) => { - let value = s_read!(lhs).lte(&s_read!(rhs)); - let value = Value::Boolean(value); - - Ok(new_ref!(Value, value)) - } - ComparisonEnum::NotEqual(_) => { - let value = *s_read!(lhs) != *s_read!(rhs); - let value = Value::Boolean(value); - - Ok(new_ref!(Value, value)) - } - } -} diff --git a/src/chacha/interpreter/expression/operator/unary.rs b/src/chacha/interpreter/expression/operator/unary.rs deleted file mode 100644 index 0112b02c..00000000 --- a/src/chacha/interpreter/expression/operator/unary.rs +++ /dev/null @@ -1,38 +0,0 @@ -use ansi_term::Colour; - -use crate::{ - chacha::error::Result, - interpreter::{debug, eval_expression, function, Context}, - lu_dog::{Expression, UnaryEnum}, - new_ref, s_read, NewRef, RefType, SarzakStorePtr, Value, -}; - -pub fn eval( - unary: &SarzakStorePtr, - lhs_expr: &RefType, - context: &mut Context, -) -> Result> { - let lu_dog = context.lu_dog_heel().clone(); - - let lhs = eval_expression(lhs_expr.clone(), context)?; - let unary = s_read!(lu_dog).exhume_unary(unary).unwrap(); - - debug!("unary {unary:?}"); - - let unary = s_read!(unary); - match &unary.subtype { - // - // Negation - // - UnaryEnum::Negation(_) => { - let value = -s_read!(lhs).clone(); - - Ok(new_ref!(Value, value)) - } - UnaryEnum::Not(_) => { - let value = !s_read!(lhs).clone(); - - Ok(new_ref!(Value, value)) - } - } -} diff --git a/src/chacha/interpreter/expression/print.rs b/src/chacha/interpreter/expression/print.rs deleted file mode 100644 index dbab08ae..00000000 --- a/src/chacha/interpreter/expression/print.rs +++ /dev/null @@ -1,25 +0,0 @@ -use ansi_term::Colour; - -use crate::{ - chacha::error::Result, - interpreter::{chacha_print, debug, eval_expression, function, Context}, - new_ref, s_read, NewRef, RefType, SarzakStorePtr, Value, -}; - -pub fn eval(print: &SarzakStorePtr, context: &mut Context) -> Result> { - let lu_dog = context.lu_dog_heel().clone(); - - let print = s_read!(lu_dog).exhume_x_print(print).unwrap(); - debug!("ExpressionEnum::Print print {print:?}"); - let expr = s_read!(print).r32_expression(&s_read!(lu_dog))[0].clone(); - let value = eval_expression(expr, context)?; - let result = s_read!(value).to_inner_string(); - let result = result.replace("\\n", "\n"); - - chacha_print(result, context)?; - - let result = Ok(new_ref!(Value, Value::Empty)); - - #[allow(clippy::let_and_return)] - result -} diff --git a/src/chacha/interpreter/expression/range.rs b/src/chacha/interpreter/expression/range.rs deleted file mode 100644 index 5984d213..00000000 --- a/src/chacha/interpreter/expression/range.rs +++ /dev/null @@ -1,32 +0,0 @@ -use ansi_term::Colour; - -use crate::{ - chacha::error::Result, - interpreter::{debug, eval_expression, function, Context}, - new_ref, s_read, DwarfInteger, NewRef, RefType, SarzakStorePtr, Value, -}; - -pub fn eval_range(range: &SarzakStorePtr, context: &mut Context) -> Result> { - let lu_dog = context.lu_dog_heel().clone(); - - let range = s_read!(lu_dog).exhume_range_expression(range).unwrap(); - let lhs = s_read!(range).lhs.unwrap(); - let lhs = s_read!(lu_dog).exhume_expression(&lhs).unwrap(); - let rhs = s_read!(range).rhs.unwrap(); - let rhs = s_read!(lu_dog).exhume_expression(&rhs).unwrap(); - - debug!("range lhs: {lhs:?}, range: {range:?}"); - - let lhs = eval_expression(lhs, context)?; - let rhs = eval_expression(rhs, context)?; - - let range = std::ops::Range { - start: >::try_into(s_read!(lhs).clone())?, - end: s_read!(rhs).clone().try_into()?, - }; - - let result = Ok(new_ref!(Value, Value::Range(range))); - - #[allow(clippy::let_and_return)] - result -} diff --git a/src/chacha/interpreter/expression/ret.rs b/src/chacha/interpreter/expression/ret.rs deleted file mode 100644 index eb172a20..00000000 --- a/src/chacha/interpreter/expression/ret.rs +++ /dev/null @@ -1,23 +0,0 @@ -use ansi_term::Colour; - -use crate::{ - chacha::error::{ChaChaError, Result}, - interpreter::{debug, eval_expression, function, Context}, - s_read, RefType, SarzakStorePtr, Value, -}; - -pub fn eval(expr: &SarzakStorePtr, context: &mut Context) -> Result> { - let lu_dog = context.lu_dog_heel().clone(); - - let expr = s_read!(lu_dog).exhume_x_return(expr).unwrap(); - debug!("ExpressionEnum::XReturn {expr:?}"); - - let expr = &s_read!(expr).expression; - let expr = s_read!(lu_dog).exhume_expression(expr).unwrap(); - - let value = eval_expression(expr, context)?; - let ty = s_read!(value).get_value_type(&s_read!(context.sarzak_heel()), &s_read!(lu_dog)); - - // This is a trick to get return to exit out in the evaluation. - Err(ChaChaError::Return { value, ty }) -} diff --git a/src/chacha/interpreter/expression/struct_expr.rs b/src/chacha/interpreter/expression/struct_expr.rs deleted file mode 100644 index 4194e8ac..00000000 --- a/src/chacha/interpreter/expression/struct_expr.rs +++ /dev/null @@ -1,125 +0,0 @@ -use ansi_term::Colour; - -use crate::{ - chacha::{ - error::Result, - value::{Enum, TupleEnum}, - }, - interpreter::{debug, eval_expression, function, Context, Struct}, - lu_dog::types::{DataStructureEnum, FieldExpressionEnum}, - new_ref, s_read, NewRef, RefType, SarzakStorePtr, Value, -}; - -pub fn eval(expr: &SarzakStorePtr, context: &mut Context) -> Result> { - let lu_dog = context.lu_dog_heel().clone(); - - let expr = s_read!(lu_dog).exhume_struct_expression(expr).unwrap(); - let field_exprs = s_read!(expr).r26_field_expression(&s_read!(lu_dog)); - let data_struct = s_read!(expr).r39_data_structure(&s_read!(lu_dog))[0].clone(); - - let subtype = &s_read!(data_struct).subtype; - match subtype { - DataStructureEnum::Enumeration(ref id) => { - let woog_enum = s_read!(lu_dog).exhume_enumeration(id).unwrap(); - let x_path = &s_read!(lu_dog) - .exhume_x_path(&s_read!(expr).x_path) - .unwrap(); - // We know that there is always a pe. It's only in an option so that - // we can construct everything. - let mut pe = s_read!(x_path).r97_path_element(&s_read!(lu_dog))[0].clone(); - let mut path = vec![s_read!(pe).name.to_owned()]; - - // Build the path from the elements. - while s_read!(pe).next.is_some() { - let id = { - let id = &s_read!(pe).next; - #[allow(clippy::clone_on_copy)] - id.as_ref().unwrap().clone() - }; - pe = s_read!(lu_dog).exhume_path_element(&id).unwrap(); - path.push(s_read!(pe).name.to_owned()); - } - - let ty = s_read!(woog_enum).r1_value_type(&s_read!(lu_dog))[0].clone(); - let variant = path.pop().unwrap(); - let path = path.join("::"); - - // - // This is where we give the enums actual values -- the rubber hits the road. - Ok(if field_exprs.is_empty() { - new_ref!( - Value, - Value::Enumeration(Enum::Unit(ty, path, s_read!(pe).name.to_owned())) - ) - } else { - // Get value and expression for each field expression. - let field_values = field_exprs - .iter() - .map(|f| { - let expr = s_read!(f).r15_expression(&s_read!(lu_dog))[0].clone(); - let value = eval_expression(expr.clone(), context)?; - - debug!("StructExpression field value: {}", s_read!(value),); - Ok(value) - }) - .collect::>>()?; - - // 🚧 Punting here -- we are just doing tuple enums for now. And - // only single ones at that. I should just lift the restriction. - // Tuples are only a notional thing anyway I think. - let value = field_values[0].clone(); - - let user_enum = TupleEnum::new(variant, value); - let user_enum = new_ref!(TupleEnum, user_enum); - new_ref!( - Value, - Value::Enumeration(Enum::Tuple((ty, path), user_enum)) - ) - }) - } - DataStructureEnum::WoogStruct(_) => { - // Get name, value for each field expression. - let field_exprs = field_exprs - .iter() - .map(|f| { - let expr = s_read!(f).r15_expression(&s_read!(lu_dog))[0].clone(); - let value = eval_expression(expr.clone(), context)?; - - let name = if let FieldExpressionEnum::NamedFieldExpression(ref id) = - s_read!(f).subtype - { - let nfe = s_read!(lu_dog).exhume_named_field_expression(id).unwrap(); - let name = s_read!(nfe); - name.name.clone() - } else { - unreachable!() - }; - - debug!("StructExpression field value: {}", s_read!(value),); - Ok((name, value)) - }) - .collect::>>()?; - - let woog_struct = - if let DataStructureEnum::WoogStruct(ref id) = s_read!(data_struct).subtype { - s_read!(lu_dog).exhume_woog_struct(id).unwrap() - } else { - unreachable!() - }; - let woog_struct = s_read!(woog_struct); - let ty = woog_struct.r1_value_type(&s_read!(lu_dog))[0].clone(); - - let name = &woog_struct.name; - - let mut user_type = Struct::new(name, &ty); - for (name, value) in field_exprs { - user_type.define_field(&name, (*s_read!(value)).clone()); - } - - Ok(new_ref!( - Value, - Value::Struct(new_ref!(Struct, user_type)) - )) - } - } -} diff --git a/src/chacha/interpreter/expression/typecast.rs b/src/chacha/interpreter/expression/typecast.rs deleted file mode 100644 index 23e159be..00000000 --- a/src/chacha/interpreter/expression/typecast.rs +++ /dev/null @@ -1,75 +0,0 @@ -use ansi_term::Colour; -use snafu::{location, prelude::*, Location}; - -use crate::{ - chacha::error::{Result, UnimplementedSnafu}, - interpreter::{debug, eval_expression, function, Context}, - lu_dog::ValueTypeEnum, - new_ref, s_read, - sarzak::Ty, - NewRef, RefType, SarzakStorePtr, Value, -}; - -pub fn eval(expr: &SarzakStorePtr, context: &mut Context) -> Result> { - let lu_dog = context.lu_dog_heel().clone(); - let sarzak = context.sarzak_heel().clone(); - - let expr = s_read!(lu_dog).exhume_type_cast(expr).unwrap(); - debug!("ExpressionEnum::TypeCast {expr:?}"); - - let lhs = s_read!(expr).r68_expression(&s_read!(lu_dog))[0].clone(); - let as_ty = s_read!(expr).r69_value_type(&s_read!(lu_dog))[0].clone(); - - let lhs = eval_expression(lhs, context)?; - - let value = match &s_read!(as_ty).subtype { - ValueTypeEnum::Ty(ref ty) => { - let ty = s_read!(sarzak).exhume_ty(ty).unwrap(); - let x = match &*ty.read().unwrap() { - Ty::Boolean(_) => { - let value: bool = (&*s_read!(lhs)).try_into()?; - new_ref!(Value, value.into()) - } - Ty::Float(_) => { - let value: f64 = (&*s_read!(lhs)).try_into()?; - new_ref!(Value, value.into()) - } - Ty::Integer(_) => { - let value: i64 = (&*s_read!(lhs)).try_into()?; - new_ref!(Value, value.into()) - } - Ty::ZString(_) => { - let value: String = (&*s_read!(lhs)).try_into()?; - new_ref!(Value, value.into()) - } - Ty::ZUuid(_) => { - let value: uuid::Uuid = (&*s_read!(lhs)).try_into()?; - new_ref!(Value, value.into()) - } - ref alpha => { - ensure!( - false, - UnimplementedSnafu { - message: format!("deal with type cast as: {:?}", alpha), - location: location!(), - } - ); - unreachable!(); - } - }; - x - } - ref alpha => { - ensure!( - false, - UnimplementedSnafu { - message: format!("deal with type cast as: {:?}", alpha), - location: location!(), - } - ); - unreachable!(); - } - }; - - Ok(value) -} diff --git a/src/chacha/interpreter/expression/variable.rs b/src/chacha/interpreter/expression/variable.rs deleted file mode 100644 index a6a107ec..00000000 --- a/src/chacha/interpreter/expression/variable.rs +++ /dev/null @@ -1,47 +0,0 @@ -use ansi_term::Colour; -use snafu::{location, prelude::*, Location}; - -use crate::{ - chacha::error::{Result, VariableNotFoundSnafu}, - interpreter::{debug, function, Context}, - lu_dog::Expression, - s_read, RefType, SarzakStorePtr, Value, -}; - -pub fn eval( - expr: &SarzakStorePtr, - expression: &RefType, - context: &mut Context, -) -> Result> { - let lu_dog = context.lu_dog_heel().clone(); - - let name = { - let foo = s_read!(lu_dog); - let expr = foo.exhume_variable_expression(expr).unwrap(); - let name = s_read!(expr).name.clone(); - #[allow(clippy::let_and_return)] - name - }; - - let value = context.memory().get(&name); - - ensure!(value.is_some(), { - let value = &s_read!(expression).r11_x_value(&s_read!(lu_dog))[0]; - let span = &s_read!(value).r63_span(&s_read!(lu_dog))[0]; - let read = s_read!(span); - let span = read.start as usize..read.end as usize; - let var = name; - VariableNotFoundSnafu { - var, - span, - location: location!(), - } - }); - - let value = value.unwrap(); - debug!( - "ExpressionEnum::VariableExpression value: {}", - s_read!(value) - ); - Ok(value) -} diff --git a/src/chacha/interpreter/func_call.rs b/src/chacha/interpreter/func_call.rs deleted file mode 100644 index 912071d6..00000000 --- a/src/chacha/interpreter/func_call.rs +++ /dev/null @@ -1,541 +0,0 @@ -use std::{path::Path, time::Instant}; - -use abi_stable::{ - library::{lib_header_from_path, LibrarySuffix, RawLibrary}, - std_types::{RErr, ROk}, -}; -use ansi_term::Colour; -use heck::ToUpperCamelCase; -use snafu::{location, prelude::*, Location}; -#[cfg(feature = "tracy")] -use tracy_client::span; - -#[cfg(feature = "async")] -use tracing::{debug_span, Instrument}; - -use crate::{ - chacha::{ - error::{Result, WrongNumberOfArgumentsSnafu}, - ffi_value::FfiValue, - }, - interpreter::{ - debug, error, eval_expression, eval_statement, function, trace, typecheck, ChaChaError, - Context, - }, - lu_dog::{ - Argument, BodyEnum, Expression, ExternalImplementation, Function, - ObjectStore as LuDogStore, Span, ValueType, - }, - new_ref, - plug_in::PluginModRef, - plug_in::PluginType, - s_read, s_write, - sarzak::ObjectStore, - Desanitize, NewRef, RefType, SarzakStorePtr, Value, FUNCTION_LOAD, FUNCTION_NEW, MERLIN, - OBJECT_STORE, SARZAK, -}; - -pub fn eval_function_call( - func: RefType, - args: &[RefType], - first_arg: Option, - arg_check: bool, - span: &RefType, - context: &mut Context, -) -> Result> { - let lu_dog = context.lu_dog_heel().clone(); - - context.increment_call_count(); - - debug!("eval_function_call func {func:?}"); - trace!("eval_function_call stack {:?}", context.memory()); - - #[cfg(feature = "tracy")] - span!("eval_function_call"); - - let body = s_read!(func).r19_body(&s_read!(lu_dog))[0].clone(); - - #[cfg(feature = "async")] - let task_name: String = s_read!(func).name.to_owned(); - - if s_read!(body).a_sink { - #[cfg(not(feature = "async"))] - { - Ok(new_ref!( - Value, - Value::Error(Box::new(ChaChaError::AsyncNotSupported)) - )) - } - #[cfg(feature = "async")] - { - let args = args.to_owned(); - let span = span.to_owned(); - let mut cloned_context = context.clone(); - - let t_span = debug_span!("async func_call", target = "async"); - - let future = async move { - inner_eval_function_call( - func, - &args, - first_arg, - arg_check, - &span, - &mut cloned_context, - ) - } - .instrument(t_span); - - let task = context.worker().unwrap().create_task(future).unwrap(); - - let value = new_ref!( - Value, - Value::Future { - name: task_name, - executor: context.executor().clone(), - task: Some(task) - } - ); - - Ok(value) - } - } else { - inner_eval_function_call(func, args, first_arg, arg_check, span, context) - } -} - -fn inner_eval_function_call( - func: RefType, - args: &[RefType], - first_arg: Option, - arg_check: bool, - span: &RefType, - context: &mut Context, -) -> Result> { - let lu_dog = context.lu_dog_heel().clone(); - - debug!("inner_eval_function_call func {func:?}"); - trace!("inner_eval_function_call stack {:?}", context.memory()); - - #[cfg(feature = "tracy")] - span!("inner_eval_function_call"); - - let body = s_read!(func).r19_body(&s_read!(lu_dog))[0].clone(); - let body = s_read!(body); - match body.subtype { - // - // This is a function defined in a dwarf file. - BodyEnum::Block(ref id) => { - eval_built_in_function_call(func, id, args, first_arg, arg_check, span, context) - } - // - // This is an externally defined function that was declared in a dwarf file. - BodyEnum::ExternalImplementation(ref id) => { - eval_external_method(id, args, first_arg, arg_check, span, context) - } - } -} - -/// Evaluate a static method call in a dynamic library. -/// -/// Note that the func_name below comes from the annotation, as below (in this -/// example, the answer is "flubber"): -/// ```ignore -///#[proxy(store = "sarzak", object = "Boolean", func = "flubber")] -///``` -fn eval_external_method( - block_id: &SarzakStorePtr, - args: &[RefType], - first_arg: Option, - _arg_check: bool, - span: &RefType, - context: &mut Context, -) -> Result> { - let lu_dog = context.lu_dog_heel().clone(); - - let external = s_read!(lu_dog) - .exhume_external_implementation(block_id) - .unwrap(); - - let mut arg_values = if let Some(next) = first_arg { - let mut arg_values = Vec::with_capacity(args.len()); - let mut next = s_read!(lu_dog).exhume_argument(&next).unwrap(); - - loop { - let expr = s_read!(next).r37_expression(&s_read!(lu_dog))[0].clone(); - let value = eval_expression(expr.clone(), context)?; - arg_values.push((expr, value)); - - let next_id = { s_read!(next).next }; - if let Some(ref id) = next_id { - next = s_read!(lu_dog).exhume_argument(id).unwrap(); - } else { - break; - } - } - - arg_values - } else { - Vec::new() - }; - - let model_name = s_read!(external).x_model.clone(); - // This is a hack since merlin and sarzak are in the same plugin, and it's - // called sarzak. - let model_name = if model_name == MERLIN { - SARZAK.to_owned() - } else { - model_name - }; - let mut models = s_write!(context.models().models()); - let model = models.get_mut(&model_name).unwrap(); - let func_name = s_read!(external).function.clone(); - - let object_name = &s_read!(external).object; - let object_name = object_name.to_upper_camel_case(); - - if object_name == OBJECT_STORE { - objectstore_static_methods( - &model_name, - model, - &mut arg_values, - &external, - span, - context, - &lu_dog, - ) - } - // 🚧 Should these be wrapped in a mutex-like? - else if let Some(obj_id) = model.0.exhume_object_id_by_name(&object_name.desanitize()) { - if let Some(plugin) = &model.1 { - match s_write!(plugin).invoke_func( - model_name.as_str().into(), - object_name.as_str().into(), - func_name.as_str().into(), - arg_values - .into_iter() - .map(|(_, value)| { - let value = s_read!(value).clone(); - >::into(value) - }) - .collect::>() - .into(), - ) { - ROk(proxy_obj) => match proxy_obj { - FfiValue::ProxyType(proxy_obj) => { - let value = new_ref!( - Value, - Value::ProxyType { - module: model_name, - obj_ty: obj_id, - id: proxy_obj.id.into(), - plugin: new_ref!(PluginType, proxy_obj.plugin) - } - ); - - Ok(value) - } - FfiValue::List(vec) => { - let vec = vec - .into_iter() - .map(|k| Value::from((k, &*s_read!(lu_dog)))) - .map(|v| new_ref!(Value, v)) - .collect::>(); - let ty = if vec.is_empty() { - ValueType::new_empty(true, &mut s_write!(lu_dog)) - } else { - s_read!(vec[0]) - .get_value_type(&s_read!(context.sarzak_heel()), &s_read!(lu_dog)) - }; - let value = new_ref!( - Value, - Value::List { - ty, - inner: new_ref!(Vec>, vec) - } - ); - - Ok(value) - } - all_manner_of_things => { - panic!("{all_manner_of_things:?} is not a proxy for model {model_name}."); - } - }, - RErr(e) => { - dbg!(e); - Err(ChaChaError::NoSuchMethod { - method: func_name, - span: s_read!(span).start as usize..s_read!(span).end as usize, - location: location!(), - }) - } - } - } else { - panic!("no plugin"); - } - } else { - error!("object not found: {object_name}"); - unimplemented!() - } -} - -#[allow(clippy::too_many_arguments)] -fn eval_built_in_function_call( - func: RefType, - block_id: &SarzakStorePtr, - args: &[RefType], - first_arg: Option, - arg_check: bool, - span: &RefType, - context: &mut Context, -) -> Result> { - let lu_dog = context.lu_dog_heel().clone(); - let sarzak = context.sarzak_heel().clone(); - - let func = s_read!(func); - - let block = s_read!(lu_dog).exhume_block(block_id).unwrap(); - let has_stmts = !s_read!(block).r18_statement(&s_read!(lu_dog)).is_empty(); - - if has_stmts { - // Collect timing info - let now = Instant::now(); - let expr_count_start = context.get_expression_count(); - - context.memory().push_frame(); - - // We need to evaluate the arguments, and then push them onto the stack. We - // also need to typecheck the arguments against the function parameters. - // We need to look the params up anyway to set the local variables. - let params = func.r13_parameter(&s_read!(lu_dog)); - - // 🚧 I'd really like to see the source code printed out, with the function - // call highlighted. - // And can't we catch this is the compiler? - ensure!(params.len() == args.len(), { - let value_ty = &func.r1_value_type(&s_read!(lu_dog))[0]; - let defn_span = &s_read!(value_ty).r62_span(&s_read!(lu_dog))[0]; - let read = s_read!(defn_span); - let defn_span = read.start as usize..read.end as usize; - - let read = s_read!(span); - let invocation_span = read.start as usize..read.end as usize; - - WrongNumberOfArgumentsSnafu { - expected: params.len(), - got: args.len(), - defn_span, - invocation_span, - location: location!(), - } - }); - - let params = if !params.is_empty() { - let mut params = Vec::with_capacity(params.len()); - let mut next = func - .r13_parameter(&s_read!(lu_dog)) - .iter() - .find(|p| s_read!(p).r14c_parameter(&s_read!(lu_dog)).is_empty()) - .unwrap() - .clone(); - - loop { - // Apparently I'm being clever. I don't typecheck against an actual - // type associated with the parameter. No, I am looking up the variable - // associated with the parameter and using it's type. I guess that's cool, - // but it's tricky if you aren't aware. - let var = s_read!(s_read!(next).r12_variable(&s_read!(lu_dog))[0]).clone(); - let value = s_read!(var.r11_x_value(&s_read!(lu_dog))[0]).clone(); - let ty = value.r24_value_type(&s_read!(lu_dog))[0].clone(); - params.push((var.name.clone(), ty.clone())); - - let next_id = { s_read!(next).next }; - if let Some(ref id) = next_id { - next = s_read!(lu_dog).exhume_parameter(id).unwrap(); - } else { - break; - } - } - - params - } else { - Vec::new() - }; - - let arg_values = if let Some(next) = first_arg { - let mut arg_values = Vec::with_capacity(args.len()); - let mut next = s_read!(lu_dog).exhume_argument(&next).unwrap(); - - loop { - let expr = s_read!(next).r37_expression(&s_read!(lu_dog))[0].clone(); - let value = eval_expression(expr.clone(), context)?; - arg_values.push((expr, value)); - - let next_id = { s_read!(next).next }; - if let Some(ref id) = next_id { - next = s_read!(lu_dog).exhume_argument(id).unwrap(); - } else { - break; - } - } - - arg_values - } else { - Vec::new() - }; - - let zipped = params.into_iter().zip(arg_values); - for ((name, param_ty), (expr, value)) in zipped { - debug!("type check name {name:?}"); - debug!("type check param_ty {param_ty:?}"); - debug!("type check value {value:?}"); - - if arg_check { - let arg_ty = s_read!(value).get_value_type(&s_read!(sarzak), &s_read!(lu_dog)); - let x_value = &s_read!(expr).r11_x_value(&s_read!(lu_dog))[0]; - let span = &s_read!(x_value).r63_span(&s_read!(lu_dog))[0]; - - debug!("type check arg_ty {arg_ty:?}"); - typecheck(¶m_ty, &arg_ty, span, location!(), context)?; - } - - context.memory().insert(name.clone(), value); - } - - let mut value = new_ref!(Value, Value::Empty); - if let Some(ref id) = s_read!(block).statement { - let mut next = s_read!(lu_dog).exhume_statement(id).unwrap(); - - loop { - let result = eval_statement(next.clone(), context).map_err(|e| { - context.memory().pop_frame(); - e - }); - - if let Err(ChaChaError::Return { value, ty: _ }) = &result { - return Ok(value.clone()); - } - - value = result?; - - if let Some(ref id) = s_read!(next.clone()).next { - next = s_read!(lu_dog).exhume_statement(id).unwrap(); - } else { - break; - } - } - } - - // Clean up - context.memory().pop_frame(); - let elapsed = now.elapsed(); - // Counting 10k expressions per second - let eps = (context.get_expression_count() - expr_count_start) as f64 - / elapsed.as_micros() as f64 - * 10.0; - context.new_timing(eps); - - Ok(value) - } else { - Ok(new_ref!(Value, Value::Empty)) - } -} - -fn objectstore_static_methods( - model_name: &String, - model: &mut (ObjectStore, Option>), - arg_values: &mut Vec<(RefType, RefType)>, - external: &RefType, - span: &RefType, - context: &Context, - lu_dog: &RefType, -) -> Result> { - // We know that we'll find one of these because we created it when we - // extruded. - let store = s_read!(lu_dog) - .iter_z_object_store() - .find(|store| { - let store = s_read!(store); - store.domain == *model_name - }) - .unwrap(); - - match s_read!(external).function.as_str() { - FUNCTION_LOAD => { - // This is where we actually instantiate the shared library. - let library_path = RawLibrary::path_in_directory( - Path::new(&format!( - "{}/extensions/{model_name}/lib", - context.get_home().display() - )), - model_name, - LibrarySuffix::NoSuffix, - ); - let root_module = (|| { - let header = lib_header_from_path(&library_path)?; - header.init_root_module::() - })() - .map_err(|e| { - eprintln!("{e}"); - ChaChaError::BadnessHappened { - message: "Plug-in error".to_owned(), - location: location!(), - } - })?; - - let ctor = root_module.new(); - let (_, path) = arg_values.pop().unwrap(); - let path = s_read!(path).clone(); - let plugin = new_ref!( - PluginType, - ctor(context.lambda_sender().into(), vec![path.into()].into()).unwrap() - ); - model.1.replace(plugin.clone()); - - let value = new_ref!(Value, Value::Store(store, plugin)); - - Ok(value) - } - FUNCTION_NEW => { - // This is where we actually instantiate the shared library. - let library_path = RawLibrary::path_in_directory( - Path::new(&format!( - "{}/extensions/{model_name}/lib", - context.get_home().display() - )), - model_name, - LibrarySuffix::NoSuffix, - ); - let root_module = (|| { - let header = lib_header_from_path(&library_path)?; - header.init_root_module::() - })() - .map_err(|e| { - eprintln!("{e}"); - ChaChaError::BadnessHappened { - message: format!("Plug-in error: {e:?}"), - location: location!(), - } - })?; - - let ctor = root_module.new(); - let plugin = new_ref!( - PluginType, - ctor(context.lambda_sender().into(), vec![].into()).unwrap() - ); - model.1.replace(plugin.clone()); - - let value = new_ref!(Value, Value::Store(store, plugin)); - - Ok(value) - } - method => { - let span = s_read!(span).start as usize..s_read!(span).end as usize; - Err(ChaChaError::NoSuchMethod { - method: method.to_owned(), - span, - location: location!(), - }) - } - } -} diff --git a/src/chacha/interpreter/lambda.rs b/src/chacha/interpreter/lambda.rs deleted file mode 100644 index fcfca922..00000000 --- a/src/chacha/interpreter/lambda.rs +++ /dev/null @@ -1,186 +0,0 @@ -use std::time::Instant; - -use ansi_term::Colour; -use snafu::{location, prelude::*, Location}; -#[cfg(feature = "tracy")] -use tracy_client::span; - -use crate::{ - chacha::error::{Result, WrongNumberOfArgumentsSnafu}, - interpreter::{debug, eval_statement, function, trace, typecheck, ChaChaError, Context}, - lu_dog::{BodyEnum, Lambda, Span}, - new_ref, s_read, NewRef, RefType, Value, -}; - -pub fn eval_lambda_expression( - ƛ: RefType, - args: &[RefType], - arg_check: bool, - span: &RefType, - context: &mut Context, -) -> Result> { - let lu_dog = context.lu_dog_heel().clone(); - let sarzak = context.sarzak_heel().clone(); - - context.increment_call_count(); - - debug!("ƛ {ƛ:?}"); - trace!("stack {:?}", context.memory()); - - #[cfg(feature = "tracy")] - span!("eval_lambda_expression"); - - let ƛ = s_read!(ƛ); - // We know that we have a block. - // 🚧 Do we though? I saw some constructors without a body. - let body = &ƛ.r73_body(&s_read!(lu_dog))[0]; - // A lambda can't have an external block - let block = match s_read!(body).subtype { - BodyEnum::Block(ref block) => s_read!(lu_dog).exhume_block(block).unwrap(), - _ => unreachable!(), - }; - - let has_stmts = !s_read!(block).r18_statement(&s_read!(lu_dog)).is_empty(); - - if has_stmts { - // Collect timing info - let now = Instant::now(); - let expr_count_start = context.get_expression_count(); - - context.memory().push_frame(); - - // We need to evaluate the arguments, and then push them onto the stack. We - // also need to typecheck the arguments against the function parameters. - // We need to look the params up anyway to set the local variables. - let params = ƛ.r76_lambda_parameter(&s_read!(lu_dog)); - - // dbg!(params.len(), args.len()); - - // 🚧 I'd really like to see the source code printed out, with the function - // call highlighted. - // And can't we catch this is the compiler? - ensure!(params.len() == args.len(), { - let value_ty = &ƛ.r1_value_type(&s_read!(lu_dog))[0]; - let defn_span = &s_read!(value_ty).r62_span(&s_read!(lu_dog))[0]; - let read = s_read!(defn_span); - let defn_span = read.start as usize..read.end as usize; - - let read = s_read!(span); - let invocation_span = read.start as usize..read.end as usize; - - WrongNumberOfArgumentsSnafu { - expected: params.len(), - got: args.len(), - defn_span, - invocation_span, - location: location!(), - } - }); - - let params = if !params.is_empty() { - let mut params = Vec::with_capacity(params.len()); - let mut next = ƛ - // .clone() - .r76_lambda_parameter(&s_read!(lu_dog)) - .iter() - .find(|p| { - s_read!(p) - .r75c_lambda_parameter(&s_read!(lu_dog)) - .is_empty() - }) - .unwrap() - .clone(); - - loop { - let var = s_read!(s_read!(next).r12_variable(&s_read!(lu_dog))[0]).clone(); - let value = s_read!(var.r11_x_value(&s_read!(lu_dog))[0]).clone(); - let ty = value.r24_value_type(&s_read!(lu_dog))[0].clone(); - params.push((var.name.clone(), ty.clone(), value)); - - let next_id = { s_read!(next).next }; - if let Some(ref id) = next_id { - next = s_read!(lu_dog).exhume_lambda_parameter(id).unwrap(); - } else { - break; - } - } - - params - } else { - Vec::new() - }; - - let zipped = params.into_iter().zip(args); - for ((name, param_ty, x_value), value) in zipped { - debug!("type check name {name:?}"); - debug!("type check param_ty {param_ty:?}"); - debug!("type check value {value:?}"); - - if arg_check { - let span = &x_value.r63_span(&s_read!(lu_dog))[0]; - - let arg_ty = s_read!(value).get_value_type(&s_read!(sarzak), &s_read!(lu_dog)); - typecheck(¶m_ty, &arg_ty, span, location!(), context)?; - } - - context.memory().insert(name.clone(), value.clone()); - } - - let mut value = new_ref!(Value, Value::Empty); - if let Some(ref id) = s_read!(block).statement { - let mut next = s_read!(lu_dog).exhume_statement(id).unwrap(); - - // 🚧 this needs to be sucked out and dealt with by a single block - // execution function. - loop { - let result = eval_statement(next.clone(), context).map_err(|e| { - // This is cool, if it does what I think it does. We basically - // get the opportunity to look at the error, and do stuff with - // it, and then let it continue on as if nothing happened. - // - // Anyway, we need to clean up the stack frame if there was an - // error. I'm also considering abusing the error type to pass - // through that we hit a return expression. I'm thinking more - // and more that this is a Good Idea. Well, maybe just a good - // idea. We can basically just do an early, successful return. - // - // Well, that doesn't work: return applies to the closure. - context.memory().pop_frame(); - - // if let ChaChaError::Return { value } = &e { - // let ty = value.get_type(&mut s_write!(lu_dog)); - // return Ok((value, ty)); - // } - - // Err(e) - e - }); - - if let Err(ChaChaError::Return { value, ty: _ }) = &result { - return Ok(value.clone()); - } - - value = result?; - - if let Some(ref id) = s_read!(next.clone()).next { - next = s_read!(lu_dog).exhume_statement(id).unwrap(); - } else { - break; - } - } - } - - // Clean up - context.memory().pop_frame(); - let elapsed = now.elapsed(); - // Counting 10k expressions per second - let eps = (context.get_expression_count() - expr_count_start) as f64 - / elapsed.as_micros() as f64 - * 10.0; - context.new_timing(eps); - - Ok(value) - } else { - Ok(new_ref!(Value, Value::Empty)) - } -} diff --git a/src/chacha/interpreter/range.rs b/src/chacha/interpreter/range.rs deleted file mode 100644 index cb4ba4ad..00000000 --- a/src/chacha/interpreter/range.rs +++ /dev/null @@ -1,37 +0,0 @@ -use ansi_term::Colour; - -use crate::{ - chacha::{error::Result, vm::VM}, - interpreter::{debug, eval_expression, function, Context}, - lu_dog::{List, Range, ValueType}, - new_ref, s_read, s_write, NewRef, RefType, SarzakStorePtr, Value, -}; - -pub fn eval_range( - range: &SarzakStorePtr, - context: &mut Context, - vm: &mut VM, -) -> Result<(RefType, RefType)> { - let lu_dog = context.lu_dog_heel().clone(); - let lu_dog_read = s_read!(lu_dog); - - let range = lu_dog_read.exhume_range_expression(range).unwrap(); - let range = s_read!(range); - let lhs = range.lhs.unwrap(); - let lhs = lu_dog_read.exhume_expression(&lhs).unwrap(); - let rhs = range.rhs.unwrap(); - let rhs = lu_dog_read.exhume_expression(&rhs).unwrap(); - - let (lhs, _) = eval_expression(lhs, context, vm)?; - let (rhs, _) = eval_expression(rhs, context, vm)?; - - let range = Range { - start: Box::new(lhs), - end: Box::new(rhs), - }; - - Ok(( - new_ref!(Value, Value::Range(range)), - ValueType::new_range(&mut s_write!(lu_dog)), - )) -} diff --git a/src/chacha/interpreter/tui.rs b/src/chacha/interpreter/tui.rs deleted file mode 100644 index 38911c8c..00000000 --- a/src/chacha/interpreter/tui.rs +++ /dev/null @@ -1,175 +0,0 @@ -#![cfg(all( - feature = "tui", - not(any(feature = "single", feature = "single-vec", feature = "multi-nd-vec")) -))] -use std::thread; - -use ansi_term::Colour; -use crossbeam::channel::{unbounded, Receiver, Sender}; -use snafu::{location, Location}; - -use crate::{ - chacha::vm::VM, - dwarf::{inter_statement, parse_line, Context as ExtruderContext}, - interpreter::{ - debug, eval_statement, function, Context, DebuggerControl, DebuggerStatus, CVAR, RUNNING, - STEPPING, - }, - lu_dog::DwarfSourceFile, - new_ref, s_read, s_write, NewRef, RefType, -}; - -pub fn start_tui_repl(mut context: Context) -> (Sender, Receiver) { - use std::time::Duration; - - use crossbeam::channel::RecvTimeoutError; - - let (to_ui_write, to_ui_read) = unbounded(); - let (from_ui_write, from_ui_read) = unbounded(); - // let (from_worker_write, from_worker_read) = unbounded(); - let (to_worker_write, to_worker_read) = unbounded(); - - context.set_debug_status_writer(to_ui_write.clone()); - let std_out = context.std_out_recv().clone(); - - // Control thread - // - // This one listens for events from the debugger (to set breakpoints, etc.). - // It communicates with the worker thread via mutexes and the condition - // variable. - thread::Builder::new() - .name("control".into()) - .spawn(move || loop { - match from_ui_read.recv_timeout(Duration::from_millis(10)) { - Ok(DebuggerControl::SetBreakpoint(character)) => { - debug!("Setting breakpoint at character {character}"); - } - Ok(DebuggerControl::ExecuteInput(input)) => { - debug!("Executing input: {input}"); - to_worker_write.send(input).unwrap(); - } - Ok(DebuggerControl::StepInto) => { - debug!("Debugger StepInto"); - *RUNNING.lock() = true; - CVAR.notify_all(); - } - Ok(DebuggerControl::StepOver) => { - debug!("Debugger StepOver"); - } - Ok(DebuggerControl::Run) => { - debug!("Debugger Run"); - *STEPPING.lock() = false; - *RUNNING.lock() = true; - CVAR.notify_all(); - } - Ok(DebuggerControl::Stop) => { - debug!("Debugger Stop"); - break; - } - Err(RecvTimeoutError::Timeout) => {} - Err(_) => { - debug!("Debugger control thread exiting"); - break; - } - }; - }) - .unwrap(); - - // Stdout thread - // - // Really? Another fucking thread? - let to_ui = to_ui_write.clone(); - thread::Builder::new() - .name("stdout".into()) - .spawn(move || loop { - match std_out.recv_timeout(Duration::from_millis(10)) { - Ok(output) => { - to_ui.send(DebuggerStatus::StdOut(output)).unwrap(); - } - Err(RecvTimeoutError::Timeout) => {} - Err(_) => { - debug!("Debugger control thread exiting"); - break; - } - } - }) - .unwrap(); - - // Worker thread - // - // This guy listens for statements and executes them. It relies on the state - // of the condition variable and mutexes to know how to behave. - thread::Builder::new() - .name("worker".into()) - // .stack_size(128 * 1024) - .spawn(move || { - let stack = &mut context.memory(); - let vm_stack = stack.clone(); - let mut vm = VM::new(&vm_stack); - - let mut stmt_index = 0; - loop { - match to_worker_read.recv_timeout(Duration::from_millis(10)) { - Ok(input) => match parse_line(&input) { - Ok(None) => {} - Ok(Some((stmt, _span))) => { - let lu_dog = context.lu_dog_heel(); - let block = context.block(); - let sarzak = context.sarzak_heel(); - let models = context.models(); - - let stmt = { - let mut lu_dog = s_write!(lu_dog); - match inter_statement( - &new_ref!(crate::dwarf::Statement, stmt), - stmt_index, - block, - &mut ExtruderContext { - location: location!(), - struct_fields: Vec::new(), - check_types: true, - source: DwarfSourceFile::new(input, &mut lu_dog), - models: &s_read!(models), - sarzak: &s_read!(sarzak), - }, - &mut lu_dog, - ) { - Ok(stmt) => stmt.0, - Err(e) => { - to_ui_write - .send(DebuggerStatus::Error(format!("{:?}", e))) - .unwrap(); - continue; - } - } - }; - - match eval_statement(stmt.0, &mut context, &mut vm) { - Ok((value, ty)) => { - to_ui_write - .send(DebuggerStatus::Stopped(value, ty)) - .unwrap(); - } - Err(e) => { - to_ui_write - .send(DebuggerStatus::Error(format!("{:?}", e))) - .unwrap(); - } - } - } - Err(e) => { - to_ui_write.send(DebuggerStatus::Error(e)).unwrap(); - } - }, - Err(RecvTimeoutError::Timeout) => {} - Err(_) => { - debug!("Worker thread exiting"); - break; - } - } - } - }) - .unwrap(); - - (from_ui_write, to_ui_read) -} diff --git a/src/chacha/memory.rs b/src/chacha/memory.rs deleted file mode 100644 index 286c3a88..00000000 --- a/src/chacha/memory.rs +++ /dev/null @@ -1,154 +0,0 @@ -//! Memory management for the ChaCha interpreter. - -use std::fmt; - -use ansi_term::Colour; -use crossbeam::channel::{unbounded, Receiver, Sender}; -use rustc_hash::FxHashMap as HashMap; - -use crate::{debug, function, interpreter::STEPPING, s_read, RefType, Value}; - -#[derive(Clone, Debug)] -pub struct Memory { - meta: HashMap>>, - global: HashMap>, - frames: Vec>>, - sender: Sender, -} - -impl Memory { - pub fn new() -> (Self, Receiver) { - let (sender, receiver) = unbounded(); - - ( - Memory { - meta: HashMap::default(), - global: HashMap::default(), - frames: vec![HashMap::default()], - sender, - }, - receiver, - ) - } - - pub fn get_globals(&self) -> Vec<(&str, &RefType)> { - self.global - .iter() - .map(|(name, value)| (name.as_str(), value)) - .collect() - } - - pub fn get_frames(&self) -> Vec)>> { - self.frames - .iter() - .map(|frame| { - frame - .iter() - .map(|(name, value)| (name.as_str(), value)) - .collect() - }) - .collect() - } - - pub(crate) fn push_frame(&mut self) { - if *STEPPING.lock() { - self.sender.send(MemoryUpdateMessage::PushFrame).unwrap(); - } - self.frames.push(HashMap::default()); - } - - pub(crate) fn pop_frame(&mut self) { - if *STEPPING.lock() { - self.sender.send(MemoryUpdateMessage::PopFrame).unwrap(); - } - self.frames.pop(); - } - - pub(crate) fn insert_meta_table(&mut self, table: String) { - self.meta.insert(table, HashMap::default()); - } - - pub(crate) fn insert_meta(&mut self, table: &str, name: String, value: RefType) { - let table = self.meta.get_mut(table).unwrap(); - table.insert(name, value); - } - - pub(crate) fn get_meta(&self, table: &str, name: &str) -> Option> { - if let Some(table) = self.meta.get(table) { - table.get(name).cloned() - } else { - None - } - } - - pub(crate) fn insert(&mut self, name: String, value: RefType) { - if *STEPPING.lock() { - self.sender - .send(MemoryUpdateMessage::AddLocal((name.clone(), value.clone()))) - .unwrap(); - } - let frame = self.frames.last_mut().unwrap(); - frame.insert(name, value); - } - - pub(crate) fn get(&self, name: &str) -> Option> { - debug!("memory", "name: {name}"); - if name.contains("::") { - let mut split = name.split("::"); - - let name = split.next().unwrap(); - let table = split.next().unwrap(); - - if let Some(value) = self.get_simple(table) { - let value = s_read!(value); - if let Value::Table(ref table) = *value { - table.get(name).cloned() - } else { - None - } - } else { - None - } - } else { - self.get_simple(name).cloned() - } - } - - pub(crate) fn get_simple(&self, name: &str) -> Option<&RefType> { - for frame in self.frames.iter().rev() { - if let Some(value) = frame.get(name) { - return Some(value); - } - } - self.global.get(name) - } -} - -type MemoryCell = (String, RefType); - -#[derive(Clone, Debug)] -pub enum MemoryUpdateMessage { - AddGlobal(MemoryCell), - AddMeta(MemoryCell), - PushFrame, - PopFrame, - AddLocal(MemoryCell), -} - -impl fmt::Display for MemoryUpdateMessage { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - match self { - MemoryUpdateMessage::AddGlobal((name, value)) => { - write!(f, "add global {}: {}", name, s_read!(value)) - } - MemoryUpdateMessage::AddMeta((name, value)) => { - write!(f, "add meta {}: {}", name, s_read!(value)) - } - MemoryUpdateMessage::PushFrame => write!(f, "push frame"), - MemoryUpdateMessage::PopFrame => write!(f, "pop frame"), - MemoryUpdateMessage::AddLocal((name, value)) => { - write!(f, "add local {}: {}", name, s_read!(value)) - } - } - } -} diff --git a/src/chacha/models.rs b/src/chacha/models.rs new file mode 100644 index 00000000..0d858e2b --- /dev/null +++ b/src/chacha/models.rs @@ -0,0 +1,36 @@ +use crate::{ + lu_dog::ObjectStore as LuDogStore, sarzak::ObjectStore as SarzakStore, ModelStore, RefType, +}; + +#[derive(Clone, Debug)] +pub struct ModelContext { + lu_dog: RefType, + sarzak: RefType, + models: RefType, +} + +impl ModelContext { + pub fn new( + lu_dog: RefType, + sarzak: RefType, + models: RefType, + ) -> Self { + Self { + lu_dog, + sarzak, + models, + } + } + + pub fn lu_dog(&self) -> &RefType { + &self.lu_dog + } + + pub fn sarzak(&self) -> &RefType { + &self.sarzak + } + + pub fn models(&self) -> &RefType { + &self.models + } +} diff --git a/src/chacha/interpreter/pvt.rs b/src/chacha/pvt.rs similarity index 97% rename from src/chacha/interpreter/pvt.rs rename to src/chacha/pvt.rs index d9b141a6..e024d770 100644 --- a/src/chacha/interpreter/pvt.rs +++ b/src/chacha/pvt.rs @@ -4,7 +4,7 @@ use ansi_term::Colour; use heck::ToUpperCamelCase; use crate::{ - interpreter::{context::ModelContext, debug, error, function}, + chacha::models::ModelContext, lu_dog::{ValueType, ValueTypeEnum}, s_read, sarzak::Ty, @@ -159,7 +159,7 @@ impl<'a> PrintableValueType<'a> { Ty::ZString(_) => write!(f, "{}", TY_CLR.italic().paint("string")), Ty::ZUuid(_) => write!(f, "{}", TY_CLR.italic().paint("Uuid")), gamma => { - error!("deal with sarzak type {gamma:?}"); + tracing::error!("deal with sarzak type {gamma:?}"); write!(f, "todo") } } @@ -189,7 +189,7 @@ impl<'a> PrintableValueType<'a> { ValueTypeEnum::Unknown(_) => write!(f, "{}", TY_WARN_CLR.italic().paint("")), ValueTypeEnum::WoogStruct(ref woog_struct) => { let woog_struct = s_read!(lu_dog).exhume_woog_struct(woog_struct).unwrap(); - debug!("woog_struct {woog_struct:?}"); + tracing::debug!("woog_struct {woog_struct:?}"); let woog_struct = s_read!(woog_struct); let name = if let Some(name) = woog_struct.name.strip_prefix(PATH_SEP) { name @@ -232,7 +232,7 @@ impl<'a> PrintableValueType<'a> { ValueTypeEnum::Enumeration(ref enumeration) => { let lu_dog = s_read!(lu_dog); let enumeration = lu_dog.exhume_enumeration(enumeration).unwrap(); - debug!("enumeration: {enumeration:?}"); + tracing::debug!("enumeration: {enumeration:?}"); let enumeration = s_read!(enumeration); let mut generics = Vec::new(); if let Some(first) = enumeration.r105_enum_generic(&lu_dog).first() { @@ -328,7 +328,7 @@ impl<'a> PrintableValueType<'a> { Ty::ZString(_) => write!(f, "string"), Ty::ZUuid(_) => write!(f, "Uuid"), gamma => { - error!("deal with sarzak type {gamma:?}"); + tracing::error!("deal with sarzak type {gamma:?}"); write!(f, "todo") } } @@ -352,7 +352,7 @@ impl<'a> PrintableValueType<'a> { ValueTypeEnum::Unknown(_) => write!(f, ""), ValueTypeEnum::WoogStruct(ref woog_struct) => { let woog_struct = s_read!(lu_dog).exhume_woog_struct(woog_struct).unwrap(); - debug!("woog_struct {woog_struct:?}"); + tracing::debug!("woog_struct {woog_struct:?}"); let woog_struct = s_read!(woog_struct); let name = if let Some(name) = woog_struct.name.strip_prefix(PATH_SEP) { name diff --git a/src/chacha/interpreter/repl.rs b/src/chacha/repl.rs similarity index 100% rename from src/chacha/interpreter/repl.rs rename to src/chacha/repl.rs diff --git a/src/chacha/value.rs b/src/chacha/value.rs index ea4dfd51..f88cd24e 100644 --- a/src/chacha/value.rs +++ b/src/chacha/value.rs @@ -1,1489 +1,5 @@ -#[cfg(feature = "async")] -use std::future::Future; - -use std::{fmt, io::Write, ops::Range}; - -#[cfg(feature = "async")] -use smol::future; - -use ansi_term::Colour; -use rustc_hash::FxHashMap as HashMap; -use sarzak::lu_dog::ValueTypeEnum; -use serde::{Deserialize, Serialize}; -use uuid::Uuid; - -#[cfg(feature = "async")] -use puteketeke::Executor; - -#[cfg(feature = "async")] -use crate::{ValueResult, VmValueResult}; - -use crate::{ - chacha::error::Result, - lu_dog::{Function, Lambda, ObjectStore as LuDogStore, ValueType, ZObjectStore}, - new_ref, - plug_in::PluginType, - s_read, - sarzak::{ObjectStore as SarzakStore, Ty}, - ChaChaError, Context, DwarfFloat, DwarfInteger, NewRef, RefType, -}; - pub mod _enum; pub mod _struct; pub use _enum::{Enum, TupleEnum}; pub use _struct::Struct; - -// 🚧 This can be deleted and replaced with just a String. -#[derive(Clone, Debug, Deserialize, Serialize)] -pub enum ThonkInner { - Thonk(String), - Index(usize), -} - -#[derive(Default)] -pub enum Value { - AnyList(RefType>>), - /// Boolean - /// - /// True and False - Boolean(bool), - /// Char - /// - /// A single character - Char(char), - #[default] - /// Empty - /// - /// () - Empty, - Enumeration(Enum), - // #[serde(skip)] - Error(Box), - Float(DwarfFloat), - /// Function - /// - /// 🚧 I really need to write something here describing, once and for all, - /// why I need the inner Function to be behind a RefType<>. It seems - /// excessive, and yet I know I've looked into it before. - Function(RefType), - FubarPointer { - name: String, - frame_size: usize, - captures: Vec>, - }, - #[cfg(feature = "async")] - // #[serde(skip)] - Future { - name: String, - executor: Executor, - task: Option>, - }, - Integer(DwarfInteger), - Lambda(RefType), - List { - ty: RefType, - inner: RefType>>, - }, - // #[serde(skip)] - ParsedDwarf(Context), - // #[serde(skip)] - Plugin((String, RefType)), - // #[serde(skip)] - ProxyType { - module: String, - obj_ty: Uuid, - id: Uuid, - plugin: RefType, - }, - // Reference(RefType), - Range(Range), - // #[serde(skip)] - Store(RefType, RefType), - String(String), - Struct(RefType>), - Table(HashMap>), - #[cfg(feature = "async")] - // #[serde(skip)] - Task { - worker: Option, - parent: Option>, - }, - // Thonk(ThonkInner), - Unknown, - Uuid(uuid::Uuid), - ValueType(ValueType), - #[cfg(feature = "async")] - VmFuture { - name: String, - executor: Executor, - task: Option>, - }, -} - -impl Value { - // pub fn new_thonk(name: String) -> Self { - // Self::Thonk(ThonkInner::Thonk(name)) - // } - - #[inline] - pub fn to_inner_string(&self) -> String { - let mut buf = Vec::new(); - self.inner_string(&mut buf) - .expect("inner_string returned an error unexpectedly"); - String::from_utf8(buf).expect("inner_string returned invalid UTF-8") - } - - #[inline] - fn inner_string(&self, f: &mut Vec) -> std::io::Result<()> { - match self { - Self::AnyList(list) => { - write!(f, "[")?; - let list = s_read!(list); - let mut first_time = true; - for i in &*list { - if first_time { - first_time = false; - } else { - write!(f, ", ")?; - } - - write!(f, "{}", s_read!(i))?; - } - write!(f, "]") - } - Self::Boolean(bool_) => write!(f, "{bool_}"), - Self::Char(char_) => write!(f, "{char_}"), - Self::Empty => write!(f, "()"), - // Self::Enum(ty) => write!(f, "{}", s_read!(ty)), - Self::Enumeration(var) => write!(f, "{var}"), - Self::Error(e) => write!(f, "{}: {e}", Colour::Red.bold().paint("error")), - Self::Float(num) => write!(f, "{num}"), - Self::Function(_) => write!(f, ""), - Self::FubarPointer { - name, - frame_size, - captures, - } => { - write!( - f, - "FubarPointer {{ name: {name}, frame_size: {frame_size}, captures: [" - )?; - for i in captures { - let i = s_read!(i); - write!(f, "{i}, ")?; - } - write!(f, "] }}") - } - #[cfg(feature = "async")] - Self::Future { - name, - executor, - task, - } => write!(f, "Task `{name}`: {task:?}, executor: {executor:?}"), - Self::Integer(num) => write!(f, "{num}"), - Self::Lambda(_) => write!(f, ""), - Self::List { ty: _, inner } => { - let inner = s_read!(inner); - let mut first_time = true; - write!(f, "[")?; - for i in &*inner { - if first_time { - first_time = false; - } else { - write!(f, ", ")?; - } - - write!(f, "{}", s_read!(i))?; - } - write!(f, "]") - } - Self::ParsedDwarf(ctx) => write!(f, "{ctx:#?}"), - Self::Plugin((name, _plugin)) => write!(f, "plugin::{name}"), - Self::ProxyType { - module: _, - obj_ty: _, - id: _, - plugin, - } => write!(f, "{}", s_read!(plugin)), - Self::Range(range) => write!(f, "{range:?}"), - // Self::Reference(value) => { - // write!(f, "({})", s_read!(value).to_inner_string()) - // } - // Self::StoreType(store) => write!(f, "{:?}", store), - Self::Store(_store, plugin) => write!(f, "Plug-in ({})", s_read!(plugin).name()), - Self::String(str_) => write!(f, "{str_}"), - Self::Struct(ty) => write!(f, "{}", s_read!(ty)), - // Self::String(str_) => write!(f, "\"{}\"", str_), - Self::Table(table) => write!(f, "{table:?}"), - #[cfg(feature = "async")] - Self::Task { worker, parent } => write!(f, "Task: {parent:?} running on {worker:?}"), - // Self::Thonk(inner) => match inner { - // ThonkInner::Thonk(name) => write!(f, "{name}"), - // ThonkInner::Index(index) => write!(f, "{index}"), - // }, - Self::Unknown => write!(f, ""), - Self::Uuid(uuid) => write!(f, "{uuid}"), - Self::ValueType(ty) => write!(f, "{:?}", ty), - #[cfg(feature = "async")] - Self::VmFuture { - name, - executor, - task, - } => write!(f, "VmTask `{name}`: {task:?}, executor: {executor:?}"), - } - } - - pub fn get_value_type(&self, sarzak: &SarzakStore, lu_dog: &LuDogStore) -> RefType { - match &self { - Value::Boolean(_) => { - let ty = Ty::new_boolean(sarzak); - for vt in lu_dog.iter_value_type() { - if let ValueTypeEnum::Ty(_ty) = s_read!(vt).subtype { - if ty.read().unwrap().id() == _ty { - return vt.clone(); - } - } - } - unreachable!() - } - Value::Char(_) => { - for vt in lu_dog.iter_value_type() { - if let ValueTypeEnum::Char(_) = s_read!(vt).subtype { - return vt.clone(); - } - } - unreachable!() - } - Value::Empty => { - for vt in lu_dog.iter_value_type() { - if let ValueTypeEnum::Empty(_) = s_read!(vt).subtype { - return vt.clone(); - } - } - unreachable!() - } - Value::Enumeration(var) => match var { - Enum::Unit(t, _, _) => t.clone(), - Enum::Struct(ut) => s_read!(ut).get_type().clone(), - Enum::Tuple((ty, _), _) => ty.clone(), - }, - Value::Float(_) => { - let ty = Ty::new_float(sarzak); - for vt in lu_dog.iter_value_type() { - if let ValueTypeEnum::Ty(_ty) = s_read!(vt).subtype { - if ty.read().unwrap().id() == _ty { - return vt.clone(); - } - } - } - unreachable!() - } - Value::Function(ref func) => { - let func = lu_dog.exhume_function(&s_read!(func).id).unwrap(); - let z = s_read!(func).r1_value_type(lu_dog)[0].clone(); - #[allow(clippy::let_and_return)] - z - } - Value::Integer(_) => { - let ty = Ty::new_integer(sarzak); - for vt in lu_dog.iter_value_type() { - if let ValueTypeEnum::Ty(_ty) = s_read!(vt).subtype { - if ty.read().unwrap().id() == _ty { - return vt.clone(); - } - } - } - unreachable!() - } - Value::Lambda(ref ƛ) => { - let ƛ = lu_dog.exhume_lambda(&s_read!(ƛ).id).unwrap(); - let ƛ_type = s_read!(ƛ).r1_value_type(lu_dog)[0].clone(); - #[allow(clippy::let_and_return)] - ƛ_type - } - Value::List { ty, inner: _ } => { - for vt in lu_dog.iter_value_type() { - if let ValueTypeEnum::List(id) = s_read!(vt).subtype { - let list = lu_dog.exhume_list(&id).unwrap(); - let list_ty = s_read!(list).r36_value_type(lu_dog)[0].clone(); - if *s_read!(ty) == *s_read!(list_ty) { - return vt.clone(); - } - } - } - unreachable!() - } - Value::Plugin((name, _plugin)) => { - for vt in lu_dog.iter_value_type() { - if let ValueTypeEnum::XPlugin(id) = s_read!(vt).subtype { - let plugin = lu_dog.exhume_x_plugin(&id).unwrap(); - if s_read!(plugin).name == name.as_str() { - return vt.clone(); - } - } - } - panic!("Plugin not found: {name}"); - } - Value::ProxyType { - module: _, - obj_ty: uuid, - id: _, - plugin: _, - } => { - for vt in lu_dog.iter_value_type() { - if let ValueTypeEnum::WoogStruct(woog) = s_read!(vt).subtype { - let woog = lu_dog.exhume_woog_struct(&woog).unwrap(); - let object = s_read!(woog).object; - if let Some(ref obj_id) = object { - if uuid == obj_id { - return vt.clone(); - } - } - } - } - unreachable!() - } - Value::Range(_) => { - for vt in lu_dog.iter_value_type() { - if let ValueTypeEnum::Range(_) = s_read!(vt).subtype { - return vt.clone(); - } - } - unreachable!() - } - Value::Store(store, _plugin) => s_read!(store).r1_value_type(lu_dog)[0].clone(), - Value::String(_) => { - let ty = Ty::new_z_string(sarzak); - for vt in lu_dog.iter_value_type() { - if let ValueTypeEnum::Ty(_ty) = s_read!(vt).subtype { - if ty.read().unwrap().id() == _ty { - return vt.clone(); - } - } - } - unreachable!() - } - Value::Struct(ref ut) => s_read!(ut).get_type().clone(), - #[cfg(feature = "async")] - Value::Task { - worker: _, - parent: _, - } => { - for vt in lu_dog.iter_value_type() { - if let ValueTypeEnum::Task(_) = s_read!(vt).subtype { - return vt.clone(); - } - } - unreachable!() - } - Value::Uuid(_) => { - let ty = Ty::new_z_uuid(sarzak); - for vt in lu_dog.iter_value_type() { - if let ValueTypeEnum::Ty(_ty) = s_read!(vt).subtype { - if ty.read().unwrap().id() == _ty { - return vt.clone(); - } - } - } - unreachable!() - } - value => { - log::error!("Value::get_type() not implemented for {:?}", value); - for vt in lu_dog.iter_value_type() { - if let ValueTypeEnum::Unknown(_) = s_read!(vt).subtype { - return vt.clone(); - } - } - unreachable!() - } - } - } -} - -#[cfg(feature = "async")] -impl Future for Value { - type Output = RefType; - - fn poll( - self: std::pin::Pin<&mut Self>, - _cx_: &mut std::task::Context<'_>, - ) -> std::task::Poll { - let this = std::pin::Pin::into_inner(self); - - match this { - Self::Future { - name: _, - executor, - task, - } => { - if let Some(task) = task.take() { - executor.start_task(&task); - match future::block_on(task) { - Ok(value) => std::task::Poll::Ready(value), - Err(e) => { - std::task::Poll::Ready(new_ref!(Value, Value::Error(Box::new(e)))) - } - } - } else { - std::task::Poll::Ready(new_ref!(Value, Value::Empty)) - } - } - Self::Task { worker: _, parent } => { - if let Some(task) = parent.take() { - match future::block_on(task) { - Ok(value) => std::task::Poll::Ready(value), - Err(e) => { - std::task::Poll::Ready(new_ref!(Value, Value::Error(Box::new(e)))) - } - } - } else { - std::task::Poll::Ready(new_ref!(Value, Value::Empty)) - } - } - _ => std::task::Poll::Ready(new_ref!(Value, Value::Empty)), - } - } -} - -// impl Drop for Value { -// fn drop(&mut self) { -// match self { -// Self::Task(_, Some(task)) => { -// log::debug!(target: "async", "drop task: {:?}", task); -// // future::block_on(task); -// } -// _ => {} -// } -// } -// } - -impl std::fmt::Debug for Value { - fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { - match self { - Self::AnyList(list) => { - write!(f, "[")?; - let list = s_read!(list); - let mut first_time = true; - for i in &*list { - if first_time { - first_time = false; - } else { - write!(f, ", ")?; - } - - write!(f, "{}", s_read!(i))?; - } - write!(f, "]") - } - Self::Boolean(b) => write!(f, "{b:?}"), - Self::Char(c) => write!(f, "{c:?}"), - Self::Empty => write!(f, "()"), - Self::Enumeration(var) => write!(f, "{var:?}"), - Self::Error(e) => write!(f, "{}: {e}", Colour::Red.bold().paint("error")), - Self::Float(num) => write!(f, "{num:?}"), - Self::Function(func) => write!(f, "{:?}", s_read!(func)), - Self::FubarPointer { - name, - frame_size, - captures, - } => { - write!( - f, - "FubarPointer {{ name: {name}, frame_size: {frame_size}, captures: [" - )?; - for i in captures { - let i = s_read!(i); - write!(f, "{i}, ")?; - } - write!(f, "] }}") - } - #[cfg(feature = "async")] - Self::Future { - name, - executor, - task, - } => write!(f, "Task `{name}`: {task:?}, executor: {executor:?}"), - Self::Integer(num) => write!(f, "{num:?}"), - Self::Lambda(ƛ) => write!(f, "{:?}", s_read!(ƛ)), - Self::List { ty, inner } => write!(f, "{ty:?}: {inner:?}"), - Self::ParsedDwarf(ctx) => write!(f, "{ctx:?}"), - Self::Plugin((name, _plugin)) => write!(f, "plugin::{name}"), - Self::ProxyType { - module, - obj_ty, - id, - plugin, - } => write!( - f, - "ProxyType {{ module: {}, obj_ty: {}, id: {}, plugin: {} }}", - module, - obj_ty, - id, - s_read!(plugin).name() - ), - Self::Range(range) => write!(f, "{range:?}"), - // Self::Reference(value) => { - // write!(f, "({})", s_read!(value).to_inner_string()) - // } - Self::Store(store, plugin) => write!( - f, - "Store {{ store: {:?}, plugin: {} }}", - s_read!(store), - s_read!(plugin).name() - ), - Self::String(s) => write!(f, "{s:?}"), - Self::Struct(ty) => write!(f, "{:?}", s_read!(ty)), - Self::Table(table) => write!(f, "{table:?}"), - #[cfg(feature = "async")] - Self::Task { worker, parent } => write!(f, "Task: {parent:?} running on {worker:?}"), - // Self::Thonk(inner) => write!(f, "{inner:?}"), - Self::Unknown => write!(f, ""), - Self::Uuid(uuid) => write!(f, "{uuid:?}"), - Self::ValueType(ty) => write!(f, "{:?}", ty), - #[cfg(feature = "async")] - Self::VmFuture { - name, - executor, - task, - } => write!(f, "VmTask `{name}`: {task:?}, executor: {executor:?}"), - } - } -} - -impl Clone for Value { - fn clone(&self) -> Self { - match self { - Self::AnyList(list) => Self::AnyList(list.clone()), - Self::Boolean(bool_) => Self::Boolean(*bool_), - Self::Char(char_) => Self::Char(*char_), - Self::Empty => Self::Empty, - Self::Enumeration(var) => Self::Enumeration(var.clone()), - Self::Error(_e) => unimplemented!(), - Self::Float(num) => Self::Float(*num), - Self::Function(func) => Self::Function(func.clone()), - Self::FubarPointer { - name, - frame_size, - captures: captured, - } => Self::FubarPointer { - name: name.to_owned(), - frame_size: *frame_size, - captures: captured.clone(), - }, - #[cfg(feature = "async")] - // Note that cloned values do not inherit the task - Self::Future { - name, - executor, - task: _, - } => Self::Future { - name: name.to_owned(), - executor: executor.clone(), - task: None, - }, - Self::Integer(num) => Self::Integer(*num), - Self::Lambda(ƛ) => Self::Lambda(ƛ.clone()), - Self::List { ty, inner } => Self::List { - ty: ty.clone(), - inner: inner.clone(), - }, - Self::ParsedDwarf(ctx) => Self::ParsedDwarf(ctx.clone()), - Self::Plugin(plugin) => Self::Plugin(plugin.clone()), - Self::ProxyType { - module, - obj_ty, - id, - plugin, - } => Self::ProxyType { - module: module.clone(), - obj_ty: *obj_ty, - id: *id, - plugin: plugin.clone(), - }, - Self::Range(range) => Self::Range(range.clone()), - // Self::Reference(value) => Self::Reference(value.clone()), - Self::Store(store, plugin) => Self::Store(store.clone(), plugin.clone()), - Self::String(str_) => Self::String(str_.clone()), - Self::Struct(ty) => Self::Struct(ty.clone()), - Self::Table(table) => Self::Table(table.clone()), - #[cfg(feature = "async")] - // Note that cloned values do not inherit the task - Self::Task { worker, parent: _ } => Self::Task { - worker: worker.clone(), - parent: None, - }, - // Self::Thonk(inner) => Self::Thonk(inner.clone()), - Self::Unknown => Self::Unknown, - Self::Uuid(uuid) => Self::Uuid(*uuid), - Self::ValueType(ty) => Self::ValueType(ty.clone()), - #[cfg(feature = "async")] - // Note that cloned values do not inherit the task - Self::VmFuture { - name, - executor, - task: _, - } => Self::VmFuture { - name: name.to_owned(), - executor: executor.clone(), - task: None, - }, - } - } -} - -/// NB: This is what get's spit out of dwarf print statements. -impl fmt::Display for Value { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - match self { - Self::AnyList(list) => { - write!(f, "[")?; - let list = s_read!(list); - let mut first_time = true; - for i in &*list { - if first_time { - first_time = false; - } else { - write!(f, ", ")?; - } - - write!(f, "{}", s_read!(i))?; - } - write!(f, "]") - } - Self::Boolean(bool_) => write!(f, "{bool_}"), - Self::Char(char_) => write!(f, "{char_}"), - Self::Empty => write!(f, "()"), - // Self::Enum(ty) => write!(f, "{}", s_read!(ty)), - Self::Enumeration(var) => write!(f, "{var}"), - Self::Error(e) => write!(f, "{}: {e}", Colour::Red.bold().paint("error")), - Self::Float(num) => write!(f, "{num}"), - Self::Function(_) => write!(f, ""), - Self::FubarPointer { - name, - frame_size, - captures, - } => { - write!( - f, - "FubarPointer {{ name: {name}, frame_size: {frame_size}, captures: [" - )?; - for i in captures { - let i = s_read!(i); - write!(f, "{i}, ")?; - } - write!(f, "] }}") - } - #[cfg(feature = "async")] - Self::Future { - name, - executor, - task, - } => write!(f, "Task `{name}`: {task:?}, executor: {executor:?}"), - Self::Integer(num) => write!(f, "{num}"), - Self::Lambda(_) => write!(f, ""), - Self::List { ty: _, inner } => { - let inner = s_read!(inner); - let mut first_time = true; - write!(f, "[")?; - for i in &*inner { - if first_time { - first_time = false; - } else { - write!(f, ", ")?; - } - - write!(f, "{}", s_read!(i))?; - } - write!(f, "]") - } - Self::ParsedDwarf(ctx) => write!(f, "{ctx:#?}"), - Self::Plugin((name, _plugin)) => write!(f, "plugin::{name}"), - Self::ProxyType { - module: _, - obj_ty: _, - id: _, - plugin, - } => write!(f, "{}", s_read!(plugin)), - Self::Range(range) => write!(f, "{range:?}"), - // Self::Reference(value) => { - // write!(f, "({})", s_read!(value).to_inner_string()) - // } - // Self::StoreType(store) => write!(f, "{:?}", store), - Self::Store(_store, plugin) => write!(f, "Plug-in ({})", s_read!(plugin).name()), - // Self::String(str_) => write!(f, "{str_}"), - Self::String(str_) => write!(f, "\"{str_}\""), - Self::Struct(ty) => write!(f, "{}", s_read!(ty)), - // Self::String(str_) => write!(f, "\"{}\"", str_), - Self::Table(table) => write!(f, "{table:?}"), - #[cfg(feature = "async")] - Self::Task { worker, parent } => write!(f, "Task: {parent:?} running on {worker:?}"), - // Self::Thonk(inner) => match inner { - // ThonkInner::Thonk(name) => write!(f, "Thonk({name})"), - // ThonkInner::Index(index) => write!(f, "Thonk({index})"), - // }, - Self::Unknown => write!(f, ""), - Self::Uuid(uuid) => write!(f, "{uuid}"), - Self::ValueType(ty) => write!(f, "{:?}", ty), - #[cfg(feature = "async")] - Self::VmFuture { - name, - executor, - task, - } => write!(f, "VmTask `{name}`: {task:?}, executor: {executor:?}"), - } - } -} - -impl From for Value { - fn from(value: bool) -> Self { - Self::Boolean(value) - } -} - -impl From for Value { - fn from(value: usize) -> Self { - Self::Integer(value as DwarfInteger) - } -} - -impl From for Value { - fn from(value: isize) -> Self { - Self::Integer(value as DwarfInteger) - } -} - -impl From for Value { - fn from(value: i64) -> Self { - Self::Integer(value) - } -} - -impl From for Value { - fn from(value: u64) -> Self { - Self::Integer(value as DwarfInteger) - } -} - -impl From for Value { - fn from(value: i32) -> Self { - Self::Integer(value as DwarfInteger) - } -} - -impl From for Value { - fn from(value: u32) -> Self { - Self::Integer(value as DwarfInteger) - } -} - -impl From for Value { - fn from(value: f64) -> Self { - Self::Float(value) - } -} - -impl From<&str> for Value { - fn from(value: &str) -> Self { - Self::String(value.to_owned()) - } -} - -impl From for Value { - fn from(value: String) -> Self { - Self::String(value) - } -} - -impl From for Value { - fn from(value: Uuid) -> Self { - Self::Uuid(value) - } -} - -impl From> for Value { - fn from(value: Range) -> Self { - Self::Range(value.start as DwarfInteger..value.end as DwarfInteger) - } -} - -impl From for Option { - fn from(option: Value) -> Self { - match option { - Value::Uuid(uuid) => Some(uuid), - _ => None, - } - } -} - -impl TryFrom<&Value> for ValueType { - type Error = ChaChaError; - - fn try_from(value: &Value) -> Result>::Error> { - match &value { - Value::ValueType(ty) => Ok(ty.to_owned()), - _ => Err(ChaChaError::Conversion { - src: value.to_string(), - dst: "ValueType".to_owned(), - }), - } - } -} - -impl TryFrom for ValueType { - type Error = ChaChaError; - - fn try_from(value: Value) -> Result>::Error> { - match &value { - Value::ValueType(ty) => Ok(ty.to_owned()), - _ => Err(ChaChaError::Conversion { - src: value.to_string(), - dst: "ValueType".to_owned(), - }), - } - } -} - -impl TryFrom for Context { - type Error = ChaChaError; - - fn try_from(value: Value) -> Result>::Error> { - match &value { - Value::ParsedDwarf(ctx) => Ok(ctx.to_owned()), - _ => Err(ChaChaError::Conversion { - src: value.to_string(), - dst: "Context".to_owned(), - }), - } - } -} - -impl TryFrom for Range { - type Error = ChaChaError; - - fn try_from(value: Value) -> Result as TryFrom>::Error> { - match &value { - Value::Range(range) => Ok(range.start..range.end), - _ => Err(ChaChaError::Conversion { - src: value.to_string(), - dst: "range".to_owned(), - }), - } - } -} - -impl TryFrom for Range { - type Error = ChaChaError; - - fn try_from(value: Value) -> Result as TryFrom>::Error> { - match &value { - Value::Range(range) => Ok(range.start as usize..range.end as usize), - _ => Err(ChaChaError::Conversion { - src: value.to_string(), - dst: "range".to_owned(), - }), - } - } -} - -impl TryFrom<&Value> for Range { - type Error = ChaChaError; - - fn try_from(value: &Value) -> Result as TryFrom<&Value>>::Error> { - match value { - Value::Range(range) => Ok(range.start as usize..range.end as usize), - _ => Err(ChaChaError::Conversion { - src: value.to_string(), - dst: "range".to_owned(), - }), - } - } -} - -impl TryFrom for Uuid { - type Error = ChaChaError; - - fn try_from(value: Value) -> Result>::Error> { - match &value { - Value::Uuid(uuid) => Ok(uuid.to_owned()), - Value::String(str_) => str_.parse::().map_err(|_| ChaChaError::Conversion { - src: str_.to_owned(), - dst: "Uuid".to_owned(), - }), - _ => Err(ChaChaError::Conversion { - src: value.to_string(), - dst: "Uuid".to_owned(), - }), - } - } -} - -impl TryFrom<&Value> for Uuid { - type Error = ChaChaError; - - fn try_from(value: &Value) -> Result>::Error> { - match value { - Value::Uuid(uuid) => Ok(*uuid), - Value::String(str_) => str_.parse::().map_err(|_| ChaChaError::Conversion { - src: str_.to_owned(), - dst: "Uuid".to_owned(), - }), - _ => Err(ChaChaError::Conversion { - src: value.to_string(), - dst: "Uuid".to_owned(), - }), - } - } -} - -impl TryFrom for usize { - type Error = ChaChaError; - - fn try_from(value: Value) -> Result>::Error> { - match &value { - Value::Float(num) => Ok(num.to_owned() as usize), - Value::Integer(num) => Ok(num.to_owned() as usize), - Value::String(str_) => str_.parse::().map_err(|_| ChaChaError::Conversion { - src: str_.to_owned(), - dst: "usize".to_owned(), - }), - // Value::Thonk(inner) => match inner { - // ThonkInner::Thonk(name) => Err(ChaChaError::Conversion { - // src: (*name).to_owned(), - // dst: "usize".to_owned(), - // }), - // ThonkInner::Index(index) => Ok(*index), - // }, - _ => Err(ChaChaError::Conversion { - src: value.to_string(), - dst: "usize".to_owned(), - }), - } - } -} - -impl TryFrom<&Value> for usize { - type Error = ChaChaError; - - fn try_from(value: &Value) -> Result>::Error> { - match value { - Value::Float(num) => Ok(*num as usize), - Value::Integer(num) => Ok(*num as usize), - Value::String(str_) => str_.parse::().map_err(|_| ChaChaError::Conversion { - src: str_.to_owned(), - dst: "usize".to_owned(), - }), - // Value::Thonk(inner) => match inner { - // ThonkInner::Thonk(name) => Err(ChaChaError::Conversion { - // src: (*name).to_owned(), - // dst: "usize".to_owned(), - // }), - // ThonkInner::Index(index) => Ok(*index), - // }, - _ => Err(ChaChaError::Conversion { - src: value.to_string(), - dst: "usize".to_owned(), - }), - } - } -} - -impl TryFrom for isize { - type Error = ChaChaError; - - fn try_from(value: Value) -> Result>::Error> { - match &value { - Value::Float(num) => Ok(num.to_owned() as isize), - Value::Integer(num) => Ok(num.to_owned() as isize), - Value::String(str_) => str_.parse::().map_err(|_| ChaChaError::Conversion { - src: str_.to_owned(), - dst: "isize".to_owned(), - }), - // Value::Thonk(inner) => match inner { - // ThonkInner::Thonk(name) => Err(ChaChaError::Conversion { - // src: (*name).to_owned(), - // dst: "isize".to_owned(), - // }), - // ThonkInner::Index(index) => Ok(*index as isize), - // }, - _ => Err(ChaChaError::Conversion { - src: value.to_string(), - dst: "isize".to_owned(), - }), - } - } -} - -impl TryFrom<&Value> for isize { - type Error = ChaChaError; - - fn try_from(value: &Value) -> Result>::Error> { - match value { - Value::Float(num) => Ok(*num as isize), - Value::Integer(num) => Ok(*num as isize), - Value::String(str_) => str_.parse::().map_err(|_| ChaChaError::Conversion { - src: str_.to_owned(), - dst: "isize".to_owned(), - }), - // Value::Thonk(inner) => match inner { - // ThonkInner::Thonk(name) => Err(ChaChaError::Conversion { - // src: (*name).to_owned(), - // dst: "isize".to_owned(), - // }), - // ThonkInner::Index(index) => Ok(*index as isize), - // }, - _ => Err(ChaChaError::Conversion { - src: value.to_string(), - dst: "isize".to_owned(), - }), - } - } -} - -impl TryFrom for i64 { - type Error = ChaChaError; - - fn try_from(value: Value) -> Result>::Error> { - match &value { - Value::Float(num) => Ok(num.to_owned() as DwarfInteger), - Value::Integer(num) => Ok(num.to_owned()), - Value::String(str_) => str_.parse::().map_err(|_| ChaChaError::Conversion { - src: str_.to_owned(), - dst: "i64".to_owned(), - }), - _ => Err(ChaChaError::Conversion { - src: value.to_string(), - dst: "i64".to_owned(), - }), - } - } -} - -impl TryFrom<&Value> for i64 { - type Error = ChaChaError; - - fn try_from(value: &Value) -> Result>::Error> { - match value { - Value::Float(num) => Ok(*num as DwarfInteger), - Value::Integer(num) => Ok(*num), - Value::String(str_) => str_.parse::().map_err(|_| ChaChaError::Conversion { - src: str_.to_owned(), - dst: "i64".to_owned(), - }), - _ => Err(ChaChaError::Conversion { - src: value.to_string(), - dst: "i64".to_owned(), - }), - } - } -} - -impl TryFrom for u64 { - type Error = ChaChaError; - - fn try_from(value: Value) -> Result>::Error> { - match &value { - Value::Float(num) => Ok(num.to_owned() as u64), - Value::Integer(num) => Ok(num.to_owned() as u64), - Value::String(str_) => str_.parse::().map_err(|_| ChaChaError::Conversion { - src: str_.to_owned(), - dst: "u64".to_owned(), - }), - _ => Err(ChaChaError::Conversion { - src: value.to_string(), - dst: "u64".to_owned(), - }), - } - } -} - -impl TryFrom<&Value> for u64 { - type Error = ChaChaError; - - fn try_from(value: &Value) -> Result>::Error> { - match value { - Value::Float(num) => Ok(*num as u64), - Value::Integer(num) => Ok(*num as u64), - Value::String(str_) => str_.parse::().map_err(|_| ChaChaError::Conversion { - src: str_.to_owned(), - dst: "u64".to_owned(), - }), - _ => Err(ChaChaError::Conversion { - src: value.to_string(), - dst: "u64".to_owned(), - }), - } - } -} - -impl TryFrom for f64 { - type Error = ChaChaError; - - fn try_from(value: Value) -> Result>::Error> { - match &value { - Value::Float(num) => Ok(num.to_owned()), - Value::Integer(num) => Ok(num.to_owned() as f64), - Value::String(str_) => str_.parse::().map_err(|_| ChaChaError::Conversion { - src: str_.to_owned(), - dst: "f64".to_owned(), - }), - _ => Err(ChaChaError::Conversion { - src: value.to_string(), - dst: "f64".to_owned(), - }), - } - } -} - -impl TryFrom<&Value> for f64 { - type Error = ChaChaError; - - fn try_from(value: &Value) -> Result>::Error> { - match value { - Value::Float(num) => Ok(*num), - Value::Integer(num) => Ok(*num as f64), - Value::String(str_) => str_.parse::().map_err(|_| ChaChaError::Conversion { - src: str_.to_owned(), - dst: "f64".to_owned(), - }), - _ => Err(ChaChaError::Conversion { - src: value.to_string(), - dst: "f64".to_owned(), - }), - } - } -} - -impl TryFrom for String { - type Error = ChaChaError; - - fn try_from(value: Value) -> Result>::Error> { - Ok(value.to_inner_string()) - } -} - -impl TryFrom<&Value> for String { - type Error = ChaChaError; - - fn try_from(value: &Value) -> Result>::Error> { - Ok(value.to_inner_string()) - } -} - -impl TryFrom for bool { - type Error = ChaChaError; - - fn try_from(value: Value) -> Result>::Error> { - match &value { - Value::Boolean(bool_) => Ok(bool_.to_owned()), - Value::Integer(num) => Ok(num != &0), - Value::String(str_) => str_.parse::().map_err(|_| ChaChaError::Conversion { - src: str_.to_owned(), - dst: "bool".to_owned(), - }), - _ => Err(ChaChaError::Conversion { - src: value.to_string(), - dst: "bool".to_owned(), - }), - } - } -} - -impl TryFrom<&Value> for bool { - type Error = ChaChaError; - - fn try_from(value: &Value) -> Result>::Error> { - match value { - Value::Boolean(bool_) => Ok(*bool_), - Value::Integer(num) => Ok(*num != 0), - Value::String(str_) => str_.parse::().map_err(|_| ChaChaError::Conversion { - src: str_.to_owned(), - dst: "bool".to_owned(), - }), - _ => Err(ChaChaError::Conversion { - src: value.to_string(), - dst: "bool".to_owned(), - }), - } - } -} - -/// Addition operator for Value -/// -/// Implement the addition trait for Value. -impl std::ops::Add for Value { - type Output = Self; - - fn add(self, other: Self) -> Self { - match (&self, &other) { - (Value::Float(a), Value::Float(b)) => Value::Float(a + b), - // (Value::Float(a), Value::String(b)) => Value::String(a.to_string() + &b), - (Value::String(a), Value::Float(b)) => { - Value::String(a.to_owned() + b.to_string().as_str()) - } - (Value::Integer(a), Value::Integer(b)) => Value::Integer(a + b), - // (Value::Integer(a), Value::String(b)) => Value::String(a.to_string() + &b), - (Value::String(a), Value::Integer(b)) => { - Value::String(a.to_owned() + b.to_string().as_str()) - } - (Value::String(a), Value::String(b)) => Value::String(a.to_owned() + b.as_str()), - (Value::Char(a), Value::Char(b)) => { - Value::String(a.to_string() + b.to_string().as_str()) - } - (Value::Char(a), Value::String(b)) => Value::String(a.to_string() + b.as_str()), - (Value::String(a), Value::Char(b)) => { - Value::String(a.to_owned() + b.to_string().as_str()) - } - (Value::Empty, Value::Empty) => Value::Empty, - (Value::Boolean(a), Value::Boolean(b)) => Value::Boolean(*a || *b), - // (Value::Boolean(a), Value::String(b)) => Value::String(a.to_string() + &b), - // (Value::String(a), Value::Boolean(b)) => Value::String(a + &b.to_string()), - (a, b) => Value::Error(Box::new(ChaChaError::Addition { - left: a.clone(), - right: b.clone(), - })), - } - } -} - -/// AsRef implementation for Value -/// -impl AsRef for Value { - fn as_ref(&self) -> &str { - match self { - Value::Boolean(bool_) => match bool_ { - true => "true", - false => "false", - }, - Value::Empty => "()", - Value::String(str_) => str_, - _ => "", - } - } -} - -/// Subtraction operator for Value -/// -/// Implement the Sub trait for Value. -impl std::ops::Sub for Value { - type Output = Self; - - fn sub(self, other: Self) -> Self { - match (self, other) { - (Value::Float(a), Value::Float(b)) => Value::Float(a - b), - (Value::Integer(a), Value::Integer(b)) => Value::Integer(a - b), - (Value::Empty, Value::Empty) => Value::Empty, - (Value::Boolean(a), Value::Boolean(b)) => Value::Boolean(a && b), - (a, b) => Value::Error(Box::new(ChaChaError::Subtraction { - left: a.clone(), - right: b.clone(), - })), - } - } -} - -/// Multiplication operator for Value -/// -/// Implement the multiplication trait for Value. -impl std::ops::Mul for Value { - type Output = Self; - - fn mul(self, other: Self) -> Self::Output { - match (self, other) { - (Value::Float(a), Value::Float(b)) => Value::Float(a * b), - (Value::Float(a), Value::Integer(b)) => Value::Float(a * b as DwarfFloat), - (Value::Integer(a), Value::Float(b)) => Value::Float(a as DwarfFloat * b), - (Value::Integer(a), Value::Integer(b)) => Value::Integer(a * b), - (Value::Empty, Value::Empty) => Value::Empty, - (a, b) => Value::Error(Box::new(ChaChaError::Multiplication { - left: a.clone(), - right: b.clone(), - })), - } - } -} - -/// Negation Operator -/// -/// Implement negation trait for Value -impl std::ops::Neg for Value { - type Output = Self; - - fn neg(self) -> Self::Output { - match self { - Value::Float(a) => Value::Float(-a), - Value::Integer(a) => Value::Integer(-a), - Value::Empty => Value::Empty, - a => Value::Error(Box::new(ChaChaError::Negation { value: a })), - } - } -} - -/// Not Operator -/// -/// Implement negation trait for Value -impl std::ops::Not for Value { - type Output = Self; - - fn not(self) -> Self::Output { - match self { - Value::Boolean(a) => Value::Boolean(!a), - Value::Empty => Value::Empty, - a => Value::Error(Box::new(ChaChaError::Bang { value: a })), - } - } -} - -/// Division operator for Value -/// -/// Implement the division trait for Value. -impl std::ops::Div for Value { - type Output = Self; - - fn div(self, other: Self) -> Self { - match (self, other) { - (Value::Float(a), Value::Float(b)) => Value::Float(a / b), - (Value::Integer(a), Value::Integer(b)) => Value::Integer(a / b), - (Value::Empty, Value::Empty) => Value::Empty, - (a, b) => Value::Error(Box::new(ChaChaError::Division { - left: a.clone(), - right: b.clone(), - })), - } - } -} - -/// Less than operator for Value -/// -/// -impl Value { - pub fn lt(&self, other: &Self) -> bool { - match (self, other) { - (Value::Float(a), Value::Float(b)) => a < b, - (Value::Float(a), Value::Integer(b)) => a < &(*b as DwarfFloat), - (Value::Integer(a), Value::Integer(b)) => a < b, - (Value::Integer(a), Value::Float(b)) => (*a as DwarfFloat) < *b, - (Value::String(a), Value::String(b)) => a < b, - (Value::Char(a), Value::Char(b)) => a < b, - (Value::Empty, Value::Empty) => true, - (Value::Boolean(a), Value::Boolean(b)) => a < b, - (_, _) => false, //Value::Error(format!("Cannot compare {} and {}", a, b)), - } - } -} -/// Greater than operator for Value -/// -/// -impl Value { - pub fn gt(&self, other: &Self) -> bool { - match (self, other) { - (Value::Float(a), Value::Float(b)) => a > b, - (Value::Float(a), Value::Integer(b)) => a > &(*b as DwarfFloat), - (Value::Integer(a), Value::Integer(b)) => a > b, - (Value::Integer(a), Value::Float(b)) => *a as DwarfFloat > *b, - (Value::String(a), Value::String(b)) => a > b, - (Value::Char(a), Value::Char(b)) => a > b, - (Value::Empty, Value::Empty) => true, - (Value::Boolean(a), Value::Boolean(b)) => a > b, - (_, _) => false, //Value::Error(format!("Cannot compare {} and {}", a, b)), - } - } -} - -/// Greater than-equal operator for Value -/// -/// -impl Value { - pub fn gte(&self, other: &Self) -> bool { - match (self, other) { - (Value::Float(a), Value::Float(b)) => a >= b, - (Value::Float(a), Value::Integer(b)) => a >= &(*b as DwarfFloat), - (Value::Integer(a), Value::Integer(b)) => a >= b, - (Value::Integer(a), Value::Float(b)) => *a as DwarfFloat >= *b, - (Value::String(a), Value::String(b)) => a >= b, - (Value::Char(a), Value::Char(b)) => a >= b, - (Value::Empty, Value::Empty) => true, - (Value::Boolean(a), Value::Boolean(b)) => a >= b, - (_, _) => false, //Value::Error(format!("Cannot compare {} and {}", a, b)), - } - } -} - -/// Less than or equal to operator for Value -/// -/// -impl Value { - pub fn lte(&self, other: &Self) -> bool { - match (self, other) { - (Value::Float(a), Value::Float(b)) => a <= b, - (Value::Float(a), Value::Integer(b)) => a <= &(*b as DwarfFloat), - (Value::Integer(a), Value::Integer(b)) => a <= b, - (Value::Integer(a), Value::Float(b)) => (*a as DwarfFloat) <= *b, - (Value::String(a), Value::String(b)) => a <= b, - (Value::Char(a), Value::Char(b)) => a <= b, - (Value::Empty, Value::Empty) => true, - (Value::Boolean(a), Value::Boolean(b)) => a <= b, - (_, _) => false, //Value::Error(format!("Cannot compare {} and {}", a, b)), - } - } -} - -/// Equal operator for Value -/// -/// This is testing value equality. -/// Equality is transitive. So, given a = 1, b = 1 a == b is true because there -/// is a single 1 in the machine. -impl std::cmp::PartialEq for Value { - fn eq(&self, other: &Self) -> bool { - match (self, other) { - (Value::Boolean(a), Value::Boolean(b)) => a == b, - (Value::Char(a), Value::Char(b)) => a == b, - (Value::Empty, Value::Empty) => true, - // (Value::Enum(a), Value::Enum(b)) => *s_read!(a) == *s_read!(b), - (Value::Enumeration(a), Value::Enumeration(b)) => a == b, - (Value::Float(a), Value::Float(b)) => a == b, - (Value::Float(a), Value::Integer(b)) => a == &(*b as DwarfFloat), - (Value::Integer(a), Value::Integer(b)) => a == b, - (Value::Integer(a), Value::Float(b)) => (*a as DwarfFloat) == *b, - ( - Value::ProxyType { - module: _, - obj_ty: _, - id: a, - plugin: _, - }, - Value::ProxyType { - module: _, - obj_ty: _, - id: b, - plugin: _, - }, - ) => a == b, - (Value::List { ty: ty_a, inner: a }, Value::List { ty: ty_b, inner: b }) => { - if *s_read!(ty_a) != *s_read!(ty_b) { - return false; - } - - let a = s_read!(a); - let b = s_read!(b); - - if a.len() != b.len() { - return false; - } - - for (i, v) in a.iter().enumerate() { - if !s_read!(v).eq(&s_read!(b[i])) { - return false; - } - } - - true - } - (Value::Plugin((a, _)), Value::Plugin((b, _))) => a == b, - (Value::String(a), Value::String(b)) => a == b, - (Value::Struct(a), Value::Struct(b)) => *s_read!(a) == *s_read!(b), - (Value::Uuid(a), Value::Uuid(b)) => a == b, - (_, _) => false, //Value::Error(format!("Cannot compare {} and {}", a, b)), - } - } -} diff --git a/src/chacha/value/_enum.rs b/src/chacha/value/_enum.rs index 5625fcea..26d7d65f 100644 --- a/src/chacha/value/_enum.rs +++ b/src/chacha/value/_enum.rs @@ -2,7 +2,12 @@ use std::fmt; use serde::{Deserialize, Serialize}; -use crate::{chacha::value::Struct, lu_dog::ValueType, s_read, RefType, PATH_SEP}; +use crate::{ + bubba::{s_read, RefType}, + chacha::value::Struct, + lu_dog::ValueType, + PATH_SEP, +}; /// The type of Enumeration Field /// diff --git a/src/chacha/value/_struct.rs b/src/chacha/value/_struct.rs index 2a9d4a39..cbc00320 100644 --- a/src/chacha/value/_struct.rs +++ b/src/chacha/value/_struct.rs @@ -3,7 +3,11 @@ use std::fmt; use rustc_hash::FxHashMap as HashMap; use serde::{Deserialize, Serialize}; -use crate::{lu_dog::ValueType, s_read, RefType, PATH_SEP}; +use crate::{ + bubba::{s_read, RefType}, + lu_dog::ValueType, + PATH_SEP, +}; #[derive(Clone, Debug, Deserialize, Serialize)] pub struct Struct @@ -20,7 +24,10 @@ where T: Clone + std::fmt::Debug + PartialEq + std::fmt::Display + std::default::Default, { fn eq(&self, other: &Self) -> bool { - s_read!(self.type_).eq(&s_read!(other.type_)) && self.attrs.eq(&other.attrs) + s_read!(self.type_) + .subtype + .eq(&s_read!(other.type_).subtype) + && self.attrs.eq(&other.attrs) } } diff --git a/src/dwarf.rs b/src/dwarf.rs index f9c7f246..a0890709 100644 --- a/src/dwarf.rs +++ b/src/dwarf.rs @@ -12,7 +12,7 @@ use clap::Args; use rustc_hash::FxHashMap as HashMap; use sarzak::sarzak::types::Ty; use serde::{Deserialize, Serialize}; -use snafu::{location, Location}; +use snafu::location; use uuid::Uuid; use crate::{ @@ -21,7 +21,7 @@ use crate::{ store::ObjectStore as LuDogStore, types::ValueType, Block, DwarfSourceFile, Lambda, List, LocalVariable, Map, Span as LuDogSpan, Variable, XFuture, XValue, }, - s_read, s_write, RefType, PATH_SEP, + s_read, s_write, RefType, }; pub mod error; @@ -739,6 +739,10 @@ impl TryFrom<&InnerAttribute> for String { InnerAttribute::Expression((Expression::StringLiteral(s), _)) => Ok(s.to_string()), _ => Err(DwarfError::Generic { description: format!("Error converting InnerAttribute to String: {inner:?}."), + location: location!(), + span: 0..0, + file: "try_from".to_owned(), + program: "try_from".to_owned(), }), } } diff --git a/src/dwarf/error.rs b/src/dwarf/error.rs index 3f0923c4..e1b00d68 100644 --- a/src/dwarf/error.rs +++ b/src/dwarf/error.rs @@ -59,7 +59,13 @@ pub enum DwarfError { /// /// This non-specific error is a catch-all error type. #[snafu(display("\n{}: {description}", ERR_CLR.bold().paint("error")))] - Generic { description: String }, + Generic { + description: String, + location: Location, + file: String, + span: Span, + program: String, + }, /// Generic Warning /// @@ -368,6 +374,38 @@ impl fmt::Display for DwarfErrorReporter<'_> { .map_err(|_| fmt::Error)?; write!(f, "{}", String::from_utf8_lossy(&std_err)) } + DwarfError::Generic { + description: desc, + file, + span, + program, + location, + } => { + let report = Report::build(ReportKind::Error, file, span.start) + .with_message(desc) + .with_label( + Label::new((file, span.to_owned())) + .with_message(format!("{}", desc.fg(Color::Red))) + .with_color(Color::Red), + ); + + let report = if is_uber { + report.with_note(format!( + "{}:{}:{}", + OTHER_CLR.paint(location.file.to_string()), + POP_CLR.paint(format!("{}", location.line)), + OK_CLR.paint(format!("{}", location.column)), + )) + } else { + report + }; + + report + .finish() + .write((file, Source::from(&program)), &mut std_err) + .map_err(|_| fmt::Error)?; + write!(f, "{}", String::from_utf8_lossy(&std_err)) + } DwarfError::GenericWarning { description: desc, file, diff --git a/src/dwarf/extruder.rs b/src/dwarf/extruder.rs index 0015648b..d2ff4141 100644 --- a/src/dwarf/extruder.rs +++ b/src/dwarf/extruder.rs @@ -1,4 +1,10 @@ -use std::{fs, ops::Range, path::PathBuf}; +use std::{ + fs, + hash::{DefaultHasher, Hash, Hasher}, + io, + ops::Range, + path::PathBuf, +}; use ansi_term::Colour; use heck::ToUpperCamelCase; @@ -90,9 +96,21 @@ macro_rules! link_argument { Some(next.id) }}; } - pub(crate) use link_argument; +macro_rules! link_pattern { + ($last:expr, $next:expr, $store:expr) => {{ + let next = s_read!($next); + if let Some(last) = $last { + let last = $store.exhume_pattern(&last).unwrap().clone(); + let mut last = s_write!(last); + last.next = Some(next.id); + } + + Some(next.id) + }}; +} + macro_rules! link_statement { ($last:expr, $next:expr, $store:expr) => {{ let next = s_read!($next); @@ -204,7 +222,7 @@ struct ConveyFunc<'a> { span: &'a Span, params: &'a [(Spanned, Spanned)], return_type: &'a Spanned, - generics: Option>, + generics: Option>, statements: Option<&'a Spanned>, } @@ -217,7 +235,7 @@ impl<'a> ConveyFunc<'a> { span: &'a Span, params: &'a [(Spanned, Spanned)], return_type: &'a Spanned, - generics: Option>, + generics: Option>, statements: Option<&'a Spanned>, ) -> Self { Self { @@ -238,7 +256,7 @@ struct ConveyStruct<'a> { span: &'a Span, attributes: &'a AttributeMap, fields: &'a [(Spanned, Spanned, AttributeMap)], - generics: Option>, + generics: Option>, } impl<'a> ConveyStruct<'a> { @@ -247,7 +265,7 @@ impl<'a> ConveyStruct<'a> { span: &'a Span, attributes: &'a AttributeMap, fields: &'a [(Spanned, Spanned, AttributeMap)], - generics: Option>, + generics: Option>, ) -> Self { Self { name, @@ -263,7 +281,7 @@ struct ConveyEnum<'a> { name: &'a Spanned, attributes: &'a AttributeMap, fields: &'a [(Spanned, Option)], - generics: Option>, + generics: Option>, } impl<'a> ConveyEnum<'a> { @@ -271,7 +289,7 @@ impl<'a> ConveyEnum<'a> { name: &'a Spanned, attributes: &'a AttributeMap, fields: &'a [(Spanned, Option)], - generics: Option>, + generics: Option>, ) -> Self { Self { name, @@ -305,7 +323,7 @@ pub struct StructFields { pub woog_struct: RefType, pub fields: Vec<(Spanned, Spanned, AttributeMap)>, // I'd really like to keep this as a reference, rather than cloning it. - pub generics: Option>, + pub generics: Option>, pub location: Location, } @@ -335,6 +353,9 @@ pub struct Context<'a> { pub sarzak: &'a SarzakStore, pub dwarf_home: &'a PathBuf, pub cwd: &'a PathBuf, + /// Dirty + /// + /// This was used by the interpreter. It should be removed. pub dirty: &'a mut Vec, pub file_name: &'a str, pub func_defs: HashMap, @@ -351,10 +372,10 @@ pub struct Context<'a> { /// This is a HashSet of module paths that have been imported. pub imports: &'a mut HashSet, pub generics: Vec<(Type, Span)>, - /// Types + /// Silent /// - /// This is a HashSet of types that have been imported. - pub types: &'a mut HashSet, + /// If true, then we don't print anything. + pub silent: bool, } impl<'a> Context<'a> { @@ -372,7 +393,7 @@ impl<'a> Context<'a> { path: String, scopes: &'a mut HashMap, imports: &'a mut HashSet, - types: &'a mut HashSet, + silent: bool, ) -> Self { Self { location, @@ -391,7 +412,7 @@ impl<'a> Context<'a> { scopes, imports, generics: Vec::new(), - types, + silent, } } } @@ -423,6 +444,7 @@ pub fn new_lu_dog( source: Option<(String, &[Item])>, dwarf_home: &PathBuf, cwd: &PathBuf, + silent: bool, sarzak: &SarzakStore, ) -> Result { let mut lu_dog = LuDogStore::new(); @@ -446,7 +468,6 @@ pub fn new_lu_dog( let mut dirty = Vec::new(); let mut stack = Vec::new(); let mut imports = HashSet::default(); - let mut types = HashSet::default(); if let Some((source, ast)) = source { let mut context = Context { @@ -466,10 +487,13 @@ pub fn new_lu_dog( scopes: &mut scopes, imports: &mut imports, generics: Vec::new(), - types: &mut types, + silent, }; - println!("extruding {file_name}"); + if !context.silent { + println!("\n{} {file_name}", Colour::Green.paint("Extruding:")); + } + walk_tree(ast, &mut context, &mut stack, &mut lu_dog)?; }; @@ -494,6 +518,7 @@ fn walk_tree( let mut implementations = Vec::new(); let mut structs = Vec::new(); let mut enums = Vec::new(); + let mut errors = Vec::new(); // We need the structs before the impls. We also need function signatures. // So we walk the tree and cache what we find so that we may then inter @@ -619,8 +644,6 @@ fn walk_tree( } } } - - let mut errors = Vec::new(); // Put the type information in first. // This first pass over the structs just records the name, but not the fields. // We wait until we've seen all of the structs to do that. This allows us to @@ -633,7 +656,7 @@ fn walk_tree( generics, } in &structs { - debug!("Interring struct `{}` fields", name); + debug!("Interring struct `{}`", name); let _ = strukt::inter_struct( name, span, @@ -671,7 +694,8 @@ fn walk_tree( } // This needs to be after the enums are interred. - for _ in &structs { + for ConveyStruct { name, .. } in &structs { + debug!("Interring struct `{name}` fields"); let params = context.struct_fields.drain(..).collect::>(); for StructFields { woog_struct, @@ -951,7 +975,6 @@ pub fn inter_statement( local, ) }; - debug!("inter let {var:?}"); // Now parse the RHS, which is an expression. @@ -1125,6 +1148,7 @@ pub(super) fn inter_expression( let element = ListElement::new(0, &first, None, lu_dog); let expr = Expression::new_list_element(true, &element, lu_dog); let value = XValue::new_expression(block, &first_ty, &expr, lu_dog); + // We need to clone the span because it's already been used // by the underlying value. LuDogSpan::new( @@ -1136,7 +1160,8 @@ pub(super) fn inter_expression( lu_dog, ); - let list_expr = ListExpression::new(Some(&element), lu_dog); + let list_expr = ListExpression::new(Some(&element), + &ValueType::new_unknown(true, lu_dog), lu_dog); let mut last_element_uuid: Option = Some(s_read!(element).id); let mut position = 1; @@ -1316,7 +1341,7 @@ pub(super) fn inter_expression( let local = LocalVariable::new(Uuid::new_v4(), lu_dog); let var = Variable::new_local_variable(var, &local, lu_dog); debug!("variable {var:?}"); - let _value = XValue::new_variable(&block, &ty.0, &var, lu_dog); + let value = XValue::new_variable(&block, &ty.0, &var, lu_dog); // 🚧 We should really be passing a span in the Block so that // we can link this XValue to it. } @@ -1327,8 +1352,9 @@ pub(super) fn inter_expression( .iter() .map(|stmt| new_ref!(ParserStatement, stmt.0.to_owned())) .collect(); - // 🚧 The one that's commented out is correct -- assuming the block isn't `{}`. - // The one that isn't commented out _should_ be right, but I'm not sure that it is. + // 🚧 The one that's commented out is correct -- assuming the block + // isn't `{}`. The one that isn't commented out _should_ be right, + // but I'm not sure that it is. // let stmts_span = stmts.iter().map(|stmt| stmt.1.start).min().unwrap() // ..stmts.iter().map(|stmt| stmt.1.end).max().unwrap(); let stmts_span = s_read!(span).start as usize..s_read!(span).end as usize; @@ -1465,6 +1491,9 @@ pub(super) fn inter_expression( // Equals // ParserExpression::Equals(ref lhs_p, ref rhs_p) => { + debug!("ParserExpression::Equals lhs {:?}", lhs_p); + debug!("ParserExpression::Equals rhs {:?}", rhs_p); + let (lhs, lhs_ty) = inter_expression( &new_ref!(ParserExpression, lhs_p.0.to_owned()), &lhs_p.1, @@ -1551,7 +1580,7 @@ pub(super) fn inter_expression( let expr = FieldAccess::new(&lhs.0, &fat, &woog_struct, lu_dog); let expr = Expression::new_field_access(true, &expr, lu_dog); let ty = s_read!(field).r5_value_type(lu_dog)[0].clone(); - let value = XValue::new_expression(block, &ty, &expr, lu_dog); + let value = XValue::new_expression(block, &ty, &expr, lu_dog); update_span_value(&span, &value, location!()); Ok(((expr, span), ty)) @@ -1658,12 +1687,77 @@ pub(super) fn inter_expression( } } } - _ => Err(vec![DwarfError::NotAStruct { + ValueTypeEnum::ZObjectStore(ref id) => { + let store = lu_dog.exhume_z_object_store(id).unwrap(); + let name = &s_read!(store).name; + let id = lu_dog.exhume_woog_struct_id_by_name(name).unwrap(); + let woog_struct = lu_dog.exhume_woog_struct(&id).unwrap(); + let fields = s_read!(woog_struct).r7_field(lu_dog); + let field = fields.iter().find(|f| s_read!(f).name == rhs.0); + + if let Some(field) = field { + let field = lu_dog.exhume_field(&s_read!(field).id); + let func = if let Some(impl_) = + s_read!(woog_struct).r8c_implementation_block(lu_dog).pop() + { + let funcs = s_read!(impl_).r9_function(lu_dog); + funcs.iter().find(|f| s_read!(f).name == rhs.0).cloned() + } else { + None + }; + + debug!("field {:?}", field); + debug!("func {:?}", func); + + // We need to grab the type from the field: what we have above is the type + // of the struct. + if let Some(field) = field { + let fat = FieldAccessTarget::new_field(true, &field, lu_dog); + let expr = FieldAccess::new(&lhs.0, &fat, &woog_struct, lu_dog); + let expr = Expression::new_field_access(true, &expr, lu_dog); + let ty = s_read!(field).r5_value_type(lu_dog)[0].clone(); + let value = XValue::new_expression(block, &ty, &expr, lu_dog); + update_span_value(&span, &value, location!()); + + Ok(((expr, span), ty)) + } else if let Some(func) = func { + let fat = FieldAccessTarget::new_function(true, &func, lu_dog); + let expr = FieldAccess::new(&lhs.0, &fat, &woog_struct, lu_dog); + let expr = Expression::new_field_access(true, &expr, lu_dog); + let ty = s_read!(func).r10_value_type(lu_dog)[0].clone(); + let value = XValue::new_expression(block, &ty, &expr, lu_dog); + update_span_value(&span, &value, location!()); + + Ok(((expr, span), ty)) + } else { + let span = s_read!(span); + let span = span.start as usize..span.end as usize; + Err(vec![DwarfError::StructFieldNotFound { + field: rhs.0.clone(), + file: context.file_name.to_owned(), + span, + location: location!(), + program: context.source_string.to_owned(), + }]) + } + } else { + Err(vec![DwarfError::StructFieldNotFound { + field: rhs.0.clone(), + file: context.file_name.to_owned(), + span: rhs.1.to_owned(), + location: location!(), + program: context.source_string.to_owned(), + }]) + } + } + what => { + dbg!(&what); + Err(vec![DwarfError::NotAStruct { file: context.file_name.to_owned(), span: rhs.1.to_owned(), ty: PrintableValueType(true, &ty, context, lu_dog).to_string(), program: context.source_string.to_owned(), - }]), + }])}, } } // @@ -1753,22 +1847,11 @@ pub(super) fn inter_expression( }; let body = new_ref!(ParserExpression, body.to_owned()); - let (body, _body_ty) = + let ((body, _), _body_ty) = inter_expression(&body, bspan, block, context, import_stack, lu_dog)?; - // 🚧 This is dumb. I'm extracting the body here, just to stick it back - // into an expression in the interpreter. The model will need to be fixed - // so that the for loop takes an expression and not a body, which I think - // is sensible. - let body = s_read!(body.0); - let body = if let ExpressionEnum::Block(body) = &body.subtype { - body - } else { - unreachable!() - }; - let body = lu_dog.exhume_block(body).unwrap(); - let body = Expression::new_block(true, &body, lu_dog); - + // I think that the model should be changed so that the For Loop takes + // an Expression rather than a Body. let for_loop = ForLoop::new(iter.0.to_owned(), &body, &collection.0, lu_dog); let expr = Expression::new_for_loop(true, &for_loop, lu_dog); let ty = ValueType::new_empty(true, lu_dog); @@ -2413,7 +2496,7 @@ pub(super) fn inter_expression( let list = List::new(&ValueType::new_func_generic(true, &generic, lu_dog), lu_dog); let expr = Expression::new_list_expression( true, - &ListExpression::new(None, lu_dog), + &ListExpression::new(None, &ValueType::new_empty(true, lu_dog), lu_dog), lu_dog, ); let ty = ValueType::new_list(true, &list, lu_dog); @@ -2451,7 +2534,7 @@ pub(super) fn inter_expression( lu_dog, ); - let list_expr = ListExpression::new(Some(&element), lu_dog); + let list_expr = ListExpression::new(Some(&element), &first_ty, lu_dog); let mut last_element_uuid: Option = Some(s_read!(element).id); let mut position = 1; @@ -2528,8 +2611,7 @@ pub(super) fn inter_expression( let mut expr_type_tuples = values .iter() .filter_map(|value| { - let value = &*s_read!(value); - match value.subtype { + match s_read!(value).subtype { XValueEnum::Expression(ref _expr) => { // What's going on is that there are a bunch of values in the block. // We are iterating over them all, and we are bound to find some that @@ -2548,16 +2630,13 @@ pub(super) fn inter_expression( VariableEnum::LocalVariable(_) | VariableEnum::Parameter(_) | VariableEnum::LambdaParameter(_)=> { - let ty = value.r24_value_type(lu_dog)[0].clone(); - + let ty = s_read!(value).r24_value_type(lu_dog)[0].clone(); let ty_str = PrintableValueType(true, &ty, context, lu_dog); debug!("LocalVariable: {name}, {}, {value:?} ({ty:?})", ty_str.to_string()); - let expr = lu_dog .iter_variable_expression() .find(|expr| s_read!(expr).name == *name); - let expr = if let Some(expr) = expr { s_read!(expr).r15_expression(lu_dog)[0].clone() } else { @@ -2566,11 +2645,7 @@ pub(super) fn inter_expression( debug!("created a new variable expression {:?}", expr); Expression::new_variable_expression(true, &expr, lu_dog) }; - - let value = - XValue::new_expression(block, &ty, &expr, lu_dog); - update_span_value(&span, &value, location!()); - + debug!("LocalVariable ({expr:#?}, {ty:#?})"); Some(((expr, span.clone()), ty)) } } @@ -2584,6 +2659,12 @@ pub(super) fn inter_expression( (RefType, RefType), RefType, )>>(); + + for ((expr, _), ty) in &expr_type_tuples { + let value = + XValue::new_expression(block, ty, expr, lu_dog); + update_span_value(&span, &value, location!()); + } // There should be zero or 1 results. // Actually there are `n`, where `n` is the number of values in the block, // which is equivalent to the number of `let` statements. @@ -2619,9 +2700,10 @@ pub(super) fn inter_expression( // // debug_assert!(expr_type_tuples.len() <= 1); - debug!("expr_type_tuples ({}): {expr_type_tuples:?}", expr_type_tuples.len()); - // Why are we taking the last one? -- Oh, read above. + // I guess we want the first one. Sigh. The comments need to be updated + // into something narrative, and useful. + // Fuck if I know. if let Some(expr_ty_tuple) = expr_type_tuples.pop() { debug!("returning {:?}", expr_ty_tuple); Ok(expr_ty_tuple.clone()) @@ -2661,6 +2743,8 @@ pub(super) fn inter_expression( debug!("LocalVariable function ({expr:#?}, {ty:#?})"); Ok(((expr, span), ty)) } else { + debug!("LocalVariable not found {name}"); + dbg!("not found", &name); let s = s_read!(span).start as usize..s_read!(span).end as usize; Err(vec![DwarfError::VariableNotFound { var: name.to_owned(), @@ -2838,6 +2922,7 @@ pub(super) fn inter_expression( let xmatch = XMatch::new(Uuid::new_v4(), &scrutinee.0, lu_dog); + let mut last_uuid: Option = None; let mut first = true; let mut match_ty = ValueType::new_unknown(true, lu_dog); for ((pattern, match_expr), ref span) in patterns { @@ -2847,6 +2932,7 @@ pub(super) fn inter_expression( let lu_dog_tmp = new_ref!(LuDogStore, lu_dog.clone()); // This bit is really neat. let pattern_expr: ParserExpression = (pattern.to_owned(), block.clone(), scrutinee_ty.clone(), &context.source, lu_dog_tmp.clone(), true).into(); + lu_dog.merge(&s_read!(lu_dog_tmp)); let (pattern_expr, ty) = inter_expression( @@ -2882,7 +2968,8 @@ pub(super) fn inter_expression( typecheck((&match_ty, span), (&ty, span), location!(), context, lu_dog)?; } - let _pat = AssocPat::new(&expr.0, &pattern_expr.0, &xmatch, lu_dog); + let pat = AssocPat::new(&expr.0, None, &pattern_expr.0, &xmatch, lu_dog); + last_uuid = link_pattern!(last_uuid, pat, lu_dog); } let expr = Expression::new_x_match(true, &xmatch, lu_dog); @@ -3188,12 +3275,17 @@ pub(super) fn inter_expression( cfg_if::cfg_if! { if #[cfg(not(feature="debug"))] { // See # Span Bug - lu_dog.inter_span(|id| { - let mut span = s_read!(span).clone(); - span.x_value = Some(s_read!(value).id); - span.id = id; - new_ref!(LuDogSpan, span) - }); + let mut span = s_read!(span).clone(); + span.x_value = Some(s_read!(value).id); + span.id = Uuid::new_v4(); + let span = new_ref!(LuDogSpan, span); + lu_dog.inter_span(span.clone()); + // lu_dog.inter_span(|id| { + // let mut span = s_read!(span).clone(); + // span.x_value = Some(s_read!(value).id); + // span.id = id; + // new_ref!(LuDogSpan, span) + // }); } else { // update_span_value(&span, &value, location!()); let span = LuDogSpan::new( @@ -3296,7 +3388,6 @@ pub(super) fn inter_expression( Ok(((expr, span), lhs_ty)) } 道 => { - let source = &s_read!(context.source).source; let span = s_read!(span).start as usize..s_read!(span).end as usize; Err(vec![DwarfError::NoImplementation { missing: format!("inter_expression: {:?}", 道), @@ -3351,12 +3442,142 @@ fn inter_module( path.set_file_name(name); path.set_extension(ORE_EXT); - if !context.imports.insert(path.clone()) { - debug!("{name} already imported"); - return Ok(()); + let mut hasher = DefaultHasher::new(); + path.hash(&mut hasher); + let hash = hasher.finish(); + + let compiled_path = format!( + "{}/extruded/{}_{}.道", + context.dwarf_home.display(), + hash, + path.file_name().unwrap().to_str().unwrap() + ); + let compiled_path = PathBuf::from(&compiled_path); + let mut dirty_path = compiled_path.clone(); + dirty_path.set_extension("dirty"); + + if let Some(src_meta) = fs::metadata(&path) + .map_err(|e| { + errors.push(DwarfError::File { + source: e, + description: format!("Unable to open import: {name}"), + location: location!(), + path: path.to_owned(), + }); + }) + .ok() + { + if let Some(src_time) = src_meta + .modified() + .map_err(|e| { + errors.push(DwarfError::File { + source: e, + description: format!("Unable to read modified time of: {name}"), + location: location!(), + path: path.to_owned(), + }); + }) + .ok() + { + if compiled_path.exists() { + if let Some(compiled_meta) = fs::metadata(&compiled_path) + .map_err(|e| { + errors.push(DwarfError::File { + source: e, + description: format!("Unable to open import: {name} (compiled)"), + location: location!(), + path: compiled_path.to_owned(), + }); + }) + .ok() + { + if let Some(compiled_time) = compiled_meta + .modified() + .map_err(|e| { + errors.push(DwarfError::File { + source: e, + description: format!( + "Unable to read modified time of: {name} (compiled)" + ), + location: location!(), + path: compiled_path.to_owned(), + }); + }) + .ok() + { + if src_time < compiled_time { + debug!("{name} already compiled"); + + if !context.silent { + println!( + "{} {} @ {}", + Colour::Green.paint("Loading extruded:"), + Colour::Blue.paint(name), + compiled_path.display() + ); + } + + // Load the extruded domain and merge it into the current domain. + if let Some(compiled) = LuDogStore::load_bincode(&compiled_path) + .map_err(|e| { + errors.push(DwarfError::File { + source: e, + description: format!("Attempting to load lu_dog: {name}"), + location: location!(), + path: compiled_path.to_owned(), + }); + }) + .ok() + { + lu_dog.merge(&compiled); + + // Update the dirty stuff, even though it doesn't seem to be used. + if let Some(dirty_file) = fs::File::open(&dirty_path) + .map_err(|e| { + errors.push(DwarfError::File { + source: e, + description: format!( + "Attempting to open dirty file: {name}" + ), + location: location!(), + path: dirty_path.to_owned(), + }) + }) + .ok() + { + let reader = io::BufReader::new(dirty_file); + if let Some(dirty) = serde_json::from_reader(reader) + .map_err(|e| { + errors.push(DwarfError::File { + source: io::Error::new( + io::ErrorKind::Other, + e.to_string(), + ), + description: format!( + "Attempting to read dirty file: {name}" + ), + location: location!(), + path: dirty_path.to_owned(), + }) + }) + .ok() + { + context.dirty.extend::>(dirty); + } + } + + return Ok(()); + } + } + } + } + } + } } - println!("\nextruding {name}.{ORE_EXT}"); + if !context.silent { + println!("\n{} {}", Colour::Green.paint("Extruding:"), path.display()); + } match fs::read_to_string(&path) { Ok(source_code) => { @@ -3364,6 +3585,7 @@ fn inter_module( match parse_dwarf(path.to_str().unwrap(), &source_code) { Ok(ast) => { let path_name = format!("{}", path.display()); + // let mut new_lu_dog = lu_dog.clone(); // Here we are creating a path that includes the name of the module. // This is the context.path of the new context used to walk the tree. @@ -3374,7 +3596,7 @@ fn inter_module( let mut dirty = Vec::new(); // We want fresh scopes and types importing a module. let mut scopes = HashMap::default(); - let mut types = HashSet::default(); + let mut new_lu_dog = LuDogStore::new(); let mut new_ctx = Context::new( source_code, @@ -3385,18 +3607,52 @@ fn inter_module( context.models, &mut dirty, location!(), - lu_dog, + &mut new_lu_dog, type_path, &mut scopes, context.imports, - &mut types, + context.silent, ); // Extrusion time trace!("processing dwarf import"); - walk_tree(&ast, &mut new_ctx, import_stack, lu_dog)?; + walk_tree(&ast, &mut new_ctx, import_stack, &mut new_lu_dog)?; trace!("done processing dwarf import"); + // Persist the beast + let _ = new_lu_dog.persist_bincode(&compiled_path).map_err(|e| { + errors.push(DwarfError::File { + source: e, + description: format!("Attempting to persist lu_dog: {name}"), + location: location!(), + path: compiled_path.to_owned(), + }); + }); + + if let Some(dirty_file) = fs::File::create(dirty_path) + .map_err(|e| { + errors.push(DwarfError::File { + source: e, + description: format!("Attempting to create file: {name}"), + location: location!(), + path: compiled_path.to_owned(), + }); + }) + .ok() + { + let mut writer = io::BufWriter::new(dirty_file); + let _ = serde_json::to_writer(&mut writer, &dirty).map_err(|e| { + errors.push(DwarfError::File { + source: io::Error::new(io::ErrorKind::Other, e.to_string()), + description: format!("Attempting to write dirty file: {name}"), + location: location!(), + path: compiled_path.to_owned(), + }); + }); + } + + lu_dog.merge(&new_lu_dog); + context.dirty.extend(dirty); } Err(_) => { @@ -3413,6 +3669,7 @@ fn inter_module( }); } } + // } if errors.is_empty() { Ok(()) @@ -3453,14 +3710,25 @@ fn inter_import( ) -> Result<()> { let mut errors = Vec::new(); + let (alias, has_alias) = match alias { + Some((alias, _)) => (alias.to_owned(), true), + None => ("".to_owned(), false), + }; + let mut path_root = import_path .iter() .map(|p| p.0.to_owned()) .collect::>(); - let ty = path_root.pop().unwrap(); + let ty = if has_alias { + path_root.pop(); + alias.clone() + } else { + path_root.pop().unwrap() + }; let module = path_root.first().unwrap(); // This will have _something_. + let type_root = PATH_SEP.to_owned() + path_root.join(PATH_SEP).as_str() + PATH_SEP; // It looks like we are first trying to load an extension. let mut path = context.dwarf_home.clone(); @@ -3471,6 +3739,24 @@ fn inter_import( path.push(LIB_TAO); + let mut hasher = DefaultHasher::new(); + path.hash(&mut hasher); + let hash = hasher.finish(); + + let compiled_path = PathBuf::from(format!( + "{}/extruded/{}_{}.道", + context.dwarf_home.display(), + hash, + path.file_name().unwrap().to_str().unwrap() + )); + + let dirty_path = PathBuf::from(format!( + "{}/extruded/{}_{}.道.dirty", + context.dwarf_home.display(), + hash, + path.file_name().unwrap().to_str().unwrap() + )); + // And then here if the extension doesn't exist, we try the lib dir. let (dir, path) = if path.exists() { (dir, path) @@ -3498,24 +3784,161 @@ fn inter_import( (dir, path) }; - let type_root = PATH_SEP.to_owned() + path_root.join(PATH_SEP).as_str() + PATH_SEP; - // We need to push the thing we are importing onto the stack so // that when we are interring a module we can import only the // thing on the top of the stack. let fq_type = type_root.clone() + &ty; + // This is testing if it's been imported yet, either via a compiled file, + // or extruding the module. - if let Some(t) = context.types.get(&fq_type) { + if lu_dog.exhume_woog_struct_id_by_name(&fq_type).is_some() + || lu_dog.exhume_enumeration_id_by_name(&fq_type).is_some() + { debug!("{fq_type} already imported"); + // This needs to be added to the scopes even though it's in the store. + context.scopes.insert(ty.clone(), type_root.clone()); return Ok(()); } else { debug!("{fq_type} being imported"); - context.types.insert(fq_type.clone()); } - println!("extruding type {fq_type} @ {}", path.display()); + if !context.silent { + println!( + "{} {} @ {}", + Colour::Green.paint("Extruding:"), + Colour::Blue.paint(&fq_type), + path.display() + ); + } - import_stack.push(fq_type); + import_stack.push(fq_type.clone()); + + // I really didn't want to just unwrap anything, and this is what you get. + // It's ugly AF. + if let Some(src_meta) = fs::metadata(&path) + .map_err(|e| { + errors.push(DwarfError::File { + source: e, + description: format!("Unable to open import: {module}"), + location: location!(), + path: path.to_owned(), + }); + }) + .ok() + { + if let Some(src_time) = src_meta + .modified() + .map_err(|e| { + errors.push(DwarfError::File { + source: e, + description: format!("Unable to read modified time of: {module}"), + location: location!(), + path: path.to_owned(), + }); + }) + .ok() + { + if compiled_path.exists() { + if let Some(compiled_meta) = fs::metadata(&compiled_path) + .map_err(|e| { + errors.push(DwarfError::File { + source: e, + description: format!("Unable to open import: {module}"), + location: location!(), + path: compiled_path.to_owned(), + }); + }) + .ok() + { + if let Some(compiled_time) = compiled_meta + .modified() + .map_err(|e| { + errors.push(DwarfError::File { + source: e, + description: format!("Unable to read modified time of: {module}"), + location: location!(), + path: compiled_path.to_owned(), + }); + }) + .ok() + { + if src_time < compiled_time { + debug!("{module} already compiled"); + + if !context.silent { + println!( + "{} {} @ {}", + Colour::Green.paint("Loading extruded:"), + Colour::Blue.paint(&fq_type), + compiled_path.display() + ); + } + + // Load the extruded domain and merge it into the current domain. + if let Some(compiled) = LuDogStore::load_bincode(&compiled_path) + .map_err(|e| { + errors.push(DwarfError::File { + source: e, + description: format!("Attempting to load lu_dog: {module}"), + location: location!(), + path: compiled_path.to_owned(), + }); + }) + .ok() + { + let fqt = type_root.clone() + &ty; + if compiled.exhume_woog_struct_id_by_name(&fqt).is_some() + || compiled.exhume_enumeration_id_by_name(&fqt).is_some() + { + lu_dog.merge(&compiled); + + // Update the scopes + context.scopes.insert(ty.clone(), type_root.clone()); + + // Update the dirty stuff, is this used? For what? + if let Some(dirty_file) = fs::File::open(&dirty_path) + .map_err(|e| { + errors.push(DwarfError::File { + source: e, + description: format!( + "Attempting to open dirty file: {module}" + ), + location: location!(), + path: dirty_path.to_owned(), + }) + }) + .ok() + { + let reader = io::BufReader::new(dirty_file); + if let Some(dirty) = serde_json::from_reader(reader) + .map_err(|e| { + errors.push(DwarfError::File { + source: io::Error::new( + io::ErrorKind::Other, + e.to_string(), + ), + description: format!( + "Attempting to read dirty file: {module}" + ), + location: location!(), + path: dirty_path.to_owned(), + }) + }) + .ok() + { + context.dirty.extend::>(dirty); + } + } + + return Ok(()); + } + } + } + } + } + } + } + } match fs::read_to_string(&path) { Ok(source_code) => { @@ -3524,7 +3947,7 @@ fn inter_import( Ok(ast) => { let path = format!("{}", path.display()); let mut dirty = Vec::new(); - // let mut scopes = HashMap::default(); + let mut new_lu_dog = LuDogStore::new(); let mut new_ctx = Context::new( source_code, @@ -3535,22 +3958,69 @@ fn inter_import( context.models, &mut dirty, location!(), - lu_dog, + &mut new_lu_dog, format!("::{module}::"), context.scopes, context.imports, - context.types, + context.silent, ); // Extrusion time trace!("processing dwarf import"); - walk_tree(&ast, &mut new_ctx, import_stack, lu_dog)?; + walk_tree(&ast, &mut new_ctx, import_stack, &mut new_lu_dog)?; trace!("done processing dwarf import"); - import_stack.pop(); + // Persist the beast + let _ = new_lu_dog.persist_bincode(&compiled_path).map_err(|e| { + errors.push(DwarfError::File { + source: e, + description: format!("Attempting to persist lu_dog: {module}"), + location: location!(), + path: compiled_path.to_owned(), + }); + }); - context.dirty.extend(dirty); + if let Some(dirty_file) = fs::File::create(dirty_path) + .map_err(|e| { + errors.push(DwarfError::File { + source: e, + description: format!("Attempting to create file: {module}"), + location: location!(), + path: compiled_path.to_owned(), + }); + }) + .ok() + { + let mut writer = io::BufWriter::new(dirty_file); + let _ = serde_json::to_writer(&mut writer, &dirty).map_err(|e| { + errors.push(DwarfError::File { + source: io::Error::new(io::ErrorKind::Other, e.to_string()), + description: format!("Attempting to write dirty file: {module}"), + location: location!(), + path: compiled_path.to_owned(), + }); + }); + } + // for woog in new_lu_dog.iter_woog_struct() { + // let woog = s_read!(woog); + // let name = woog.name.clone().split(PATH_SEP).last().unwrap().to_owned(); + // let path = woog.x_path.clone(); + // dbg!(&name, &path); + // context.scopes.insert(name, path); + // } + // for woog in new_lu_dog.iter_enumeration() { + // let woog = s_read!(woog); + // let name = woog.name.clone().split(PATH_SEP).last().unwrap().to_owned(); + // let path = woog.x_path.clone(); + // dbg!(&name, &path); + // context.scopes.insert(name, path); + // } + + lu_dog.merge(&new_lu_dog); + + import_stack.pop(); + context.dirty.extend(dirty); context.scopes.insert(ty.clone(), type_root); } Err(_) => { @@ -3569,11 +4039,6 @@ fn inter_import( } } - let (alias, has_alias) = match alias { - Some((alias, _)) => (alias.to_owned(), true), - None => ("".to_owned(), false), - }; - let import = Import::new( alias, has_alias, @@ -3670,6 +4135,10 @@ fn inter_implementation( } else { return Err(vec![DwarfError::Generic { description: "No model specified".to_owned(), + location: location!(), + span: span.clone(), + file: context.file_name.to_owned(), + program: context.source_string.to_owned(), }]); } } else { @@ -4060,19 +4529,19 @@ pub(crate) fn make_value_type( // This feels sort of dirty. Sometimes the name has leading `::`, and // sometimes it does not. We don't want it here because below we // concatenate the name and the path and the path has a trailing `::`. - let fq_name = if let Some(name) = tok.0.split(PATH_SEP).last() { + let name = if let Some(name) = tok.0.split(PATH_SEP).last() { name.to_owned() } else { tok.0.clone() }; - let fq_name = if let Some(path) = context.scopes.get(&fq_name) { - path.to_owned() + fq_name.as_str() + let fq_name = if let Some(path) = context.scopes.get(&name) { + path.to_owned() + name.as_str() } else { - context.path.clone() + fq_name.as_str() + context.path.clone() + name.as_str() }; - let name = fq_name.clone(); + // let name = fq_name.clone(); // kts // if !generics.is_empty() { @@ -4088,49 +4557,47 @@ pub(crate) fn make_value_type( // } if let Some(ty) = lookup_user_defined_type(lu_dog, &fq_name, span, context) { - // 🔥 I think that I need to look at the returned type and see if it has - // generics, and then match them up with the generics I have above. But - // then what happens? I can't really return a new type with the substitutions - // I don't think. Ok(ty) - } else if fq_name != name { - // 🚧 I don't trust this code -- it needs testing. - if let Some(ref id) = lu_dog.exhume_woog_struct_id_by_name(&name) { - let woog_struct = lu_dog.exhume_woog_struct(id).unwrap(); - let struct_fields = s_read!(woog_struct).r7_field(lu_dog); - let mut generic_substitutions = HashMap::default(); - - for field in struct_fields { - let field = s_read!(field); - let field_ty = lu_dog.exhume_value_type(&field.ty).unwrap(); - let field_ty = s_read!(field_ty); - if let ValueTypeEnum::StructGeneric(ref id) = field_ty.subtype { - let generic = lu_dog.exhume_struct_generic(id).unwrap(); - let generic = s_read!(generic); - let ty = generic.r1_value_type(lu_dog)[0].clone(); - generic_substitutions.insert(generic.name.to_owned(), ty); - } - } + } else if let Some(ty) = lookup_user_defined_type(lu_dog, &name, span, context) { + Ok(ty) + // } else if fq_name != name { + // // 🚧 I don't trust this code -- it needs testing. + // if let Some(ref id) = lu_dog.exhume_woog_struct_id_by_name(&name) { + // let woog_struct = lu_dog.exhume_woog_struct(id).unwrap(); + // let struct_fields = s_read!(woog_struct).r7_field(lu_dog); + // let mut generic_substitutions = HashMap::default(); + + // for field in struct_fields { + // let field = s_read!(field); + // let field_ty = lu_dog.exhume_value_type(&field.ty).unwrap(); + // let field_ty = s_read!(field_ty); + // if let ValueTypeEnum::StructGeneric(ref id) = field_ty.subtype { + // let generic = lu_dog.exhume_struct_generic(id).unwrap(); + // let generic = s_read!(generic); + // let ty = generic.r1_value_type(lu_dog)[0].clone(); + // generic_substitutions.insert(generic.name.to_owned(), ty); + // } + // } - if let Some((_, ty)) = create_generic_struct( - &woog_struct, - &generic_substitutions, - span, - context, - context.sarzak, - lu_dog, - ) { - Ok(ty) - } else if let Some(ty) = - lookup_user_defined_type(lu_dog, &name, span, context) - { - Ok(ty) - } else { - panic!("this is a mess"); - } - } else { - Ok(create_generic_enum(&fq_name, &name, &span, context, lu_dog)?.1) - } + // if let Some((_, ty)) = create_generic_struct( + // &woog_struct, + // &generic_substitutions, + // span, + // context, + // context.sarzak, + // lu_dog, + // ) { + // Ok(ty) + // } else if let Some(ty) = + // lookup_user_defined_type(lu_dog, &name, span, context) + // { + // Ok(ty) + // } else { + // panic!("this is a mess"); + // } + // } else { + // Ok(create_generic_enum(&fq_name, &name, &span, context, lu_dog)?.1) + // } } else if let Some(ty) = lookup_user_defined_type(lu_dog, &name, span, context) { Ok(ty) } else if let Some(ref id) = lu_dog.exhume_z_object_store_id_by_name(&name) { @@ -4188,8 +4655,16 @@ pub(crate) fn lookup_user_defined_type( } else if let Some(ref id) = lu_dog.exhume_enumeration_id_by_name(name) { // Here too, but for enums. let woog_enum = lu_dog.exhume_enumeration(id).unwrap(); - Some(ValueType::new_enumeration(true, &woog_enum, lu_dog)) - // 🚧 Don't we need a span here, like above? + let ty = ValueType::new_enumeration(true, &woog_enum, lu_dog); + LuDogSpan::new( + span.end as i64, + span.start as i64, + &context.source, + Some(&ty), + None, + lu_dog, + ); + Some(ty) } else { None } @@ -4349,7 +4824,7 @@ pub(super) fn typecheck( let rhs = rhs.0; cfg_if::cfg_if! { - if #[cfg(any(feature = "single", feature = "single-vec", feature = "single-vec-tracy", feature="debug"))] { + if #[cfg(any(feature = "lu-dog-rc", feature = "single", feature = "single-vec", feature = "single-vec-tracy", feature="debug"))] { if std::rc::Rc::as_ptr(lhs) == std::rc::Rc::as_ptr(rhs) { return Ok(()); } @@ -4513,10 +4988,9 @@ pub(super) fn typecheck( // } } (ValueTypeEnum::StructGeneric(g), _) => { - let g = lu_dog.exhume_struct_generic(g).unwrap(); + let _g = lu_dog.exhume_struct_generic(g).unwrap(); // let ty = s_read!(g).r99_value_type(lu_dog); // dbg!(&ty, "a"); - dbg!(&g, "a"); let a = PrintableValueType(true, lhs, context, lu_dog); let b = PrintableValueType(true, rhs, context, lu_dog); @@ -4538,14 +5012,11 @@ pub(super) fn typecheck( // } } (_, ValueTypeEnum::StructGeneric(g)) => { - let g = lu_dog.exhume_struct_generic(g).unwrap(); + let _g = lu_dog.exhume_struct_generic(g).unwrap(); // let ty = s_read!(g).r99_value_type(lu_dog); // dbg!(&ty, "b"); - dbg!(&g, "b"); - let a = PrintableValueType(true, lhs, context, lu_dog); - let b = PrintableValueType(true, rhs, context, lu_dog); - - dbg!(a.to_string(), b.to_string()); + // let a = PrintableValueType(true, lhs, context, lu_dog); + // let b = PrintableValueType(true, rhs, context, lu_dog); // if !ty.is_empty() { // typecheck( @@ -4699,8 +5170,6 @@ pub(super) fn typecheck( let a = PrintableValueType(true, lhs, context, lu_dog); let b = PrintableValueType(true, rhs, context, lu_dog); - dbg!(a.to_string(), b.to_string()); - Err(vec![DwarfError::TypeMismatch { expected: a.to_string(), found: b.to_string(), diff --git a/src/dwarf/extruder/expression/addition.rs b/src/dwarf/extruder/expression/addition.rs index 33819cb7..309288e8 100644 --- a/src/dwarf/extruder/expression/addition.rs +++ b/src/dwarf/extruder/expression/addition.rs @@ -1,7 +1,7 @@ use std::ops::Range; use log::debug; -use snafu::{location, Location}; +use snafu::location; use crate::{ dwarf::{ diff --git a/src/dwarf/extruder/expression/and.rs b/src/dwarf/extruder/expression/and.rs index 35777546..761b7b6c 100644 --- a/src/dwarf/extruder/expression/and.rs +++ b/src/dwarf/extruder/expression/and.rs @@ -1,6 +1,6 @@ use std::ops::Range; -use snafu::{location, Location}; +use snafu::location; use crate::{ dwarf::{ diff --git a/src/dwarf/extruder/expression/expr_as.rs b/src/dwarf/extruder/expression/expr_as.rs index 95bb03a8..ef918d4b 100644 --- a/src/dwarf/extruder/expression/expr_as.rs +++ b/src/dwarf/extruder/expression/expr_as.rs @@ -1,7 +1,7 @@ use std::ops::Range; use ansi_term::Colour; -use snafu::{location, Location}; +use snafu::location; use crate::{ dwarf::{ diff --git a/src/dwarf/extruder/expression/method_call.rs b/src/dwarf/extruder/expression/method_call.rs index 3d6f344e..f5f925da 100644 --- a/src/dwarf/extruder/expression/method_call.rs +++ b/src/dwarf/extruder/expression/method_call.rs @@ -1,8 +1,7 @@ use std::ops::Range; use ansi_term::Colour; -use snafu::{location, Location}; -use uuid::Uuid; +use snafu::location; use crate::{ dwarf::{ @@ -123,7 +122,7 @@ pub(in crate::dwarf::extruder) fn method_call_return_type( PrintableValueType(true, &instance_ty, context, lu_dog).to_string() ); let ty = match s_read!(instance_ty).subtype { - ValueTypeEnum::AnyList(ref list) => match method.as_str() { + ValueTypeEnum::AnyList(_) => match method.as_str() { JOIN => { let ty = Ty::new_z_string(context.sarzak); ValueType::new_ty(true, &ty, lu_dog) @@ -256,12 +255,14 @@ pub(in crate::dwarf::extruder) fn method_call_return_type( let inner_ty = lu_dog.exhume_value_type(&inner_ty).unwrap(); let r_inner_ty = s_read!(inner_ty); - if &*s_read!(arg_ty) != &*r_inner_ty { + if s_read!(arg_ty).subtype != r_inner_ty.subtype { // let expected_span = &inner_ty.r62_span(lu_dog)[0]; // let expected_span = s_read!(expected_span); // let expected_span = expected_span.start as usize..expected_span.end as usize; let expected_span = 0..0; + dbg!(&arg_ty, &r_inner_ty); + return Err(vec![DwarfError::TypeMismatch { expected: PrintableValueType(true, &inner_ty, context, lu_dog).to_string(), found: PrintableValueType(true, &arg_ty, context, lu_dog).to_string(), diff --git a/src/dwarf/extruder/expression/static_method_call.rs b/src/dwarf/extruder/expression/static_method_call.rs index 3e045288..2cc845bf 100644 --- a/src/dwarf/extruder/expression/static_method_call.rs +++ b/src/dwarf/extruder/expression/static_method_call.rs @@ -1,7 +1,7 @@ use std::ops::Range; use ansi_term::Colour; -use snafu::{location, Location}; +use snafu::location; use uuid::Uuid; #[cfg(feature = "async")] diff --git a/src/dwarf/extruder/expression/struct_expr.rs b/src/dwarf/extruder/expression/struct_expr.rs index c5194143..d3a5ee04 100644 --- a/src/dwarf/extruder/expression/struct_expr.rs +++ b/src/dwarf/extruder/expression/struct_expr.rs @@ -2,7 +2,7 @@ use std::ops::Range; use log::debug; use rustc_hash::FxHashMap as HashMap; -use snafu::{location, Location}; +use snafu::location; use uuid::Uuid; use crate::{ @@ -241,12 +241,16 @@ pub fn inter( } else { cfg_if::cfg_if! { if #[cfg(not(feature="debug"))] { - lu_dog.inter_span(|id| { - let mut span = s_read!(field_expr.1).clone(); - span.x_value = Some(s_read!(value).id); - span.id = id; - new_ref!(LuDogSpan, span) - }); + let mut span = s_read!(field_expr.1).clone(); + span.x_value = Some(s_read!(value).id); + span.id = Uuid::new_v4(); + lu_dog.inter_span(new_ref!(LuDogSpan, span)); + // lu_dog.inter_span(|id| { + // let mut span = s_read!(field_expr.1).clone(); + // span.x_value = Some(s_read!(value).id); + // span.id = id; + // new_ref!(LuDogSpan, span) + // }); } else { let span = LuDogSpan::new( s_read!(field_expr.1).end, diff --git a/src/dwarf/extruder/expression/unit_enum.rs b/src/dwarf/extruder/expression/unit_enum.rs index f84daa51..5622fc3a 100644 --- a/src/dwarf/extruder/expression/unit_enum.rs +++ b/src/dwarf/extruder/expression/unit_enum.rs @@ -1,7 +1,7 @@ use std::ops::Range; use ansi_term::Colour; -use snafu::{location, Location}; +use snafu::location; use uuid::Uuid; use crate::{ diff --git a/src/dwarf/items/enuum.rs b/src/dwarf/items/enuum.rs index b0184abe..d2d1189e 100644 --- a/src/dwarf/items/enuum.rs +++ b/src/dwarf/items/enuum.rs @@ -1,6 +1,6 @@ use ansi_term::Colour; use rustc_hash::FxHashMap as HashMap; -use snafu::{location, Location}; +use snafu::location; use uuid::Uuid; use crate::{ @@ -34,7 +34,7 @@ pub fn inter_enum( name: &Spanned, _attributes: &AttributeMap, variants: &[(Spanned, Option)], - enum_generics: Option<&HashMap>, + enum_generics: Option<&Vec<(String, Type)>>, context: &mut Context, import_stack: &mut Vec, lu_dog: &mut LuDogStore, @@ -53,7 +53,6 @@ pub fn inter_enum( location: location!(), }]); } - context.types.insert(name.0.clone()); let name = context.path.clone() + &name.0; debug!("inter_enum {name}"); @@ -67,7 +66,8 @@ pub fn inter_enum( let mut first_generic = None; let mut last_generic_uuid: Option = None; if let Some(generics) = enum_generics { - for name in generics.keys() { + for generic in generics.iter() { + let name = &generic.0; let generic = EnumGeneric::new(Uuid::new_v4(), name.to_owned(), &woog_enum, None, lu_dog); let ty = ValueType::new_enum_generic(true, &generic, lu_dog); diff --git a/src/dwarf/items/func.rs b/src/dwarf/items/func.rs index ebe774e3..acf48a70 100644 --- a/src/dwarf/items/func.rs +++ b/src/dwarf/items/func.rs @@ -1,7 +1,7 @@ use ansi_term::Colour; use regex::Regex; use rustc_hash::FxHashMap as HashMap; -use snafu::{location, Location}; +use snafu::location; use uuid::Uuid; use crate::{ @@ -43,7 +43,7 @@ pub fn inter_func( attributes: &AttributeMap, params: &[(Spanned, Spanned)], return_type: &Spanned, - generics: Option<&HashMap>, + generics: Option<&Vec<(String, Type)>>, stmts: Option<&Spanned>, impl_block: Option<&RefType>, impl_ty: Option<&RefType>, @@ -90,6 +90,10 @@ pub fn inter_func( } else { return Err(vec![DwarfError::Generic { description: "No object specified".to_owned(), + location: location!(), + span: span.clone(), + file: context.file_name.to_owned(), + program: context.source_string.to_owned(), }]); } } else { @@ -98,6 +102,10 @@ pub fn inter_func( } else { return Err(vec![DwarfError::Generic { description: "No function specified".to_owned(), + location: location!(), + span: span.clone(), + file: context.file_name.to_owned(), + program: context.source_string.to_owned(), }]); } } else { @@ -106,6 +114,10 @@ pub fn inter_func( } else { return Err(vec![DwarfError::Generic { description: "No store specified".to_owned(), + location: location!(), + span: span.clone(), + file: context.file_name.to_owned(), + program: context.source_string.to_owned(), }]); } } else { @@ -118,6 +130,8 @@ pub fn inter_func( let ret_span = &return_type.1; let ret_ty = if let Some(generics) = generics { context.generics = generics.iter().map(|(_, v)| (v.clone(), 0..0)).collect(); + let generics: HashMap<&str, &Type> = + generics.iter().map(|(k, v)| (k.as_str(), v)).collect(); let type_str = return_type.0.to_string(); @@ -125,12 +139,7 @@ pub fn inter_func( Some(re) => re, None => { let re = Regex::new(EXTRACT_GENERICS_RE).unwrap(); - match EXTRACT_GENERICS.set(re) { - Ok(_) => {} - Err(e) => { - panic!("Failed to set RE: {}", e); - } - } + let _ = EXTRACT_GENERICS.set(re); EXTRACT_GENERICS.get().unwrap() } }; @@ -163,7 +172,7 @@ pub fn inter_func( let ty = make_value_type(&ty, ret_span, impl_ty, context, import_stack, lu_dog)?; ty - } else if generics.get(&type_str).is_some() { + } else if generics.get(type_str.as_str()).is_some() { let g = FuncGeneric::new(type_str, None, None, lu_dog); let ty = ValueType::new_func_generic(true, &g, lu_dog); LuDogSpan::new( @@ -213,7 +222,7 @@ pub fn inter_func( for (var, ty) in vars.iter().zip(tys.iter()) { let local = LocalVariable::new(Uuid::new_v4(), lu_dog); let var = Variable::new_local_variable(var.to_owned(), &local, lu_dog); - let _value = XValue::new_variable(&block, &ty.0, &var, lu_dog); + let value = XValue::new_variable(&block, &ty.0, &var, lu_dog); // 🚧 We should really be passing a span in the Block so that // we can link this XValue to it. } @@ -252,6 +261,10 @@ pub fn inter_func( } else { return Err(vec![DwarfError::Generic { description: "No body specified".to_owned(), + location: location!(), + span: span.clone(), + file: context.file_name.to_owned(), + program: context.source_string.to_owned(), }]); }; @@ -281,7 +294,10 @@ pub fn inter_func( // let type_str = param_ty.to_string(); let param_ty = if let Some(generics) = generics { - if generics.get(&type_str).is_some() { + let generics: HashMap<&str, &Type> = + generics.iter().map(|(k, v)| (k.as_str(), v)).collect(); + + if generics.get(type_str.as_str()).is_some() { let g = FuncGeneric::new(type_str, None, None, lu_dog); ValueType::new_func_generic(true, &g, lu_dog) } else { @@ -385,7 +401,7 @@ pub fn inter_func( pub fn parse_func_signature( name: &str, params: &[(Spanned, Spanned)], - generics: Option<&HashMap>, + generics: Option<&Vec<(String, Type)>>, return_type: &Spanned, impl_ty: Option<&RefType>, context: &mut Context, @@ -397,6 +413,7 @@ pub fn parse_func_signature( let type_str = return_type.0.to_string(); let span = &return_type.1; let ret_ty = if let Some(generics) = generics { + let generics: HashMap<&String, &Type> = generics.iter().map(|(k, v)| (k, v)).collect(); if generics.get(&type_str).is_some() { let g = FuncGeneric::new(type_str, None, None, lu_dog); let ty = ValueType::new_func_generic(true, &g, lu_dog); @@ -424,6 +441,7 @@ pub fn parse_func_signature( let type_str = param_ty.to_string(); let span = ty_span; let param_ty = if let Some(generics) = generics { + let generics: HashMap<&String, &Type> = generics.iter().map(|(k, v)| (k, v)).collect(); if generics.get(&type_str).is_some() { let g = FuncGeneric::new(type_str, None, None, lu_dog); ValueType::new_func_generic(true, &g, lu_dog) diff --git a/src/dwarf/items/strukt.rs b/src/dwarf/items/strukt.rs index 90858aa3..ba1df05f 100644 --- a/src/dwarf/items/strukt.rs +++ b/src/dwarf/items/strukt.rs @@ -16,7 +16,7 @@ use crate::{ store::ObjectStore as LuDogStore, Field, Item as WoogItem, Span as LuDogSpan, StructGeneric, ValueType, WoogStruct, XPlugin, ZObjectStore, }, - s_read, s_write, Desanitize, Dirty, RefType, SarzakStorePtr, + s_read, s_write, Desanitize, Dirty, DwarfInteger, RefType, SarzakStorePtr, }; macro_rules! link_struct_generic { @@ -37,7 +37,7 @@ pub fn inter_struct( span: &Span, attributes: &AttributeMap, fields: &[(Spanned, Spanned, AttributeMap)], - generics: Option<&HashMap>, + generics: Option<&Vec<(String, Type)>>, context: &mut Context, lu_dog: &mut LuDogStore, ) -> Result<()> { @@ -55,7 +55,6 @@ pub fn inter_struct( location: location!(), }]); } - context.types.insert(name.to_owned()); let name = context.path.clone() + name; @@ -125,6 +124,10 @@ pub fn inter_struct( "Object `{}` not found in store", proxy_obj ), + location: location!(), + span: span.clone(), + file: context.file_name.to_owned(), + program: context.source_string.to_owned(), }]) } } else { @@ -133,6 +136,10 @@ pub fn inter_struct( "Model `{}` not found in store", store_name ), + location: location!(), + span: span.clone(), + file: context.file_name.to_owned(), + program: context.source_string.to_owned(), }]) } } else { @@ -141,6 +148,10 @@ pub fn inter_struct( } else { Err(vec![DwarfError::Generic { description: "No object specified".to_owned(), + location: location!(), + span: span.clone(), + file: context.file_name.to_owned(), + program: context.source_string.to_owned(), }]) } } else { @@ -155,6 +166,10 @@ pub fn inter_struct( } else { Err(vec![DwarfError::Generic { description: "No store specified".to_owned(), + location: location!(), + span: span.clone(), + file: context.file_name.to_owned(), + program: context.source_string.to_owned(), }]) } } else { @@ -182,12 +197,20 @@ pub fn inter_struct( .map_err(|e| { vec![DwarfError::Generic { description: e.to_string(), + location: location!(), + span: span.clone(), + file: context.file_name.to_owned(), + program: context.source_string.to_owned(), }] })? .build_v2() .map_err(|e| { vec![DwarfError::Generic { description: e.to_string(), + location: location!(), + span: span.clone(), + file: context.file_name.to_owned(), + program: context.source_string.to_owned(), }] })?; @@ -204,6 +227,42 @@ pub fn inter_struct( WoogStruct::new(name.to_owned(), context.path.clone(), None, None, lu_dog); context.dirty.push(Dirty::Struct(woog_struct.clone())); let _ = WoogItem::new_woog_struct(&context.source, &woog_struct, lu_dog); + let woog_struct_value_type = + ValueType::new_woog_struct(true, &woog_struct, lu_dog); + let _ = LuDogSpan::new( + span.end as DwarfInteger, + span.start as DwarfInteger, + &context.source, + Some(&woog_struct_value_type), + None, + lu_dog, + ); + + let mut first = true; + let mut first_generic = None; + let mut last_generic_uuid: Option = None; + if let Some(generics) = generics { + for generic in generics.iter() { + let name = &generic.0; + let generic = + StructGeneric::new(name.to_owned(), None, &woog_struct, lu_dog); + if first { + first = false; + first_generic = Some(s_read!(generic).id); + } + last_generic_uuid = + link_struct_generic!(last_generic_uuid, generic, lu_dog); + } + + s_write!(woog_struct).first_generic = first_generic; + } + + context.struct_fields.push(StructFields { + woog_struct, + fields: fields.to_owned(), + generics: generics.cloned(), + location: location!(), + }); Ok(()) } else { @@ -212,25 +271,36 @@ pub fn inter_struct( } else { Err(vec![DwarfError::Generic { description: "No model specified".to_owned(), + location: location!(), + span: span.clone(), + file: context.file_name.to_owned(), + program: context.source_string.to_owned(), }]) } } else { unreachable!(); } } else { - debug!("created struct {name}"); - let woog_struct = WoogStruct::new(name.to_owned(), context.path.clone(), None, None, lu_dog); context.dirty.push(Dirty::Struct(woog_struct.clone())); - let _ = ValueType::new_woog_struct(true, &woog_struct, lu_dog); + let woog_struct_value_type = ValueType::new_woog_struct(true, &woog_struct, lu_dog); + let _ = LuDogSpan::new( + span.end as DwarfInteger, + span.start as DwarfInteger, + &context.source, + Some(&woog_struct_value_type), + None, + lu_dog, + ); let mut first = true; let mut first_generic = None; let mut last_generic_uuid: Option = None; if let Some(generics) = generics { - for generic in generics.keys() { - let generic = StructGeneric::new(generic.to_owned(), None, &woog_struct, lu_dog); + for generic in generics.iter() { + let name = &generic.0; + let generic = StructGeneric::new(name.to_owned(), None, &woog_struct, lu_dog); if first { first = false; first_generic = Some(s_read!(generic).id); @@ -248,6 +318,8 @@ pub fn inter_struct( location: location!(), }); + debug!("created struct {name}"); + Ok(()) } } @@ -255,7 +327,7 @@ pub fn inter_struct( pub fn inter_struct_fields( woog_struct: RefType, fields: &[(Spanned, Spanned, AttributeMap)], - generics: Option<&HashMap>, + generics: Option<&Vec<(String, Type)>>, location: Location, context: &mut Context, import_stack: &mut Vec, @@ -275,8 +347,10 @@ pub fn inter_struct_fields( if let Some((_, ref value)) = plugin_vec.first() { let plugin_path: String = value.try_into().map_err(|e| vec![e])?; debug!("proxy.plugin: {plugin_path}"); + if let Type::UserType(tok, generics) = type_ { let plugin_ty = &generics.first().unwrap().0; + if let Type::Generic((plugin_ty, _)) = plugin_ty { let ty_name = &tok.0; if ty_name == "Plugin" { @@ -298,6 +372,10 @@ pub fn inter_struct_fields( description: format!( "Expected `Plugin`, found `{ty_name}`.", ), + location: location!(), + span: span.clone(), + file: context.file_name.to_owned(), + program: context.source_string.to_owned(), }]) } } else { @@ -305,11 +383,19 @@ pub fn inter_struct_fields( description: format!( "Expected `Plugin` to have a generic argument.", ), + location: location!(), + span: span.clone(), + file: context.file_name.to_owned(), + program: context.source_string.to_owned(), }]) } } else { Err(vec![DwarfError::Generic { description: format!("Expected `Plugin`, found `{type_}`.",), + location: location!(), + span: span.clone(), + file: context.file_name.to_owned(), + program: context.source_string.to_owned(), }]) } } else { @@ -318,6 +404,10 @@ pub fn inter_struct_fields( } else { Err(vec![DwarfError::Generic { description: "Expected `plugin` attribute".to_owned(), + location: location!(), + span: span.clone(), + file: context.file_name.to_owned(), + program: context.source_string.to_owned(), }]) } } else { @@ -327,6 +417,7 @@ pub fn inter_struct_fields( let type_str = type_.to_string(); let ty = if let Some(generics) = generics { + let generics: HashMap<&String, &Type> = generics.iter().map(|(k, v)| (k, v)).collect(); if let Some(_definition_type) = generics.get(&type_str) { // 🚧 kts -- this thing doesn't have it's next sorted, and that // can't be right. diff --git a/src/lib.rs b/src/lib.rs index 715b4a18..f5ada4ce 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -18,7 +18,6 @@ pub mod bubba; pub mod chacha; pub mod dwarf; pub mod plug_in; -pub mod stdlib; #[cfg(all( feature = "tui", @@ -26,13 +25,9 @@ pub mod stdlib; not(any(feature = "single", feature = "single-vec", feature = "multi-nd-vec")) ))] pub mod tui; -// pub(crate) mod woog_structs; -// pub mod lu_dog_proxy; pub use ::sarzak::{lu_dog, sarzak}; use bubba::error::Error as BubbaError; -pub use chacha::value::Value; -pub(crate) use chacha::{error::ChaChaError, interpreter}; // These should eventually come from the domain. pub type DwarfInteger = i64; @@ -80,7 +75,6 @@ mod keywords { pub(crate) const PARSE: &str = "parse"; pub(crate) const PLUGIN: &str = "Plugin"; pub(crate) const PUSH: &str = "push"; - pub(crate) const RESULT: &str = "Result"; pub(crate) const SLEEP: &str = "sleep"; pub(crate) const SOME: &str = "Some"; pub(crate) const REPLACE: &str = "replace"; @@ -98,7 +92,7 @@ mod keywords { pub(crate) const TIMER: &str = "timer"; pub(crate) const TO_DIGIT: &str = "to_digit"; pub(crate) const TRIM: &str = "trim"; - pub(crate) const TYPEOF: &str = "typeof"; + pub(crate) const TYPEOF: &str = "type_of"; // 🚧 We have a token already... pub(crate) const FQ_UUID_TYPE: &str = "::Uuid"; pub(crate) const UUID_TYPE: &str = "Uuid"; @@ -298,7 +292,51 @@ cfg_if::cfg_if! { $arg.into_inner().unwrap() }; } + } else if #[cfg(feature = "lu-dog-rc")] { + type SarzakStorePtr = uuid::Uuid; + type RcType = std::rc::Rc; + impl NewRcType for RcType { + fn new_rc_type(value: T) -> RcType { + std::rc::Rc::new(value) + } + } + + pub type RefType = std::rc::Rc>; + + impl NewRef for RefType { + fn new_ref(value: T) -> RefType { + std::rc::Rc::new(std::cell::RefCell::new(value)) + } + } + + // Macros to abstract the underlying read/write operations. + #[macro_export] + macro_rules! ref_read { + ($arg:expr) => { + $arg.borrow() + }; + } + + #[macro_export] + macro_rules! ref_try_read { + ($arg:expr) => { + $arg.try_read() + }; + } + #[macro_export] + macro_rules! ref_write { + ($arg:expr) => { + $arg.borrow_mut() + }; + } + + #[macro_export] + macro_rules! ref_to_inner { + ($arg:expr) => { + $arg.into_inner().unwrap() + }; + } } else if #[cfg(feature = "multi-vec")] { type SarzakStorePtr = usize; type RcType = std::sync::Arc; @@ -344,6 +382,51 @@ cfg_if::cfg_if! { }; } + } else if #[cfg(feature = "multi-lu-dog")] { + type SarzakStorePtr = uuid::Uuid; + type RcType = std::sync::Arc; + impl NewRcType for RcType { + fn new_rc_type(value: T) -> RcType { + std::sync::Arc::new(value) + } + } + + pub type RefType = std::sync::Arc>; + impl NewRef for RefType { + fn new_ref(value: T) -> RefType { + std::sync::Arc::new(std::sync::RwLock::new(value)) + } + } + + // Macros to abstract the underlying read/write operations. + #[macro_export] + macro_rules! ref_read { + ($arg:expr) => { + $arg.read().unwrap() + }; + } + + #[macro_export] + macro_rules! ref_try_read { + ($arg:expr) => { + $arg.try_read() + }; + } + + #[macro_export] + macro_rules! ref_write { + ($arg:expr) => { + $arg.write().unwrap() + }; + } + + #[macro_export] + macro_rules! ref_to_inner { + ($arg:expr) => { + $arg.into_inner().unwrap() + }; + } + } else if #[cfg(feature = "multi-nd-vec")] { type SarzakStorePtr = usize; type RcType = std::sync::Arc; @@ -420,67 +503,6 @@ macro_rules! new_ref { }; } -macro_rules! function { - () => {{ - fn f() {} - fn type_name_of(_: T) -> &'static str { - std::any::type_name::() - } - let name = type_name_of(f); - name.strip_suffix("::f").unwrap() - }}; -} -pub(crate) use function; - -macro_rules! debug { - ($target:literal, $($arg:tt)*) => { - log::debug!( - target: $target, - "{}: {}\n --> {}:{}:{}", - Colour::Cyan.dimmed().italic().paint(function!()), - format_args!($($arg)*), - file!(), - line!(), - column!() - ); - }; -} -pub(crate) use debug; - -#[allow(unused_macros)] -macro_rules! warning { - ($target:literal, $($arg:tt)*) => { - log::warn!( - target: $target, - "{}: {}\n --> {}:{}:{}", - Colour::Cyan.dimmed().italic().paint(function!()), - format_args!($($arg)*), - file!(), - line!(), - column!() - ); - }; -} -#[allow(unused_imports)] -pub(crate) use warning; - -#[allow(unused_macros)] -macro_rules! error { - ($target:literal, $($arg:tt)*) => { - log::error!( - target: $target, - "{}: {}\n --> {}:{}:{}", - Colour::Red.dimmed().italic().paint(function!()), - format_args!($($arg)*), - file!(), - line!(), - column!() - ); - }; -} -#[allow(unused_imports)] -pub(crate) use error; - // // Command line parameters #[derive(Args, Clone, Debug, Deserialize, Serialize)] @@ -509,7 +531,7 @@ pub(crate) type ModelStore = /// This type is used to signify that a struct, enum, or ObjectStore have been /// added in the extruder. The information is picked up by the interpreter and /// used to update the corresponding structures in the interpreter. -#[derive(Clone, Debug)] +#[derive(Clone, Debug, Deserialize, Serialize)] pub enum Dirty { Enum(RefType), Func(RefType), @@ -564,9 +586,6 @@ impl Default for Context { } } -pub type ValueResult = Result, ChaChaError>; -pub type VmValueResult = Result, BubbaError>; - pub(crate) trait Desanitize { fn desanitize(&self) -> String; } diff --git a/src/stdlib.rs b/src/stdlib.rs deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/vm_harness.rs b/tests/harness.rs similarity index 97% rename from tests/vm_harness.rs rename to tests/harness.rs index ad9dbd07..b7df0ab0 100644 --- a/tests/vm_harness.rs +++ b/tests/harness.rs @@ -13,7 +13,6 @@ use dwarf::{ VM, }, dwarf::{new_lu_dog, parse_dwarf}, - s_read, sarzak::{ObjectStore as SarzakStore, MODEL as SARZAK_MODEL}, }; @@ -107,6 +106,7 @@ fn run_program(test: &str, program: &str, cwd: &PathBuf) -> Result<(BubbaValue, Some((program.to_owned(), &ast)), &dwarf_home, cwd, + true, &sarzak, ) { Ok(lu_dog) => lu_dog, @@ -144,7 +144,7 @@ fn run_program(test: &str, program: &str, cwd: &PathBuf) -> Result<(BubbaValue, } }; - let binary = match compile(&ctx) { + let binary = match compile(&ctx, true) { Ok(program) => program, Err(e) => { let error = format!( @@ -174,7 +174,7 @@ fn run_program(test: &str, program: &str, cwd: &PathBuf) -> Result<(BubbaValue, let result = match vm.invoke("main", &[]) { Ok(value) => { - let value = s_read!(value).clone(); + let value = value.read().unwrap().clone(); match value { BubbaValue::Error(msg) => { @@ -221,4 +221,4 @@ fn run_program(test: &str, program: &str, cwd: &PathBuf) -> Result<(BubbaValue, } // This loads the generated tests. -include!(concat!(env!("OUT_DIR"), "/vm_tests.rs")); +include!(concat!(env!("OUT_DIR"), "/tests.rs")); diff --git a/tests/harness/aoc_2023/1.ore b/tests/harness/aoc_2023/1.ore deleted file mode 100644 index 1df7e53d..00000000 --- a/tests/harness/aoc_2023/1.ore +++ /dev/null @@ -1,1029 +0,0 @@ -fn main() { - let input = "fivethreeonezblqnsfk1 -two74119onebtqgnine -jrjh5vsrxbhsfour3 -tn5eightfncnzcdtthree8 -kpmrk5flx -fkxxqxdfsixgthreepvzjxrkcfk6twofour -dqbx6six5twoone -glmsckj2bvmts1spctnjrtqhmbxzq -7sixthreerzmpbffcx -zhss9gfxfgmrmzthreefivevpkljfourtwoeight -6tfzvrbkfour -sevenfive66five851 -drsgdrrgscqmsggrgq1fsqjhtkkrltt -3ftptvzhvrm5 -twoeightninemfsztp2gbqkpgqvzt6threekcdcp -four156 -959157fourfive -sixthreetwo87one7fourdbczdbjcc -lshzfive7 -38ninethreethreesevensixeight -z39hpppnncfivenbkc -9ninefivevnbrrfrfjfivetwo -fzgnjsz2nine9 -fnhksixfour1six81 -vkkxbgcqzqflgsvgkkkpfp9five58stsix -eight26sixsghd -7zvrjkcrrgbsix -tgdf38fpcssixeightcjtfour -tcrqkxkptrtt5fdblcldfoursix -9qpmknkbtxsfourd -8948twosix9three8 -vpbjslqkpbxkpfiveeight1mzjmhfzl -187jccxsbqtcjtwo1 -sixfiveonefour637three -stjbeightsixdfnsppjrgfdggqzjx6cplvznllsgtwo -3lrznqgc85seven3 -1eightfourfourmgxhdp51slrszbxmhthree -two3hj -zgnoneightseveneightseven5d2fivefourjp -ldjzhninetwokxlkbbzcngssdqphlrc51 -qvhtfhmltt61lss -lfmnhxmhschzrtntwotwo7twovkl8two -vrpplrtqxvssgnvdf8 -dzrnnphfl451 -two7pgbsixlkmseven -rplqnj5oneseven -2fourfourchd7 -threesixdpslzdft3hq -three4bqhlckrlgeight2lbdvcggfqd -ninefive6zqhgfhfdnk -2one9five2 -1ftsjdfmnkvlx9seven -four1zsztlvnhcjtvmrlthree4kpztfzqjtdplfxpqlskh -6zfrhkckfvxsixtjgtnmcx -eightfourcppgkrmtn3chqxgscpd1 -6threegxdrv8 -mstpbscvjrc5twozjtdxhckrfsnzsdm -twolhntgone5 -vtrktlkrqslcdnlslthree5 -mfkrfournine4knmmmghnsixxrmzhcsix -2hfkbthree -nine96 -threeqglpgvxgsdfgbctdm1 -1threechctd2tnm -nfgrzrz494twogbrbcpvnine -two5fdnksffour -19threeninefive7xzmtzmkpjmnine -six37sixninejqt -kk28rqmlshb4 -qmhlxonefbgcrclbf4sqtcpmtlzdzhg4b -leightwoplxmgrcjcxrfqncvjfdvpgckmqfqsfqjthreefour2djnsvctlt -nseven7dphcjx36twosevenfour -rdjkdfivetwo5sixfourfjkzbpjx -fiveeightcdttxrxjxchf6oneddnpdgxlrpqxrgqtcbgdqhzzsxdt -5blgzg -ninetdfive7 -eight9qldkxsevenfour -onegprdninefourgndvp7 -four13znsmhvtmfour -threeqnvl9zzzfoneeight -sevenzkbxghrgftsxfndhlrcxlcj64 -kjlmclkqkjl76eightxdlonef4 -7oneninefive4fkonerjpzpq -248seventwo6six8vbfb -8khtwojr -hssqpxptsb2 -3qcf -93xrm -twoscjr4jtkzxvlfnkltzxf63 -cltkcrh9jnkvjsfmtlszkvstzp -3sjtone9cznjhnkzmc8 -qcjmxqfhlsevennine6 -456rrkxxlfrhk4 -hthreefrq7lnng -427seven -slq5vtrsninesix5 -5two94bone4 -six73one -fournine757fdgkbppx3 -93onefive967vmtmbnjm -bhcktnzlsghvdl9eight -fournine9threenineeighttwo -21cngsixsix -5nhgtsxdninedvqktrqn -8tbnznrbg21 -6rjsxftdjgf29 -zdfourqtrjqzglq4six -ninemxhcjfbprlts1six -jnmzkfivefive2six2ninegfntlslsgp -fouronetwo7seventwoeight -sevenfoursixfive2sevenffr2 -8bhpx4seventwo -ljclbvmlpeight754two14 -eight11oneonefivesixsix1 -26ddmfrzzd6qdnvpqjpvdseven -vjgjpjtceight36fivesixpdrrlqpmk -three349mzhnlg -tmrxzcrdc9eightninephdq -two11rtlddgh -9fourtgsixgppd4two -34onenineeighteight -4eighthcx92mhrpjfndt92djgtmmnbv -nine771two9seven2drflmd -hxvsgpcxgkh4twollmbbbprxd349pb -twobpbp2eightmjlhrgc -fhnnf37sixone5mdvhhssvg -cknbvdmtcninemmhtrhmx2 -one93 -onervc8oneeightsixfour3 -fournine2 -knvjjvskmsixsixlvzt5sevensixmmthree -2sfour -29zqnxnqphflltqh -23eightptpspjtbnninesixfivedhfnmqjd -29jgghdf8 -meightwodccsxmc4nvq3sevenqdshf -fourbbnqscg3 -onetwo2fivef54 -nctbrzqsdljjsix5 -5mblhxfqfns9nine -6gbone8 -6gd9 -eight5nrzhl4sixseventrvtwokg -r21jjnine -mhfsgvcck5 -six92cdngxmfive -pdmmpzgxc1fourzbmbgtthree -rdhppfnk8 -fiveone4cf96qprdgcrlhvsixhznbbbh -two4eightsjzrlkhgbrxzs -nzhqbzfxchvtbs9sixnfmhpc -785eight -hxgdntgnmr8 -xsrxnx4tqzqgv62 -six9ssevenkdqrcnjgvn -dfvcznvxqd6twozs6xsfvtmnvln7 -rhlseven2957vtmpgczngccrmggvtf -gfbsfpn9s -jxtwonenine39eightpzmbdff3 -66pmgzhgffp -9cgjmfbgsrg89 -858tknqxhrgfournine97qrlvf -7fiveonedzbmblrtqfoneightkc -7gsfvvvfive72gjfbgk5 -1rsscgplc6two4fvxfgnkghfthreejddxmtsxjzmnhgcc -537eightthreeonenineeight2 -tzhgg26one -qxqhmhdhgqktsvkbkfiveonenzcjfgvnlms4 -ninenctkgtseightxkjlmkjpbd837 -5xjdl16cjthtvj -5threesevenvnthreeqkcd2xkfhprfgdzseven -pkqlqdvmsmsevenrmhhjtdnneight5 -cfqoneeight1psqjtgng34one -dnvdnstxrsgktsfk9 -eightjbdcdxpnzm736xh9 -z5 -x5xffv -3ggnbr -82dlnzszhpvjftdt -gkthhvsix7rfbrmnzvmlbsk -nineeighttwotfjndlrdpmvfbhs2 -9fpxsgdj5785nsxn5seven -qhs1ninethree -86pcqdkg8onefive5seven -mlteightwogeightsmmfvtwo6 -sixonefourpnnrbl9 -xstrnmzzjrsmbdone6xt -four777hkzrdclsrdfrqkkkh6 -xzfnndt546lvngqlghtggcrqfour -svqlsxtlfvqqzjq2 -167cffstwo -7ninefive5three92shmpzx -eight1threefive8fivetwoeight1 -four7eightone4onelcrb7eight -vzfrfxzzfzmldsixfour2hfpln -6one8sixninetwoner -nsqhnflqjnqvdgvfive21 -9sixeightqjhpdv -jstwonethreeninepfkkzvbzcknkmbcbsf6 -3five5 -499jvmmrfzkmbppzcm -vdpvj3nineeight7 -three2fdeight -rtwo39seventhreett -two68sixeighttwo9 -9kmmftsfgjm284gmmlsfvjk -five7gtbpfourthree9xbfttssrsix8 -oneeightmbbklndlztwo9nine18 -nthreesklqbkrxrmxkfpfprbjl3kqrgqtvgxdbcjnn -six9sevencnn5 -sevenone2 -three794sevenlqcbz -fourdcfour466twonesz -2534 -qv5cm4rpcjkd -fivehmvssv6 -twopltxmsevenfkfour956xvgxbbckqn -94txltmgz72fkcgcdkbrkbkfpnfck -seven9seveneight46 -457k -fhvdpgxpone18c9lnfnp4two -sixfive458x7 -eightdjnlvvsevenrnsxrbxqptrvhgnggv77 -qrvrnzxjkj5 -seven4two -twofivelcrfkzck8three9jcdxvnrsevenvkg -77sixrjqcmrhktb -ht9krsfghfrk6 -zfqsix77 -gjxzhgxzmdrczfpqlbp1562njqb7 -79three4b79 -twoqgxjkvmfivevknkxjp5nv3 -hjbzznfourfour8fivemkqthree2 -7ninecjtnr2rnpjsxnine -73mzgdbvrjjpzzxmgbjcdqjx29three -kskfgnxbjg97twofourhxpfqxqfivethree -fivermxblcb2one4 -ninefvkfplbsixoneoneeight2vnns -8q3foursevenlvmtrrqtsix -2three54 -jf6fivesixmbnhjdt -2mpkmrfqctzrfour -six4nineh -2fqseven1nthreethree -8nine4rhdfive -zczjmlslrmjbgrmbpqb3 -sixpstrxqtdtwofour7ninefive5 -kzkftdrqzthvx56oneptlvfzvsfiveseven4 -p71dmsnoneldx -nine9twofour5sixzbshnn -6qsbkgsxrs66one7rnkqzkqfvkhtm -jnzzxbtt1kctmsdplhg4 -pvbnkszjpmeightsixmxjxdprgcsix8zntghmvrl -brninesevennine3 -threedgbqjxhneightchxnvnptwozzfrqqtmmvhcksmjk49 -sixslxtwo2z7grtgdnffc -936797pbgtlpkttwokdqlfpbcmv -six99fsrnbpdthreefivejpdcvgt -one8sixsix4jqsvsqnjnxqvh -dsjkbmq1mghlstwo -42two -qbqgt2ninemghghninebdppsjcb -bmfmbzg36nine7mqljk6onenine -763 -five8ninethreesevenllmjskvbtlngstbmhhqhf -2klljtwothree3 -one2jgrqmprg197 -1fcjfbxonefive -171 -five4zxbqc2eightseven6eight6 -sixpkqvvlqkdkhqdseven4rjq27rrjpxl -79lcsrsix7twolnjjjqffhshfjshkrfeight -mczbvstsml22vjseven3gvf1 -two6sixonetwovntpsbfgdk7snzxrxdmhtgj -2ksgklnnine6kdfg -6seventhreevskblmp -9mptsnrpdqldltwo -52cgvgnsk3one9 -sixfive4kstqckhgdd -vxhtwone7eightninebvlpkcmfourone5four -4hnhlr83three3threeeight -1eightfive -36fbtgvdfnine9 -eight6ljtbkp -eightsixsix96bvjnxzjjchldtc6 -jbckzxc5five -vghptkb7onejnrnfftgthree -mztxz39six -7rmchptmrglsix21two -91tmvvktwo -seven9fqmfkgthree9sevenfive6 -jrcj441 -1nine9 -674foursncnphhnd92 -fsfrcgsonefivelpkz5threesnrzzvxcdn4fl -8zrlf5pvmzshrjkdgfkpzmgp -cflcrf8four9 -6fourkjhtlfrlpmjc95 -968fourzqhkzxtxeight8 -onefivethree6qxrpxkt -four46vvdvrkgv -five9six -1nine8 -bvqlzpjrmckxpgdfz7 -rrvv27 -9three8gmsbrrxzh4dxvvstrkzf8nine -frnqrxzcfivesix747 -5threek7eighteight9 -four4rrsqsm -twoeightsix5zmdmcxcfdnrnjjsixmfqpvndkctzdv -8zvbnthreenvplvljj -srfkl8twofive -82njdktmcckrjf39 -qqgmhfourthreeeightjjxfour68three -fourthreenine5 -9nsfkfcdqcbrbdh4ninetwofiveseven4 -7fivetwo -2lssdgdvhl -fouroneqmffoursix9eightwokv -4cjmsixqhddpcsngvxqskkbmseven -266bfxtxpkxcxthree2ktmtddmfg -five6ninebgzmgqbsttf3vhn -pqmgcchhqrpsljbvx1fourmhzszhdmfznine -jlxlcqfc1bgqjsvxpbn -eightfxpnxckzqxseven6llfvqqbhdd1ninesix -threeflgkjrnrmr4xpxfhhl -6pvszcmrmtbfhlnmgmqxnqvntg96 -cgnp8ffnxlpmblonethreeqcqnx6 -zjvpxg3ccmkxtzhlx -7vgpflkfdkvktfhxgf8hcgxzz -4cmhfccrttfive -12twofour -jrgoneightnddmmchbmmklk847three -threefourgbsjmmrznlmgttq3zncprp8 -ntqpbkvr3xkgqgxjh82 -nine9five -n1eight979 -8fzvjmmnhd2five -6vxmbqsvzt -22fftjtpv84sevenn -twoone7slfhztpc7bfjptdzj -91fiveddprnkzprseven -fivetwo8dssgjmpmvsixps5 -pv9eightfourhgklds4pfnxmtpmzrmx -vfjfd4sevennljkxxrz -3threesfourfourbftwoksclvtxmvmq -seven7fsj165 -77sixkqsdpzxv9 -1fourninemqxqc412 -pmdmtthree1sljpn99three -zvqvhhbrg76bfbldtwoeight -sixbh5two5two8 -fivefournjdlbggpsbn1threevzqktlbm8 -glzqmznfiveninesixkscdflhqj9rjnjt -hjgbncf9 -zdnf7 -six6fourjghzroneightf -6zxvqqxrc -d6 -1txhlrsnbk97fivelvqjxeightfour -hthdvd35six7 -ninedrc3one -eight28nine1vjm3nine -zrnninesevenvftnjl1pdfgkdhmjjgmpgxkjttwo -threelhnhfxkeightsix7 -gjqng7two46pzxcsbgnv -sixcdj9ghqlbsnpbninesevenxdzkqxdfdrlfpgnpg -nineninethree3twovhjhjgfive8 -ldgzxftnninenine82 -zxvtgsfiveone1sevennine4rfh -1318khksmlfv9sevenfvhrt2 -vztwoneseven1rb -457threeninedmffxznlpb8 -five7eightcvgcmqkctclnjsnfourvqptsnpph4 -pftwonexgrzdvq65 -64hfptjtqztlv -fmxfjg686fivettfgd -hpbqxfour6two86nmrhgkeight -3skzmdggpnxsix5four8 -sixfour7smh6gbbphmv8xrrrsns -5bjvmxml3threephlfnbpfxq -9zlrdnxvzffghrqhsixfcsrtqvfone -61hmdmjfv36eightthree9 -78six3crj4nine7 -fourqhtvfbpx9hcvmzmdjrshkhrthree -threeninehbcgqmxknine8z -17csdthtzrsqnssxqfivesttdfzxrkhnine3 -9eightpcflcqfhveight3 -hbvkzz9seven -6seven6 -eight3two16tlnsmxpqbn -fjqhctnjhk4fourcgxfhffrk98grx1 -sjkpr34 -hvlh2five8fivendxh7three -onethreed12jvnk1 -fivetwo1rtscxhkqpvtxkmjccbcvl549 -5qvmvft -nine9cpqzbvhseven9mtjk9seven -znrpx47two67six5 -xnqk5fourp4tflgmbvhlxsixfive -3fivesevenrzeightbhfvhrh -qzmbljhone8fpmkrrrhvdbqvdthree1 -rfzfztn83jrtnn3five -29one5fiveggrhlvtvtz1 -onennczlkx3twozjdlblqcvhtwo1lrvtx -mhmrtmjlffjlmhfour45two -bvjnzxbmfninefour94four -glrcmgthreesix6eightxgzx3 -six7v4onevptsdghxqblrpblng -7nine6sevenoneone -pf8oneoneightjgl -5dftcf8fourfive8ljdkhjxd3 -nzqnbpssix54ssmsnthreex -8fourpbxtvcmsvrvkcms2zvvvmkp -mv9eightone -2lvthreekbfjj3glbrlpxsqlkdksixseven -twotsvcqfoursevendfsqk1threeone7 -fivefsphdxqlpds91kkfqone -eight5two9 -fourfour7tfxr -2czjhjsrrzc -ninetsrzqvldgn9fivefive -fivetwothreevcdvqnv2zhmtmrqvv2 -nine9tqkhxsthree2eight63 -bneightwo8kpkkgbxgnineqjkt4fiveninesevennine -rvhjzveighthqdgzhfcbnxztf25sixfour -8four4six -rjsgxsjqrq1pbzhfxqvphvnd67kvt -sixnine6 -xnvfgvcs7 -3sevenoneone3 -btmnrqcphpcxnhtwopvlthreeseven9 -991 -3ninepqhq9mtwo -eightfmfkfvmtwofoursix2 -two48 -bone5phdjdlseven -ptfxfdkninefive6sgrjhxksft6 -nine9eight -2pkbv -lhqeightwoseventhreegtpvhsixdgseven8vlkkl6 -j8nzlqctlbffonegzcvpjksmr1ninetwo5 -f93fmgqllzf5 -mtsdrqzqrkthreesnjxkdjlc5fj -95onenmqrzbkksevenfour5five -six8threetkzqrs -two9twooneone2rdkdtlttj8 -srjlgxreight8fiveoneightt -7fourxtcj -threelrqhtjtts9zsix1jvrkkzn8 -6xxqlzkgfspv -zltbp8 -four3seven6mhqtln342 -9eight7rrseven8zmcqd -mlgcbjhxjeightqxxxb4seven -3nfivedgpvxprzvpbftplgtfivefour -ninenhxjqzhhhl1three99 -fivetptfpone89ponefourjxmdrjkrleightwoh -3tspjckb -9four39gvlmp5 -twotwo89 -mboneightgjjrxxxkmmhprxptqtvseven754gjjr -pdgksxnkqj7fourdtjlnjs3four4 -3qkkbbfkvnninencbvnvztmnfpbsix8one -seven2jqljbktgzvr -fourdv5onesix8five8seven -5sthtkqk5 -tlpds3 -tvzflpzpgsl2hcpsgxxtgqeightfoureightoneone -8gjflqxf26rfour -578vsxmdtleightsix -four2two6 -5onetqhsfourtwosix -1xj5fvmftprrcqvmcj9 -qzbptdttbqseven6 -8l -ninejsfdnfl85fpjgcmkqvmfivetwoeight -kcmrgnljhpfv2jjrfcvdqsixkjhlfnq -cmlvvonelmkfbt3qfdgz5 -9hnsjjgdd4mvksevenfzplpczbbonetwo8 -zone3 -cthtrxb39393 -4nine54six4txtpcz -m1bgfeightqjhvlrlfj -3199 -one6nineeight5vktwo9kgfjhktlgb -2cpgtrfourtblzrhdlvdq7fourtlpvjkpn -qpfjcfmgnpnvrsix1shncrlmone5zjvcdrv -3mc9qgkplqcqjdtwogmsxvcdhxccxtwortdpsjpx -8znfpbqv53seveneight -vpptlbbmqnfivekq7 -one27ctq193onesix -66 -znvvmjktwoblr8 -tdqzhmsv4onefour -hqxdgtrhmxonetmpjmd3ltwo -rlppvdsrxpnxh6fivezdbbvgpbpqkxxvnnq2 -37ninegthrzpzkrnine -lbtcrcmkckfmheight5ztvqpbt4 -six7eight498two -1msqsmdfdpq6ninepxnjjfnmfivecfxhdrndbd4 -8eight9four2 -cpmeightwo5 -seveneight2three6two -sevenonetwo2rqhkvnjthjmrdkhrbjsstfour -fksvone9four -snqbjfjmcbqpmonestj7bxgj -mhbxccsseveneight9gdzdkeightpk -mgks1seventtbnqcdllnine65qkfdrzm -83xzcd2ncvxdbgdrdklnmps4fxcndtkjsg -fsqgljbpxninesixfive55six1 -34fqqseven2 -3eight6nffcnjrsixsevenqf -dplzrgtn8xjnqpnxts1ninesqfhrdxrmn -szd83hxlnshsevenone3threetwo -csevenqnpmqhtpeight8twonelp -dxzfhlrpzzfive63dz4sevenrlqcxhjddv -xbgf81bxlthreepkjh53 -8fourbbcnn -3gdthtqzjleight9sfmmzcone -ckrkgrxd88 -three4zlkvrrmsgc28nineseven9 -nine5hcp9 -821pbsfmp388 -two8eight2four8 -14nine -four6vxpvfhfggnninesevenseven7twoone -3onethreemsjjvc7jblmdxrz -6gvfeightnineplmmbtsqxcxs -5four36ninemtpqtzpktqfpfive -zmxrctmxnfchrmsdxj1rbxkblsevenfourlgdppzfblh -7sixhqlrfqzzbppzzsssixlhtv -1teighteightdj -7cldkzgbn -mjsdlsgtwo2two -jbnfqjdl8 -fourninesmff5fzsvpxvc -five3dzgrsrbsmc7pnlz -bbzch5twosixseven8one4 -2229 -six824881 -onevtsjztc3twoeight1 -72sixsgzpbpdjvtnxfivesixsix -1fournine -841five -qvrrpmdmgqseven1sthree -mkxbqcrxtsevendsrgvfkrgeightxrvfcgtwopsjnngn8 -8dvjhfhhzbthree5p36 -qqmhvjjnznxr95kkl9 -9sixsevenz87 -threejvpsvdxkgfg5three6bqmg5eight -f7four8eight5foursix6 -8sstmfkpsjmxmrdkm3fpxxnpqmdhvrbkvgxxzfourseven -8vtpvlbkgxngcrjrsone8 -jtwonexsgmlztnhtrljtfggkm5 -cbtxjqqdqc56fourjhgtrjsxnbxnineeightwov -76zts8 -fivehqftq3 -5fiveqpncbfrrnp5sixfive -sevenseven9 -8nine2fourdxxdghpmvseveneightwop -five4lzmvkqonefourtfhp -928 -fourklbbjnr6 -3eightdvpsbkf79klxnkkfour -67three -2two67hhsrfbdfournine3 -lxpl2 -sixsixjrkhthreeznvqgseven9kjlhc -34llhlctkks -rsgmz7nine3 -3tdxfrvpktwofourfivevxtlllqvggft -seven2ninegcfrhbjxhlcntxzvp -321dcmcqmmfvfzvgmjp1mone -two12qlpxjdjqfc54seven2 -eight5fjmsgjztwo -twotkdjqqbtt6twoone79sjkf -19one4 -xvjtmnq15 -sqvtzflq8onetwo3fghrstrd5three -4seven8rlrggvgtx9crnbseven8 -59cxtwo55596 -dkkdlsmmttwofour8 -9xzvnnnr7jjjsrrxlsvggqplrqfpgl6rgrqgrqhr -kkbjcptltjsdjrlhzzg4drkffivezkxl -krsevenrcdq43 -72fiverxszpfkgxtdjnspxmrt176 -one5rjglslglzlhnhqj9 -18bxgghx4 -4fivegtxkxvqlskpv726foursqeightwonq -eightoneninetpht39two -four5982xjmvzxbhkqfive -sevenptlmncl4 -4twonine3 -nfpvhninefthreetwonine88 -onervzkpxbrmnsbg3rkmjsfbltwo -gv2 -eight5dhsprsgr -8qlbfive1flxrb8xcsfkdkxskdmk -gzv65rmkncqcveightfgfvfcmttkgvbxjg -two2pbxckhdlxfivetdqthree -84lgmvhxpldeight -jtjkmlfbmseven65xrnfbkn -9five2plxh2 -6nineone5rgrkdzhsxj5 -vjdfhvklsp2one9 -sxfvgxgh4drmrhmbqjxhkr8jqnhqrnine -eightfivetp6mndcjqbdvzsix -seven7vt1 -five65twotwo8eightjm2 -mvvsix8threecl1clftjvjlgk -2threefivethree3rqhhdvxqmg8 -qkkpvjfmpjcsmldtnine4nine -zgrpvl3 -mdjnine1kjfkqqn -7mptczpscnq4vdfbveightfourjkhnhlkrkgch -pnineonetwo2 -hkvtvvhrsrsevenfourone7kglfnjzztc -594eightpp1vseven -9bbghfmvgcpchvbfivesevenfoursix2 -2three2796 -sevenmzskghzgnxhqcq48htpczbhgvtwo -61hnccftjftjbnntsjhbfvvdtmlpbnnh3four -ljg79gdvhxdkmsqmsgnz -4ninebjgqqz -bszxzt4gone6n2 -l4ctzkxbz -5qrhonetflqdnsztwonine9vnctxjnine -one5xrl2ldcrs -4eightnineone -zjlgvvpzpone9 -1eight5three -vmvpknmkds9onegjxsfppqtwo7prv -threembbkvhlv28ktfjpd29 -onefivehjvhjjbjj5jmqcmbxskninexkftfk -2eightjvpxjfzhcj -59glcksjlr6onefourtvszlbcztlbcjnkqn -sixxls6seventhreefdrhsfchfrfiveggdbmfqvxk -sixtwo62eightkcnrkmt -eightfivedpscseven93 -191dhfpcjbn -rjhgbzqftwo247vhtnxone4gjrj -8fourctzsbsnine6sixfive4 -four1dcczj -fourqnskksgg37sixeightpktnqvlm -7one26eightsix -six7sevenjbhfsshdtbvpbpzx -6jstxqcffive58twonelhf -2sixhcdkrprbskfpbb29lsxgpf -2qjlcphonefxx44six -ninecsssqzhone6nrmlkdhvthreefour -hrbnfive19 -sevenfrtrbdqfournineeight2 -mbkljfive5snsdsthmcdqrhpklxgx -43vvtqb5rfivesixkbxdkfgshjk -kgoneightqqxlrhtpx58threethree7vvqq -plqv7fivetwornc -six8bhgnfctwo -2ninejjtvxrffjfivesixtwo -mpntlbqvninepfkdgdrmrpxgs441 -brcspjtbttnine16xhjhvzgf8fourrbdljsz -three1onefive -five1q59 -2rxtthree3three -dd126gpdnjjgxmg9 -eightone4cnpqrrdvvsixtfdfnlpmz -llrfourtwofourvlg78 -ninehjhpnjbzdgxxcthree5 -94vp4ftkxfh1 -6tfrbtvdk5fivefive9zpgvfkfoureightwockn -bfnxmkjsevenfive8 -9gqrnnmjddmz -four72snjxrhn -3three4eight339 -four5fivervnxbscxjdtwolvnine -eight4xvsszglslfivetwosixsixfivekndrmh -ninesixeight6eight2seven1four -661seventwo -23dtscfgln7 -6sixlcdqqx196 -ftggvxqqlbrpkg629hxgsdnzxsrd7 -3pmsbddckfivefkhxlhp7cmxgnf2 -ghzqnkch7cjrs -four22 -mpmzbnfour852r4six -r8one8five -onesix8threevxgpq17four -qnqeightwofcdsxgscgclpptnp9four1sixnjlvxqxxsnine -22ghnftqtmxzgfllzqkjvglrncgtwo -9twolkqtdzlg2qglgtnls -one3fivevhp4tpvjxccrnl -4jghljvxq -6n -5sevensevenzsxtrvprbrpmnzjnft8dtczjfgrcjqdtt -692rchkx -32gpqjfnsevenrnqcd -3fivejrgfjthreetwo869 -sjtj4ninesix -9pqxqhfourthreeltjvpv3 -twozxpthreenine931threethree -9kdmxssdm6fivesix5 -3chmjhtwo67eightfour9 -sixjt76fiveninedjzpceight3 -6p36onern5 -963seven -pgzrdxlqcb6ninejmxreight45seven -sevenmbgqvnnine5eight -twotwo5 -hzbfour63nttfktqjzjhponeightcz -tnmbxcgrxbfivefive8cttmdeight -tklnv52two626htjghrccmzct -4nine7mninetwo -cfglfqttjrtnzrrb3jclcngt4 -ftwo6eightgctgjzbrxlftlhvzc -kjscrvjhbtv7twoneq -four51onezkhllzssix1five -sprftsonesevenn3rmfive -m35five2fn -dcvvxzbmseven16 -tlrone45 -nrtfqlsxxvvcqtnjxzzonefour6329 -bq64six -btwone79mkcmhlmfg -four35one -seveneightthreennbhgbsix6nine -8llbpdqqsbb -sevensvhzkjfxrnvxkp247five -qftsrhn3vsnbkpptqdsxdz -fjrp3threetwo7cbjsbrq -qzbbpk65 -nttgvr42fzkr3sjgsfspnmfive -zsjnbntmmlqs7cgbdxcmqone9 -threehpjbgphfqj2 -onezjcmlcjmkfive7 -fourthreefive86twosix -vlgfd31seven -flbqdkfqmj5htrzfpdjxeightsix -psh5eighteight8six -crzpzxt3eightvgfive466fbs -7cxxnglphqcxxnlbj635 -threetwo6brzqxrbfrbffzllth3 -jhcpvv8xccdmczvthree -fivehzsdct9ffmknlgtdmfzdfvmxvpj -68eight14zthree22 -4qfdnl -seventnfnjtdv5qsrmksixffcrs7nine -1two5one -ninefmjlzkninethree3 -hkkltwoone6hhkdkqdvznmnine7 -rns2jmbcvp2 -7tworgz5mxxtbjvg -twodxzfvhkzbtwo2qght -1bvl3 -scxhtbssnghvkkhjr6v8 -dxrztssg5jtdsix -4dhpvzsmxhbsixjrtqxmmcnkhv -2bxzpmzteightpshgffpn -onetwo14sevenlvvhls5sscsrpmzhsix -fourtwomxscgh6four -7mnzfive -xhzsgtppxgchc9threenine32fourthree -9nine4sevenqnhhglgfdccheight -mssoneight8three79vgpjxgjqseven7spgzdfbltl9 -6zxkgeight -7mjqteightthreeeightdrnkjzzlm531 -oneoneeighthhgsvj45dvzdvqxqkz -threedxsmlfqhpcs75eightthreecfbsgbfdxz -68two -48tjbzmqrpmjfpv -eightnine3six4pr6fmtfhxssrd -3rngpqfourtwonehqk -eighteightfour8tkgfkjcsixone5 -7one3mcffpztdmzshrs2threecjmlsv -three1jznfive6dxlcxn -htzfvd1twoonesdrhpn -twofive7 -five35ninephsixtwo -ninethreethreetwoninesevenfive8 -3j4fivekcqj7 -hzf9 -7threefourseven6onenine -tkzdhq39fourfive34qkhh -one1mhhrglhvsbbqvj -ninebthreethree9four5stfspnine -hkmzxzhvfsevensix9three2seven -71six35threeqdhxbxrhcx9 -clnzgbxkglf31 -sixmsvpqdonetwo4fourpjrkmnpfdvvrfh -sixthree4one75 -seven5eightsxnkzfbcnlpfhsixfive -98st -one7fivetwogvjpmx -gpvtdsix5 -five9twotwo94qsxlslxq -78znzv8vbkqxnxhj3 -3threeqfbxplhqxsr61 -sevenjsvdxcjqjp5 -hbjcnqqtd1twotwofive5two -vqdf19 -52two47mkrnvrkpfivelvmgzjgcv -8nineone -ftqtbqqrqrsnnbnineninetwo6onenmjhvlr -onensgkpknpqxm3four3576 -sixtndjcvprxzngkfivesixpvtft5 -vtvkrnjvgninesktdqlzpt5 -9kdfqnsmzz -6fourjbdqj -fivedmdphcz12ppltqpb82hdjldslp -ksqkttvninesevensix4pbnjsfznch5dlxfq -67hpqgstjlzsfive77 -8vxrtgxfbk -6qksbmnineninekbzcbrmtjthree -76prtggdthree5seven -qksgrmmnvone1thmhh3twoeightsix -two2oneseven -cc9241nineninesixtwoneggs -fivesevenhqvrrqrhqlvnslvvqnzrnninebcmsmc3 -nineeightsix42 -vreightfourninefivep1 -onedzn7mhvpnjsdgtzcp -fbvtnineone5five7 -6oneninesixjgggcfkkltwo944 -gcxkmnnbeightsix4 -6one2eight6gbm33 -threefivetwoxsrt7 -5glzddtwo -94hmjcsevenfour2frqljgdrdfoureight -jqsfrllonedqvmm3n4six -913ninetwomkhvvfntng7seven -fournine8 -fnmsx4jckrgtwoeightfour5pdhbb -8eighthrs -threethree4 -nineqhkxhfslfrhfivep64sevensfg -three9nineseven7four4twooneightqbs -143seventlnvcdjt -clgltnktwohzmvrdcspfjc1twoqs -2five4 -klt1xqmp5vkrpz -vdntdrrnz8vtxx -51sevengrvvqvnrmmsevenkqqnninefourskgxncnl -3cbcn -four5fivenine68three1 -seventhree2sixls -4eight8sdprgt697seven -ptfdbpr414 -9jrgnxqfourbmcl -1three8dseven9jfive -66pdxzvnzrqnkmfthreeqgnkdqvvcbcjbdsnz -threercbhjnckc8slv5ksrhvtt9fh8 -six35tpf -pzrghq2four42 -k8ninegqdcbnhb7mskvft25 -2cxvggrthreedpplnjvsqhgfpbfivesixnpcsjn -ftwonethreefour9fivenine1five7 -sixsixccfbbvxkrcnine71 -9gcglxmjknhtwotwoone2onenineseven -khvppgl8eight -bzninebqfhn57 -oneqbltgqlbpqdxgqonem4threefour1 -xchkvlprvfgd59jdbfgvlbeight -84cjhvqmgdfh1fivesevenf -2one2 -hxqfsjtwofivehbvndtpsevenseven44hkdstdkzs -nine4k1five -78rqrtjzsdfc3nine8twosqzzgsktmkcszzx -sixsix8 -qkqhcfdckxsix29hfnnineg -twotgpfcdfcdtwocrffone5xcgtscjbmf -sevenfivenjvtctlkkmgeight9rxtjlnb8 -ntqfzccxhjfourfmlgkheightmkplt5 -1lpgdxeightqrmkqlxvcnntbvgzthree68 -6four9two -threej5oneeight -pmlgczzpthreethree89btlvhfzbjd -8fiveeight -tvdkgbgrhplq66fldd -jsfkf54nvqmbnjmxks -gtpxlmphhgbgksixtwo9three -5ktgh -ggvzvfzmmmvrsqghrbd3kninezrlftwonebms -4two3z -fourzdfstskxhggkrl6eightndbxjeight8 -3zdzlreight1827four4 -2qlgkrbmnsgvmpninevjglsevenzdtmrqrnljthree -four2eightfiveldxtfjltseven6fourbddptkvjl -brrmvbfqkfczz7hthree -12fbdbbsrzss6dsrsrkjfhsrjxpxhvkfive -889srrl6six186 -46tscxgjrxtwo4hlm35tzfxhrzsfd -fivesevenqgqzpcqnjdjlmg21hgnrdhfrp -2sixznfour6two -four4ztsfhvvmdkghh9one4 -bdnmcghlkjmthree1sjhqbmmjtvfcxzleight9 -bbqpd77jhlqbdp3fvnsevenfzxq -six7sixbd -8rstj9onetwonem -6one1 -nineqstcshn35five -eightxndstksjj9xvmkhxgkqtwo4 -fivek5xhqzvtplmczd35 -zjsjmxmxeightp24fiveeight -9sjkjsjqxfnsdgxzmhjzfmbbmj -92qsbrtfour2onefourone -pkgc7sevenl9seven -glrkpdfhzddqvbceightpfxdgzm1eight -39bmsixjbzpkh72lklvgk -5four7onesevennfglmg -two6jvdmxqsthreeprfhq5 -moneighthkdcpfhfmx8s9 -twodkcs23fhj5 -fourkcjdhmzvdbrkgj3onefive -mbmjrqlqzml21 -threexmlgkxxms4rdrlcmlvx77 -3mkjlxlkknfour -3four9 -65ffd91 -vxnxs8eightpl2three1mgdcrmfive -lnjkchzljjbznbdtxtgfnsevenone2ztxvtfzlbtwo -8eightoneightjb -qxxndbsfxpcmxdfrmzfkdvfvjplq6onetwo -36gjbxrllone4 -rvljbxpglgpvxgq72 -35ct69hzsgsb -six6sixzgxsfdkjtwo2drtbnine -ggdvhnngklthreezfqbzzbninephdhcgzvnine7csbq -54twofive19five4 -bjeight4four -52mfcnnrhblfiveoneonelmdzg -ninebsj2lfx4gfsqrfsglx2eight9 -3859csvhpkkksgpqnx22six -2onehdhqsndjrgspctkgjlnine7shxpd8hmlvdvsvqf -four5five6hkchns -fivetwofourgvthree9zxtrxf -onettmrcxbgfdpj99sixsix -onelqdmkfvxg4fourgvcqbtgqs -onehgrsfivedslxgxd19 -eightxjf12sevenlsmglqrzrtpm4 -vgppbqnskvpfivefivetqxlkbp3two -pkeightwopkz8rgtqhrhrjdmht3mz5 -bbghbl9eightxcmftpndfive -oneseven2nxrcseven -fourthreefour5 -53zsvpqnrjtwo5nine5nrdvmg -eight78twoone -bc6nf4zgnmkbnjts -xeightwopbgt7two -hqsnjjlbfivetwo84threepnine -br7oneeight2 -ckxbsdjjttbxczfdpzmrxfh32eight -5212j912 -1qhtwo3three9eight2nnjpbl -kdxx5five2ninebrvfzbbxptsccvdjgp -sixfpslbrfmqfvjs8seven -45qbcvqcjk6ninesix -98nine8 -2eightonekcfvzfonethreenpxdpqtnvj -two87 -jqnzhnzsdgg3eightfournbgsdxbfg31xrnv -4three3sxvnnzqvhcxj9 -mpjmgpmninekffbkgprkb9tzzdznine8rtq -xhpfptdmpkeightdkqvpzscx7jndgsxxtqh -17vvktdvdgpthreeone1gqnb -fzpbhtmdvseven2one -sixzkkbjmnxnxm3gcvpsddqqgzktp63h -nineonexkqkfszg8qdzrlqszpltwo9cseven -7xfhtdfdldzplmrfivegpkgfseventwo -xvone5two7 -fiveqdrgeightvrvtmtvvmnl2kbctwofive -three9rrxhddsdfive577 -mnkltgsgs4fivefivekxzzhjdtnzzvmvxdh -blqtmklmkxcjtmxsrflffpzjcrninecd7rgdn8 -jgpktmfourdxzll8threerlssqvslnb -4grvtbmlpqxgmzzksfgzvjggsqhffq1qcd -cninebtfvxfnmbtznfnzdh4zdmgtvbbnine -1seven4vkvqcktfourvjtd4zqh -8eight7lhmx89four -xrpxkdrf8fhl29fivexzsrdbmksixpvlk -8tvfplhxxxzr -twothree8nine2ninegfbrchxmmfive -9threeskhgsnsvvzpnnv2seven4 -8sbzvncqszzdflznpqfddeight3 -1eightzfivehlmhnqbnnr -sixfivefjfqftjvcdzkpbkhnvqrqqhpvmgnq75pfk -mtfvjbbpdeight1 -txtfqxvbrnine2 -sevenptvlbpkdzpp8tnlvkdjjpbt -qgoneighteighttgrdmljtzbblrtskvfivevbbp1 -ninethreejbxseven392 -86pbrnhhhpn -sevenonenine5bcqrttts6fourthree -4seventwo5ngnbkqftzdfive4lhsthree -36seven97klhbqbpgninerb -813eight -ncbfctqlsnfive1brqpthree4 -ksbsddjcknsevensix293three -rljzzbvd3zkmbpjt9eightninesnlrsone -97ninesevenrhchvppnztvfbfpkzrbcone -sevendxbninefour2fourclmln -1rdtwofjvdllht5eightsixfourbl"; - - let total = 0; - - for i in input.lines() { - let first = false; - let first_digit = 0; - let second_digit = 0; - - for j in i { - if j.is_digit() { - if !first { - first_digit = j.to_digit(); - second_digit = first_digit; - - first = true; - } else { - second_digit = j.to_digit(); - } - } - } - - total = total + first_digit * 10 + second_digit; - } - - print(total); - - chacha::assert(total == 56108); -} diff --git a/tests/harness/aoc_2023/2.ore b/tests/harness/aoc_2023/2.ore deleted file mode 100644 index 335cfe6c..00000000 --- a/tests/harness/aoc_2023/2.ore +++ /dev/null @@ -1,161 +0,0 @@ -fn main() { - let input = "Game 1: 14 green, 8 blue, 9 red; 5 blue, 4 green, 2 red; 4 red, 4 blue, 4 green; 1 blue, 3 green, 2 red; 10 red, 3 blue, 15 green; 2 red, 6 green, 3 blue -Game 2: 1 red, 12 green, 2 blue; 2 green, 1 blue, 1 red; 4 green, 2 blue; 10 green, 3 blue; 4 green, 2 red, 2 blue -Game 3: 16 red, 3 green; 7 green, 15 red, 3 blue; 4 green, 20 red, 1 blue; 12 red, 13 green, 1 blue; 2 green, 8 red, 1 blue; 16 red, 7 green -Game 4: 3 red, 7 blue; 4 blue, 3 green; 19 blue, 1 red, 3 green; 16 blue, 4 red, 5 green; 1 red, 19 blue, 3 green -Game 5: 7 blue, 4 red, 6 green; 2 red, 3 green, 6 blue; 11 blue, 1 red, 5 green -Game 6: 7 red, 13 blue; 2 green, 9 red, 7 blue; 7 green, 3 red, 12 blue; 11 green, 3 blue, 4 red; 12 green, 10 blue -Game 7: 2 green, 5 red; 4 green, 1 blue, 3 red; 1 blue, 1 green, 18 red; 4 green, 12 red, 1 blue -Game 8: 12 red, 9 green, 11 blue; 13 blue, 1 red, 16 green; 12 blue, 12 green; 3 green, 7 blue, 2 red -Game 9: 1 green, 9 red, 9 blue; 4 blue, 2 red; 17 red, 6 green, 3 blue; 3 green, 1 blue, 12 red -Game 10: 2 blue, 11 red, 3 green; 4 blue, 11 red, 13 green; 4 blue, 15 green, 4 red; 1 blue, 3 green, 17 red -Game 11: 9 green, 3 blue, 2 red; 11 blue, 16 green, 5 red; 7 blue, 3 red, 5 green; 7 red, 8 green, 10 blue -Game 12: 13 green, 2 red, 2 blue; 1 red, 6 green; 5 green, 3 red, 8 blue -Game 13: 2 blue, 5 green; 2 blue, 2 green; 2 blue, 2 red, 4 green -Game 14: 4 red, 2 green, 1 blue; 7 red, 1 green; 6 red, 18 green, 4 blue; 3 green, 1 blue -Game 15: 2 blue, 5 green, 12 red; 13 red, 8 green; 10 blue, 6 red, 8 green; 9 blue, 7 red; 2 green, 15 red; 9 blue, 3 green, 14 red -Game 16: 8 green, 11 blue, 14 red; 4 red, 8 green; 5 red, 4 blue, 3 green; 4 green, 13 blue, 6 red; 9 red, 8 blue, 11 green -Game 17: 8 red, 6 green; 5 blue, 7 green; 10 red, 6 blue; 9 blue, 10 green, 7 red; 1 red, 3 green, 5 blue -Game 18: 8 blue, 10 red; 6 red, 5 blue, 6 green; 16 green, 6 blue, 1 red; 16 red, 3 green, 5 blue -Game 19: 2 green, 17 blue; 2 blue, 4 green, 7 red; 6 red, 12 blue; 6 blue, 5 red, 10 green -Game 20: 4 green, 8 red, 9 blue; 6 blue, 4 green; 5 blue, 7 green, 9 red; 9 red, 9 blue, 6 green -Game 21: 1 green, 11 red, 2 blue; 6 red, 7 blue; 5 red, 1 green; 2 red, 7 blue -Game 22: 8 blue, 1 red, 4 green; 6 blue, 4 green, 14 red; 5 green, 8 red, 9 blue -Game 23: 4 blue, 12 red, 1 green; 1 green, 10 blue; 11 red, 2 blue; 1 blue, 1 green -Game 24: 5 blue, 1 green; 2 green, 2 blue, 4 red; 3 red, 5 blue -Game 25: 13 blue, 5 green, 4 red; 5 red, 17 blue; 6 blue, 8 green, 1 red; 2 blue, 1 red, 8 green; 3 red, 3 green -Game 26: 2 green, 9 red, 2 blue; 3 green, 19 red; 2 green, 16 red, 6 blue; 11 green, 4 red, 4 blue; 2 blue, 8 red, 13 green; 7 blue -Game 27: 1 red, 17 green, 1 blue; 4 red, 8 green; 1 blue, 7 green, 7 red; 18 green, 2 red -Game 28: 6 blue, 1 red; 2 blue, 1 red; 1 red, 1 green, 5 blue; 1 green; 1 green, 3 blue; 1 blue, 1 green -Game 29: 15 blue, 8 red, 1 green; 6 red, 2 green, 17 blue; 13 blue, 12 red; 12 blue, 2 green, 12 red; 5 red, 14 blue -Game 30: 4 blue, 6 green, 4 red; 3 blue, 2 green, 9 red; 5 green, 18 red; 9 blue, 16 red, 5 green -Game 31: 6 blue, 7 green, 4 red; 8 green, 6 blue, 10 red; 6 red, 2 green, 2 blue; 2 green, 4 blue, 6 red; 2 red, 7 green; 7 red, 13 green, 2 blue -Game 32: 5 blue; 2 green, 8 blue; 1 red, 6 blue, 2 green; 2 green, 11 blue -Game 33: 1 red, 7 green, 17 blue; 1 red, 14 blue, 2 green; 13 blue -Game 34: 12 red, 1 green, 1 blue; 11 red, 1 blue, 1 green; 16 red, 3 green; 9 red, 1 blue; 15 red, 2 blue; 1 green, 4 blue, 8 red -Game 35: 6 blue, 13 red, 1 green; 8 red, 9 blue, 6 green; 12 red, 8 green -Game 36: 5 blue, 3 red; 2 green, 3 red; 9 green, 6 red, 1 blue; 3 blue, 4 red, 9 green -Game 37: 14 blue, 3 red; 2 green, 2 red, 8 blue; 11 blue, 5 red -Game 38: 3 red, 18 green, 2 blue; 5 green, 5 red; 1 red, 12 green, 6 blue; 3 red, 5 blue, 1 green; 4 blue, 6 red, 17 green; 17 green, 6 blue, 3 red -Game 39: 5 green, 13 blue, 1 red; 6 green, 1 red, 12 blue; 1 red, 2 green, 11 blue; 1 red, 2 green, 12 blue -Game 40: 15 red; 14 red, 2 green, 4 blue; 13 red, 5 blue; 5 blue, 1 green, 18 red -Game 41: 2 red, 15 green; 11 red, 6 green, 17 blue; 10 green, 15 red, 9 blue; 8 red, 4 blue; 1 green, 13 blue, 13 red -Game 42: 3 green, 3 blue, 1 red; 2 red, 8 blue, 1 green; 7 blue, 2 red, 1 green -Game 43: 8 green, 10 red, 4 blue; 3 red, 11 green, 10 blue; 4 red, 5 blue, 2 green; 9 green, 10 red, 4 blue -Game 44: 3 green, 4 blue, 4 red; 10 red, 5 green, 4 blue; 1 green, 16 red; 2 blue, 15 red, 6 green; 13 red, 2 blue, 4 green -Game 45: 5 blue, 3 red; 1 red, 3 blue, 17 green; 2 red, 3 blue -Game 46: 9 blue, 10 green, 5 red; 1 red, 5 blue, 1 green; 6 blue, 8 green, 9 red; 2 red, 4 blue, 11 green -Game 47: 3 green, 7 red, 7 blue; 12 red, 1 blue; 6 blue, 4 green, 6 red; 6 red, 5 blue, 1 green -Game 48: 5 green, 1 blue; 2 green, 8 red, 4 blue; 16 red, 12 blue, 8 green -Game 49: 19 green, 4 blue, 9 red; 3 green, 1 blue, 8 red; 7 red, 1 blue, 14 green; 2 blue, 7 green, 2 red -Game 50: 6 blue, 11 red; 1 green, 8 blue, 11 red; 5 blue, 1 green; 4 blue, 12 red, 1 green; 1 green, 6 red, 8 blue; 7 blue, 5 red -Game 51: 5 red, 7 green; 8 green; 4 blue, 7 green, 2 red -Game 52: 3 blue, 12 red, 1 green; 13 red, 1 blue; 7 blue, 8 red; 7 blue, 9 red; 4 red, 5 green -Game 53: 2 blue; 1 green, 4 red, 12 blue; 1 green, 7 blue, 4 red; 8 blue, 1 green, 4 red -Game 54: 2 blue, 7 green; 1 red, 1 green, 2 blue; 5 red, 5 blue, 7 green; 5 red, 5 blue, 6 green; 7 green; 7 green, 2 blue, 5 red -Game 55: 2 green, 20 blue, 3 red; 2 red, 1 green, 1 blue; 2 green, 14 blue, 2 red; 2 red, 11 blue; 8 green, 4 blue, 2 red -Game 56: 5 red, 1 green, 10 blue; 2 red, 1 blue; 1 blue, 2 red; 1 green, 8 blue -Game 57: 1 green, 4 red, 5 blue; 20 blue, 4 red, 2 green; 17 blue, 1 green; 1 green, 10 blue, 1 red; 3 red, 17 blue -Game 58: 15 green, 2 blue; 15 green, 4 blue, 2 red; 14 blue, 5 red, 15 green; 15 green -Game 59: 1 blue; 5 green, 8 red, 1 blue; 15 red, 2 blue, 1 green -Game 60: 3 green, 4 blue, 16 red; 6 blue, 10 green, 10 red; 2 blue, 13 red, 8 green -Game 61: 2 green, 2 blue, 3 red; 7 blue, 15 red, 9 green; 5 green, 1 blue, 8 red; 4 blue, 6 green, 18 red -Game 62: 5 red, 7 blue, 13 green; 7 green, 6 blue, 8 red; 6 blue, 8 red, 12 green; 2 blue, 6 red; 5 red, 4 blue, 5 green -Game 63: 3 red; 5 blue, 2 red; 10 red, 1 green, 4 blue; 5 blue, 4 red, 3 green -Game 64: 7 blue, 3 green; 5 red, 6 green, 14 blue; 1 green, 12 blue, 9 red; 1 blue, 8 red, 12 green -Game 65: 12 red, 12 blue; 5 green, 12 blue, 11 red; 6 green, 3 red, 14 blue; 11 green, 4 red, 1 blue; 11 red, 3 green, 2 blue; 13 blue, 9 red, 5 green -Game 66: 1 red, 1 green; 3 blue, 6 red, 3 green; 6 blue, 1 green, 4 red; 8 green, 1 red -Game 67: 2 green, 8 blue; 5 red, 7 blue, 4 green; 8 red, 5 green, 5 blue; 2 red, 1 blue -Game 68: 3 green, 14 blue, 3 red; 16 blue, 7 green, 4 red; 10 blue, 6 red; 4 green, 3 blue, 5 red; 2 red, 14 blue, 8 green -Game 69: 11 red, 1 green; 1 green, 4 blue, 13 red; 18 red, 3 blue; 7 red, 1 green, 9 blue; 5 blue, 1 red, 1 green; 3 red, 4 blue -Game 70: 10 blue, 2 green, 4 red; 4 green, 4 red, 2 blue; 7 green, 5 red, 1 blue; 7 green, 3 red, 10 blue; 7 green, 2 blue, 5 red; 1 blue, 9 red, 2 green -Game 71: 1 green, 6 blue; 10 blue, 2 red, 1 green; 8 blue, 1 red; 11 blue, 2 green, 3 red; 1 green, 10 blue -Game 72: 10 blue, 3 red, 2 green; 11 red, 4 green, 3 blue; 1 blue, 4 red, 3 green -Game 73: 8 red, 17 green, 3 blue; 5 blue, 10 red, 8 green; 9 green, 12 red, 3 blue -Game 74: 5 green, 4 blue, 1 red; 4 red, 6 blue; 2 red; 2 blue, 1 red; 3 blue, 1 green, 3 red -Game 75: 4 blue; 3 red, 10 blue, 14 green; 8 blue, 3 red, 11 green -Game 76: 10 blue, 15 green, 5 red; 14 green; 6 blue, 10 red, 13 green; 2 green, 10 red, 6 blue; 1 red, 6 blue -Game 77: 3 green, 5 red, 8 blue; 14 red, 15 green; 14 green, 1 blue, 2 red -Game 78: 5 blue, 5 green; 9 blue, 2 green, 5 red; 4 red, 4 blue, 1 green; 3 red, 10 green, 2 blue; 4 red, 12 blue, 3 green; 4 green, 5 red, 13 blue -Game 79: 6 red, 1 green, 18 blue; 5 red, 11 blue, 2 green; 2 green, 4 red, 4 blue; 7 red, 17 blue; 9 red, 1 green, 3 blue -Game 80: 5 blue, 6 green, 6 red; 2 blue, 8 green, 8 red; 5 green, 16 blue, 3 red; 2 green, 3 red, 1 blue -Game 81: 11 green, 5 blue; 1 blue, 10 green, 1 red; 3 red, 3 blue, 15 green -Game 82: 14 red, 11 green; 2 green, 11 blue; 9 blue, 7 green, 7 red; 13 blue, 17 red, 3 green; 12 green, 15 blue, 8 red -Game 83: 2 green, 9 red, 4 blue; 3 green, 4 blue, 5 red; 2 green, 9 red, 7 blue; 4 blue, 3 green -Game 84: 4 red, 3 green, 6 blue; 2 blue, 5 red, 2 green; 6 blue, 1 red, 10 green; 1 green, 1 blue, 3 red; 16 blue, 6 red, 2 green -Game 85: 14 red, 4 green, 6 blue; 11 red, 2 green, 6 blue; 9 red; 3 blue, 13 red, 8 green; 3 green, 2 blue, 8 red -Game 86: 4 red, 1 green; 14 blue, 3 red, 2 green; 5 red, 3 green, 5 blue; 13 blue, 11 green, 1 red; 1 green, 14 blue, 3 red -Game 87: 1 blue, 2 green, 4 red; 11 blue, 3 green, 4 red; 11 blue; 4 green, 11 blue, 3 red; 4 blue, 5 green, 2 red -Game 88: 1 red, 1 blue, 1 green; 3 green, 1 blue, 1 red; 9 blue, 5 red, 5 green; 3 blue, 5 red, 8 green; 2 blue, 3 red, 13 green; 8 blue, 3 red, 9 green -Game 89: 3 green, 12 red, 11 blue; 10 red, 7 green, 14 blue; 17 green, 9 blue; 15 green, 1 red, 3 blue -Game 90: 12 green, 7 red, 5 blue; 12 green, 1 blue, 6 red; 6 red, 3 green -Game 91: 11 red, 10 green, 15 blue; 5 red, 6 green, 2 blue; 3 blue, 9 red, 7 green; 11 red, 1 green, 15 blue; 10 blue, 4 green; 9 red, 7 green, 14 blue -Game 92: 1 green, 6 red, 4 blue; 5 blue, 1 green; 6 red, 6 blue -Game 93: 19 red, 8 green, 9 blue; 7 blue, 1 red, 9 green; 2 red, 9 blue, 11 green; 1 blue, 4 green, 10 red; 10 blue, 11 red; 4 green, 8 blue, 16 red -Game 94: 11 red, 1 green, 1 blue; 4 green, 8 red; 2 red, 1 green; 4 green, 5 red; 5 red, 1 blue; 1 blue, 2 green, 9 red -Game 95: 6 green, 7 blue, 8 red; 1 red, 7 green; 16 green, 2 blue, 3 red; 5 green, 10 blue, 8 red; 5 red, 16 green, 3 blue; 4 red, 10 blue, 12 green -Game 96: 6 blue, 5 green, 6 red; 3 red, 5 blue, 4 green; 2 blue, 2 red, 3 green -Game 97: 3 red, 8 green; 2 blue, 3 green; 13 red, 10 green, 3 blue -Game 98: 4 green, 9 red, 2 blue; 1 blue, 5 green, 18 red; 3 green, 16 red; 15 red, 1 green, 2 blue -Game 99: 7 green, 2 red, 5 blue; 9 red, 17 green, 19 blue; 8 red, 12 blue, 1 green; 11 red, 11 green, 10 blue; 19 green, 4 blue, 2 red -Game 100: 4 blue, 3 green; 5 blue, 12 green; 16 green, 1 red, 1 blue; 2 blue, 1 green; 1 red, 3 blue, 18 green; 3 green, 1 red, 3 blue"; - - let RED = "red"; - let GREEN = "green"; - let BLUE = "blue"; - let RED_COUNT = 12; - let GREEN_COUNT = 13; - let BLUE_COUNT = 14; - - let total = 0; - let power = 0; - - let game_number = 1; - - for line in input.lines() { - let pass = true; - let max_red = 0; - let max_green = 0; - let max_blue = 0; - - let line = line.split(":")[1].trim(); - for draw in line.split(";") { - for color in draw.split(",") { - let color = color.trim(); - let cubes = color.split(" "); - let count = cubes[0] as int; - - if cubes[1] == RED { - max_red = max_red.max(count); - if count > RED_COUNT { - pass = false; - } - } - if cubes[1] == GREEN { - max_green = max_green.max(count); - if count > GREEN_COUNT { - pass = false; - } - } - if cubes[1] == BLUE { - max_blue = max_blue.max(count); - if count > BLUE_COUNT { - pass = false; - } - } - } - } - - power = power + max_red * max_green * max_blue; - - if pass { - total = total + game_number; - } - game_number = game_number + 1; - } - - print("Possible: {0}\n".format(total)); - chacha::assert(total == 2256); - print("Power: {0}\n".format(power)); - chacha::assert(power == 74229); -} diff --git a/tests/harness/as_cast.tao b/tests/harness/as_cast.tao deleted file mode 100644 index 5e786b99..00000000 --- a/tests/harness/as_cast.tao +++ /dev/null @@ -1,5 +0,0 @@ -fn main() { - let f = chacha::assert_eq(42.0, 42 as float); - let i = chacha::assert_eq(42, 42.0 as int); - let s = chacha::assert_eq("42", 42 as string); -} diff --git a/tests/harness/assert.tao b/tests/harness/assert.tao deleted file mode 100644 index 64165ab4..00000000 --- a/tests/harness/assert.tao +++ /dev/null @@ -1,17 +0,0 @@ -/// Testing the assert_eq macro. -/// -/// Note that the empty tuple `()` is not currently supported as an expression, -/// despite it being a valid type. -fn main() -> () { - chacha::assert_eq(true, true); - chacha::assert_eq(false, false); - chacha::assert_eq(42, 42); - chacha::assert_eq(42.0, 42.0); - chacha::assert_eq("42", "42"); - chacha::assert_eq("42", 42 as string); - chacha::assert_eq(42, 42.0 as int); - chacha::assert_eq(42.0, 42 as float); - let uuid = Uuid::new(); - chacha::assert_eq(uuid, uuid); - // chacha::assert_eq((), ()); -} diff --git a/tests/harness/assert_false.stderr b/tests/harness/assert_false.stderr deleted file mode 100644 index f11b4951..00000000 --- a/tests/harness/assert_false.stderr +++ /dev/null @@ -1,5 +0,0 @@ -Interpreter exited with: - -error: assertion failed at chacha::assert_eq(false, true). - --> Found `false`, expected `true`. - diff --git a/tests/harness/async/block.ore b/tests/harness/async/block.ore new file mode 100644 index 00000000..85311226 --- /dev/null +++ b/tests/harness/async/block.ore @@ -0,0 +1,6 @@ +async fn main() -> Future<()> { + let a = async { 42 }; + + let b = a.await; + chacha::assert_eq(b, 42); +} diff --git a/tests/harness/bad_item.stderr b/tests/harness/bad_item.stderr deleted file mode 100644 index fc97e94a..00000000 --- a/tests/harness/bad_item.stderr +++ /dev/null @@ -1,8 +0,0 @@ -Error: Unexpected token in input, expected use, struct, Fn, impl - ╭─[ bad_item:3:1 ] - │ - 3 │ thing; -  │ ──┬── -  │ ╰──── Unexpected token thing -───╯ - diff --git a/tests/harness/bad_item.tao b/tests/harness/bad_item.tao deleted file mode 100644 index 8ce7a5df..00000000 --- a/tests/harness/bad_item.tao +++ /dev/null @@ -1,3 +0,0 @@ -fn main() {} - -thing; \ No newline at end of file diff --git a/tests/harness/bad_use.stderr b/tests/harness/bad_use.stderr deleted file mode 100644 index c1d4c4d1..00000000 --- a/tests/harness/bad_use.stderr +++ /dev/null @@ -1,15 +0,0 @@ -Error: Unexpected token in input, expected IDENTIFIER (:: IDENTIFIER)*> - ╭─[ bad_use:1:1 ] - │ - 1 │ use -  │ ─┬─ -  │ ╰─── Unexpected token use -───╯ -Error: Unexpected token in input, expected use, struct, Fn, impl - ╭─[ bad_use:1:1 ] - │ - 1 │ use -  │ ─┬─ -  │ ╰─── Unexpected token use -───╯ - diff --git a/tests/harness/bad_use.tao b/tests/harness/bad_use.tao deleted file mode 100644 index bd2945d3..00000000 --- a/tests/harness/bad_use.tao +++ /dev/null @@ -1 +0,0 @@ -use \ No newline at end of file diff --git a/tests/harness/bad_use_as.stderr b/tests/harness/bad_use_as.stderr deleted file mode 100644 index f9effa41..00000000 --- a/tests/harness/bad_use_as.stderr +++ /dev/null @@ -1,15 +0,0 @@ -Error: Unexpected token in input, expected identifier - ╭─[ bad_use_as:1:19 ] - │ - 1 │ use foo::bar::baz as -  │ ─┬ -  │ ╰── Unexpected token as -───╯ -Error: Unexpected token in input, expected impl, Fn, use, struct - ╭─[ bad_use_as:1:19 ] - │ - 1 │ use foo::bar::baz as -  │ ─┬ -  │ ╰── Unexpected token as -───╯ - diff --git a/tests/harness/bad_use_as.tao b/tests/harness/bad_use_as.tao deleted file mode 100644 index c939cae2..00000000 --- a/tests/harness/bad_use_as.tao +++ /dev/null @@ -1 +0,0 @@ -use foo::bar::baz as \ No newline at end of file diff --git a/tests/harness/bad_use_no_semi.stderr b/tests/harness/bad_use_no_semi.stderr deleted file mode 100644 index 7d56d5b8..00000000 --- a/tests/harness/bad_use_no_semi.stderr +++ /dev/null @@ -1,15 +0,0 @@ -Error: Unexpected token in input, expected ';' - ╭─[ bad_use_no_semi:1:15 ] - │ - 1 │ use foo::bar::Baz -  │ ─┬─ -  │ ╰─── Unexpected token Baz -───╯ -Error: Unexpected token in input, expected use, struct, Fn, impl - ╭─[ bad_use_no_semi:1:15 ] - │ - 1 │ use foo::bar::Baz -  │ ─┬─ -  │ ╰─── Unexpected token Baz -───╯ - diff --git a/tests/harness/bad_use_no_semi.tao b/tests/harness/bad_use_no_semi.tao deleted file mode 100644 index 0ea844b3..00000000 --- a/tests/harness/bad_use_no_semi.tao +++ /dev/null @@ -1 +0,0 @@ -use foo::bar::Baz \ No newline at end of file diff --git a/tests/harness/bogus_method_on_string.stderr b/tests/harness/bogus_method_on_string.stderr deleted file mode 100644 index 96c63ead..00000000 --- a/tests/harness/bogus_method_on_string.stderr +++ /dev/null @@ -1,8 +0,0 @@ -Error: No such method: introspection - ╭─[ bogus_method_on_string:2:21 ] - │ - 2 │     "introspection".introspection(); -  │ ──────┬────── -  │ ╰──────── at or near this location -───╯ - diff --git a/tests/harness/bogus_method_on_string.tao b/tests/harness/bogus_method_on_string.tao deleted file mode 100644 index d55dd8d5..00000000 --- a/tests/harness/bogus_method_on_string.tao +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - "introspection".introspection(); -} diff --git a/tests/harness/bool.tao b/tests/harness/bool.tao deleted file mode 100644 index c31614a1..00000000 --- a/tests/harness/bool.tao +++ /dev/null @@ -1,8 +0,0 @@ -fn main() -> bool { - chacha::assert(true); - chacha::assert(!false); - chacha::assert_eq(true && false, false); - chacha::assert_eq(false || true, true); - - true -} diff --git a/tests/harness/assert_false.tao b/tests/harness/chacha/assert_false.ore similarity index 100% rename from tests/harness/assert_false.tao rename to tests/harness/chacha/assert_false.ore diff --git a/src/chacha/interpreter/statement.rs b/tests/harness/chacha/assert_false.stderr similarity index 100% rename from src/chacha/interpreter/statement.rs rename to tests/harness/chacha/assert_false.stderr diff --git a/tests/harness/chacha/async/failing/async.ore b/tests/harness/chacha/async/failing/async.ore deleted file mode 100644 index 6bfe2fab..00000000 --- a/tests/harness/chacha/async/failing/async.ore +++ /dev/null @@ -1,72 +0,0 @@ -async fn main() -> Future<()> { - let ms = 10; - - // Linear, synchronous - let time = chacha::time(|| { - let answer = (0..42) - .map(|i: int| -> int { - chacha::sleep(ms); - print("{0}.".format(i)); - 1 - }) - .sum(); - print("\nThe answer to life, the universe, and everything is {0}.\n".format(answer)); - }); - - chacha::assert(time > 0.420); - print("Linear, synchronous solution took {0} seconds. Expected > 0.420.\n\n".format(time)); - - // Linear, asynchronous - let time = chacha::time(|| { - let answer = (0..42) - .map(|i: int| -> int { - chacha::asleep(ms).await; - print("{0}.".format(i)); - 1 - }) - .sum(); - print("\nThe answer to life, the universe, and everything is {0}.\n".format(answer)); - }); - - chacha::assert(time > 0.420); - print("Linear, asynchronous solution took {0} seconds. Expected > 0.420.\n\n".format(time)); - - // Two dimensional, asynchronous - let time = chacha::time(|| { - // 🚧 This is interesting, and requires implementing push for List. - // - // let answer = 0; - // let sleepers = []; - // for i in 0..42 { - // let sleeper = chacha::spawn(|| async { - // chacha::asleep(ms).await; - // print("{0},".format(i)); - // answer = answer + 1; - // }); - // sleepers.push(sleeper); - // } - // for i in 0..42 { - // sleepers[i].await; - // } - - let answer = (0..42) - .map(|i: int| -> Future { - // .map(|i: int| -> int { - chacha::spawn(|| -> int { - chacha::asleep(ms).await; - print("{0},".format(i)); - 1 - }) - }) - // We need this trick to keep from blocking and executing these - // serially. - .map(|j: Future| -> int { j.await }) - .sum(); - print("\nThe answer to life, the universe, and everything is {0}.\n".format(answer)); - }); - - chacha::assert((time > 0.010) && (time < 0.420)); - print( - "Two dimensional, asynchronous solution took {0} seconds. Expected > 0.010.\n".format(time), - ); -} diff --git a/tests/harness/chacha/async/failing/one_shot.tao b/tests/harness/chacha/async/failing/one_shot.tao deleted file mode 100644 index 48169641..00000000 --- a/tests/harness/chacha/async/failing/one_shot.tao +++ /dev/null @@ -1,51 +0,0 @@ -fn main() { - let task = chacha::spawn_named("timers", async || -> int { - print("inner begin\n"); - - // let forty_two = chacha::spawn_named("42", || -> int async { - let forty_two = timer::one_shot(420, || -> int { - print("slept 420 ms\n"); - 42 - }); - // .await; - // 42 - // }); - - // let ninety_six = chacha::spawn_named("96", || -> int async { - let ninety_six = timer::one_shot(960, || -> int { - print("slept 960 ms\n"); - 96 - }) - .await; - // 96 - // }); - - let forty_two = forty_two.await; - print(forty_two); - // chacha::assert(forty_two == 42); - // chacha::assert(ninety_six == 96); - - // print(one.join()); - // print(three.join()); - // print(one.join()); - // print(three.join()); - - print("inner end\n"); - - 238 - }); - - let duration = chacha::time(|| { - print("start\n"); - - print(task.join()); - - print("end\n"); - }); - - print("duration: {0}\n".format(duration)); - - let delta = duration - 0.960; - print("delta: {0}\n".format(delta)); - chacha::assert((delta < 0.005) && (delta > 0.0)); -} diff --git a/tests/harness/chacha/async/failing/timers_short_long.ore b/tests/harness/chacha/async/failing/timers_short_long.ore deleted file mode 100644 index 41b1bd9f..00000000 --- a/tests/harness/chacha/async/failing/timers_short_long.ore +++ /dev/null @@ -1,45 +0,0 @@ -async fn main() -> Future { - let time = chacha::time(|| { - // This is here to keep vscode from removing the braces. - test().await - }); - - print("total time: {0}\n".format(time)); - - chacha::assert(time > 1.0); - let delta = time - 1.0; - chacha::assert(delta < 0.01); - - not_async() -} - -fn not_async() -> int { - 42 -} - -async fn test() -> Future<()> { - let a = chacha::spawn(|| { - let time = chacha::time(|| { - chacha::asleep(500).await; - }); - - print("a time: {0}\n".format(time)); - - let delta = time - 0.5; - chacha::assert(delta < 0.002); - }); - - let b = chacha::spawn(|| -> () { - let time = chacha::time(|| { - chacha::asleep(1000).await; - }); - - print("b time: {0}\n".format(time)); - - let delta = time - 1.0; - chacha::assert(delta < 0.002); - }); - - a.await; - b.await; -} diff --git a/tests/harness/chacha/async/handler.tao b/tests/harness/chacha/async/handler.tao deleted file mode 100644 index 08c11aa0..00000000 --- a/tests/harness/chacha/async/handler.tao +++ /dev/null @@ -1,176 +0,0 @@ -enum PowerEvent { - On, - Off, -} - -enum Power { - On, - Off, -} - -enum Event { - PowerEvent(PowerEvent), - // This is a no-op for now. - ColorEvent, -} - -struct Color { - red: float, - green: float, - blue: float, -} - -fn assert_off(light: Light) { - // print("💤\n"); - chacha::assert_eq(light.power, Power::Off); - chacha::assert_eq(light.color.red, 0.0); - chacha::assert_eq(light.color.green, 0.0); - chacha::assert_eq(light.color.blue, 0.0); -} - -fn assert_on(light: Light) { - // print("💡\n"); - chacha::assert_eq(light.power, Power::On); - chacha::assert_eq(light.color.red, 1.0); - chacha::assert_eq(light.color.green, 1.0); - chacha::assert_eq(light.color.blue, 1.0); -} -struct Light { - power: Power, - color: Color, -} - -impl Light { - fn new() -> Light { - Light { - power: Power::Off, - color: Color { - red: 0.0, - green: 0.0, - blue: 0.0, - }, - } - } - - async fn send_event(self, event: Event) -> Future<()> { - match event { - Event::PowerEvent(power_event) => { - match power_event { - PowerEvent::On => { - // No point in turning on if we're already on. - if let Power::On = self.power { - print("The light is already on!\n"); - return; - } - - print("Turning on light\n"); - chacha::asleep(500).await; - print("on awake\n"); - print("The light is on\n"); - - self.power = Power::On; - self.color = Color { - red: 1.0, - green: 1.0, - blue: 1.0, - }; - } - PowerEvent::Off => { - if let Power::Off = self.power { - print("The light is already off!\n"); - return; - } - - print("Turning off light\n"); - chacha::asleep(500).await; - print("off awake\n"); - print("The light is off\n"); - - self.power = Power::Off; - self.color = Color { - red: 0.0, - green: 0.0, - blue: 0.0, - }; - } - }; - } - Event::ColorEvent => {} - }; - } -} - -async fn main() -> Future { - let light = Light::new(); - assert_off(light); - - // let a = light.send_event(event); - // let a = light.send_event(event).await; - // let a = light.send_event(event).await.and_then(|| { - // print("and then a\n"); - // // assert_on(light); - // }); - - let a = chacha::spawn(|| { - // let light = Light::new(); - print("a: {0}\n".format(light)); - let event = Event::PowerEvent(PowerEvent::On); - light.send_event(event).await; - assert_on(light); - }); - - let b = chacha::spawn(|| -> () { - chacha::asleep(1000).await; - print("b: {0}\n".format(light)); - // let light = Light::new(); - let event = Event::PowerEvent(PowerEvent::Off); - light.send_event(event).await; - assert_off(light); - }); - - // let a = chacha::spawn(|| { - // // let light = Light::new(); - // print("a: {0}\n".format(light)); - // let event = Event::PowerEvent(PowerEvent::On); - // light.send_event(event).await; - // assert_on(light); - // }); - - // let c = async { - // chacha::asleep(4000).await; - // print("done\n"); - // 42 - // }; - - // print("c: {0}\n".format(c)); - - // c.await - - a.await; - b.await; - - // 🚧 Assert the time taken is correct - - // a.and(b).await; - - // let event = Event::PowerEvent(PowerEvent::Off); - // light.send_event(event); - // light.send_event(event); - // let b = light.send_event(event).and_then(|| { - // print("and then b\n"); - // // assert_off(light); - // }); - - // let c = light.send_event(event).and_then(|| { - // print("and then c\n"); - // // assert_off(light); - // }); - - // print("a: {0}\n".format(a)); - // print("b: {0}\n".format(b)); - // print(b); - // print(c); - - // c.await - 42 -} diff --git a/tests/harness/chacha/complex.stderr b/tests/harness/chacha/complex.stderr deleted file mode 100644 index fa92e782..00000000 --- a/tests/harness/chacha/complex.stderr +++ /dev/null @@ -1,8 +0,0 @@ -Error: no implementation for ::ComplexEx - ╭─[ complex:4:5 ] - │ - 4 │     ComplexEx::this_will_fail(); -  │ ─────────────┬───────────── -  │ ╰─────────────── used here -───╯ - diff --git a/tests/harness/chacha/complex.tao b/tests/harness/chacha/complex.tao deleted file mode 100644 index 73192cc0..00000000 --- a/tests/harness/chacha/complex.tao +++ /dev/null @@ -1,5 +0,0 @@ -struct ComplexEx; - -fn main() { - ComplexEx::this_will_fail(); -} diff --git a/tests/harness/chacha/eps.tao b/tests/harness/chacha/eps.tao deleted file mode 100644 index cf09637a..00000000 --- a/tests/harness/chacha/eps.tao +++ /dev/null @@ -1,12 +0,0 @@ -fn fib(n: int) -> int { - if n <= 1 { - 1 - } else { - fib(n - 1) + fib(n - 2) - } -} - -fn main() { - fib(10); - print(chacha::eps()); -} diff --git a/tests/harness/chacha/eval.ore b/tests/harness/chacha/eval.ore deleted file mode 100644 index c91866f0..00000000 --- a/tests/harness/chacha/eval.ore +++ /dev/null @@ -1,5 +0,0 @@ -fn main() { - let program = "fn main() { let x = 1; print(x); }"; - let ast = chacha::parse(program); - print(ast); -} diff --git a/tests/harness/chacha/format_error.stderr b/tests/harness/chacha/format_error.stderr deleted file mode 100644 index 635252dd..00000000 --- a/tests/harness/chacha/format_error.stderr +++ /dev/null @@ -1,8 +0,0 @@ -Error: No such method: error - ╭─[ format_error:2:13 ] - │ - 2 │     "hello".error(); -  │ ──┬── -  │ ╰──── at or near this location -───╯ - diff --git a/tests/harness/chacha/format_error.tao b/tests/harness/chacha/format_error.tao deleted file mode 100644 index eac84ac4..00000000 --- a/tests/harness/chacha/format_error.tao +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - "hello".error(); -} diff --git a/tests/harness/chacha/sleep.tao b/tests/harness/chacha/sleep.tao deleted file mode 100644 index 82e23134..00000000 --- a/tests/harness/chacha/sleep.tao +++ /dev/null @@ -1,13 +0,0 @@ -fn main() { - let duration = chacha::time(|| { - print("sleeping\n"); - chacha::sleep(420); - print("awake\n"); - }); - - let delta = duration - 0.420; - - print("delta: {0}\n".format(delta)); - - chacha::assert((delta < 0.007) && (delta > 0.0)); -} diff --git a/tests/harness/chacha/time.tao b/tests/harness/chacha/time.tao deleted file mode 100644 index 0193f049..00000000 --- a/tests/harness/chacha/time.tao +++ /dev/null @@ -1,18 +0,0 @@ -fn fib(n: int) -> int { - if n <= 1 { - 1 - } else { - fib(n - 1) + fib(n - 2) - } -} - -fn run_fib() -> int { - fib(10) -} - -fn main() { - print("{0}s\n".format(chacha::time(|| { - fib(10); - }))); - print("{0}s\n".format(chacha::time(run_fib))); -} diff --git a/tests/harness/chacha/time_error.stderr b/tests/harness/chacha/time_error.stderr deleted file mode 100644 index c29bd391..00000000 --- a/tests/harness/chacha/time_error.stderr +++ /dev/null @@ -1,11 +0,0 @@ -Interpreter exited with: -Error: Type mismatch: expected ``, found `()`. - ╭─[ time_error:2:18 ] - │ - 2 │     chacha::time({}); -  │ ─┬ -  │ ╰── expected  -  │ │ -  │ ╰── found () -───╯ - diff --git a/tests/harness/chacha/time_error.tao b/tests/harness/chacha/time_error.tao deleted file mode 100644 index 28c869d4..00000000 --- a/tests/harness/chacha/time_error.tao +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - chacha::time({}); -} diff --git a/tests/harness/chacha/type_of.ore b/tests/harness/chacha/type_of.ore new file mode 100644 index 00000000..582eba3c --- /dev/null +++ b/tests/harness/chacha/type_of.ore @@ -0,0 +1,6 @@ +fn main() { + let s = "42"; + chacha::assert_eq(chacha::type_of(s), "string"); + let i = 42; + chacha::assert_eq(chacha::type_of(i), "int"); +} diff --git a/tests/harness/chacha/typeof_.tao b/tests/harness/chacha/typeof_.tao deleted file mode 100644 index bfad20c1..00000000 --- a/tests/harness/chacha/typeof_.tao +++ /dev/null @@ -1,13 +0,0 @@ -fn main() { - print("{0}\n".format(chacha::typeof(42))); - print("{0}\n".format(chacha::typeof(42.0))); - print("{0}\n".format(chacha::typeof("42"))); - print("{0}\n".format(chacha::typeof(true))); - print("{0}\n".format(chacha::typeof(false))); - // This returns empty. So that's one way to construct an empty, but I'm - // not sure that it should have a type of empty. - print(chacha::typeof({}) as string + "\n"); - // This can be added in once we have tuples. - // print(chacha::typeof(()) + "\n"); - print(chacha::typeof({42}) as string + "\n"); -} \ No newline at end of file diff --git a/tests/harness/double_let.tao b/tests/harness/double_let.tao deleted file mode 100644 index 8f746d64..00000000 --- a/tests/harness/double_let.tao +++ /dev/null @@ -1,5 +0,0 @@ -fn main() { - let a = 1; - let a = 2; - chacha::assert_eq(a, 2); -} diff --git a/tests/harness/empty_func.tao b/tests/harness/empty_func.tao deleted file mode 100644 index f328e4d9..00000000 --- a/tests/harness/empty_func.tao +++ /dev/null @@ -1 +0,0 @@ -fn main() {} diff --git a/tests/harness/bad_impl_no_block.tao b/tests/harness/errors/bad_impl_no_block.ore similarity index 100% rename from tests/harness/bad_impl_no_block.tao rename to tests/harness/errors/bad_impl_no_block.ore diff --git a/tests/harness/bad_impl_no_block.stderr b/tests/harness/errors/bad_impl_no_block.stderr similarity index 92% rename from tests/harness/bad_impl_no_block.stderr rename to tests/harness/errors/bad_impl_no_block.stderr index 9481fa11..ddcb9783 100644 --- a/tests/harness/bad_impl_no_block.stderr +++ b/tests/harness/errors/bad_impl_no_block.stderr @@ -5,7 +5,7 @@  │ ─┬─  │ ╰─── Unexpected token Foo ───╯ -Error: Unexpected token in input, expected struct, Fn, impl, use +Error: Unexpected token in input, expected use, Fn, impl, struct ╭─[ bad_impl_no_block:1:6 ] │ 1 │ impl Foo diff --git a/tests/harness/bad_impl_no_ident.tao b/tests/harness/errors/bad_impl_no_ident.ore similarity index 100% rename from tests/harness/bad_impl_no_ident.tao rename to tests/harness/errors/bad_impl_no_ident.ore diff --git a/tests/harness/bad_impl_no_ident.stderr b/tests/harness/errors/bad_impl_no_ident.stderr similarity index 92% rename from tests/harness/bad_impl_no_ident.stderr rename to tests/harness/errors/bad_impl_no_ident.stderr index 5e588c1b..109760fd 100644 --- a/tests/harness/bad_impl_no_ident.stderr +++ b/tests/harness/errors/bad_impl_no_ident.stderr @@ -5,7 +5,7 @@  │ ──┬─  │ ╰─── Unexpected token impl ───╯ -Error: Unexpected token in input, expected impl, struct, Fn, use +Error: Unexpected token in input, expected use, Fn, impl, struct ╭─[ bad_impl_no_ident:1:6 ] │ 1 │ impl {} diff --git a/tests/harness/invalid_return.tao b/tests/harness/errors/invalid_return.ore similarity index 100% rename from tests/harness/invalid_return.tao rename to tests/harness/errors/invalid_return.ore diff --git a/tests/harness/invalid_return.stderr b/tests/harness/errors/invalid_return.stderr similarity index 100% rename from tests/harness/invalid_return.stderr rename to tests/harness/errors/invalid_return.stderr diff --git a/tests/harness/invalid_type.tao b/tests/harness/errors/invalid_type.ore similarity index 100% rename from tests/harness/invalid_type.tao rename to tests/harness/errors/invalid_type.ore diff --git a/tests/harness/errors/invalid_type.std_err b/tests/harness/errors/invalid_type.std_err new file mode 100644 index 00000000..25fb790c --- /dev/null +++ b/tests/harness/errors/invalid_type.std_err @@ -0,0 +1,118 @@ +Error: Unknown type: `i32`. + ╭─[ invalid_type:2:8 ] + │ + 2 │     a: i32, +  │ ─┬─ +  │ ╰─── unknown type i32 +  │ +  │ Note: try `int` +───╯ + +Error: Unknown type: `Bar`. + ╭─[ invalid_type:4:8 ] + │ + 4 │     b: Bar, +  │ ─┬─ +  │ ╰─── unknown type Bar +───╯ + +Error: Unknown type: `f64`. + ╭─[ invalid_type:20:11 ] + │ + 20 │ fn foo(a: f64, b: bool, c: u8) {} +  │ ─┬─ +  │ ╰─── unknown type f64 +  │ +  │ Note: try `float` +────╯ + +Error: Unknown type: `Bar`. + ╭─[ invalid_type:23:13 ] + │ + 23 │ fn bar() -> Bar {} +  │ ──┬─ +  │ ╰─── unknown type Bar +────╯ + +Error: Unknown type: `f64`. + ╭─[ invalid_type:9:21 ] + │ + 9 │     fn foo(self, a: f64, b: bool, c: u8) {} +  │ ─┬─ +  │ ╰─── unknown type f64 +  │ +  │ Note: try `float` +───╯ + +Error: Unknown type: `u8`. + ╭─[ invalid_type:9:38 ] + │ + 9 │     fn foo(self, a: f64, b: bool, c: u8) {} +  │ ─┬ +  │ ╰── unknown type u8 +  │ +  │ Note: try `int` +───╯ + +Error: Unknown type: `Bar`. + ╭─[ invalid_type:12:21 ] + │ + 12 │     fn bar(self) -> Bar {} +  │ ──┬─ +  │ ╰─── unknown type Bar +────╯ + +Error: Unknown type: `Baz`. + ╭─[ invalid_type:16:9 ] + │ + 16 │         Baz {} +  │ ─┬─ +  │ ╰─── unknown type Baz +────╯ + +Error: Unknown type: `f64`. + ╭─[ invalid_type:20:11 ] + │ + 20 │ fn foo(a: f64, b: bool, c: u8) {} +  │ ─┬─ +  │ ╰─── unknown type f64 +  │ +  │ Note: try `float` +────╯ + +Error: Unknown type: `u8`. + ╭─[ invalid_type:20:28 ] + │ + 20 │ fn foo(a: f64, b: bool, c: u8) {} +  │ ─┬ +  │ ╰── unknown type u8 +  │ +  │ Note: try `int` +────╯ + +Error: Unknown type: `Bar`. + ╭─[ invalid_type:23:13 ] + │ + 23 │ fn bar() -> Bar {} +  │ ──┬─ +  │ ╰─── unknown type Bar +────╯ + +Error: Unknown type: `Baz`. + ╭─[ invalid_type:27:5 ] + │ + 27 │     Baz {} +  │ ─┬─ +  │ ╰─── unknown type Baz +────╯ + +Error: Unknown type: `i32`. + ╭─[ invalid_type:33:12 ] + │ + 33 │     let a: i32 = 1; +  │ ──┬─ +  │ ╰─── unknown type i32 +  │ +  │ Note: try `int` +────╯ + diff --git a/tests/harness/invalid_type.stderr b/tests/harness/errors/invalid_type.stderr similarity index 84% rename from tests/harness/invalid_type.stderr rename to tests/harness/errors/invalid_type.stderr index 4ba1a735..25fb790c 100644 --- a/tests/harness/invalid_type.stderr +++ b/tests/harness/errors/invalid_type.stderr @@ -16,6 +16,24 @@  │ ╰─── unknown type Bar ───╯ +Error: Unknown type: `f64`. + ╭─[ invalid_type:20:11 ] + │ + 20 │ fn foo(a: f64, b: bool, c: u8) {} +  │ ─┬─ +  │ ╰─── unknown type f64 +  │ +  │ Note: try `float` +────╯ + +Error: Unknown type: `Bar`. + ╭─[ invalid_type:23:13 ] + │ + 23 │ fn bar() -> Bar {} +  │ ──┬─ +  │ ╰─── unknown type Bar +────╯ + Error: Unknown type: `f64`. ╭─[ invalid_type:9:21 ] │ diff --git a/tests/harness/type_mismatch.tao b/tests/harness/errors/type_mismatch.ore similarity index 100% rename from tests/harness/type_mismatch.tao rename to tests/harness/errors/type_mismatch.ore diff --git a/tests/harness/type_mismatch.stderr b/tests/harness/errors/type_mismatch.stderr similarity index 100% rename from tests/harness/type_mismatch.stderr rename to tests/harness/errors/type_mismatch.stderr diff --git a/tests/harness/type_mismatch_result.tao b/tests/harness/errors/type_mismatch_result.ore similarity index 100% rename from tests/harness/type_mismatch_result.tao rename to tests/harness/errors/type_mismatch_result.ore diff --git a/tests/harness/type_mismatch_result.stderr b/tests/harness/errors/type_mismatch_result.stderr similarity index 100% rename from tests/harness/type_mismatch_result.stderr rename to tests/harness/errors/type_mismatch_result.stderr diff --git a/tests/harness/expression/for/nested.tao b/tests/harness/expression/for/nested.tao index 15f0209a..3eb0554a 100644 --- a/tests/harness/expression/for/nested.tao +++ b/tests/harness/expression/for/nested.tao @@ -1,7 +1,7 @@ fn main() { for a in 0..10 { for b in 0..10 { - print("{0} + {1} = {2}\n".format(a, b, a + b)); + print("${a} + ${b} = ${a + b}\n"); } } } diff --git a/tests/harness/expression/if/if_let.tao b/tests/harness/expression/if/if_let.tao deleted file mode 100644 index fe7c47a7..00000000 --- a/tests/harness/expression/if/if_let.tao +++ /dev/null @@ -1,54 +0,0 @@ -use std::option::Option; - -fn main() { - let x = Option::::None; - let z = if let Option::::None = x { - print("None\n"); - chacha::assert_eq(true, true); - 0 - } else { - print("Some\n"); - chacha::assert_eq(true, false); - 1 - }; - chacha::assert_eq(z, 0); - - let x = Option::::Some("Hello world!"); - let z = if let Option::::Some(str) = x { - print("Some({0})\n".format(str)); - chacha::assert_eq(true, true); - 0 - } else { - print("None\n"); - chacha::assert_eq(true, false); - 1 - }; - chacha::assert_eq(z, 0); - - let y = Option::::Some(42); - // let y = Option::Some::(42); - let z = if let Option::::Some(a) = y { - // if let Option::Some::(y) = y { - print("Some({0})\n".format(a)); - chacha::assert_eq(true, true); - a - } else { - print("None\n"); - chacha::assert_eq(true, false); - 0 - }; - chacha::assert_eq(z, 42); - - let y = Option::::None; - // let y = Option::Some::(42); - let z = if let Option::::None = y { - print("None\n"); - chacha::assert_eq(true, true); - y - } else { - print("Some\n"); - chacha::assert_eq(true, false); - Option::::Some(0) - }; - chacha::assert_eq(z, Option::::None); -} diff --git a/tests/harness/expression/index/index_vec_by_range.tao b/tests/harness/expression/index/index_vec_by_range.tao deleted file mode 100644 index 65a4a9dd..00000000 --- a/tests/harness/expression/index/index_vec_by_range.tao +++ /dev/null @@ -1,5 +0,0 @@ -fn main() { - let a = [1, 2, 3, 4, 5]; - let b = a[1..3]; - chacha::assert_eq(b, [2, 3]); -} diff --git a/tests/harness/expression/index/string_index_out_of_bounds.stderr b/tests/harness/expression/index/string_index_out_of_bounds.stderr index 0a8f02d5..be0c38f4 100644 --- a/tests/harness/expression/index/string_index_out_of_bounds.stderr +++ b/tests/harness/expression/index/string_index_out_of_bounds.stderr @@ -1,4 +1,4 @@ -Interpreter exited with: +VM exited with: Error: index out of bounds 💥 ╭─[ string_index_out_of_bounds:3:30 ] │ diff --git a/tests/harness/expression/index/string_range_oob.stderr b/tests/harness/expression/index/string_range_oob.stderr index cc91f750..15e06d3c 100644 --- a/tests/harness/expression/index/string_range_oob.stderr +++ b/tests/harness/expression/index/string_range_oob.stderr @@ -1,10 +1,10 @@ -Interpreter exited with: +VM exited with: Error: index out of bounds 💥 - ╭─[ string_range_oob:3:16 ] + ╭─[ string_range_oob:3:15 ] │ - 3 │     let b = a[2..15]; -  │ ──┬─ -  │ ╰─── the index is 15 + 3 │     let b = a[2..15]; +  │ ┬ +  │ ╰── the index is 15  │  │ Note: and the length of the array is 13 ───╯ diff --git a/tests/harness/expression/index/vec_index_out_of_bounds.stderr b/tests/harness/expression/index/vec_index_out_of_bounds.stderr index 1567d74e..533f8963 100644 --- a/tests/harness/expression/index/vec_index_out_of_bounds.stderr +++ b/tests/harness/expression/index/vec_index_out_of_bounds.stderr @@ -1,4 +1,4 @@ -Interpreter exited with: +VM exited with: Error: index out of bounds 💥 ╭─[ vec_index_out_of_bounds:3:30 ] │ diff --git a/tests/harness/expression/index/vec_range_oob.stderr b/tests/harness/expression/index/vec_range_oob.stderr index 2a99571a..f1abd548 100644 --- a/tests/harness/expression/index/vec_range_oob.stderr +++ b/tests/harness/expression/index/vec_range_oob.stderr @@ -1,10 +1,10 @@ -Interpreter exited with: +VM exited with: Error: index out of bounds 💥 - ╭─[ vec_range_oob:3:16 ] + ╭─[ vec_range_oob:3:15 ] │ - 3 │     let b = a[2..5]; -  │ ─┬─ -  │ ╰─── the index is 5 + 3 │     let b = a[2..5]; +  │ ┬ +  │ ╰── the index is 5  │  │ Note: and the length of the array is 4 ───╯ diff --git a/tests/harness/expression/match/option.tao b/tests/harness/expression/match/option.tao deleted file mode 100644 index d52df3e5..00000000 --- a/tests/harness/expression/match/option.tao +++ /dev/null @@ -1,34 +0,0 @@ -enum Option { - Some(T), - None, -} - -fn main() { - let x = Option::::None; - print(x); - let zebra = match x { - Option::::None => { - chacha::assert_eq(true, true); - false - } - Option::::Some(y) => { - print("top: {0}\n".format(y)); - chacha::assert_eq(true, false); - true - } - }; - chacha::assert_eq(zebra, false); - print(zebra); - - x = Option::::Some("hello"); - print(x); - match x { - Option::::None => { - chacha::assert_eq(" not none", "oops"); - } - Option::::Some(y) => { - print("bottom: {0}\n".format(y)); - chacha::assert_eq(y, "hello"); - } - }; -} diff --git a/tests/harness/extensions/test_ffi/test.ore b/tests/harness/extensions/test_ffi/test.ore new file mode 100644 index 00000000..623817ad --- /dev/null +++ b/tests/harness/extensions/test_ffi/test.ore @@ -0,0 +1,18 @@ +use test_ffi::TestFfi; + +fn main() { + let ffi = TestFfi::new(); + + chacha::assert(ffi.test_bool(true)); + chacha::assert(!ffi.test_bool(false)); + chacha::assert_eq(ffi.test_empty(), ()); + chacha::assert_eq(ffi.test_float(42.0), 42.0); + chacha::assert_eq(ffi.test_integer(42), 42); + let test = ffi.test_list([1, 2, 3]); + print("test ${test}\n"); + print("${chacha::type_of(test)}\n"); + let ground_truth = [1, 2, 3]; + print("ground_truth ${ground_truth}\n"); + print("${chacha::type_of(ground_truth}\n"); + chacha::assert_eq(test, ground_truth); +} diff --git a/tests/harness/failing/assign_to_func_field.tao b/tests/harness/failing/assign_to_func_field.tao deleted file mode 100644 index 4bccfe5c..00000000 --- a/tests/harness/failing/assign_to_func_field.tao +++ /dev/null @@ -1,28 +0,0 @@ -struct Point { - x_: int, - y_: int, -} - -impl Point { - fn new(x: int, y: int) -> Point { - Point { x_: x, y_: y } - } - - fn x(self) -> int { - self.x_ - } - - fn y(self) -> int { - self.y_ - } -} - -fn main() { - let p = Point::new(42, 69); - print(p); - print(p.x); - print(p.x()); - p.x = 8; - print(p); - chacha::assert_eq(false, true); -} diff --git a/tests/harness/failing/if_no_conditional.tao b/tests/harness/failing/if_no_conditional.tao deleted file mode 100644 index 9030a6ad..00000000 --- a/tests/harness/failing/if_no_conditional.tao +++ /dev/null @@ -1,5 +0,0 @@ -fn main() { - if { - chacha::assert_eq(true, true); - } -} \ No newline at end of file diff --git a/tests/harness/failing/use_before_def.tao b/tests/harness/failing/use_before_def.tao deleted file mode 100644 index 8140dfee..00000000 --- a/tests/harness/failing/use_before_def.tao +++ /dev/null @@ -1,9 +0,0 @@ -enum Option { - Some(T), - None, -} - -fn main() { - let a = Option::Some(42); - print(a == d); -} diff --git a/tests/harness/fib.tao b/tests/harness/fib.tao deleted file mode 100644 index fc16ce73..00000000 --- a/tests/harness/fib.tao +++ /dev/null @@ -1,16 +0,0 @@ -fn fib2(n: int) -> int { - if n <= 1 { - n - } else { - fib2(n - 1) + fib2(n - 2) - } -} - -fn main() -> int { - let n = 5; - print("Calculating fibonacci number {0}:\n".format(n)); - let result = fib2(n as int); - print(result as string + "\n"); - chacha::assert_eq(result, 5); - result -} diff --git a/tests/harness/func_call_type.tao b/tests/harness/func_call_type.tao deleted file mode 100644 index 9fdac7c0..00000000 --- a/tests/harness/func_call_type.tao +++ /dev/null @@ -1,7 +0,0 @@ -fn main() { - fn foo(a: int) -> string { - let b = a * 2; - "The value of b is {1}. This is here just to confuse you, {0}".format("hah!", b) - } - print(foo(21) + "\n"); -} diff --git a/tests/harness/hello_world.stdout b/tests/harness/hello_world.stdout deleted file mode 100644 index 09146a79..00000000 --- a/tests/harness/hello_world.stdout +++ /dev/null @@ -1 +0,0 @@ -Hello, world! \ No newline at end of file diff --git a/tests/harness/hello_world.tao b/tests/harness/hello_world.tao deleted file mode 100644 index 8352ba6f..00000000 --- a/tests/harness/hello_world.tao +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - print("Hello, world!"); -} diff --git a/tests/harness/item/enum/just_items.tao b/tests/harness/item/enum/just_items.tao deleted file mode 100644 index b17325b2..00000000 --- a/tests/harness/item/enum/just_items.tao +++ /dev/null @@ -1,17 +0,0 @@ -fn main() {} - -enum Foo { - Bar, - Baz, -} - -enum Bar { - Foo(Foo), - Bar { a: int, b: int }, - Baz(Baz), -} - -struct Baz { - a: int, - b: int, -} diff --git a/tests/harness/item/enum/plain_enum.tao b/tests/harness/item/enum/plain_enum.tao deleted file mode 100644 index eda9b7c0..00000000 --- a/tests/harness/item/enum/plain_enum.tao +++ /dev/null @@ -1,14 +0,0 @@ -enum Foo { - Bar, - Baz, -} - -fn main() { - let a = Foo::Bar; - let b = Foo::Baz; - - chacha::assert_eq(a, Foo::Bar); - chacha::assert_eq(b, Foo::Baz); - chacha::assert_eq("a = {0}".format(a), "a = Foo::Bar"); - chacha::assert_eq("b = {0}".format(b), "b = Foo::Baz"); -} diff --git a/tests/harness/item/enum/struct_enum.tao b/tests/harness/item/enum/struct_enum.tao deleted file mode 100644 index e780dee8..00000000 --- a/tests/harness/item/enum/struct_enum.tao +++ /dev/null @@ -1,20 +0,0 @@ -struct A { - a: int, - b: int, -} - -enum Foo { - Bar { a: int, b: int }, - Baz, -} - -fn main() { - let a = Foo::Bar { a: 42, b: 69 }; - let b = Foo::Baz; - - chacha::assert_eq(a, Foo::Bar { a: 42, b: 69 }); - chacha::assert_eq(b, Foo::Baz); - chacha::assert_eq("a = {0}".format(a), "a = Foo::Bar { a: 42, b: 69 }"); - chacha::assert_eq("b = {0}".format(b), "b = Foo::Baz"); - print("{0}\n".format(a)); -} diff --git a/tests/harness/item/enum/tuple_enum.tao b/tests/harness/item/enum/tuple_enum.tao deleted file mode 100644 index ddaa20e0..00000000 --- a/tests/harness/item/enum/tuple_enum.tao +++ /dev/null @@ -1,36 +0,0 @@ -struct Baz { - a: int, - b: int, -} -enum Foo { - Bar, - Baz, -} - -enum Bar { - Plain, - Int(int), - String(string), - Enum(Foo), - Struct(Baz), -} - -fn main() { - let a = Bar::Plain; - let b = Bar::Int(42); - let c = Bar::String("Hello world!"); - let d = Bar::Enum(Foo::Bar); - let e = Bar::Struct(Baz { a: 1, b: 2 }); - - chacha::assert_eq(a, Bar::Plain); - chacha::assert_eq(b, Bar::Int(42)); - chacha::assert_eq(c, Bar::String("Hello world!")); - chacha::assert_eq(d, Bar::Enum(Foo::Bar)); - chacha::assert_eq(e, Bar::Struct(Baz { a: 1, b: 2 })); - - chacha::assert_eq("a = {0}".format(a), "a = Bar::Plain"); - chacha::assert_eq("b = {0}".format(b), "b = Bar::Int(42)"); - // chacha::assert_eq("c = {0}".format(c), "c = Bar::String(\"Hello world!\")"); - chacha::assert_eq("d = {0}".format(d), "d = Bar::Enum(Foo::Bar)"); - chacha::assert_eq("e = {0}".format(e), "e = Bar::Struct(Baz { a: 1, b: 2 })"); -} diff --git a/tests/harness/item/function/failing/multiple_definitions.tao b/tests/harness/item/function/failing/multiple_definitions.tao deleted file mode 100644 index 218e4ce6..00000000 --- a/tests/harness/item/function/failing/multiple_definitions.tao +++ /dev/null @@ -1,14 +0,0 @@ -fn foo() { - print("foo"); -} -fn foo() { - print("foo"); -} -fn main() { - fn foo() { - print("foo"); - } - fn foo() { - print("foo"); - } -} diff --git a/tests/harness/item/impl/bad_self.stderr b/tests/harness/item/impl/bad_self.stderr deleted file mode 100644 index 7d5cad8f..00000000 --- a/tests/harness/item/impl/bad_self.stderr +++ /dev/null @@ -1,8 +0,0 @@ -Error: self may only be used inside of an implementation block - ╭─[ bad_self:1:12 ] - │ - 1 │ fn no_self(self) {} -  │ ──┬─ -  │ ╰─── used here -───╯ - diff --git a/tests/harness/item/impl/bad_self.tao b/tests/harness/item/impl/bad_self.tao deleted file mode 100644 index 4d32635e..00000000 --- a/tests/harness/item/impl/bad_self.tao +++ /dev/null @@ -1,3 +0,0 @@ -fn no_self(self) {} - -fn main() {} diff --git a/tests/harness/item/impl/impl_block_error_e.stderr b/tests/harness/item/impl/impl_block_error_e.stderr deleted file mode 100644 index 376ccc6e..00000000 --- a/tests/harness/item/impl/impl_block_error_e.stderr +++ /dev/null @@ -1,10 +0,0 @@ -Error: implementation blocks may only contain functions - ╭─[ impl_block_error_e:8:5 ] - │ -  8 │ ╭─▶     struct Bar {} -  ┆ ┆ - 10 │ ├─▶     fn bar(self) -> Self { -  │ │ -  │ ╰──────────────────────────────── used here -────╯ - diff --git a/tests/harness/item/impl/impl_block_error_e.tao b/tests/harness/item/impl/impl_block_error_e.tao deleted file mode 100644 index 5f6c2feb..00000000 --- a/tests/harness/item/impl/impl_block_error_e.tao +++ /dev/null @@ -1,13 +0,0 @@ -struct Foo {} - -impl Foo { - fn new() -> Self { - Foo {} - } - - struct Bar {} - - fn bar(self) -> Self { - self - } -} \ No newline at end of file diff --git a/tests/harness/item/struct/incomplete_struct_0.stderr b/tests/harness/item/struct/incomplete_struct_0.stderr deleted file mode 100644 index 74003c4f..00000000 --- a/tests/harness/item/struct/incomplete_struct_0.stderr +++ /dev/null @@ -1,18 +0,0 @@ -Error: Unclosed delimiter { - ╭─[ incomplete_struct_0:2:13 ] - │ - 1 │ ╭─▶ struct Foo { - 2 │ ├─▶     bar: int, -  │ │ ┬ -  │ │ ╰─── Must be closed before this , -  │ │ -  │ ╰─────────────────── Unclosed delimiter { -───╯ -Error: Unexpected token in input, expected struct, use, Fn, impl - ╭─[ incomplete_struct_0:2:13 ] - │ - 2 │     bar: int, -  │ ┬ -  │ ╰── Unexpected token , -───╯ - diff --git a/tests/harness/item/struct/incomplete_struct_0.tao b/tests/harness/item/struct/incomplete_struct_0.tao deleted file mode 100644 index 56b44818..00000000 --- a/tests/harness/item/struct/incomplete_struct_0.tao +++ /dev/null @@ -1,2 +0,0 @@ -struct Foo { - bar: int, diff --git a/tests/harness/item/struct/incomplete_struct_1.stderr b/tests/harness/item/struct/incomplete_struct_1.stderr deleted file mode 100644 index 2c552bba..00000000 --- a/tests/harness/item/struct/incomplete_struct_1.stderr +++ /dev/null @@ -1,18 +0,0 @@ -Error: Unclosed delimiter { - ╭─[ incomplete_struct_1:2:10 ] - │ - 1 │ ╭─▶ struct Foo { - 2 │ ├─▶     bar: int -  │ │ ─┬─ -  │ │ ╰──── Must be closed before this int -  │ │ -  │ ╰────────────────── Unclosed delimiter { -───╯ -Error: Unexpected token in input, expected struct, use, Fn, impl - ╭─[ incomplete_struct_1:2:10 ] - │ - 2 │     bar: int -  │ ─┬─ -  │ ╰─── Unexpected token int -───╯ - diff --git a/tests/harness/item/struct/incomplete_struct_1.tao b/tests/harness/item/struct/incomplete_struct_1.tao deleted file mode 100644 index 29a63e20..00000000 --- a/tests/harness/item/struct/incomplete_struct_1.tao +++ /dev/null @@ -1,2 +0,0 @@ -struct Foo { - bar: int diff --git a/tests/harness/item/struct/incomplete_struct_2.stderr b/tests/harness/item/struct/incomplete_struct_2.stderr deleted file mode 100644 index d9609949..00000000 --- a/tests/harness/item/struct/incomplete_struct_2.stderr +++ /dev/null @@ -1,15 +0,0 @@ -Error: Unexpected token in input, expected 'float', 'Option', '[T]', 'string', 'bool', 'int', 'Uuid' - ╭─[ incomplete_struct_2:2:8 ] - │ - 2 │     bar: -  │ ┬ -  │ ╰── Unexpected token : -───╯ -Error: Unexpected token in input, expected Fn, use, impl, struct - ╭─[ incomplete_struct_2:2:8 ] - │ - 2 │     bar: -  │ ┬ -  │ ╰── Unexpected token : -───╯ - diff --git a/tests/harness/item/struct/incomplete_struct_2.tao b/tests/harness/item/struct/incomplete_struct_2.tao deleted file mode 100644 index 1e57833c..00000000 --- a/tests/harness/item/struct/incomplete_struct_2.tao +++ /dev/null @@ -1,2 +0,0 @@ -struct Foo { - bar: diff --git a/tests/harness/item/struct/incomplete_struct_3.stderr b/tests/harness/item/struct/incomplete_struct_3.stderr deleted file mode 100644 index e2af8159..00000000 --- a/tests/harness/item/struct/incomplete_struct_3.stderr +++ /dev/null @@ -1,15 +0,0 @@ -Error: Unexpected token in input, expected ':' - ╭─[ incomplete_struct_3:2:5 ] - │ - 2 │     bar -  │ ─┬─ -  │ ╰─── Unexpected token bar -───╯ -Error: Unexpected token in input, expected impl, Fn, struct, use - ╭─[ incomplete_struct_3:2:5 ] - │ - 2 │     bar -  │ ─┬─ -  │ ╰─── Unexpected token bar -───╯ - diff --git a/tests/harness/item/struct/incomplete_struct_3.tao b/tests/harness/item/struct/incomplete_struct_3.tao deleted file mode 100644 index 4110bf8b..00000000 --- a/tests/harness/item/struct/incomplete_struct_3.tao +++ /dev/null @@ -1,2 +0,0 @@ -struct Foo { - bar diff --git a/tests/harness/item/struct/simple.tao b/tests/harness/item/struct/simple.tao deleted file mode 100644 index bfb706fb..00000000 --- a/tests/harness/item/struct/simple.tao +++ /dev/null @@ -1,14 +0,0 @@ -struct Simple { - value: int, -} - -impl Simple { - fn print_it(self) { - print("Simple({0})\n".format(self.value)); - } -} - -fn main() { - let a = Simple { value: 42 }; - a.print_it(); -} diff --git a/tests/harness/items_in_func.tao b/tests/harness/items_in_func.tao deleted file mode 100644 index 3c9eeabe..00000000 --- a/tests/harness/items_in_func.tao +++ /dev/null @@ -1,51 +0,0 @@ -fn main() { - struct Point { - x: int, - y: int, - } - - impl Point { - fn new(x: int, y: int) -> Point { - Point { x: x, y: y } - } - - fn x(self) -> int { - self.x - } - - fn y(self) -> int { - self.y - } - } - - struct Line { - start: Point, - end: Point, - } - - impl Line { - fn new(start: Point, end: Point) -> Line { - Line { - start: start, - end: end, - } - } - - fn midpoint(self) -> Point { - Point::new( - // 🚧 The casting is because of a bug. - (self.start.x() + self.end.x()) as int / 2, - (self.start.y() + self.end.y()) as int / 2, - ) - } - } - - // create a line and get its midpoint - let line = Line::new(Point::new(1, 2), Point::new(3, 4)); - let midpoint = line.midpoint(); - - chacha::assert_eq(midpoint.x(), 2); - chacha::assert_eq(midpoint.y(), 3); - - print("midpoint is ({0}, {1})".format(midpoint.x(), midpoint.y())); -} diff --git a/tests/harness/lambda.tao b/tests/harness/lambda.tao deleted file mode 100644 index 4904f314..00000000 --- a/tests/harness/lambda.tao +++ /dev/null @@ -1,32 +0,0 @@ -fn runner(func: fn(string, int) -> float) { - chacha::assert_eq(3.14, func("foo", 77)); -} - -fn main() { - let answer = 42; - - let foo = |bar: int| -> int { - // this comment is to trick the formatter - bar - }; - chacha::assert_eq(foo(answer), answer); - - let bar = || -> int { foo(answer) as int }; - chacha::assert_eq(bar(), answer); - - let baz = |name: string| -> string { "hello, {0}! The answer is {1}".format(name, answer) }; - chacha::assert_eq(baz("world"), "hello, world! The answer is 42"); - - runner(|s: string, i: int| -> float { - chacha::assert_eq(s, "foo"); - chacha::assert_eq(i, 77); - - chacha::assert_eq(answer, 42); - // This is pretty lame. I think the extent of the type checking machinery - // is going to need to be updated. See https://github.com/uberFoo/dwarf/issues/3. - answer = 69; - 3.14 - }); - - chacha::assert_eq(answer, 69); -} diff --git a/tests/harness/mandelbrot.tao b/tests/harness/mandelbrot.tao deleted file mode 100644 index 095fc9f3..00000000 --- a/tests/harness/mandelbrot.tao +++ /dev/null @@ -1,96 +0,0 @@ -struct Complex { - re: float, - im: float, -} - -impl Complex { - fn zero() -> Self { - Complex { re: 0.0, im: 0.0 } - } - - fn add(self, other: Complex) -> Complex { - Complex { - re: self.re + other.re, - im: self.im + other.im, - } - } - - fn square(self) -> Complex { - Complex { - re: self.re * self.re - self.im * self.im, - im: 2.0 * self.re * self.im, - } - } - - fn add_2(self, other: Complex) { - self.re = self.re + other.re; - self.im = self.im + other.im; - } - - fn square_2(self) { - let re = self.re * self.re - self.im * self.im; - self.im = 2.0 * self.re * self.im; - self.re = re; - } - - fn norm_squared(self) -> float { - self.re * self.re + self.im * self.im - } -} - -fn pixel_to_point( - width: int, - height: int, - pixel_x: int, - pixel_y: int, - upper_left: Complex, - lower_right: Complex, -) -> Complex { - let w = lower_right.re - upper_left.re; - let h = upper_left.im - lower_right.im; - Complex { - re: upper_left.re + pixel_x as float * w / width as float, - im: upper_left.im - pixel_y as float * h / height as float, - } -} - -fn escape_time(c: Complex, limit: int) -> int { - let z = Complex::zero(); - for i in 1..limit { - // 🚧 this does not work - // let z = z.square_2().add_2(c); - z.square_2(); - z.add_2(c); - // ComplexEx::square(z); - // ComplexEx::add(z, c); - // let foo = ComplexEx::norm_squared(z); - let foo = z.norm_squared(); - // 🚧 this is wrong. - if foo as float > 4.0 { - // if z.norm_squared(z) > 4.0 { - return i; - } - } - 0 -} - -fn main() { - let width = 7; - let height = 2; - let upper_left = Complex { re: -2.5, im: 1.0 }; - let lower_right = Complex { re: 2.0, im: -1.0 }; - - for row in 0..height { - for column in 0..width { - let point = pixel_to_point(width, height, column, row, upper_left, lower_right); - - let time = escape_time(point, 255); - if time as int > 0 { - print(" "); - } else { - print("*"); - } - } - print("\n"); - } -} diff --git a/tests/harness/nested_value_deref.tao b/tests/harness/nested_value_deref.tao deleted file mode 100644 index ff62841e..00000000 --- a/tests/harness/nested_value_deref.tao +++ /dev/null @@ -1,22 +0,0 @@ -struct Bar { - value: int, -} - -impl Bar { - fn new(value: int) -> Bar { - Bar { value: value } - } - - fn value(self) -> int { - self.value - } -} - -struct Foo { - bar: Bar, -} - -fn main() { - let foo = Foo { bar: Bar::new(42) }; - chacha::assert_eq(foo.bar.value(), 42); -} diff --git a/tests/harness/no_struct.stderr b/tests/harness/no_struct.stderr deleted file mode 100644 index 06ba9c9e..00000000 --- a/tests/harness/no_struct.stderr +++ /dev/null @@ -1,10 +0,0 @@ -Error: Unknown type: `Complex`. - ╭─[ no_struct:2:1 ] - │ - 2 │ ╭─▶ impl Complex { -  ┆ ┆ - 9 │ ├─▶ } -  │ │ -  │ ╰─────── unknown type Complex -───╯ - diff --git a/tests/harness/no_struct.tao b/tests/harness/no_struct.tao deleted file mode 100644 index effd6f2f..00000000 --- a/tests/harness/no_struct.tao +++ /dev/null @@ -1,9 +0,0 @@ -/// This test throws an error. -impl Complex { - fn add(self, other: Complex) -> Complex { - Complex { - re: self.re + other.re, - im: self.im + other.im, - } - } -} diff --git a/tests/harness/no_such_method.stderr b/tests/harness/no_such_method.stderr deleted file mode 100644 index 615213e8..00000000 --- a/tests/harness/no_such_method.stderr +++ /dev/null @@ -1,8 +0,0 @@ -Error: No such method: hello - ╭─[ no_such_method:22:7 ] - │ - 22 │     p.hello(); -  │ ──┬── -  │ ╰──── at or near this location -────╯ - diff --git a/tests/harness/no_such_method.tao b/tests/harness/no_such_method.tao deleted file mode 100644 index 8996ba2e..00000000 --- a/tests/harness/no_such_method.tao +++ /dev/null @@ -1,23 +0,0 @@ -struct Point { - x: int, - y: int, -} - -impl Point { - fn new(x: int, y: int) -> Point { - Point { x: x, y: y } - } - - fn x(self) -> int { - self.x - } - - fn y(self) -> int { - self.y - } -} - -fn main() { - let p = Point::new(42, 69); - p.hello(); -} diff --git a/tests/harness/parser/if_no_block.stderr b/tests/harness/parser/if_no_block.stderr deleted file mode 100644 index 622fc923..00000000 --- a/tests/harness/parser/if_no_block.stderr +++ /dev/null @@ -1,15 +0,0 @@ -Error: Unexpected token in input, expected - ╭─[ if_no_block:2:8 ] - │ - 2 │     if true -  │ ──┬─ -  │ ╰─── Unexpected token true -───╯ -Error: Unexpected token in input, expected Fn, impl, struct, use - ╭─[ if_no_block:3:1 ] - │ - 3 │ } -  │ ┬ -  │ ╰── Unexpected token } -───╯ - diff --git a/tests/harness/parser/if_no_block.tao b/tests/harness/parser/if_no_block.tao deleted file mode 100644 index 7cbcdca2..00000000 --- a/tests/harness/parser/if_no_block.tao +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - if true -} \ No newline at end of file diff --git a/tests/harness/parser/if_no_conditional.stderr b/tests/harness/parser/if_no_conditional.stderr deleted file mode 100644 index e15ed3c5..00000000 --- a/tests/harness/parser/if_no_conditional.stderr +++ /dev/null @@ -1,15 +0,0 @@ -Error: Unexpected token in input, expected - ╭─[ if_no_conditional:2:5 ] - │ - 2 │     if -  │ ─┬ -  │ ╰── Unexpected token if -───╯ -Error: Unexpected token in input, expected Fn, use, struct, impl - ╭─[ if_no_conditional:3:1 ] - │ - 3 │ } -  │ ┬ -  │ ╰── Unexpected token } -───╯ - diff --git a/tests/harness/parser/if_no_conditional.tao b/tests/harness/parser/if_no_conditional.tao deleted file mode 100644 index 4885d591..00000000 --- a/tests/harness/parser/if_no_conditional.tao +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - if -} \ No newline at end of file diff --git a/tests/harness/parser/if_no_else_block.stderr b/tests/harness/parser/if_no_else_block.stderr deleted file mode 100644 index fb24b9cc..00000000 --- a/tests/harness/parser/if_no_else_block.stderr +++ /dev/null @@ -1,15 +0,0 @@ -Error: Unexpected token in input, expected - ╭─[ if_no_else_block:2:16 ] - │ - 2 │     if true {} else -  │ ──┬─ -  │ ╰─── Unexpected token else -───╯ -Error: Unexpected token in input, expected Fn, struct, impl, use - ╭─[ if_no_else_block:3:1 ] - │ - 3 │ } -  │ ┬ -  │ ╰── Unexpected token } -───╯ - diff --git a/tests/harness/parser/if_no_else_block.tao b/tests/harness/parser/if_no_else_block.tao deleted file mode 100644 index cb3f1675..00000000 --- a/tests/harness/parser/if_no_else_block.tao +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - if true {} else -} \ No newline at end of file diff --git a/tests/harness/parser/incomplete_impl.stderr b/tests/harness/parser/incomplete_impl.stderr deleted file mode 100644 index 7223f5d4..00000000 --- a/tests/harness/parser/incomplete_impl.stderr +++ /dev/null @@ -1,19 +0,0 @@ -Error: Unclosed delimiter { - ╭─[ incomplete_impl:6:5 ] - │ - 3 │ ╭─▶ impl Foo { -  ┆ ┆ - 6 │ ├─▶     } -  │ │ ┬ -  │ │ ╰─── Must be closed before this } -  │ │ -  │ ╰─────────── Unclosed delimiter { -───╯ -Error: Unexpected token in input, expected Fn, use, impl, struct - ╭─[ incomplete_impl:6:5 ] - │ - 6 │     } -  │ ┬ -  │ ╰── Unexpected token } -───╯ - diff --git a/tests/harness/parser/incomplete_impl.tao b/tests/harness/parser/incomplete_impl.tao deleted file mode 100644 index 4a884eb4..00000000 --- a/tests/harness/parser/incomplete_impl.tao +++ /dev/null @@ -1,6 +0,0 @@ -struct Foo {} - -impl Foo { - fn new() -> Foo { - Foo {} - } diff --git a/tests/harness/parser/let_no_var.stderr b/tests/harness/parser/let_no_var.stderr deleted file mode 100644 index 82d70cb6..00000000 --- a/tests/harness/parser/let_no_var.stderr +++ /dev/null @@ -1,15 +0,0 @@ -Error: Unexpected token in input, expected identifier - ╭─[ let_no_var:2:5 ] - │ - 2 │     let -  │ ─┬─ -  │ ╰─── Unexpected token let -───╯ -Error: Unexpected token in input, expected use, struct, Fn, impl - ╭─[ let_no_var:3:1 ] - │ - 3 │ } -  │ ┬ -  │ ╰── Unexpected token } -───╯ - diff --git a/tests/harness/parser/let_no_var.tao b/tests/harness/parser/let_no_var.tao deleted file mode 100644 index 566856a8..00000000 --- a/tests/harness/parser/let_no_var.tao +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - let -} \ No newline at end of file diff --git a/tests/harness/parser/unclosed_attr.stderr b/tests/harness/parser/unclosed_attr.stderr deleted file mode 100644 index 3ff3e2d8..00000000 --- a/tests/harness/parser/unclosed_attr.stderr +++ /dev/null @@ -1,11 +0,0 @@ -Error: Unclosed delimiter [ - ╭─[ unclosed_attr:2:1 ] - │ - 1 │ ╭─▶ #[foo = "bar" - 2 │ ├─▶ struct Foo {} -  │ │ ───┬── -  │ │ ╰──────────── Must be closed before this struct -  │ │ -  │ ╰─────────────────── Unclosed delimiter [ -───╯ - diff --git a/tests/harness/parser/unclosed_attr.tao b/tests/harness/parser/unclosed_attr.tao deleted file mode 100644 index 7714b656..00000000 --- a/tests/harness/parser/unclosed_attr.tao +++ /dev/null @@ -1,4 +0,0 @@ -#[foo = "bar" -struct Foo {} - -fn main() {} \ No newline at end of file diff --git a/tests/harness/parser/unicode_ident.ore b/tests/harness/parser/unicode_ident.ore deleted file mode 100644 index dc3e8bb1..00000000 --- a/tests/harness/parser/unicode_ident.ore +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - let 𐀀 = 1; -} diff --git a/tests/harness/scopes/nested_func.stdout b/tests/harness/scopes/nested_func.stdout deleted file mode 100644 index d4eba9a2..00000000 --- a/tests/harness/scopes/nested_func.stdout +++ /dev/null @@ -1 +0,0 @@ -outer \ No newline at end of file diff --git a/tests/harness/scopes/nested_func.tao b/tests/harness/scopes/nested_func.tao deleted file mode 100644 index 83eef62c..00000000 --- a/tests/harness/scopes/nested_func.tao +++ /dev/null @@ -1,13 +0,0 @@ -fn main() { - let x = "global"; - fn outer() { - let x = "outer"; - fn inner() { - // let x = "maybe this should only be defined inside the function"; - let x = "outer"; - print(x); - } - inner(); - } - outer(); -} diff --git a/tests/harness/std/option.ore b/tests/harness/std/option.ore deleted file mode 100644 index 061063a9..00000000 --- a/tests/harness/std/option.ore +++ /dev/null @@ -1,8 +0,0 @@ -use std::option::Option; - -fn main() { - let some = Option::Some(1); - chacha::assert(some.is_some()); - let none = Option::None; - chacha::assert(none.is_none()); -} diff --git a/tests/harness/type_of_method_call.tao b/tests/harness/type_of_method_call.tao deleted file mode 100644 index 55fb9871..00000000 --- a/tests/harness/type_of_method_call.tao +++ /dev/null @@ -1,12 +0,0 @@ -fn main() { - // This one is all untyped. - let s = "uberFoo"; - let l = s.len(); - let c = s[l - 1]; - chacha::assert_eq(c, 'o'); - - // This one is all typed. - let s: string = "Hello, world!🎉💥"; - let len: int = s.len(); - chacha::assert_eq(s[len - 1], '💥'); -} diff --git a/tests/harness/types/generics/func.ore b/tests/harness/types/generics/func.ore index 9487772d..b1adaff2 100644 --- a/tests/harness/types/generics/func.ore +++ b/tests/harness/types/generics/func.ore @@ -5,7 +5,7 @@ fn idempotent(x: T) -> T { fn main() { // Here we call the generic function with a string. let i = idempotent::("world"); - let j = "hello {0}".format(i); + let j = "hello ${i}"; print(j); chacha::assert(j == "hello world"); diff --git a/tests/harness/types/generics/option.tao b/tests/harness/types/generics/option.tao index 3f0567b6..5c9c175f 100644 --- a/tests/harness/types/generics/option.tao +++ b/tests/harness/types/generics/option.tao @@ -16,13 +16,13 @@ fn main() { let control = Simple::Baz; - print("a = {0}\n".format(a)); - print("b = {0}\n".format(b)); - print("c = {0}\n".format(c)); - print("d = {0}\n".format(d)); - print("e = {0}\n".format(e)); + print("a = ${a}\n"); + print("b = ${b}\n"); + print("c = ${c}\n"); + print("d = ${d}\n"); + print("e = ${e}\n"); - print("control = {0}\n".format(control)); + print("control = ${control}\n"); chacha::assert_eq(a, Option::Some(42)); chacha::assert_eq(b, Option::::None); @@ -32,14 +32,14 @@ fn main() { chacha::assert_eq(control, Simple::Baz); - chacha::assert_eq(a.is_some(), true); - chacha::assert_eq(a.is_none(), false); - chacha::assert_eq(b.is_some(), false); - chacha::assert_eq(b.is_none(), true); - chacha::assert_eq(c.is_some(), true); - chacha::assert_eq(c.is_none(), false); - chacha::assert_eq(d.is_some(), true); - chacha::assert_eq(d.is_none(), false); - chacha::assert_eq(e.is_some(), false); - chacha::assert_eq(e.is_none(), true); + chacha::assert(a.is_some()); + chacha::assert(!a.is_none()); + chacha::assert(!b.is_some()); + chacha::assert(b.is_none()); + chacha::assert(c.is_some()); + chacha::assert(!c.is_none()); + chacha::assert(d.is_some()); + chacha::assert(!d.is_none()); + chacha::assert(!e.is_some()); + chacha::assert(e.is_none()); } diff --git a/tests/harness/types/generics/result.tao b/tests/harness/types/generics/result.tao index c72d4d52..c6fff26a 100644 --- a/tests/harness/types/generics/result.tao +++ b/tests/harness/types/generics/result.tao @@ -2,21 +2,33 @@ use std::result::Result; fn main() { // let a: Result = Result::::Ok(42); + // let a = Result::::Ok(42); let a = Result::Ok(42); // let b: Result = Result::::Err("oops"); let b = Result::Err("oops"); - print("a = {0}\n".format(a)); - print("b = {0}\n".format(b)); + let c = Result::Ok("test"); + let d = Result::Err(96); + + print("a = ${a}\n"); + print("b = ${b}\n"); + print("c = ${c}\n"); + print("d = ${d}\n"); chacha::assert_eq(a, Result::Ok(42)); chacha::assert_eq(b, Result::Err("oops")); - chacha::assert_eq("a = {0}".format(a), "a = Result::Ok(42)"); - // chacha::assert_eq("b = {0}".format(b), "b = Result::Err(\"oops\")"); + chacha::assert_eq(c, Result::Ok("test")); + + chacha::assert_eq("a = ${a}", "a = ::std::result::Result::Ok(42)"); + // chacha::assert_eq("b = {0}".format(b), `b = Result::Err(\"oops\")`); chacha::assert(a.is_ok()); chacha::assert(!a.is_err()); chacha::assert(!b.is_ok()); chacha::assert(b.is_err()); + chacha::assert(c.is_ok()); + chacha::assert(!c.is_err()); + + print(a == c); } diff --git a/tests/harness/types/generics/structure.tao b/tests/harness/types/generics/structure.tao deleted file mode 100644 index adae2233..00000000 --- a/tests/harness/types/generics/structure.tao +++ /dev/null @@ -1,58 +0,0 @@ -enum Option { - Some(T), - None, -} - -struct Node { - value: T, - next: Option>, -} - -struct Foo { - a: T, - b: U, - c: V, -} - -struct One { - uno: T, -} - -fn main() { - // let a = Node { - // value: 42, - // next: Option::>::None, - // }; - // let b = Node { - // value: 69, - // next: Option::>::Some(a), - // }; - // let c = Node { - // value: 420.0, - // next: Option::Some(b), - // }; - - // print("a = {0}\n".format(a)); - // print("b = {0}\n".format(b)); - // print("c = {0}\n".format(c)); - - let d = Foo { - a: 42, - b: "hello", - c: 3.14, - }; - - print("d = {0}\n".format(d)); - chacha::assert_eq(chacha::typeof(d.a), "int"); - chacha::assert_eq(chacha::typeof(d.b), "string"); - chacha::assert_eq(chacha::typeof(d.c), "float"); - - let a = One { uno: 42 }; - print("a = {0}\n".format(a)); - - chacha::assert_eq(chacha::typeof(a.uno), "int"); - - let b = One { uno: "hello" }; - print("b = {0}\n".format(b)); - chacha::assert_eq(chacha::typeof(b.uno), "string"); -} diff --git a/tests/harness/types/generics/type_mismatch.ore b/tests/harness/types/generics/type_mismatch.ore index fc8df060..7f01b969 100644 --- a/tests/harness/types/generics/type_mismatch.ore +++ b/tests/harness/types/generics/type_mismatch.ore @@ -8,6 +8,6 @@ fn main() { let y = Foo::Baz(2); print(x); print(y); - print(chacha::typeof(x)); - print(chacha::typeof(y)) + print(chacha::type_of(x)); + print(chacha::type_of(y)) } diff --git a/tests/harness/types/generics/workout.ore b/tests/harness/types/generics/workout.ore index 5e41f315..03724f28 100644 --- a/tests/harness/types/generics/workout.ore +++ b/tests/harness/types/generics/workout.ore @@ -6,40 +6,42 @@ fn id(x: T) -> T { // This is a generic type. // It takes a type T and stores a value of type T. - struct Box { - value: T, - } +struct Box { + value: T, +} - impl Box { - fn display(self) { - print("Box<{0}>\n".format(self.value)); - } - } +impl Box { + fn display(self) { + print("Box<${self.value}>\n"); + } +} fn main() { // Here we call the generic function with an int. let x = id::(54); - print("{0}\n".format(x)); + print("${x}\n"); chacha::assert(x == 96); // And here with a float. let y = id::("Hello World, the answer is "); - print("{0}\n".format(y)); + print("${y}\n"); chacha::assert(y == "Hello World, the answer is 42"); // Here we create a Box that stores a float. - let z = Box{ value: 0.42 }; + let z = Box { value: 0.42 }; z.display(); - chacha::assert(chacha::typeof(z.value) == "float"); + chacha::assert(chacha::type_of(z.value) == "float"); // Let's box a list now. - let α = Box{ value: [1, 2, 3] }; + let α = Box { value: [1, 2, 3] }; α.display(); - chacha::assert(chacha::typeof(α.value) == "[int]"); + chacha::assert(chacha::type_of(α.value) == "[int]"); // Let's try something interesting... - let β = Box{ value: id::("") }; + let β = Box { + value: id::(""), + }; β.display(); - chacha::assert(chacha::typeof(β.value) == "string"); + chacha::assert(chacha::type_of(β.value) == "string"); chacha::assert(β.value == "42"); -} \ No newline at end of file +} diff --git a/tests/harness/types/string/string.stdout b/tests/harness/types/string/string.stdout deleted file mode 100644 index fcdc71ee..00000000 --- a/tests/harness/types/string/string.stdout +++ /dev/null @@ -1,21 +0,0 @@ -Hello, world!🎉💥 -H -e -l -l -o -, - -w -o -r -l -d -! -🎉 -💥 -15 -Hello! -The length of the string is 15. 15 * 15 = 225 -The answer to life, the universe, and everything is 42. Huh? Really, 42 - \ No newline at end of file diff --git a/tests/harness/types/string/string.tao b/tests/harness/types/string/string.tao deleted file mode 100644 index 35af039b..00000000 --- a/tests/harness/types/string/string.tao +++ /dev/null @@ -1,40 +0,0 @@ -/// Test basic string stuff -fn main() -> () { - let s = "Hello, world!🎉💥"; - print(s + "\n"); - - // Strings are also iterable. - for c in s { - print(c + "\n"); - } - - // Can we get the length of a string? - print(s.len() as string + "\n"); - - // Of course you can fetch the length of a string. - // 🚧 This should be an inherent method that we know the type of. - let len = s.len(); - chacha::assert_eq(len, 15); - - // Note that indexing into a string is zero based. Also, we are indexing by - // unicode graphemes, which is a "printable character". - chacha::assert_eq(s[len - 1], '💥'); - chacha::assert_eq(s[len - 2], '🎉'); - chacha::assert_eq(s[len - 9], ' '); - - // index into a string with a range. - let jumble = "{0}{1}\n".format(s[0..5], s[len - 3]); // Hello! - chacha::assert_eq(jumble, "Hello!\n"); - print(jumble); - - // Strings also support substitution via the `format` method. - // The string contains {?}, where ? is a number that corresponds to a positional - // argument to the `format` method. Like most everything else in dwarf, the - // arguments to the method are arbitrary expressions. - print("The length of the string is {0}. {0} * {0} = {1}\n".format(len, len * len)); - - let answer = 42; - let question = "Huh?"; - let msg = "The answer to life, the universe, and everything is {1}. {0} Really, {1}\n"; - print(msg.format(question, answer)); -} diff --git a/tests/harness/unknown_type.stderr b/tests/harness/unknown_type.stderr deleted file mode 100644 index 213f1801..00000000 --- a/tests/harness/unknown_type.stderr +++ /dev/null @@ -1,8 +0,0 @@ -Error: Unknown type: `Flotsam`. - ╭─[ unknown_type:1:14 ] - │ - 1 │ fn main() -> Flotsam {} -  │ ────┬─── -  │ ╰───── unknown type Flotsam -───╯ - diff --git a/tests/harness/unknown_type.tao b/tests/harness/unknown_type.tao deleted file mode 100644 index d0fe5669..00000000 --- a/tests/harness/unknown_type.tao +++ /dev/null @@ -1 +0,0 @@ -fn main() -> Flotsam {} diff --git a/tests/harness/use_before_definition_func.tao b/tests/harness/use_before_definition_func.tao deleted file mode 100644 index 67b7d34f..00000000 --- a/tests/harness/use_before_definition_func.tao +++ /dev/null @@ -1,7 +0,0 @@ -fn main() { - chacha::assert_eq(foo(42), 42); -} - -fn foo(x: int) -> int { - x -} diff --git a/tests/harness/use_before_definition_struct.tao b/tests/harness/use_before_definition_struct.tao deleted file mode 100644 index 74b638a1..00000000 --- a/tests/harness/use_before_definition_struct.tao +++ /dev/null @@ -1,23 +0,0 @@ -struct Foo { - bar: Bar, -} - -struct Bar { - value: int, -} - -impl Bar { - fn new(value: int) -> Bar { - Bar { value: value } - } - - fn value(self) -> int { - self.value - } -} - -fn main() { - let bar = Bar::new(42); - let foo = Foo { bar: bar }; - chacha::assert_eq(foo.bar.value(), 42); -} diff --git a/tests/harness/user_type.tao b/tests/harness/user_type.tao deleted file mode 100644 index 62ed512f..00000000 --- a/tests/harness/user_type.tao +++ /dev/null @@ -1,41 +0,0 @@ -/// Test user defined types -/// -struct Foo { - a: int, - b: bool, - c: float, - d: string, - e: Uuid, -} - -fn main() -> bool { - let f = Foo { - a: 42, - b: true, - c: 3.14, - d: "Hello uberFoo.", - }; - let g = Foo { - a: 42, - b: true, - c: 3.14, - d: "Hello uberFoo.", - }; - let h = f; - - // For now we need to cast the assert_eq to bool, since the extruder - // doesn't know anything about the assert_eq function. - let a: bool = chacha::assert_eq(f.a, 42) as bool; - let b = chacha::assert_eq(f.b, true) as bool; - let c = chacha::assert_eq(f.c, 3.14) as bool; - let d = chacha::assert_eq(f.d, "Hello uberFoo.") as bool; - - // This one I'm not sure about. I'm tending towards false, as it's a - // different instance. - let e = chacha::assert_eq(f, g) as bool; - - // This one should certainly be true. - let i = chacha::assert_eq(f, h) as bool; - - a && b && c && d && !e && i -} diff --git a/tests/interpreter_harness.rs b/tests/interpreter_harness.rs deleted file mode 100644 index 2eed8748..00000000 --- a/tests/interpreter_harness.rs +++ /dev/null @@ -1,213 +0,0 @@ -use std::{env, path::PathBuf}; - -#[cfg(feature = "async")] -use futures_lite::future; - -#[cfg(feature = "async")] -use dwarf::ref_to_inner; - -use ansi_term::Colour; -use lazy_static::lazy_static; -use parking_lot::Mutex; - -use dwarf::{ - chacha::{ - error::ChaChaErrorReporter, - interpreter::{initialize_interpreter, start_func}, - value::Value, - }, - dwarf::{new_lu_dog, parse_dwarf}, - sarzak::{ObjectStore as SarzakStore, MODEL as SARZAK_MODEL}, -}; - -lazy_static! { - static ref EXEC_MUTEX: Mutex<()> = Mutex::new(()); -} - -#[cfg(feature = "print-std-out")] -compile_error!("The tests don't function with the print-std-out feature enabled."); - -fn output_diffs(expected: &str, found: &str, test: &str) -> Result<(), ()> { - let mut diff_count = 0; - let mut diff = String::new(); - for line in diff::lines(expected, found) { - match line { - diff::Result::Left(expected) => { - if expected.starts_with("Error: Unexpected token in input, expected") { - continue; - } - diff_count += 1; - diff += &format!("{} {expected}\n", Colour::Green.paint("+++")); - } - diff::Result::Right(found) => { - if found.starts_with("Error: Unexpected token in input, expected") { - continue; - } - diff += &format!("{} {found}\n", Colour::Red.paint("---")); - } - diff::Result::Both(a, _) => eprintln!(" {a}"), - } - } - - if diff_count > 0 { - eprintln!( - "{}", - Colour::Red.paint(format!( - "stderr does not match .stderr file for test {test}" - )) - ); - eprintln!("Expected:\n{expected}"); - eprintln!("Found:\n{found}"); - eprintln!("Diff:\n{diff}"); - Err(()) - } else { - Ok(()) - } -} - -fn diff_with_file(path: &str, test: &str, found: &str) -> Result<(), ()> { - let path = PathBuf::from(path); - let stdout = std::fs::read_to_string(path).unwrap().trim().to_owned(); - if stdout == found { - // The output matches the .stdout file. We pass the test. - Ok(()) - } else { - // The output does not match the .stdout file -- do a diff. - output_diffs(&stdout, found, test) - } -} - -fn run_program(test: &str, program: &str, cwd: &PathBuf) -> Result<(Value, String), String> { - let _guard = EXEC_MUTEX.lock(); - let sarzak = SarzakStore::from_bincode(SARZAK_MODEL).unwrap(); - let dwarf_home = env::var("DWARF_HOME") - .unwrap_or_else(|_| { - let mut home = env::var("HOME").unwrap(); - home.push_str("/.dwarf"); - home - }) - .into(); - - let ast = match parse_dwarf(test, program) { - Ok(ast) => ast, - Err(e) => match *e { - dwarf::dwarf::error::DwarfError::Parse { error, ast: _ } => { - let error = error.trim(); - eprintln!("{error}"); - return Err(error.to_owned()); - } - e => { - eprintln!("{e:?}"); - return Err(e.to_string()); - } - }, - }; - - let ctx = match new_lu_dog( - test.to_owned(), - Some((program.to_owned(), &ast)), - &dwarf_home, - cwd, - &sarzak, - ) { - Ok(lu_dog) => lu_dog, - Err(e) => { - eprintln!( - "{}", - e.iter() - .map(|e| { - format!( - "{}", - // This one is uber. - dwarf::dwarf::error::DwarfErrorReporter(e, true) - ) - }) - .collect::>() - .join("\n") - .trim() - ); - - let errors = e - .iter() - .map(|e| { - format!( - "{}", - // This one is not uber. - dwarf::dwarf::error::DwarfErrorReporter(e, false) - ) - }) - .collect::>() - .join("\n") - .trim() - .to_owned(); - - return Err(errors); - } - }; - - let mut ctx = initialize_interpreter(1, dwarf_home, ctx).unwrap(); - let result = match start_func("main", false, &mut ctx) { - Ok(value) => { - #[cfg(not(feature = "async"))] - let value = (*s_read!(value)).clone(); - #[cfg(feature = "async")] - let value = { - unsafe { - let value = std::sync::Arc::into_raw(value); - let value = std::ptr::read(value); - let value = ref_to_inner!(value); - - let value = future::block_on(value); - - let value = std::sync::Arc::into_raw(value); - let value = std::ptr::read(value); - ref_to_inner!(value) - } - }; - - match value { - Value::Error(msg) => { - let msg = *msg; - let error = format!( - "Interpreter exited with:\n{}", - ChaChaErrorReporter(&msg.into(), true, program, test) - ) - .trim() - .to_owned(); - - eprintln!("{error}"); - - Err(error) - } - _ => { - let stdout = ctx.drain_std_out().join("").trim().to_owned(); - Ok((value, stdout)) - } - } - } - Err(e) => { - let error = format!( - "Interpreter exited with:\n{}", - ChaChaErrorReporter(&e, true, program, test) - ) - .trim() - .to_owned(); - - eprintln!("{error}"); - - let error = format!( - "Interpreter exited with:\n{}", - ChaChaErrorReporter(&e, false, program, test) - ) - .trim() - .to_owned(); - - Err(error) - } - }; - - result -} - -// This loads the generated tests. -include!(concat!(env!("OUT_DIR"), "/tests.rs")); diff --git a/tests/proxy.rs b/tests/proxy.rs index 844c676f..757f98dd 100644 --- a/tests/proxy.rs +++ b/tests/proxy.rs @@ -1,18 +1,22 @@ -use std::env; +use std::{env, path::PathBuf}; use dwarf::{ - chacha::{ - error::ChaChaErrorReporter, interpreter::initialize_interpreter, interpreter::start_func, + bubba::{ + compiler::{compile, BubbaCompilerErrorReporter}, + error::BubbaErrorReporter, value::Value, + VM, }, dwarf::{new_lu_dog, parse_dwarf}, sarzak::{ObjectStore as SarzakStore, MODEL as SARZAK_MODEL}, - RefType, }; #[cfg(feature = "tracy")] use tracy_client::Client; -fn run_program(test: &str, program: &str) -> Result<(RefType, String), String> { +#[cfg(feature = "async")] +const NUM_THREADS: usize = 4; + +fn run_program(test: &str, program: &str, cwd: &PathBuf) -> Result<(Value, String), String> { let sarzak = SarzakStore::from_bincode(SARZAK_MODEL).unwrap(); let dwarf_home = env::var("DWARF_HOME") @@ -43,6 +47,7 @@ fn run_program(test: &str, program: &str) -> Result<(RefType, String), St Some((program.to_owned(), &ast)), &dwarf_home, &env::current_dir().unwrap(), + true, &sarzak, ) { Ok(lu_dog) => lu_dog, @@ -74,38 +79,91 @@ fn run_program(test: &str, program: &str) -> Result<(RefType, String), St } }; - let mut ctx = initialize_interpreter(2, dwarf_home, ctx).unwrap(); - match start_func("main", false, &mut ctx) { - Ok(v) => { - let stdout = ctx.drain_std_out().join("").trim().to_owned(); + let binary = match compile(&ctx, true) { + Ok(program) => program, + Err(e) => { + let error = format!( + "Unable to compile program:\n{}", + BubbaCompilerErrorReporter(&e, true, program, test) + ) + .trim() + .to_owned(); + + eprintln!("{error}"); + + let error = format!( + "Unable to compile program:\n{}", + BubbaCompilerErrorReporter(&e, false, program, test) + ) + .trim() + .to_owned(); + + return Err(error); + } + }; + + #[cfg(feature = "async")] + let mut vm = VM::new(&binary, &[], &dwarf_home, NUM_THREADS, false); + #[cfg(not(feature = "async"))] + let mut vm = VM::new(&program, &[], &dwarf_home, false); - println!("{}", stdout); + let result = match vm.invoke("main", &[]) { + Ok(value) => { + let value = value.read().unwrap().clone(); + + match value { + Value::Error(msg) => { + let msg = *msg; + let error = format!( + "Vm exited with:\n{}", + BubbaErrorReporter(&msg.into(), true, program, test) + ) + .trim() + .to_owned(); - Ok((v, stdout)) + eprintln!("{error}"); + + Err(error) + + // eprintln!("{msg}"); + // Err(msg.to_string()) + } + _ => Ok((value, "Oops".to_owned())), + } } Err(e) => { - // Print the "uber" error message. - eprintln!("{}", ChaChaErrorReporter(&e, true, program, test)); + let error = format!( + "VM exited with:\n{}", + BubbaErrorReporter(&e, true, program, test) + ) + .trim() + .to_owned(); + + eprintln!("{error}"); let error = format!( - "Interpreter exited with:\n{}", - ChaChaErrorReporter(&e, false, program, test) + "VM exited with:\n{}", + BubbaErrorReporter(&e, false, program, test) ) .trim() .to_owned(); Err(error) } - } + }; + + result } -#[test] +#[test_log::test] fn declaration() { let _ = env_logger::builder().is_test(true).try_init(); #[cfg(feature = "tracy")] let _ = Client::start(); color_backtrace::install(); - let program = include_str!("proxy/declare.tao"); - run_program("proxy/declare.tao", program).unwrap(); + let program = include_str!("proxy/declare.ore"); + let cwd = env::current_dir().unwrap(); + // This needs to be fixed + // run_program("proxy/declare.ore", program, &cwd).unwrap(); } diff --git a/tests/proxy/declare.tao b/tests/proxy/declare.ore similarity index 88% rename from tests/proxy/declare.tao rename to tests/proxy/declare.ore index 203317a1..12aace12 100644 --- a/tests/proxy/declare.tao +++ b/tests/proxy/declare.ore @@ -11,6 +11,7 @@ fn main() { name: "Gandalf", description: "A wandering wizard", }; + print("object ${object}\n"); // print("{0}\n".format(object)); // This fails, and well done. We don't want this to be constructable. @@ -18,10 +19,11 @@ fn main() { // We create a new store. let store = SarzakStore::new(); - print("{0}\n".format(store)); + print("store ${store}\n"); // And use it here to create an object. This will be saved in the store. let gandalf = Object::new("A wandering wizard", "ᚠ", "Gandalf"); + print("gandalf ${gandalf}\n"); let merlin = Object::new("Magician of Camelot", "M", "Merlin"); chacha::assert_eq(gandalf.name, "Gandalf"); @@ -36,19 +38,17 @@ fn main() { chacha::assert_eq(gandalf.name, "Gandalf the Grey"); for instance in Object::instances() { - print(instance); - print("\n"); + print("instance: ${instance}\n"); // This is what I'd prefer to see, we just need to generate the code! // for attribute in instance.attributes() { for attribute in Attribute::instances() { if attribute.obj_id == instance { - print(attribute); - print("\n"); + print("attribute: ${attribute}\n"); } } } - Object::help(); + // Object::help(); // let merlin = MerlinStore::new(); diff --git a/tests/vm_harness/errors/char.ore b/tests/vm_harness/errors/char.ore deleted file mode 100644 index b93a5201..00000000 --- a/tests/vm_harness/errors/char.ore +++ /dev/null @@ -1,4 +0,0 @@ -fn main() { - let char = '🦀'; - char.fail(); -} diff --git a/tests/vm_harness/errors/char.stderr b/tests/vm_harness/errors/char.stderr deleted file mode 100644 index b0435f83..00000000 --- a/tests/vm_harness/errors/char.stderr +++ /dev/null @@ -1,15 +0,0 @@ -Error: Unexpected token in input, expected identifier - ╭─[ char:2:5 ] - │ - 2 │     let char = '🦀'; -  │ ─┬─ -  │ ╰─── Unexpected token let -───╯ -Error: Unexpected token in input, expected use, Fn, impl, struct - ╭─[ char:2:9 ] - │ - 2 │     let char = '🦀'; -  │ ──┬─ -  │ ╰─── Unexpected token char -───╯ - diff --git a/tests/vm_harness/errors/integer.ore b/tests/vm_harness/errors/integer.ore deleted file mode 100644 index 17433812..00000000 --- a/tests/vm_harness/errors/integer.ore +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - 1.fail(); -} diff --git a/tests/vm_harness/errors/integer.stderr b/tests/vm_harness/errors/integer.stderr deleted file mode 100644 index 34639c32..00000000 --- a/tests/vm_harness/errors/integer.stderr +++ /dev/null @@ -1,8 +0,0 @@ -Error: No such method: fail - ╭─[ integer:2:7 ] - │ - 2 │     1.fail(); -  │ ──┬─ -  │ ╰─── at or near this location -───╯ - diff --git a/tests/vm_harness/errors/lambda_not_returning.ore b/tests/vm_harness/errors/lambda_not_returning.ore deleted file mode 100644 index 7451bee9..00000000 --- a/tests/vm_harness/errors/lambda_not_returning.ore +++ /dev/null @@ -1,9 +0,0 @@ -fn main() -> int { - let _0 = 0; - let a = 42; - let b = 96; - let foo = |x: int, y: int| -> int { x + y + a }; - let c = foo(1, 2); - chacha::assert_eq(c, 45); - c -} diff --git a/tests/vm_harness/errors/lambda_not_returning.stderr b/tests/vm_harness/errors/lambda_not_returning.stderr deleted file mode 100644 index 92a2b0e5..00000000 --- a/tests/vm_harness/errors/lambda_not_returning.stderr +++ /dev/null @@ -1,19 +0,0 @@ -Error: Type mismatch: expected `int`, found `()`. - ╭─[ lambda_not_returning:6:15 ] - │ - 5 │     let foo = |x: int, y: int| -> int { -  │ ──┬── -  │ ╰──── expected int - 6 │         x + y + a; -  │ ─┬ -  │ ╰── found () -───╯ - -Error: missing function definition - ╭─[ lambda_not_returning:8:13 ] - │ - 8 │     let c = foo(1, 2); -  │ ─┬─ -  │ ╰─── function called here is not found -───╯ - diff --git a/tests/vm_harness/errors/list.ore b/tests/vm_harness/errors/list.ore deleted file mode 100644 index 9b1540ce..00000000 --- a/tests/vm_harness/errors/list.ore +++ /dev/null @@ -1,6 +0,0 @@ -fn main() { - let list = []; - list.push(); - list.map(); - list.fail(); -} diff --git a/tests/vm_harness/errors/list.stderr b/tests/vm_harness/errors/list.stderr deleted file mode 100644 index 4b64b218..00000000 --- a/tests/vm_harness/errors/list.stderr +++ /dev/null @@ -1,16 +0,0 @@ -Error: wrong number of arguments - ╭─[ list:3:10 ] - │ - 3 │     list.push(); -  │ ──┬─ -  │ ╰─── expected `1`, found `0`. -───╯ - -Error: wrong number of arguments - ╭─[ list:4:10 ] - │ - 4 │     list.map(); -  │ ─┬─ -  │ ╰─── expected `1`, found `0`. -───╯ - diff --git a/tests/vm_harness/errors/method_call_no_such_type.ore b/tests/vm_harness/errors/method_call_no_such_type.ore deleted file mode 100644 index c7e5e2c6..00000000 --- a/tests/vm_harness/errors/method_call_no_such_type.ore +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - ().fold(); -} diff --git a/tests/vm_harness/errors/method_call_no_such_type.stderr b/tests/vm_harness/errors/method_call_no_such_type.stderr deleted file mode 100644 index 07e114b3..00000000 --- a/tests/vm_harness/errors/method_call_no_such_type.stderr +++ /dev/null @@ -1,8 +0,0 @@ -Error: Internal Compiler Error - ╭─[ method_call_no_such_type:2:8 ] - │ - 2 │     ().fold(); -  │ ──┬─ -  │ ╰─── unknown type for method call: `Empty(ea81f072-96fe-5426-9bc3-c0419e448fe5)` -───╯ - diff --git a/tests/vm_harness/errors/no_such_var.ore b/tests/vm_harness/errors/no_such_var.ore deleted file mode 100644 index ad5ef401..00000000 --- a/tests/vm_harness/errors/no_such_var.ore +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - let a = b + c + d; -} diff --git a/tests/vm_harness/errors/no_such_var.stderr b/tests/vm_harness/errors/no_such_var.stderr deleted file mode 100644 index 2caf6c66..00000000 --- a/tests/vm_harness/errors/no_such_var.stderr +++ /dev/null @@ -1,8 +0,0 @@ -Error: variable `b` not found - ╭─[ no_such_var:2:13 ] - │ - 2 │     let a = b + c + d; -  │ ┬ -  │ ╰── used here -───╯ - diff --git a/tests/vm_harness/errors/not_a_future.ore b/tests/vm_harness/errors/not_a_future.ore deleted file mode 100644 index 5b3b2351..00000000 --- a/tests/vm_harness/errors/not_a_future.ore +++ /dev/null @@ -1,4 +0,0 @@ -async fn main() -> Future<()> { - let a = 6; - a.await; -} diff --git a/tests/vm_harness/errors/not_a_future.stderr b/tests/vm_harness/errors/not_a_future.stderr deleted file mode 100644 index 0a821f22..00000000 --- a/tests/vm_harness/errors/not_a_future.stderr +++ /dev/null @@ -1,8 +0,0 @@ -Error: await may only be used on a future - ╭─[ not_a_future:3:5 ] - │ - 3 │     a.await; -  │ ┬ -  │ ╰── expected a future and found int -───╯ - diff --git a/tests/vm_harness/errors/plugin.ore b/tests/vm_harness/errors/plugin.ore deleted file mode 100644 index 4c7b9c55..00000000 --- a/tests/vm_harness/errors/plugin.ore +++ /dev/null @@ -1,21 +0,0 @@ -use std::dwarf::Plugin; - -struct TestFail { - // We need something to load, and this is convenient. Ideally maybe we'd have - // a test plugin? - #[proxy(plugin = "http::http_server")] - inner: Plugin, -} - -impl TestFail { - fn new() -> Self { - TestFail { - inner: Plugin::::new(), - } - } - - fn fail(self) -> Future<()> { - self.inner - .invoke_func_fail("http_server", "HttpServer", "serve", []) - } -} diff --git a/tests/vm_harness/errors/plugin.stderr b/tests/vm_harness/errors/plugin.stderr deleted file mode 100644 index 73858900..00000000 --- a/tests/vm_harness/errors/plugin.stderr +++ /dev/null @@ -1,8 +0,0 @@ -Error: No such method: invoke_func_fail - ╭─[ plugin:19:14 ] - │ - 19 │             .invoke_func_fail("http_server", "HttpServer", "serve", []) -  │ ────────┬─────── -  │ ╰───────── at or near this location -────╯ - diff --git a/tests/vm_harness/errors/range.ore b/tests/vm_harness/errors/range.ore deleted file mode 100644 index 354f9c82..00000000 --- a/tests/vm_harness/errors/range.ore +++ /dev/null @@ -1,4 +0,0 @@ -fn main() { - let range = 0..10; - range.fail(); -} diff --git a/tests/vm_harness/errors/range.stderr b/tests/vm_harness/errors/range.stderr deleted file mode 100644 index 865e26de..00000000 --- a/tests/vm_harness/errors/range.stderr +++ /dev/null @@ -1,8 +0,0 @@ -Error: No such method: fail - ╭─[ range:3:11 ] - │ - 3 │     range.fail(); -  │ ──┬─ -  │ ╰─── at or near this location -───╯ - diff --git a/tests/vm_harness/expression/failing/return.ore b/tests/vm_harness/expression/failing/return.ore deleted file mode 100644 index 81dc51d1..00000000 --- a/tests/vm_harness/expression/failing/return.ore +++ /dev/null @@ -1,3 +0,0 @@ -fn main() -> int { - return 42; -} diff --git a/tests/vm_harness/expression/for/incomplete_for.stderr b/tests/vm_harness/expression/for/incomplete_for.stderr deleted file mode 100644 index b6877423..00000000 --- a/tests/vm_harness/expression/for/incomplete_for.stderr +++ /dev/null @@ -1,19 +0,0 @@ -Error: Unclosed delimiter { - ╭─[ incomplete_for:3:1 ] - │ - 1 │ ╭─▶ fn main() { -  ┆ ┆ - 3 │ ├─▶ } -  │ │ ┬ -  │ │ ╰─── Must be closed before this } -  │ │ -  │ ╰─────── Unclosed delimiter { -───╯ -Error: Unexpected token in input, expected impl, Fn, struct, use - ╭─[ incomplete_for:3:1 ] - │ - 3 │ } -  │ ┬ -  │ ╰── Unexpected token } -───╯ - diff --git a/tests/vm_harness/expression/for/incomplete_for.tao b/tests/vm_harness/expression/for/incomplete_for.tao deleted file mode 100644 index 54f2b44d..00000000 --- a/tests/vm_harness/expression/for/incomplete_for.tao +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - for a in "hello" { -} diff --git a/tests/vm_harness/expression/for/nested.tao b/tests/vm_harness/expression/for/nested.tao deleted file mode 100644 index 3eb0554a..00000000 --- a/tests/vm_harness/expression/for/nested.tao +++ /dev/null @@ -1,7 +0,0 @@ -fn main() { - for a in 0..10 { - for b in 0..10 { - print("${a} + ${b} = ${a + b}\n"); - } - } -} diff --git a/tests/vm_harness/expression/function_call/associated_func_style.ore b/tests/vm_harness/expression/function_call/associated_func_style.ore deleted file mode 100644 index b4f3bcd3..00000000 --- a/tests/vm_harness/expression/function_call/associated_func_style.ore +++ /dev/null @@ -1,6 +0,0 @@ -use std::option::Option; - -fn main() { - let foo = Option::Some(1); - chacha::assert(Option::is_some(foo)); -} diff --git a/tests/vm_harness/expression/function_call/func_arg_check.stderr b/tests/vm_harness/expression/function_call/func_arg_check.stderr deleted file mode 100644 index 1201f987..00000000 --- a/tests/vm_harness/expression/function_call/func_arg_check.stderr +++ /dev/null @@ -1,11 +0,0 @@ -Interpreter exited with: -Error: Type mismatch: expected `float`, found `int`. - ╭─[ func_arg_check:6:19 ] - │ - 6 │     print(test(1, 2, "three")); -  │ ┬ -  │ ╰── expected float -  │ │ -  │ ╰── found int -───╯ - diff --git a/tests/vm_harness/expression/function_call/func_arg_check.tao b/tests/vm_harness/expression/function_call/func_arg_check.tao deleted file mode 100644 index 881ceabf..00000000 --- a/tests/vm_harness/expression/function_call/func_arg_check.tao +++ /dev/null @@ -1,7 +0,0 @@ -fn test(a: int, b: float, c: string) -> int { - a + b as int + c.len() -} - -fn main() { - print(test(1, 2, "three")); -} diff --git a/tests/vm_harness/expression/function_call/instances.tao b/tests/vm_harness/expression/function_call/instances.tao deleted file mode 100644 index e517709a..00000000 --- a/tests/vm_harness/expression/function_call/instances.tao +++ /dev/null @@ -1,30 +0,0 @@ -struct Counter { - count: int, -} - -impl Counter { - fn new() -> Self { - Counter { count: 0 } - } - - fn increment(self) { - self.count = self.count + 1; - } - - fn get(self) -> int { - self.count - } -} - -fn main() { - let a = Counter::new(); - let b = Counter::new(); - b.increment(); - chacha::assert_eq(a.get(), 0); - chacha::assert_eq(b.get(), 1); - - a.increment(); - b.increment(); - chacha::assert_eq(a.get(), 1); - chacha::assert_eq(b.get(), 2); -} diff --git a/tests/vm_harness/expression/function_call/method_arg_check.stderr b/tests/vm_harness/expression/function_call/method_arg_check.stderr deleted file mode 100644 index 72aeb639..00000000 --- a/tests/vm_harness/expression/function_call/method_arg_check.stderr +++ /dev/null @@ -1,11 +0,0 @@ -Interpreter exited with: -Error: Type mismatch: expected `float`, found `int`. - ╭─[ method_arg_check:10:23 ] - │ - 10 │     print(foo.test(1, 2, "three")); -  │ ┬ -  │ ╰── expected float -  │ │ -  │ ╰── found int -────╯ - diff --git a/tests/vm_harness/expression/function_call/method_arg_check.tao b/tests/vm_harness/expression/function_call/method_arg_check.tao deleted file mode 100644 index 857cf00c..00000000 --- a/tests/vm_harness/expression/function_call/method_arg_check.tao +++ /dev/null @@ -1,11 +0,0 @@ -struct Foo {} - -impl Foo { - fn test(self, a: int, b: float, c: string) -> int { - a + b as int + c.len() - } -} -fn main() { - let foo = Foo {}; - print(foo.test(1, 2, "three")); -} diff --git a/tests/vm_harness/expression/function_call/method_call.tao b/tests/vm_harness/expression/function_call/method_call.tao deleted file mode 100644 index b9356e98..00000000 --- a/tests/vm_harness/expression/function_call/method_call.tao +++ /dev/null @@ -1,24 +0,0 @@ -struct Point { - x: int, - y: int, -} - -impl Point { - fn new(x: int, y: int) -> Point { - Point { x: x, y: y } - } - - fn x(self) -> int { - self.x - } - - fn y(self) -> int { - self.y - } -} - -fn main() { - let p = Point::new(42, 69); - p.x(); - p.y(); -} diff --git a/tests/vm_harness/expression/function_call/method_chain.tao b/tests/vm_harness/expression/function_call/method_chain.tao deleted file mode 100644 index 5e19900b..00000000 --- a/tests/vm_harness/expression/function_call/method_chain.tao +++ /dev/null @@ -1,26 +0,0 @@ -struct Foo { - bar: int, - baz: string, -} - -impl Foo { - fn new() -> Self { - Foo { bar: 0, baz: "" } - } - - fn bar(self, value: int) -> Self { - self.bar = value; - self - } - - fn baz(self, value: string) -> Self { - self.baz = value; - self - } -} - -fn main() { - let foo = Foo::new().bar(42).baz("hello"); - chacha::assert_eq(foo.bar, 42); - chacha::assert_eq(foo.baz, "hello"); -} diff --git a/tests/vm_harness/expression/function_call/no_such_function.ore b/tests/vm_harness/expression/function_call/no_such_function.ore deleted file mode 100644 index 6c1c8100..00000000 --- a/tests/vm_harness/expression/function_call/no_such_function.ore +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - foo(); -} diff --git a/tests/vm_harness/expression/function_call/no_such_function.stderr b/tests/vm_harness/expression/function_call/no_such_function.stderr deleted file mode 100644 index 322884fd..00000000 --- a/tests/vm_harness/expression/function_call/no_such_function.stderr +++ /dev/null @@ -1,8 +0,0 @@ -Error: variable `foo` not found - ╭─[ no_such_function:2:5 ] - │ - 2 │     foo(); -  │ ─┬─ -  │ ╰─── used here -───╯ - diff --git a/tests/vm_harness/expression/function_call/no_such_static_method.stderr b/tests/vm_harness/expression/function_call/no_such_static_method.stderr deleted file mode 100644 index 671ace38..00000000 --- a/tests/vm_harness/expression/function_call/no_such_static_method.stderr +++ /dev/null @@ -1,8 +0,0 @@ -Error: No such method: default - ╭─[ no_such_static_method:21:13 ] - │ - 21 │     let p = Point::default(); -  │ ────────┬─────── -  │ ╰───────── at or near this location -────╯ - diff --git a/tests/vm_harness/expression/function_call/no_such_static_method.tao b/tests/vm_harness/expression/function_call/no_such_static_method.tao deleted file mode 100644 index deb16c89..00000000 --- a/tests/vm_harness/expression/function_call/no_such_static_method.tao +++ /dev/null @@ -1,22 +0,0 @@ -struct Point { - x: int, - y: int, -} - -impl Point { - fn new(x: int, y: int) -> Point { - Point { x: x, y: y } - } - - fn x(self) -> int { - self.x - } - - fn y(self) -> int { - self.y - } -} - -fn main() { - let p = Point::default(); -} diff --git a/tests/vm_harness/expression/function_call/static_method_arg_check.stderr b/tests/vm_harness/expression/function_call/static_method_arg_check.stderr deleted file mode 100644 index e6882887..00000000 --- a/tests/vm_harness/expression/function_call/static_method_arg_check.stderr +++ /dev/null @@ -1 +0,0 @@ -8 \ No newline at end of file diff --git a/tests/vm_harness/expression/function_call/static_method_arg_check.tao b/tests/vm_harness/expression/function_call/static_method_arg_check.tao deleted file mode 100644 index f5479a7b..00000000 --- a/tests/vm_harness/expression/function_call/static_method_arg_check.tao +++ /dev/null @@ -1,11 +0,0 @@ -struct Foo {} - -impl Foo { - fn test(a: int, b: float, c: string) -> int { - a + b as int + c.len() - } -} -fn main() { - // This fails - print(Foo::test(1, 2, "three")); -} diff --git a/tests/vm_harness/expression/function_call/static_method_call.tao b/tests/vm_harness/expression/function_call/static_method_call.tao deleted file mode 100644 index e8172df0..00000000 --- a/tests/vm_harness/expression/function_call/static_method_call.tao +++ /dev/null @@ -1,22 +0,0 @@ -struct Point { - x: int, - y: int, -} - -impl Point { - fn new(x: int, y: int) -> Point { - Point { x: x, y: y } - } - - fn x(self) -> int { - self.x - } - - fn y(self) -> int { - self.y - } -} - -fn main() { - let p = Point::new(42, 69); -} diff --git a/tests/vm_harness/expression/function_call/too_few_args.stderr b/tests/vm_harness/expression/function_call/too_few_args.stderr deleted file mode 100644 index 43b2a57b..00000000 --- a/tests/vm_harness/expression/function_call/too_few_args.stderr +++ /dev/null @@ -1,15 +0,0 @@ -Interpreter exited with: -Error: wrong number of arguments - ╭─[ too_few_args:6:5 ] - │ - 1 │ ╭─▶ fn takes_two(a: int, b: int) -> int { -  ┆ ┆ - 3 │ ├─▶ } -  │ │ -  │ ╰─────── for function defined here -  │ - 6 │     takes_two(1); -  │ ──────┬───── -  │ ╰─────── expected `2`, found `1`. -───╯ - diff --git a/tests/vm_harness/expression/function_call/too_few_args.tao b/tests/vm_harness/expression/function_call/too_few_args.tao deleted file mode 100644 index d96e91aa..00000000 --- a/tests/vm_harness/expression/function_call/too_few_args.tao +++ /dev/null @@ -1,7 +0,0 @@ -fn takes_two(a: int, b: int) -> int { - a + b -} - -fn main() { - takes_two(1); -} diff --git a/tests/vm_harness/expression/function_call/too_many_args.stderr b/tests/vm_harness/expression/function_call/too_many_args.stderr deleted file mode 100644 index 1c6bb60e..00000000 --- a/tests/vm_harness/expression/function_call/too_many_args.stderr +++ /dev/null @@ -1,15 +0,0 @@ -Interpreter exited with: -Error: wrong number of arguments - ╭─[ too_many_args:6:5 ] - │ - 1 │ ╭─▶ fn takes_two(a: int, b: int) -> int { -  ┆ ┆ - 3 │ ├─▶ } -  │ │ -  │ ╰─────── for function defined here -  │ - 6 │     takes_two(1, 2, 3); -  │ ─────────┬──────── -  │ ╰────────── expected `2`, found `3`. -───╯ - diff --git a/tests/vm_harness/expression/function_call/too_many_args.tao b/tests/vm_harness/expression/function_call/too_many_args.tao deleted file mode 100644 index 51846896..00000000 --- a/tests/vm_harness/expression/function_call/too_many_args.tao +++ /dev/null @@ -1,7 +0,0 @@ -fn takes_two(a: int, b: int) -> int { - a + b -} - -fn main() { - takes_two(1, 2, 3); -} diff --git a/tests/vm_harness/expression/group/group.tao b/tests/vm_harness/expression/group/group.tao deleted file mode 100644 index d3d8ba8d..00000000 --- a/tests/vm_harness/expression/group/group.tao +++ /dev/null @@ -1,9 +0,0 @@ -fn main() { - chacha::assert_eq((1 + 1), 2); - chacha::assert_eq((2 + 2) / 4, 1); - - let a = 3; - let b = 3.14; - let c = if a >= (b as int) { a } else { b }; - chacha::assert_eq(c, a); -} diff --git a/tests/vm_harness/expression/if/else_if.ore b/tests/vm_harness/expression/if/else_if.ore deleted file mode 100644 index 46674eaf..00000000 --- a/tests/vm_harness/expression/if/else_if.ore +++ /dev/null @@ -1,15 +0,0 @@ -fn main() -> bool { - if false { - print("false"); - chacha::assert(false); - false - } else if true { - print("true"); - chacha::assert(true); - true - } else { - print("false"); - chacha::assert(false); - false - } -} diff --git a/tests/vm_harness/expression/if/failing/if_let_need_type.tao b/tests/vm_harness/expression/if/failing/if_let_need_type.tao deleted file mode 100644 index 5645cba7..00000000 --- a/tests/vm_harness/expression/if/failing/if_let_need_type.tao +++ /dev/null @@ -1,8 +0,0 @@ -enum Option { - Some(T), - None, -} - -fn main() { - let x = Option::None; -} diff --git a/tests/vm_harness/expression/if/if_let.ore b/tests/vm_harness/expression/if/if_let.ore deleted file mode 100644 index e368183d..00000000 --- a/tests/vm_harness/expression/if/if_let.ore +++ /dev/null @@ -1,67 +0,0 @@ -use std::option::Option; -use std::result::Result; - -fn main() { - let x = Option::::None; - let z = if let Option::::None = x { - print("None\n"); - chacha::assert(true); - 0 - } else { - print("Some\n"); - chacha::assert(false); - 1 - }; - chacha::assert_eq(z, 0); - - let x = Option::::Some("Hello world!"); - let z = if let Option::::Some(str) = x { - print("Some(${str})\n"); - chacha::assert(true); - 0 - } else { - print("None\n"); - chacha::assert(false); - 1 - }; - chacha::assert_eq(z, 0); - - let y = Option::::Some(42); - // let y = Option::Some::(42); - let z = if let Option::::Some(a) = y { - // if let Option::Some::(y) = y { - print("Some(${a})\n"); - chacha::assert(true); - a - } else { - print("None\n"); - chacha::assert(false); - 0 - }; - chacha::assert_eq(z, 42); - - let y = Option::::None; - // let y = Option::Some::(42); - let z = if let Option::::None = y { - print("None\n"); - chacha::assert(true); - y - } else { - print("Some\n"); - chacha::assert(false); - Option::::Some(0) - }; - chacha::assert_eq(z, Option::::None); - - // Test the else block - let result = Result::::Err("oops"); - let z = if let Result::::Ok(y) = result { - print("Ok(${y})\n"); - chacha::assert(false); - y - } else { - print("Err\n"); - chacha::assert(true); - 0 - }; -} diff --git a/tests/vm_harness/expression/if/if_let_map.ore b/tests/vm_harness/expression/if/if_let_map.ore deleted file mode 100644 index c3f72970..00000000 --- a/tests/vm_harness/expression/if/if_let_map.ore +++ /dev/null @@ -1,8 +0,0 @@ -use std::option::Option; - -fn main() { - let map = {{"key": "value"}}; - if let Option::Some(value) = map.get("key") { - print("${value}"); - } - } \ No newline at end of file diff --git a/tests/vm_harness/expression/if/if_logic.tao b/tests/vm_harness/expression/if/if_logic.tao deleted file mode 100644 index 5d86e7a8..00000000 --- a/tests/vm_harness/expression/if/if_logic.tao +++ /dev/null @@ -1,8 +0,0 @@ -fn main() { - // test the truth branch of an if expression - let a = if true { 1 } else { 2 }; - chacha::assert_eq(a, 1); - // and now the false branch - let b = if false { 1 } else { 2 }; - chacha::assert_eq(b, 2); -} diff --git a/tests/vm_harness/expression/if/if_test.stderr b/tests/vm_harness/expression/if/if_test.stderr deleted file mode 100644 index df928bf1..00000000 --- a/tests/vm_harness/expression/if/if_test.stderr +++ /dev/null @@ -1,30 +0,0 @@ -Error: Type mismatch: expected `bool`, found `int`. - ╭─[ if_test:4:8 ] - │ - 4 │     if 1 { -  │ ┬ -  │ ╰── expected bool -  │ │ -  │ ╰── found int -───╯ - -Error: Type mismatch: expected `bool`, found `string`. - ╭─[ if_test:8:8 ] - │ - 8 │     if "8" { -  │ ─┬─ -  │ ╰─── expected bool -  │ │ -  │ ╰─── found string -───╯ - -Error: Type mismatch: expected `bool`, found `float`. - ╭─[ if_test:12:8 ] - │ - 12 │     if 1.0 { -  │ ─┬─ -  │ ╰─── expected bool -  │ │ -  │ ╰─── found float -────╯ - diff --git a/tests/vm_harness/expression/if/if_test.tao b/tests/vm_harness/expression/if/if_test.tao deleted file mode 100644 index 6c9d5984..00000000 --- a/tests/vm_harness/expression/if/if_test.tao +++ /dev/null @@ -1,15 +0,0 @@ -// This is actually testing errors on if, not evaluating the if expression -fn main() { - // not a bool - if 1 { - print("1"); - } - - if "8" { - print("8"); - } - - if 1.0 { - print("1.0"); - } -} diff --git a/tests/vm_harness/expression/index/index_not_a_list.stderr b/tests/vm_harness/expression/index/index_not_a_list.stderr deleted file mode 100644 index b5d63022..00000000 --- a/tests/vm_harness/expression/index/index_not_a_list.stderr +++ /dev/null @@ -1,10 +0,0 @@ -Error: expected a list - ╭─[ index_not_a_list:3:13 ] - │ - 3 │     let b = a[0]; -  │ ┬ -  │ ╰── used here -  │ -  │ Note: Found int -───╯ - diff --git a/tests/vm_harness/expression/index/index_not_a_list.tao b/tests/vm_harness/expression/index/index_not_a_list.tao deleted file mode 100644 index 763b4af7..00000000 --- a/tests/vm_harness/expression/index/index_not_a_list.tao +++ /dev/null @@ -1,4 +0,0 @@ -fn main() { - let a = 88; - let b = a[0]; -} diff --git a/tests/vm_harness/expression/index/index_not_an_int.stderr b/tests/vm_harness/expression/index/index_not_an_int.stderr deleted file mode 100644 index d2cbef53..00000000 --- a/tests/vm_harness/expression/index/index_not_an_int.stderr +++ /dev/null @@ -1,10 +0,0 @@ -Error: Type mismatch: expected `int`, found `string`. - ╭─[ index_not_an_int:3:15 ] - │ - 3 │     let b = a["a"]; -  │ ─┬─ -  │ ╰─── expected int -  │ │ -  │ ╰─── found string -───╯ - diff --git a/tests/vm_harness/expression/index/index_not_an_int.tao b/tests/vm_harness/expression/index/index_not_an_int.tao deleted file mode 100644 index 7aa0ab1d..00000000 --- a/tests/vm_harness/expression/index/index_not_an_int.tao +++ /dev/null @@ -1,4 +0,0 @@ -fn main() { - let a = "Hello, world!"; - let b = a["a"]; -} diff --git a/tests/vm_harness/expression/index/index_vec_by_range.ore b/tests/vm_harness/expression/index/index_vec_by_range.ore deleted file mode 100644 index 65a4a9dd..00000000 --- a/tests/vm_harness/expression/index/index_vec_by_range.ore +++ /dev/null @@ -1,5 +0,0 @@ -fn main() { - let a = [1, 2, 3, 4, 5]; - let b = a[1..3]; - chacha::assert_eq(b, [2, 3]); -} diff --git a/tests/vm_harness/expression/index/range_not_a_list.stderr b/tests/vm_harness/expression/index/range_not_a_list.stderr deleted file mode 100644 index d957499f..00000000 --- a/tests/vm_harness/expression/index/range_not_a_list.stderr +++ /dev/null @@ -1,10 +0,0 @@ -Error: expected a list - ╭─[ range_not_a_list:3:13 ] - │ - 3 │     let b = a[0..1]; -  │ ┬ -  │ ╰── used here -  │ -  │ Note: Found int -───╯ - diff --git a/tests/vm_harness/expression/index/range_not_a_list.tao b/tests/vm_harness/expression/index/range_not_a_list.tao deleted file mode 100644 index a3dc41c8..00000000 --- a/tests/vm_harness/expression/index/range_not_a_list.tao +++ /dev/null @@ -1,4 +0,0 @@ -fn main() { - let a = 88; - let b = a[0..1]; -} diff --git a/tests/vm_harness/expression/index/string_index_out_of_bounds.stderr b/tests/vm_harness/expression/index/string_index_out_of_bounds.stderr deleted file mode 100644 index be0c38f4..00000000 --- a/tests/vm_harness/expression/index/string_index_out_of_bounds.stderr +++ /dev/null @@ -1,11 +0,0 @@ -VM exited with: -Error: index out of bounds 💥 - ╭─[ string_index_out_of_bounds:3:30 ] - │ - 3 │     let out_of_bounds = name[7]; -  │ ┬ -  │ ╰── the index is 7 -  │ -  │ Note: and the length of the array is 7 -───╯ - diff --git a/tests/vm_harness/expression/index/string_index_out_of_bounds.tao b/tests/vm_harness/expression/index/string_index_out_of_bounds.tao deleted file mode 100644 index 7b3ec09e..00000000 --- a/tests/vm_harness/expression/index/string_index_out_of_bounds.tao +++ /dev/null @@ -1,4 +0,0 @@ -fn main() { - let name = "uberFoo"; - let out_of_bounds = name[7]; -} diff --git a/tests/vm_harness/expression/index/string_range_oob.stderr b/tests/vm_harness/expression/index/string_range_oob.stderr deleted file mode 100644 index 15e06d3c..00000000 --- a/tests/vm_harness/expression/index/string_range_oob.stderr +++ /dev/null @@ -1,11 +0,0 @@ -VM exited with: -Error: index out of bounds 💥 - ╭─[ string_range_oob:3:15 ] - │ - 3 │     let b = a[2..15]; -  │ ┬ -  │ ╰── the index is 15 -  │ -  │ Note: and the length of the array is 13 -───╯ - diff --git a/tests/vm_harness/expression/index/string_range_oob.tao b/tests/vm_harness/expression/index/string_range_oob.tao deleted file mode 100644 index 244dfe21..00000000 --- a/tests/vm_harness/expression/index/string_range_oob.tao +++ /dev/null @@ -1,4 +0,0 @@ -fn main() { - let a = "Hello, world!"; - let b = a[2..15]; -} diff --git a/tests/vm_harness/expression/index/vec_index_out_of_bounds.stderr b/tests/vm_harness/expression/index/vec_index_out_of_bounds.stderr deleted file mode 100644 index 533f8963..00000000 --- a/tests/vm_harness/expression/index/vec_index_out_of_bounds.stderr +++ /dev/null @@ -1,11 +0,0 @@ -VM exited with: -Error: index out of bounds 💥 - ╭─[ vec_index_out_of_bounds:3:30 ] - │ - 3 │     let out_of_bounds = name[7]; -  │ ┬ -  │ ╰── the index is 7 -  │ -  │ Note: and the length of the array is 7 -───╯ - diff --git a/tests/vm_harness/expression/index/vec_index_out_of_bounds.tao b/tests/vm_harness/expression/index/vec_index_out_of_bounds.tao deleted file mode 100644 index 74213b2d..00000000 --- a/tests/vm_harness/expression/index/vec_index_out_of_bounds.tao +++ /dev/null @@ -1,4 +0,0 @@ -fn main() { - let name = ["u", "b", "e", "r", "F", "o", "o"]; - let out_of_bounds = name[7]; -} diff --git a/tests/vm_harness/expression/index/vec_range_oob.stderr b/tests/vm_harness/expression/index/vec_range_oob.stderr deleted file mode 100644 index 346b69ef..00000000 --- a/tests/vm_harness/expression/index/vec_range_oob.stderr +++ /dev/null @@ -1,11 +0,0 @@ -VM exited with: -Error: index out of bounds 💥 - ╭─[ vec_range_oob:2:17 ] - │ - 2 │     let a = [1, 2, 3, 4]; -  │ ┬ -  │ ╰── the index is 5 -  │ -  │ Note: and the length of the array is 4 -───╯ - diff --git a/tests/vm_harness/expression/index/vec_range_oob.tao b/tests/vm_harness/expression/index/vec_range_oob.tao deleted file mode 100644 index 9559ef45..00000000 --- a/tests/vm_harness/expression/index/vec_range_oob.tao +++ /dev/null @@ -1,4 +0,0 @@ -fn main() { - let a = [1, 2, 3, 4]; - let b = a[2..5]; -} diff --git a/tests/vm_harness/expression/list/list_expr.tao b/tests/vm_harness/expression/list/list_expr.tao deleted file mode 100644 index db92b429..00000000 --- a/tests/vm_harness/expression/list/list_expr.tao +++ /dev/null @@ -1,5 +0,0 @@ -fn main() { - let a = [0, 1, 2, 3, "4" as int]; - chacha::assert_eq(a[0], 0); - chacha::assert_eq(a[4], 4); -} diff --git a/tests/vm_harness/expression/literal/format_string.ore b/tests/vm_harness/expression/literal/format_string.ore deleted file mode 100644 index 582c3332..00000000 --- a/tests/vm_harness/expression/literal/format_string.ore +++ /dev/null @@ -1,8 +0,0 @@ -fn main() -> () { - let x = 42; - let y = "Hello"; - let z = "world"; - let a = "MOTD: ${y} ${z}!, the magic number is ${x}."; - print(a); - chacha::assert_eq(a, "MOTD: Hello world!, the magic number is 42."); -} diff --git a/tests/vm_harness/expression/match/literal.ore b/tests/vm_harness/expression/match/literal.ore deleted file mode 100644 index 7e717c88..00000000 --- a/tests/vm_harness/expression/match/literal.ore +++ /dev/null @@ -1,48 +0,0 @@ -fn main() { - match 42 { - 1 => chacha::assert(false), - 2 => chacha::assert(false), - 42 => chacha::assert(true), - 99 => chacha::assert(false), - _ => chacha::assert(false), - }; - - match "hello" { - "hello" => chacha::assert(true), - "world" => chacha::assert(false), - _ => chacha::assert(false), - }; - - match 0.42 { - 0.42 => chacha::assert(true), - 0.43 => chacha::assert(false), - _ => chacha::assert(false), - }; - - match true { - true => chacha::assert(true), - false => chacha::assert(false), - }; - - match false { - true => chacha::assert(false), - false => chacha::assert(true), - }; - - match () { - () => chacha::assert(true), - }; - - match "not_found" { - "found" => chacha::assert(false), - _ => chacha::assert(true), - }; - - match "not_found" { - "found" => chacha::assert(false), - value => { - chacha::assert(true); - chacha::assert_eq(value, "not_found") - } - }; -} diff --git a/tests/vm_harness/expression/match/literal_enum.ore b/tests/vm_harness/expression/match/literal_enum.ore deleted file mode 100644 index e0de51d4..00000000 --- a/tests/vm_harness/expression/match/literal_enum.ore +++ /dev/null @@ -1,14 +0,0 @@ -enum Foo { - Bar(int), - Baz(bool), - Qux(int), -} - -fn main() { - match Foo::Bar(42) { - Foo::Qux(42) => chacha::assert(false), - Foo::Bar(42) => chacha::assert(true), - Foo::Bar(x) => chacha::assert(false), - Foo::Baz(true) => chacha::assert(false), - }; -} diff --git a/tests/vm_harness/expression/match/option.ore b/tests/vm_harness/expression/match/option.ore deleted file mode 100644 index 64078861..00000000 --- a/tests/vm_harness/expression/match/option.ore +++ /dev/null @@ -1,34 +0,0 @@ -enum Option { - Some(T), - None, -} - -fn main() { - let x = Option::::None; - print(x); - let zebra = match x { - Option::::None => { - chacha::assert_eq(true, true); - false - } - Option::::Some(y) => { - print("top: {y}\n"); - chacha::assert_eq(true, false); - true - } - }; - chacha::assert_eq(zebra, false); - print(zebra); - - x = Option::::Some("hello"); - print(x); - match x { - Option::::None => { - chacha::assert_eq(" not none", "oops"); - } - Option::::Some(y) => { - print("bottom: {i}\n"); - chacha::assert_eq(y, "hello"); - } - }; -} diff --git a/tests/vm_harness/expression/match/plain.tao b/tests/vm_harness/expression/match/plain.tao deleted file mode 100644 index cda1ba7e..00000000 --- a/tests/vm_harness/expression/match/plain.tao +++ /dev/null @@ -1,52 +0,0 @@ -enum Plain { - Foo, - Bar, - Baz, -} - -fn main() { - match Plain::Foo { - Plain::Foo => { - print("Foo"); - chacha::assert_eq(true, true); - } - Plain::Bar => { - print("Bar"); - chacha::assert_eq(true, false); - } - Plain::Baz => { - print("Baz"); - chacha::assert_eq(true, false); - } - } - - match Plain::Bar { - Plain::Foo => { - print("Foo"); - chacha::assert_eq(true, false); - } - Plain::Bar => { - print("Bar"); - chacha::assert_eq(true, true); - } - Plain::Baz => { - print("Baz"); - chacha::assert_eq(true, false); - } - } - - match Plain::Baz { - Plain::Foo => { - print("Foo"); - chacha::assert_eq(true, false); - } - Plain::Bar => { - print("Bar"); - chacha::assert_eq(true, false); - } - Plain::Baz => { - print("Baz"); - chacha::assert_eq(true, true); - } - } -} diff --git a/tests/vm_harness/expression/match/tuple.tao b/tests/vm_harness/expression/match/tuple.tao deleted file mode 100644 index 8396620e..00000000 --- a/tests/vm_harness/expression/match/tuple.tao +++ /dev/null @@ -1,47 +0,0 @@ -enum Tuple { - String(string), - Integer(int), - Float(float), -} - -fn main() { - let hello = Tuple::String("hello"); - let world = Tuple::String("world"); - match hello { - Tuple::String(s) => { - chacha::assert_eq(s, "hello"); - } - Tuple::Integer(i) => { - chacha::assert_eq(true, false); - } - Tuple::Float(f) => { - chacha::assert_eq(true, false); - } - }; - match world { - Tuple::String(s) => { - chacha::assert_eq(s, "world"); - } - Tuple::Integer(i) => { - chacha::assert_eq(true, false); - } - Tuple::Float(f) => { - chacha::assert_eq(true, false); - } - }; - // let result = string_tuple(tuple); - // chacha::assert_eq(result, "hello"); - // let result = string_tuple(Tuple::Integer(42)); - // chacha::assert_eq(result, "42"); -} - -// fn string_tuple(tuple: Tuple) -> string { -// // let foo = match tuple { -// match tuple { -// Tuple::String(s) => s, -// Tuple::Integer(i) => "{0}".format(i), -// Tuple::Float(f) => "{0}".format(f), -// } -// // }; -// // "{0}".format(foo) -// } diff --git a/tests/vm_harness/expression/operator/binary/addition.tao b/tests/vm_harness/expression/operator/binary/addition.tao deleted file mode 100644 index 1b117368..00000000 --- a/tests/vm_harness/expression/operator/binary/addition.tao +++ /dev/null @@ -1,8 +0,0 @@ -fn main() { - chacha::assert_eq(1 + 1, 2); - chacha::assert_eq(1.0 + 2.0, 3.0); - chacha::assert_eq(true + true, true); - chacha::assert_eq(true + false, true); - chacha::assert_eq(false + false, false); - chacha::assert_eq("foo" + "bar", "foobar"); -} diff --git a/tests/vm_harness/expression/operator/binary/assignment/assign.tao b/tests/vm_harness/expression/operator/binary/assignment/assign.tao deleted file mode 100644 index ab3bd537..00000000 --- a/tests/vm_harness/expression/operator/binary/assignment/assign.tao +++ /dev/null @@ -1,6 +0,0 @@ -fn main() { - let a = 42; - chacha::assert_eq(a, 42); - a = 69; - chacha::assert_eq(a, 69); -} diff --git a/tests/vm_harness/expression/operator/binary/assignment/assign_field.tao b/tests/vm_harness/expression/operator/binary/assignment/assign_field.tao deleted file mode 100644 index 6de6b918..00000000 --- a/tests/vm_harness/expression/operator/binary/assignment/assign_field.tao +++ /dev/null @@ -1,12 +0,0 @@ -struct Foo { - a: int, -} -fn main() { - let foo = Foo { a: 69 }; - foo.a = 42; - - print(foo.a as string + "\n"); - - chacha::assert_eq(foo.a, 42); - chacha::assert_eq(foo, Foo { a: 42 }); -} diff --git a/tests/vm_harness/expression/operator/binary/boolean/and.tao b/tests/vm_harness/expression/operator/binary/boolean/and.tao deleted file mode 100644 index e8bf2039..00000000 --- a/tests/vm_harness/expression/operator/binary/boolean/and.tao +++ /dev/null @@ -1,6 +0,0 @@ -/// Test _logical_ AND -fn main() -> () { - chacha::assert_eq(true, true && true); - chacha::assert_eq(false, false && false); - chacha::assert_eq(false, false && true); -} diff --git a/tests/vm_harness/expression/operator/binary/boolean/or.tao b/tests/vm_harness/expression/operator/binary/boolean/or.tao deleted file mode 100644 index c054e38f..00000000 --- a/tests/vm_harness/expression/operator/binary/boolean/or.tao +++ /dev/null @@ -1,6 +0,0 @@ -/// Test _Logical_ OR -fn main() -> () { - chacha::assert_eq(false, false || false); - chacha::assert_eq(true, true || true); - chacha::assert_eq(true, false || true); -} diff --git a/tests/vm_harness/expression/operator/binary/comparison/equals.tao b/tests/vm_harness/expression/operator/binary/comparison/equals.tao deleted file mode 100644 index 31291bd8..00000000 --- a/tests/vm_harness/expression/operator/binary/comparison/equals.tao +++ /dev/null @@ -1,7 +0,0 @@ -fn main() { - chacha::assert_eq(42 == 42, true); - chacha::assert_eq(42.0 == 42 as float, true); - chacha::assert_eq(42 == 42.0 as int, true); - chacha::assert_eq(42.0 == 42.0, true); - chacha::assert_eq("42" == "42", true); -} diff --git a/tests/vm_harness/expression/operator/binary/comparison/gt.tao b/tests/vm_harness/expression/operator/binary/comparison/gt.tao deleted file mode 100644 index 6160a397..00000000 --- a/tests/vm_harness/expression/operator/binary/comparison/gt.tao +++ /dev/null @@ -1,10 +0,0 @@ -fn main() { - chacha::assert_eq(42 > 1, true); - chacha::assert_eq(42.0 > 1 as float, true); - chacha::assert_eq(42 > 1.0 as int, true); - chacha::assert_eq(42.0 > 1.0, true); - - chacha::assert_eq(true > false, true); - - chacha::assert_eq("69" > "42", true); -} diff --git a/tests/vm_harness/expression/operator/binary/comparison/gte.tao b/tests/vm_harness/expression/operator/binary/comparison/gte.tao deleted file mode 100644 index 369c3650..00000000 --- a/tests/vm_harness/expression/operator/binary/comparison/gte.tao +++ /dev/null @@ -1,15 +0,0 @@ -fn main() { - chacha::assert_eq(42 >= 42, true); - chacha::assert_eq(42.0 >= 42 as float, true); - chacha::assert_eq(42 >= 42.0 as int, true); - chacha::assert_eq(42.0 >= 42.0, true); - - chacha::assert_eq(69 >= 42, true); - chacha::assert_eq(69.0 >= 42 as float, true); - chacha::assert_eq(69 >= 42.0 as int, true); - chacha::assert_eq(69.0 >= 42.0, true); - - chacha::assert_eq(true >= false, true); - - chacha::assert_eq("69" >= "42", true); -} diff --git a/tests/vm_harness/expression/operator/binary/comparison/lt.tao b/tests/vm_harness/expression/operator/binary/comparison/lt.tao deleted file mode 100644 index 888f0f72..00000000 --- a/tests/vm_harness/expression/operator/binary/comparison/lt.tao +++ /dev/null @@ -1,10 +0,0 @@ -fn main() { - chacha::assert_eq(42 < 69, true); - chacha::assert_eq(42.0 < 69 as float, true); - chacha::assert_eq(42 < 69.0 as int, true); - chacha::assert_eq(42.0 < 69.0, true); - - chacha::assert_eq(false < true, true); - - chacha::assert_eq("42" < "69", true); -} diff --git a/tests/vm_harness/expression/operator/binary/comparison/lte.tao b/tests/vm_harness/expression/operator/binary/comparison/lte.tao deleted file mode 100644 index 763df1eb..00000000 --- a/tests/vm_harness/expression/operator/binary/comparison/lte.tao +++ /dev/null @@ -1,15 +0,0 @@ -fn main() { - chacha::assert_eq(42 <= 42, true); - chacha::assert_eq(42.0 <= 42 as float, true); - chacha::assert_eq(42 <= 42.0 as int, true); - chacha::assert_eq(42.0 <= 42.0, true); - - chacha::assert_eq(42 <= 69, true); - chacha::assert_eq(42.0 <= 69 as float, true); - chacha::assert_eq(42 <= 69.0 as int, true); - chacha::assert_eq(42.0 <= 69.0, true); - - chacha::assert_eq(false <= true, true); - - chacha::assert_eq("42" <= "69", true); -} diff --git a/tests/vm_harness/expression/operator/binary/comparison/not_equals.tao b/tests/vm_harness/expression/operator/binary/comparison/not_equals.tao deleted file mode 100644 index 4c342528..00000000 --- a/tests/vm_harness/expression/operator/binary/comparison/not_equals.tao +++ /dev/null @@ -1,7 +0,0 @@ -fn main() { - chacha::assert_eq(42 != 69, true); - chacha::assert_eq(42.0 != 69 as float, true); - chacha::assert_eq(42 != 69.0 as int, true); - chacha::assert_eq(42.0 != 69.0, true); - chacha::assert_eq("42" != "69", true); -} diff --git a/tests/vm_harness/expression/operator/binary/division.tao b/tests/vm_harness/expression/operator/binary/division.tao deleted file mode 100644 index 46e27472..00000000 --- a/tests/vm_harness/expression/operator/binary/division.tao +++ /dev/null @@ -1,4 +0,0 @@ -fn main() { - chacha::assert_eq(42 / 1, 42); - chacha::assert_eq(42.0 / 1.0, 42.0); -} diff --git a/tests/vm_harness/expression/operator/binary/multiplication.tao b/tests/vm_harness/expression/operator/binary/multiplication.tao deleted file mode 100644 index a6a63bb2..00000000 --- a/tests/vm_harness/expression/operator/binary/multiplication.tao +++ /dev/null @@ -1,4 +0,0 @@ -fn main() { - chacha::assert_eq(2 * 21, 42); - chacha::assert_eq(2.0 * 21.0, 42.0); -} diff --git a/tests/vm_harness/expression/operator/binary/subtraction.tao b/tests/vm_harness/expression/operator/binary/subtraction.tao deleted file mode 100644 index 42e6efa8..00000000 --- a/tests/vm_harness/expression/operator/binary/subtraction.tao +++ /dev/null @@ -1,7 +0,0 @@ -fn main() { - chacha::assert_eq(1 - 1, 0); - chacha::assert_eq(1.0 - 2.0, -1.0); - chacha::assert_eq(true - true, true); - chacha::assert_eq(true - false, false); - chacha::assert_eq(false - false, false); -} diff --git a/tests/vm_harness/expression/operator/unary/not.tao b/tests/vm_harness/expression/operator/unary/not.tao deleted file mode 100644 index 758f60de..00000000 --- a/tests/vm_harness/expression/operator/unary/not.tao +++ /dev/null @@ -1,4 +0,0 @@ -/// Test _logical_ NOT -fn main() { - chacha::assert_eq(!false, true); -} diff --git a/tests/vm_harness/expression/string/replace.ore b/tests/vm_harness/expression/string/replace.ore deleted file mode 100644 index 9aab69d5..00000000 --- a/tests/vm_harness/expression/string/replace.ore +++ /dev/null @@ -1,6 +0,0 @@ -// Exercise String::replace -fn main() { - let s = "Hello, USER!"; - let s = s.replace("USER", "world"); - chacha::assert_eq(s, "Hello, world!"); -} diff --git a/tests/vm_harness/expression/struct/assignment.tao b/tests/vm_harness/expression/struct/assignment.tao deleted file mode 100644 index 88ac15bd..00000000 --- a/tests/vm_harness/expression/struct/assignment.tao +++ /dev/null @@ -1,19 +0,0 @@ -struct A { - b: B, -} - -struct B { - b: int, -} - -fn main() { - let a = A { b: B { b: 42 } }; - chacha::assert_eq(a.b, B { b: 42 }); - // - // 💃🕺 - chacha::assert_eq(a.b.b, 42); - a.b = B { b: 420 }; - chacha::assert_eq(a.b.b, 420); - a.b.b = 69; - // chacha::assert_eq(a.b.b, 69); -} diff --git a/tests/vm_harness/expression/struct/failing/missing_field.tao b/tests/vm_harness/expression/struct/failing/missing_field.tao deleted file mode 100644 index 1e7c4742..00000000 --- a/tests/vm_harness/expression/struct/failing/missing_field.tao +++ /dev/null @@ -1,14 +0,0 @@ -struct Object { - id: Uuid, - name: String, - description: String, -} - -fn main() { - // Specifying the type of the lhs forces a type check. - let object: Object = Object { - id: Uuid::new(), - name: "Merlin", - // description: "A wizard", - }; -} diff --git a/tests/vm_harness/expression/struct/field_access_func.ore b/tests/vm_harness/expression/struct/field_access_func.ore deleted file mode 100644 index f1789d15..00000000 --- a/tests/vm_harness/expression/struct/field_access_func.ore +++ /dev/null @@ -1,15 +0,0 @@ -struct Foo { - x: int, -} - -impl Foo { - fn test(self, y: int) -> int { - self.x + y - } -} - -fn main() { - let foo = Foo { x: 1 }; - print("${foo.test(2)}"); - chacha::assert(foo.test(2) == 3); -} diff --git a/tests/vm_harness/expression/struct/incomplete_struct_expr_1.stderr b/tests/vm_harness/expression/struct/incomplete_struct_expr_1.stderr deleted file mode 100644 index 90b56270..00000000 --- a/tests/vm_harness/expression/struct/incomplete_struct_expr_1.stderr +++ /dev/null @@ -1,15 +0,0 @@ -Error: Unexpected token in input, expected - ╭─[ incomplete_struct_expr_1:6:19 ] - │ - 6 │     let foo = Foo { -  │ ┬ -  │ ╰── Unexpected token { -───╯ -Error: Unexpected token in input, expected Fn, impl, struct, use - ╭─[ incomplete_struct_expr_1:7:5 ] - │ - 7 │     return; -  │ ───┬── -  │ ╰──── Unexpected token return -───╯ - diff --git a/tests/vm_harness/expression/struct/incomplete_struct_expr_1.tao b/tests/vm_harness/expression/struct/incomplete_struct_expr_1.tao deleted file mode 100644 index 5ccdcfcc..00000000 --- a/tests/vm_harness/expression/struct/incomplete_struct_expr_1.tao +++ /dev/null @@ -1,8 +0,0 @@ -struct Foo { - bar: int, -} - -fn main() { - let foo = Foo { - return; -} \ No newline at end of file diff --git a/tests/vm_harness/expression/struct/incomplete_struct_expr_2.stderr b/tests/vm_harness/expression/struct/incomplete_struct_expr_2.stderr deleted file mode 100644 index 3135ea2e..00000000 --- a/tests/vm_harness/expression/struct/incomplete_struct_expr_2.stderr +++ /dev/null @@ -1,15 +0,0 @@ -Error: Unexpected token in input, expected : - ╭─[ incomplete_struct_expr_2:6:21 ] - │ - 6 │     let foo = Foo { bar -  │ ─┬─ -  │ ╰─── Unexpected token bar -───╯ -Error: Unexpected token in input, expected impl, Fn, struct, use - ╭─[ incomplete_struct_expr_2:7:5 ] - │ - 7 │     return; -  │ ───┬── -  │ ╰──── Unexpected token return -───╯ - diff --git a/tests/vm_harness/expression/struct/incomplete_struct_expr_2.tao b/tests/vm_harness/expression/struct/incomplete_struct_expr_2.tao deleted file mode 100644 index ded7172a..00000000 --- a/tests/vm_harness/expression/struct/incomplete_struct_expr_2.tao +++ /dev/null @@ -1,8 +0,0 @@ -struct Foo { - bar: int, -} - -fn main() { - let foo = Foo { bar - return; -} \ No newline at end of file diff --git a/tests/vm_harness/expression/struct/incomplete_struct_expr_3.stderr b/tests/vm_harness/expression/struct/incomplete_struct_expr_3.stderr deleted file mode 100644 index d8ca42e7..00000000 --- a/tests/vm_harness/expression/struct/incomplete_struct_expr_3.stderr +++ /dev/null @@ -1,15 +0,0 @@ -Error: Unexpected token in input, expected - ╭─[ incomplete_struct_expr_3:6:24 ] - │ - 6 │     let foo = Foo { bar: -  │ ┬ -  │ ╰── Unexpected token : -───╯ -Error: Unexpected token in input, expected struct, impl, Fn, use - ╭─[ incomplete_struct_expr_3:7:1 ] - │ - 7 │ } -  │ ┬ -  │ ╰── Unexpected token } -───╯ - diff --git a/tests/vm_harness/expression/struct/incomplete_struct_expr_3.tao b/tests/vm_harness/expression/struct/incomplete_struct_expr_3.tao deleted file mode 100644 index 97035375..00000000 --- a/tests/vm_harness/expression/struct/incomplete_struct_expr_3.tao +++ /dev/null @@ -1,7 +0,0 @@ -struct Foo { - bar: int, -} - -fn main() { - let foo = Foo { bar: -} \ No newline at end of file diff --git a/tests/vm_harness/expression/struct/incomplete_struct_expr_4.stderr b/tests/vm_harness/expression/struct/incomplete_struct_expr_4.stderr deleted file mode 100644 index e20dd058..00000000 --- a/tests/vm_harness/expression/struct/incomplete_struct_expr_4.stderr +++ /dev/null @@ -1,17 +0,0 @@ -Error: Unclosed delimiter { - ╭─[ incomplete_struct_expr_4:6:26 ] - │ - 6 │     let foo = Foo { bar: 42 -  │ ────┬───┬ -  │ ╰────── Unclosed delimiter { -  │ │ -  │ ╰── Must be closed before this 42 -───╯ -Error: Unexpected token in input, expected struct, impl, use, Fn - ╭─[ incomplete_struct_expr_4:7:5 ] - │ - 7 │     return; -  │ ───┬── -  │ ╰──── Unexpected token return -───╯ - diff --git a/tests/vm_harness/expression/struct/incomplete_struct_expr_4.tao b/tests/vm_harness/expression/struct/incomplete_struct_expr_4.tao deleted file mode 100644 index 31ae8fd8..00000000 --- a/tests/vm_harness/expression/struct/incomplete_struct_expr_4.tao +++ /dev/null @@ -1,8 +0,0 @@ -struct Foo { - bar: int, -} - -fn main() { - let foo = Foo { bar: 42 - return; -} \ No newline at end of file diff --git a/tests/vm_harness/expression/struct/let_assign.tao b/tests/vm_harness/expression/struct/let_assign.tao deleted file mode 100644 index 4a6ff7be..00000000 --- a/tests/vm_harness/expression/struct/let_assign.tao +++ /dev/null @@ -1,9 +0,0 @@ -struct Baz { - x: int, - y: int, -} - -fn main() { - let baz: Baz = Baz { x: 1, y: 2 }; - print(baz); -} diff --git a/tests/vm_harness/expression/struct/no_such_struct_field.stderr b/tests/vm_harness/expression/struct/no_such_struct_field.stderr deleted file mode 100644 index 688b9b88..00000000 --- a/tests/vm_harness/expression/struct/no_such_struct_field.stderr +++ /dev/null @@ -1,8 +0,0 @@ -Error: struct field not found - ╭─[ no_such_struct_field:7:7 ] - │ - 7 │     f.baz = false; -  │ ─┬─ -  │ ╰─── unknown field baz -───╯ - diff --git a/tests/vm_harness/expression/struct/no_such_struct_field.tao b/tests/vm_harness/expression/struct/no_such_struct_field.tao deleted file mode 100644 index ddcb3c7f..00000000 --- a/tests/vm_harness/expression/struct/no_such_struct_field.tao +++ /dev/null @@ -1,8 +0,0 @@ -struct Foo { - bar: int, -} - -fn main() { - let f = Foo { bar: 42 }; - f.baz = false; -} diff --git a/tests/vm_harness/expression/struct/no_such_struct_field_i.stderr b/tests/vm_harness/expression/struct/no_such_struct_field_i.stderr deleted file mode 100644 index 28940bc1..00000000 --- a/tests/vm_harness/expression/struct/no_such_struct_field_i.stderr +++ /dev/null @@ -1,10 +0,0 @@ -Error: no such field baz - ╭─[ no_such_struct_field_i:6:28 ] - │ - 6 │     let f = Foo { bar: 42, baz: true }; -  │ ─┬─ ─┬─ -  │ ╰────────────────── on this type -  │ │ -  │ ╰─── this field does not exist -───╯ - diff --git a/tests/vm_harness/expression/struct/no_such_struct_field_i.tao b/tests/vm_harness/expression/struct/no_such_struct_field_i.tao deleted file mode 100644 index eaa64302..00000000 --- a/tests/vm_harness/expression/struct/no_such_struct_field_i.tao +++ /dev/null @@ -1,7 +0,0 @@ -struct Foo { - bar: int, -} - -fn main() { - let f = Foo { bar: 42, baz: true }; -} diff --git a/tests/vm_harness/expression/struct/struct_expr.tao b/tests/vm_harness/expression/struct/struct_expr.tao deleted file mode 100644 index efc86276..00000000 --- a/tests/vm_harness/expression/struct/struct_expr.tao +++ /dev/null @@ -1,34 +0,0 @@ -struct UnoDosTresQuatro { - uno: int, - dos: int, - tres: int, - quatro: int, -} - -impl UnoDosTresQuatro { - fn new() -> UnoDosTresQuatro { - UnoDosTresQuatro { - uno: 1, - dos: 2, - tres: 3, - quatro: 4, - } - } -} -struct Test { - a: int, - b: float, - c: string, - d: Uuid, - e: UnoDosTresQuatro, -} - -fn main() { - Test { - a: 42, - b: 3.14, - c: "hello", - d: Uuid::new(), - e: UnoDosTresQuatro::new(), - }; -} diff --git a/tests/vm_harness/expression/struct/unit.tao b/tests/vm_harness/expression/struct/unit.tao deleted file mode 100644 index 444fa662..00000000 --- a/tests/vm_harness/expression/struct/unit.tao +++ /dev/null @@ -1,8 +0,0 @@ -struct Unit; - -fn main() { - // let x = Unit; - // print(x); - let y = Unit {}; - print(y); -} diff --git a/tests/vm_harness/expression/variable/var_not_found.stderr b/tests/vm_harness/expression/variable/var_not_found.stderr deleted file mode 100644 index 997634fd..00000000 --- a/tests/vm_harness/expression/variable/var_not_found.stderr +++ /dev/null @@ -1,8 +0,0 @@ -Error: variable `a` not found - ╭─[ var_not_found:2:11 ] - │ - 2 │     print(a); -  │ ┬ -  │ ╰── used here -───╯ - diff --git a/tests/vm_harness/expression/variable/var_not_found.tao b/tests/vm_harness/expression/variable/var_not_found.tao deleted file mode 100644 index 1ff62e39..00000000 --- a/tests/vm_harness/expression/variable/var_not_found.tao +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - print(a); -} diff --git a/tests/vm_harness/extensions/md/test.ore b/tests/vm_harness/extensions/md/test.ore deleted file mode 100644 index 5b542aa5..00000000 --- a/tests/vm_harness/extensions/md/test.ore +++ /dev/null @@ -1,8 +0,0 @@ -use md::Md; - -fn main() { - let md = Md::new("dark"); - let html = md.to_html("*Hello World!*"); - print(html); - chacha::assert_eq(html, "

Hello World!

"); -} diff --git a/tests/vm_harness/extensions/sqlx/insert.ore b/tests/vm_harness/extensions/sqlx/insert.ore deleted file mode 100644 index 4b8d5ea0..00000000 --- a/tests/vm_harness/extensions/sqlx/insert.ore +++ /dev/null @@ -1,61 +0,0 @@ -use std::result::Result; - -use sqlx::Error; -use sqlx::Pool; -use sqlx::Row; -use sqlx::Sqlx; -use sqlx::Type; - -async fn main() -> Future<()> { - let sqlx = Sqlx::new(); - - let query = " - INSERT INTO users (flubber, username) VALUES ($1, $2); -"; - - if let Result::::Ok(pool) = sqlx - .connect("postgres://postgres:postgres@localhost/users") - .await - { - print("Connected to database\n"); - - let map = pool.query(query); - let name = "uberFoo"; - let map = map.bind(42); - let map = map.bind(name); - - let posts = map.execute(); - - let found = false; - let map = pool.query("SELECT * FROM users"); - let q = map.map(|row: Row| -> string { - let username = row.get("username", Type::String).unwrap(); - let flubber = row.get("flubber", Type::Short).unwrap(); - print(flubber as string + "\n"); - // This is bogus. - print(username as string + "\n"); - // if username == name { - // found = true; - // } - - // This is doubly bogus. - username as string - }); - let users = q.fetch_all(); - // print(users); - - // if let Result::<[Row], Error>::Ok(users) = users { - // let u = users as [string]; - - // for user in u { - // if user == name { - // found = true; - // } - // } - // } - - // chacha::assert(found); - } else { - print("Error connecting to database"); - } -} diff --git a/tests/vm_harness/extensions/sqlx/query.ore b/tests/vm_harness/extensions/sqlx/query.ore deleted file mode 100644 index 6c5ffc93..00000000 --- a/tests/vm_harness/extensions/sqlx/query.ore +++ /dev/null @@ -1,41 +0,0 @@ -use std::result::Result; - -use sqlx::Error; -use sqlx::Pool; -use sqlx::Row; -use sqlx::Sqlx; -use sqlx::Type; - -struct User { - id: int, - flubber: int, - username: string, -} - -async fn main() -> Future<()> { - let sqlx = Sqlx::new(); - - let query = " -SELECT id, flubber, username FROM users; -"; - - if let Result::::Ok(pool) = sqlx - .connect("postgres://postgres:postgres@localhost/users") - .await - { - print("Connected to database\n"); - let map = pool.query(query); - let q = map.map(|row: Row| -> User { - // Comment to force vscode leave the block. - User { - id: row.get("id", Type::Integer).unwrap(), - flubber: row.get("flubber", Type::Short).unwrap(), - username: row.get("username", Type::String).unwrap(), - } - }); - let users = q.fetch_all(); - print(users); - } else { - print("Error connecting to database"); - } -} diff --git a/tests/vm_harness/extensions/std/env_var.ore b/tests/vm_harness/extensions/std/env_var.ore deleted file mode 100644 index e6b65802..00000000 --- a/tests/vm_harness/extensions/std/env_var.ore +++ /dev/null @@ -1,7 +0,0 @@ -use std::env::Var; -use std::result::Result; - -fn main() { - Var::set_var("HELLO", "world"); - chacha::assert_eq(Var::var("HELLO"), Result::Ok("world")); -} diff --git a/tests/vm_harness/extensions/std/fs.ore b/tests/vm_harness/extensions/std/fs.ore deleted file mode 100644 index 80f7debe..00000000 --- a/tests/vm_harness/extensions/std/fs.ore +++ /dev/null @@ -1,21 +0,0 @@ -use std::fs::Error; -use std::fs::File; -use std::result::Result; - -fn main() { - let file = File::open("tests/vm_harness/extensions/std/test.txt"); - - match file { - Result::::Ok(file) => { - print("File opened successfully: ${file}\n"); - let result = file.read(); - print(result as string + "\n"); - if let Result::::Ok(result) = result { - chacha::assert_eq(result, "42"); - } else { - chacha::assert(false); - } - } - Result::::Err(error) => print("Failed to open file: ${error}"), - }; -} diff --git a/tests/vm_harness/extensions/std/option.ore b/tests/vm_harness/extensions/std/option.ore deleted file mode 100644 index 061063a9..00000000 --- a/tests/vm_harness/extensions/std/option.ore +++ /dev/null @@ -1,8 +0,0 @@ -use std::option::Option; - -fn main() { - let some = Option::Some(1); - chacha::assert(some.is_some()); - let none = Option::None; - chacha::assert(none.is_none()); -} diff --git a/tests/vm_harness/extensions/std/test.txt b/tests/vm_harness/extensions/std/test.txt deleted file mode 100644 index f70d7bba..00000000 --- a/tests/vm_harness/extensions/std/test.txt +++ /dev/null @@ -1 +0,0 @@ -42 \ No newline at end of file diff --git a/tests/vm_harness/fib.ore b/tests/vm_harness/fib.ore deleted file mode 100644 index 1ee6436b..00000000 --- a/tests/vm_harness/fib.ore +++ /dev/null @@ -1,16 +0,0 @@ -fn fib(n: int) -> int { - if n <= 1 { - n - } else { - fib(n - 1) + fib(n - 2) - } -} - -fn main() -> int { - let n = 5; - print("Calculating fibonacci number ${n}:\n"); - let result = fib(n as int); - print(result as string + "\n"); - chacha::assert_eq(result, 5); - result -} diff --git a/tests/vm_harness/lambda.ore b/tests/vm_harness/lambda.ore deleted file mode 100644 index e18a7399..00000000 --- a/tests/vm_harness/lambda.ore +++ /dev/null @@ -1,32 +0,0 @@ -fn runner(func: fn(string, int) -> float) { - chacha::assert_eq(3.14, func("foo", 77)); -} - -fn main() { - let answer = 42; - - let foo = |bar: int| -> int { - // this comment is to trick the formatter - bar - }; - chacha::assert_eq(foo(answer), answer); - - let bar = || -> int { foo(answer) as int }; - chacha::assert_eq(bar(), answer); - - let baz = |name: string| -> string { "hello, ${name}! The answer is ${answer}" }; - chacha::assert_eq(baz("world"), "hello, world! The answer is 42"); - - runner(|s: string, i: int| -> float { - chacha::assert_eq(s, "foo"); - chacha::assert_eq(i, 77); - - chacha::assert_eq(answer, 42); - - // This should be captured. - answer = 69; - 3.14 - }); - - chacha::assert_eq(answer, 69); -} diff --git a/tests/vm_harness/statement/let_.tao b/tests/vm_harness/statement/let_.tao deleted file mode 100644 index 700ed017..00000000 --- a/tests/vm_harness/statement/let_.tao +++ /dev/null @@ -1,15 +0,0 @@ -fn main() { - let s: string = "Hello, world!"; - chacha::assert_eq(s, "Hello, world!"); - let i: int = 42; - chacha::assert_eq(i, 42); - let f: float = 1.618; - chacha::assert_eq(f, 1.618); - let b: bool = false; - chacha::assert_eq(b, false); - let u: Uuid = Uuid::new(); - let l: [int] = [1, 2, 3]; - chacha::assert_eq(l[0], 1); - chacha::assert_eq(l[1], 2); - chacha::assert_eq(l[2], 3); -} diff --git a/tests/vm_harness/statement/module.ore b/tests/vm_harness/statement/module.ore deleted file mode 100644 index 90407978..00000000 --- a/tests/vm_harness/statement/module.ore +++ /dev/null @@ -1,6 +0,0 @@ -struct Foo { - x: int, -} - -// This is just so that the tests will pass. -fn main() {} diff --git a/tests/vm_harness/statement/use_local.ore b/tests/vm_harness/statement/use_local.ore deleted file mode 100644 index a4fe9bed..00000000 --- a/tests/vm_harness/statement/use_local.ore +++ /dev/null @@ -1,5 +0,0 @@ -mod module; - -use module::Foo; - -fn main() {} diff --git a/tests/vm_harness/types/char/bad_method.ore b/tests/vm_harness/types/char/bad_method.ore deleted file mode 100644 index 477bb393..00000000 --- a/tests/vm_harness/types/char/bad_method.ore +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - 'c'.fold(); -} diff --git a/tests/vm_harness/types/char/bad_method.stderr b/tests/vm_harness/types/char/bad_method.stderr deleted file mode 100644 index 3e452bf9..00000000 --- a/tests/vm_harness/types/char/bad_method.stderr +++ /dev/null @@ -1,8 +0,0 @@ -Error: No such method: fold - ╭─[ bad_method:2:9 ] - │ - 2 │     'c'.fold(); -  │ ──┬─ -  │ ╰─── at or near this location -───╯ - diff --git a/tests/vm_harness/types/char/test.ore b/tests/vm_harness/types/char/test.ore deleted file mode 100644 index 014bd08f..00000000 --- a/tests/vm_harness/types/char/test.ore +++ /dev/null @@ -1,6 +0,0 @@ -fn main() -> char { - let str = "This is a test string. 🥰 Note the emoji."; - let emoji = str[23]; - chacha::assert_eq(emoji, '🥰'); - emoji -} diff --git a/tests/vm_harness/types/failing/list.ore b/tests/vm_harness/types/failing/list.ore deleted file mode 100644 index f15a59a3..00000000 --- a/tests/vm_harness/types/failing/list.ore +++ /dev/null @@ -1,27 +0,0 @@ -struct List { - inner: [T], -} - -impl List { - fn map(self, f: fn(int) -> int) -> [int] { - let result = []; - for i in self.inner { - result.push(f(i)); - } - result - } -} - -fn main() { - let list = [0, 1, 2]; - chacha::assert_eq(list.len(), 3); - chacha::assert_eq( - list.map(|x: int| -> int { - // We need a block - x + 1 - }), - [1, 2, 3], - ); - list.push(3); - chacha::assert_eq(list.sum(), 6); -} diff --git a/tests/vm_harness/types/generics/func.ore b/tests/vm_harness/types/generics/func.ore deleted file mode 100644 index b1adaff2..00000000 --- a/tests/vm_harness/types/generics/func.ore +++ /dev/null @@ -1,15 +0,0 @@ -fn idempotent(x: T) -> T { - x -} - -fn main() { - // Here we call the generic function with a string. - let i = idempotent::("world"); - let j = "hello ${i}"; - print(j); - chacha::assert(j == "hello world"); - - let i = idempotent::(42); - print(i); - chacha::assert(i == 42); -} diff --git a/tests/vm_harness/types/generics/option.tao b/tests/vm_harness/types/generics/option.tao deleted file mode 100644 index 5c9c175f..00000000 --- a/tests/vm_harness/types/generics/option.tao +++ /dev/null @@ -1,45 +0,0 @@ -use std::option::Option; - -enum Simple { - Foo, - Bar, - Baz, -} - -fn main() { - let a = Option::Some(42); - let b: Option = Option::None; - let c = Option::Some("Hello world!"); - let d = Option::Some(69); - // let e = Option::::None; - let e: Option = Option::None; - - let control = Simple::Baz; - - print("a = ${a}\n"); - print("b = ${b}\n"); - print("c = ${c}\n"); - print("d = ${d}\n"); - print("e = ${e}\n"); - - print("control = ${control}\n"); - - chacha::assert_eq(a, Option::Some(42)); - chacha::assert_eq(b, Option::::None); - chacha::assert_eq(c, Option::Some("Hello world!")); - chacha::assert_eq(d, Option::Some(69)); - chacha::assert_eq(e, Option::::None); - - chacha::assert_eq(control, Simple::Baz); - - chacha::assert(a.is_some()); - chacha::assert(!a.is_none()); - chacha::assert(!b.is_some()); - chacha::assert(b.is_none()); - chacha::assert(c.is_some()); - chacha::assert(!c.is_none()); - chacha::assert(d.is_some()); - chacha::assert(!d.is_none()); - chacha::assert(!e.is_some()); - chacha::assert(e.is_none()); -} diff --git a/tests/vm_harness/types/generics/result.tao b/tests/vm_harness/types/generics/result.tao deleted file mode 100644 index c6fff26a..00000000 --- a/tests/vm_harness/types/generics/result.tao +++ /dev/null @@ -1,34 +0,0 @@ -use std::result::Result; - -fn main() { - // let a: Result = Result::::Ok(42); - // let a = Result::::Ok(42); - let a = Result::Ok(42); - // let b: Result = Result::::Err("oops"); - let b = Result::Err("oops"); - - let c = Result::Ok("test"); - let d = Result::Err(96); - - print("a = ${a}\n"); - print("b = ${b}\n"); - print("c = ${c}\n"); - print("d = ${d}\n"); - - chacha::assert_eq(a, Result::Ok(42)); - chacha::assert_eq(b, Result::Err("oops")); - - chacha::assert_eq(c, Result::Ok("test")); - - chacha::assert_eq("a = ${a}", "a = ::std::result::Result::Ok(42)"); - // chacha::assert_eq("b = {0}".format(b), `b = Result::Err(\"oops\")`); - - chacha::assert(a.is_ok()); - chacha::assert(!a.is_err()); - chacha::assert(!b.is_ok()); - chacha::assert(b.is_err()); - chacha::assert(c.is_ok()); - chacha::assert(!c.is_err()); - - print(a == c); -} diff --git a/tests/vm_harness/types/generics/structure.ore b/tests/vm_harness/types/generics/structure.ore deleted file mode 100644 index 6b7be991..00000000 --- a/tests/vm_harness/types/generics/structure.ore +++ /dev/null @@ -1,63 +0,0 @@ -use std::option::Option; - -struct Node { - value: T, - next: Option>, -} - -struct Foo { - a: T, - b: U, - c: V, -} - -struct One { - uno: T, -} - -fn main() { - let node_a = Node { - value: 42, - next: Option::>::None, - }; - let node_b = Node { - value: 69, - next: Option::>::Some(node_a), - }; - let node_c = Node { - value: 420, - next: Option::>::Some(node_b), - }; - - print("node_a = ${node_a}\n"); - print("node_b = ${node_b}\n"); - print("node_c = ${node_c}\n"); - - let d = Foo { - a: 42, - b: "hello", - c: 3.14, - }; - - let a = Foo { - c: "test", - b: 3.14, - a: true, - }; - - print("d = ${d}\n"); - print("a = ${a}\n"); - - chacha::assert_eq(chacha::typeof(d.a), "int"); - chacha::assert_eq(chacha::typeof(d.b), "string"); - chacha::assert_eq(chacha::typeof(d.c), "float"); - - let a = One { uno: 42 }; - print("a = ${a}\n"); - - chacha::assert_eq(chacha::typeof(a.uno), "int"); - - let b = One { uno: "hello" }; - print("b = ${b}\n"); - chacha::assert_eq(chacha::typeof(b.uno), "string"); -} diff --git a/tests/vm_harness/types/generics/type_mismatch.ore b/tests/vm_harness/types/generics/type_mismatch.ore deleted file mode 100644 index fc8df060..00000000 --- a/tests/vm_harness/types/generics/type_mismatch.ore +++ /dev/null @@ -1,13 +0,0 @@ -enum Foo { - Bar(U), - Baz(V), -} - -fn main() { - let x = Foo::Bar(1); - let y = Foo::Baz(2); - print(x); - print(y); - print(chacha::typeof(x)); - print(chacha::typeof(y)) -} diff --git a/tests/vm_harness/types/generics/workout.ore b/tests/vm_harness/types/generics/workout.ore deleted file mode 100644 index 355826d3..00000000 --- a/tests/vm_harness/types/generics/workout.ore +++ /dev/null @@ -1,45 +0,0 @@ -// This is a generic function. -// It takes a type T and returns a value of type T + 42. -fn id(x: T) -> T { - x + 42 -} - -// This is a generic type. -// It takes a type T and stores a value of type T. - struct Box { - value: T, - } - - impl Box { - fn display(self) { - print("Box<${self.value}>\n"); - } - } - -fn main() { - // Here we call the generic function with an int. - let x = id::(54); - print("${x}\n"); - chacha::assert(x == 96); - - // And here with a float. - let y = id::("Hello World, the answer is "); - print("${y}\n"); - chacha::assert(y == "Hello World, the answer is 42"); - - // Here we create a Box that stores a float. - let z = Box{ value: 0.42 }; - z.display(); - chacha::assert(chacha::typeof(z.value) == "float"); - - // Let's box a list now. - let α = Box{ value: [1, 2, 3] }; - α.display(); - chacha::assert(chacha::typeof(α.value) == "[int]"); - - // Let's try something interesting... - let β = Box{ value: id::("") }; - β.display(); - chacha::assert(chacha::typeof(β.value) == "string"); - chacha::assert(β.value == "42"); -} \ No newline at end of file diff --git a/tests/vm_harness/types/hashmap/failing/get.ore b/tests/vm_harness/types/hashmap/failing/get.ore deleted file mode 100644 index 444c071d..00000000 --- a/tests/vm_harness/types/hashmap/failing/get.ore +++ /dev/null @@ -1,13 +0,0 @@ -use std::option::Option; - -fn main() { - let map = { {} }; - - map.insert("key", "value"); - let value = map.get("key"); - - chacha::assert_eq(value, Option::Some("value")); - - let none = map.get("nonexistent"); - chacha::assert_eq(none, Option::None); -} diff --git a/tests/vm_harness/types/hashmap/failing/insert.ore b/tests/vm_harness/types/hashmap/failing/insert.ore deleted file mode 100644 index b39fc2a3..00000000 --- a/tests/vm_harness/types/hashmap/failing/insert.ore +++ /dev/null @@ -1,13 +0,0 @@ -fn main() { - let map = { {} }; - let list = []; - - list.push(42); - list.push("hello"); - - chacha::assert_eq(map.len(), 0); - map.insert("key", "value"); - chacha::assert_eq(map.len(), 1); - map.insert("other_key", 42); - print(map); -} diff --git a/tests/vm_harness/types/hashmap/literal.ore b/tests/vm_harness/types/hashmap/literal.ore deleted file mode 100644 index c6c5b0b9..00000000 --- a/tests/vm_harness/types/hashmap/literal.ore +++ /dev/null @@ -1,4 +0,0 @@ -fn main() { - let map = {{"a": 42, "b": 96}}; - print(map); -} \ No newline at end of file diff --git a/tests/vm_harness/types/integer.ore b/tests/vm_harness/types/integer.ore deleted file mode 100644 index 1f553cb6..00000000 --- a/tests/vm_harness/types/integer.ore +++ /dev/null @@ -1,5 +0,0 @@ -use std::integer::Integer; - -fn main() { - chacha::assert_eq(3.max(0), 3); -} diff --git a/tests/vm_harness/types/list/bad_push.ore b/tests/vm_harness/types/list/bad_push.ore deleted file mode 100644 index 19e042cb..00000000 --- a/tests/vm_harness/types/list/bad_push.ore +++ /dev/null @@ -1,5 +0,0 @@ -fn main() { - let list = [1, 2, 3, 4, 5]; - list.push("foo"); - list.push(); -} diff --git a/tests/vm_harness/types/list/bad_push.stderr b/tests/vm_harness/types/list/bad_push.stderr deleted file mode 100644 index 7c04a0bd..00000000 --- a/tests/vm_harness/types/list/bad_push.stderr +++ /dev/null @@ -1,20 +0,0 @@ -Error: Type mismatch: expected `int`, found `string`. - ╭─[ bad_push:3:10 ] - │ - 1 │ fn main() { -  │ │ -  │ ╰─ expected int -  │ - 3 │     list.push("foo"); -  │ ──┬─ -  │ ╰─── found string -───╯ - -Error: wrong number of arguments - ╭─[ bad_push:4:10 ] - │ - 4 │     list.push(); -  │ ──┬─ -  │ ╰─── expected `1`, found `0`. -───╯ - diff --git a/tests/vm_harness/types/list/failing/pop.ore b/tests/vm_harness/types/list/failing/pop.ore deleted file mode 100644 index 5cb6b3ad..00000000 --- a/tests/vm_harness/types/list/failing/pop.ore +++ /dev/null @@ -1,13 +0,0 @@ -use std::option::Option; - -fn main() { - let list = [1, 2, 3, 4]; - let test = list.pop(); - chacha::assert_eq(list.len(), 3); - chacha::assert_eq(test, Option::Some(4)); - - let any_list = @[1, "hello"]; - let test = any_list.pop(); - chacha::assert_eq(any_list.len(), 2); - chacha::assert_eq(test, Option::Some("hello")); -} \ No newline at end of file diff --git a/tests/vm_harness/types/list/iter_enum.ore b/tests/vm_harness/types/list/iter_enum.ore deleted file mode 100644 index bcac0919..00000000 --- a/tests/vm_harness/types/list/iter_enum.ore +++ /dev/null @@ -1,10 +0,0 @@ -enum Foo { - A, - B, -} - -fn main() { - let foos = [Foo::A, Foo::B]; - - for foo in foos {} -} diff --git a/tests/vm_harness/types/list/iter_future.ore b/tests/vm_harness/types/list/iter_future.ore deleted file mode 100644 index 74b171b3..00000000 --- a/tests/vm_harness/types/list/iter_future.ore +++ /dev/null @@ -1,11 +0,0 @@ -async fn main() -> Future<()> { - let task = chacha::spawn(async || -> string { "Hello, world" }); - let tasks = [task]; - tasks.push(chacha::spawn(async || -> string { "Hello, world" })); - - for task in tasks { - print(task.await); - } - - () -} diff --git a/tests/vm_harness/types/list/iter_struct.ore b/tests/vm_harness/types/list/iter_struct.ore deleted file mode 100644 index d4b1eb37..00000000 --- a/tests/vm_harness/types/list/iter_struct.ore +++ /dev/null @@ -1,11 +0,0 @@ -struct Foo {} - -fn main() { - // Note all this muck. I have to create the list with an initial value. - // And I can't use something like [Foo::{}, Foo::{}] because it breaks. - let foo = Foo {}; - let foos = [foo]; - foos.push(Foo {}); - - for foo in foos {} -} diff --git a/tests/vm_harness/types/list/join.ore b/tests/vm_harness/types/list/join.ore deleted file mode 100644 index 7b487ac5..00000000 --- a/tests/vm_harness/types/list/join.ore +++ /dev/null @@ -1,9 +0,0 @@ -fn main() { - let a = ["hello", "world"]; - let b = a.join(" "); - chacha::assert_eq(b, "hello world"); - - let c = @["hello", "world"]; - let d = c.join(" "); - print(d); -} diff --git a/tests/vm_harness/types/list/len.ore b/tests/vm_harness/types/list/len.ore deleted file mode 100644 index 5f6ee7c7..00000000 --- a/tests/vm_harness/types/list/len.ore +++ /dev/null @@ -1,6 +0,0 @@ -fn main() { - let list = [1, 2, 3, 4, 5]; - chacha::assert_eq(list.len(), 5); - let any_list = @[1, "hello", 3.14]; - chacha::assert_eq(any_list.len(), 3); -} \ No newline at end of file diff --git a/tests/vm_harness/types/list/map.ore b/tests/vm_harness/types/list/map.ore deleted file mode 100644 index 3bc71a4d..00000000 --- a/tests/vm_harness/types/list/map.ore +++ /dev/null @@ -1,17 +0,0 @@ -fn main() { - let list = [1, 2, 3, 4, 5]; - let list = list.map(|x: int| -> int { - // Don't collapse. - x * 2 - }); - print(list); - chacha::assert_eq(list, [2, 4, 6, 8, 10]); - - let list = @[1, 2, 3.14, 4, "string"]; - let list = list.map(|x: int| -> string { - // Don't collapse. - x as string + "!" - }); - print(list); - chacha::assert_eq(list, @["1!", "2!", "3.14!", "4!", "string!"]); -} diff --git a/tests/vm_harness/types/list/no_such_method.ore b/tests/vm_harness/types/list/no_such_method.ore deleted file mode 100644 index ff842726..00000000 --- a/tests/vm_harness/types/list/no_such_method.ore +++ /dev/null @@ -1,4 +0,0 @@ -fn main() { - let list = [1, 2, 3, 4, 5]; - list.grok(); -} diff --git a/tests/vm_harness/types/list/no_such_method.stderr b/tests/vm_harness/types/list/no_such_method.stderr deleted file mode 100644 index be81d825..00000000 --- a/tests/vm_harness/types/list/no_such_method.stderr +++ /dev/null @@ -1,8 +0,0 @@ -Error: No such method: grok - ╭─[ no_such_method:3:10 ] - │ - 3 │     list.grok(); -  │ ──┬─ -  │ ╰─── at or near this location -───╯ - diff --git a/tests/vm_harness/types/list/push.ore b/tests/vm_harness/types/list/push.ore deleted file mode 100644 index 35d5a3fb..00000000 --- a/tests/vm_harness/types/list/push.ore +++ /dev/null @@ -1,9 +0,0 @@ -fn main() { - let list = [1, 2, 3, 4]; - list.push(5); - chacha::assert_eq(list.len(), 5); - - let any_list = @[1, "hello"]; - any_list.push(3.14); - chacha::assert_eq(any_list.len(), 3); -} \ No newline at end of file diff --git a/tests/vm_harness/types/map/get.ore b/tests/vm_harness/types/map/get.ore deleted file mode 100644 index cb6613d7..00000000 --- a/tests/vm_harness/types/map/get.ore +++ /dev/null @@ -1,20 +0,0 @@ -use std::option::Option; - -fn main() { - let a = {{"key": "value", "key2": "value2"}}; - - match a.get("key") { - Option::Some(value) => chacha::assert_eq(value, "value"), - Option::None => chacha::assert(false), - }; - - match a.get("key2") { - Option::Some(value) => chacha::assert_eq(value, "value2"), - Option::None => chacha::assert(false), - }; - - match a.get("key3") { - Option::Some(value) => chacha::assert(false), - Option::None => chacha::assert(true), - }; -} \ No newline at end of file diff --git a/tests/vm_harness/types/map/get_fail.ore b/tests/vm_harness/types/map/get_fail.ore deleted file mode 100644 index 9d43acd1..00000000 --- a/tests/vm_harness/types/map/get_fail.ore +++ /dev/null @@ -1,5 +0,0 @@ -fn main() { - let a = {{"key": "value", "key2": "value2"}}; - let b = a.get(); - let c = a.get("key", "value"); -} \ No newline at end of file diff --git a/tests/vm_harness/types/map/get_fail.stderr b/tests/vm_harness/types/map/get_fail.stderr deleted file mode 100644 index 18be7da5..00000000 --- a/tests/vm_harness/types/map/get_fail.stderr +++ /dev/null @@ -1,16 +0,0 @@ -Error: wrong number of arguments - ╭─[ get_fail:3:15 ] - │ - 3 │     let b = a.get(); -  │ ─┬─ -  │ ╰─── expected `1`, found `0`. -───╯ - -Error: wrong number of arguments - ╭─[ get_fail:4:15 ] - │ - 4 │     let c = a.get("key", "value"); -  │ ─┬─ -  │ ╰─── expected `1`, found `2`. -───╯ - diff --git a/tests/vm_harness/types/map/insert.ore b/tests/vm_harness/types/map/insert.ore deleted file mode 100644 index e7f32576..00000000 --- a/tests/vm_harness/types/map/insert.ore +++ /dev/null @@ -1,8 +0,0 @@ -use std::option::Option; - -fn main() { - // There is a bug that makes it impossible to insert into and empty list. - let a = {{ "key": "value" }}; - a.insert("hello", "world"); - chacha::assert_eq(a.get("hello"), Option::Some("world")); -} diff --git a/tests/vm_harness/types/map/insert_fail.ore b/tests/vm_harness/types/map/insert_fail.ore deleted file mode 100644 index 06b45bf8..00000000 --- a/tests/vm_harness/types/map/insert_fail.ore +++ /dev/null @@ -1,4 +0,0 @@ -fn main() { - let a = {{"key": "value", "key2": "value2"}}; - let b = a.insert(); -} \ No newline at end of file diff --git a/tests/vm_harness/types/map/insert_fail.stderr b/tests/vm_harness/types/map/insert_fail.stderr deleted file mode 100644 index 2e589a1c..00000000 --- a/tests/vm_harness/types/map/insert_fail.stderr +++ /dev/null @@ -1,8 +0,0 @@ -Error: wrong number of arguments - ╭─[ insert_fail:3:15 ] - │ - 3 │     let b = a.insert(); -  │ ───┬── -  │ ╰──── expected `2`, found `0`. -───╯ - diff --git a/tests/vm_harness/types/string/failing/is_empty.ore b/tests/vm_harness/types/string/failing/is_empty.ore deleted file mode 100644 index 5153ba44..00000000 --- a/tests/vm_harness/types/string/failing/is_empty.ore +++ /dev/null @@ -1,7 +0,0 @@ -fn main() { - let a = "Hello, World!"; - let b = ""; - - chacha::assert_eq(a.is_empty(), false); - chacha::assert_eq(b.is_empty(), true); -} diff --git a/tests/vm_harness/types/string/failing/string.stdout b/tests/vm_harness/types/string/failing/string.stdout deleted file mode 100644 index fcdc71ee..00000000 --- a/tests/vm_harness/types/string/failing/string.stdout +++ /dev/null @@ -1,21 +0,0 @@ -Hello, world!🎉💥 -H -e -l -l -o -, - -w -o -r -l -d -! -🎉 -💥 -15 -Hello! -The length of the string is 15. 15 * 15 = 225 -The answer to life, the universe, and everything is 42. Huh? Really, 42 - \ No newline at end of file diff --git a/tests/vm_harness/types/string/failing/string.tao b/tests/vm_harness/types/string/failing/string.tao deleted file mode 100644 index 0d48322d..00000000 --- a/tests/vm_harness/types/string/failing/string.tao +++ /dev/null @@ -1,38 +0,0 @@ -/// Test basic string stuff -fn main() -> () { - let s = "Hello, world!🎉💥"; - print(s + "\n"); - - // Strings are also iterable. - for c in s { - let hack = c; - let foo = hack; - print(hack as string + "\n"); - } - - // Can we get the length of a string? - print(s.len() as string + "\n"); - - // Of course you can fetch the length of a string. - // 🚧 This should be an inherent method that we know the type of. - let len = s.len(); - chacha::assert_eq(len, 15); - - // Note that indexing into a string is zero based. Also, we are indexing by - // unicode graphemes, which is a "printable character". - chacha::assert_eq(s[len - 1], '💥'); - chacha::assert_eq(s[len - 2], '🎉'); - chacha::assert_eq(s[len - 9], ' '); - - // index into a string with a range. - let jumble = `${s[0..5]}${s[len - 3]}\n`; // Hello! - chacha::assert_eq(jumble, "Hello!\n"); - print(jumble); - - print(`The length of the string is ${len}. ${len} * ${len} = ${len * len}\n`); - - let answer = 42; - let question = "Huh?"; - let msg = `The answer to life, the universe, and everything is ${answer}. ${question} Really, ${answer}\n`; - print(msg); -} diff --git a/tests/vm_harness/types/string/len.ore b/tests/vm_harness/types/string/len.ore deleted file mode 100644 index 0643c01f..00000000 --- a/tests/vm_harness/types/string/len.ore +++ /dev/null @@ -1,4 +0,0 @@ -fn main() { - let a = "Hello, World!"; - chacha::assert(a.len() == 13); -} diff --git a/tests/vm_harness/types/uuid/construct.ore b/tests/vm_harness/types/uuid/construct.ore deleted file mode 100644 index 8412a867..00000000 --- a/tests/vm_harness/types/uuid/construct.ore +++ /dev/null @@ -1,4 +0,0 @@ -fn main() { - let uuid = Uuid::new(); - print(uuid); -} diff --git a/xtask/Cargo.lock b/xtask/Cargo.lock index 0c56f467..9db884a7 100644 --- a/xtask/Cargo.lock +++ b/xtask/Cargo.lock @@ -3,22 +3,31 @@ version = 3 [[package]] -name = "adler" -version = "1.0.2" +name = "adler2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "anyhow" -version = "1.0.71" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8" +checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" [[package]] -name = "byteorder" -version = "1.4.3" +name = "arbitrary" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" +dependencies = [ + "derive_arbitrary", +] + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "cfg-if" @@ -28,27 +37,61 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "crc32fast" -version = "1.3.2" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" dependencies = [ "cfg-if", ] [[package]] name = "crossbeam-utils" -version = "0.8.16" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[package]] +name = "deranged" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" dependencies = [ - "cfg-if", + "powerfmt", +] + +[[package]] +name = "derive_arbitrary" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn", ] +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + [[package]] name = "flate2" -version = "1.0.26" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743" +checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" dependencies = [ "crc32fast", "miniz_oxide", @@ -56,76 +99,206 @@ dependencies = [ [[package]] name = "glob" -version = "0.3.1" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" + +[[package]] +name = "hashbrown" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" + +[[package]] +name = "indexmap" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "lockfree-object-pool" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9374ef4228402d4b7e403e5838cb880d9ee663314b0a900d5a6aabf0c213552e" + +[[package]] +name = "log" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "miniz_oxide" -version = "0.7.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +checksum = "4ffbe83022cedc1d264172192511ae958937694cd57ce297164951b8b3568394" dependencies = [ - "adler", + "adler2", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "once_cell" +version = "1.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "proc-macro2" +version = "1.0.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" +dependencies = [ + "proc-macro2", ] [[package]] name = "serde" -version = "1.0.171" +version = "1.0.217" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.217" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "simd-adler32" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30e27d1e4fd7659406c492fd6cfaf2066ba8773de45ca75e855590f856dc34a9" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + +[[package]] +name = "syn" +version = "2.0.94" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "987bc0be1cdea8b10216bd06e2ca407d40b9543468fafd3ddfb02f36e77f71f3" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "thiserror" +version = "2.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f072643fd0190df67a8bab670c20ef5d8737177d6ac6b2e9a236cb096206b2cc" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b50fa271071aae2e6ee85f842e2e28ba8cd2c5fb67f11fcb1fd70b276f9e7d4" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] [[package]] name = "time" -version = "0.3.23" +version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59e399c068f43a5d116fedaf73b203fa4f9c519f17e2b34f63221d3792f81446" +checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" dependencies = [ + "deranged", + "num-conv", + "powerfmt", "serde", "time-core", ] [[package]] name = "time-core" -version = "0.1.1" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "unicode-ident" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" [[package]] name = "write-json" -version = "0.1.2" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06069a848f95fceae3e5e03c0ddc8cb78452b56654ee0c8e68f938cf790fb9e3" +checksum = "23f6174b2566cc4a74f95e1367ec343e7fa80c93cc8087f5c4a3d6a1088b2118" [[package]] name = "xflags" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4554b580522d0ca238369c16b8f6ce34524d61dafe7244993754bbd05f2c2ea" +checksum = "7d9e15fbb3de55454b0106e314b28e671279009b363e6f1d8e39fdc3bf048944" dependencies = [ "xflags-macros", ] [[package]] name = "xflags-macros" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f58e7b3ca8977093aae6b87b6a7730216fc4c53a6530bab5c43a783cd810c1a8" +checksum = "672423d4fea7ffa2f6c25ba60031ea13dc6258070556f125cc4d790007d4a155" [[package]] name = "xshell" -version = "0.2.3" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "962c039b3a7b16cf4e9a4248397c6585c07547412e7d6a6e035389a802dcfe90" +checksum = "9e7290c623014758632efe00737145b6867b66292c42167f2ec381eb566a373d" dependencies = [ "xshell-macros", ] [[package]] name = "xshell-macros" -version = "0.2.3" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dbabb1cbd15a1d6d12d9ed6b35cc6777d4af87ab3ba155ea37215f20beab80c" +checksum = "32ac00cd3f8ec9c1d33fb3e7958a82df6989c42d747bd326c822b1d625283547" [[package]] name = "xtask" @@ -143,13 +316,32 @@ dependencies = [ [[package]] name = "zip" -version = "0.6.6" +version = "2.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" +checksum = "ae9c1ea7b3a5e1f4b922ff856a129881167511563dc219869afe3787fc0c1a45" dependencies = [ - "byteorder", + "arbitrary", "crc32fast", "crossbeam-utils", + "displaydoc", "flate2", + "indexmap", + "memchr", + "thiserror", "time", + "zopfli", +] + +[[package]] +name = "zopfli" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5019f391bac5cf252e93bbcc53d039ffd62c7bfb7c150414d61369afe57e946" +dependencies = [ + "bumpalo", + "crc32fast", + "lockfree-object-pool", + "log", + "once_cell", + "simd-adler32", ] diff --git a/xtask/Cargo.toml b/xtask/Cargo.toml index c8c747c6..7c924cb3 100644 --- a/xtask/Cargo.toml +++ b/xtask/Cargo.toml @@ -7,12 +7,15 @@ edition = "2021" rust-version = "1.65" [dependencies] -anyhow = "1.0.62" -flate2 = "1.0.24" -write-json = "0.1.2" -xshell = "0.2.2" -xflags = "0.3.0" -time = { version = "0.3", default-features = false } -zip = { version = "0.6", default-features = false, features = ["deflate", "time"] } -glob = "0.3.1" +anyhow = "1.0.95" +flate2 = "1.0.35" +write-json = "0.1.4" +xshell = "0.2.7" +xflags = "0.3.2" +time = { version = "0.3.37", default-features = false } +zip = { version = "2.2.2", default-features = false, features = [ + "deflate", + "time", +] } +glob = "0.3.2" # Avoid adding more dependencies to this crate diff --git a/xtask/src/install.rs b/xtask/src/install.rs index c368f1f7..6834b418 100644 --- a/xtask/src/install.rs +++ b/xtask/src/install.rs @@ -5,13 +5,7 @@ use crate::flags; use xshell::{cmd, Shell}; impl flags::Install { - pub(crate) fn run(self, sh: &Shell) -> anyhow::Result<()> { - let dwarf_home = env::var("DWARF_HOME").unwrap_or_else(|_| { - let mut home = env::var("HOME").unwrap(); - home.push_str("/.dwarf"); - home - }); - + pub(crate) fn run(self, sh: &Shell, dwarf_home: &String) -> anyhow::Result<()> { if self.debug.unwrap_or(false) { cmd!(sh, "cargo install --path . --force --locked --debug").run()?; } else { @@ -42,6 +36,9 @@ impl flags::Install { let compiled = format!("{}/compiled", dwarf_home); fs::create_dir_all(&compiled)?; + let extruded = format!("{}/extruded", dwarf_home); + fs::create_dir_all(&extruded)?; + Ok(()) } } diff --git a/xtask/src/main.rs b/xtask/src/main.rs index 5c3c3f43..cae5d1b2 100644 --- a/xtask/src/main.rs +++ b/xtask/src/main.rs @@ -29,13 +29,19 @@ use xshell::{cmd, Shell}; fn main() -> anyhow::Result<()> { let flags = flags::Xtask::from_env_or_exit(); + let dwarf_home = env::var("DWARF_HOME").unwrap_or_else(|_| { + let mut home = env::var("HOME").unwrap(); + home.push_str("/.dwarf"); + home + }); + let sh = &Shell::new()?; sh.change_dir(project_root()); match flags.subcommand { flags::XtaskCmd::Package(cmd) => cmd.run(sh), - flags::XtaskCmd::Plugin(cmd) => cmd.run(sh), - flags::XtaskCmd::Install(cmd) => cmd.run(sh), + flags::XtaskCmd::Plugin(cmd) => cmd.run(sh, &dwarf_home), + flags::XtaskCmd::Install(cmd) => cmd.run(sh, &dwarf_home), } } diff --git a/xtask/src/package.rs b/xtask/src/package.rs index a4f67c83..3cd113a0 100644 --- a/xtask/src/package.rs +++ b/xtask/src/package.rs @@ -86,7 +86,7 @@ fn gzip(src_path: &Path, dest_path: &Path) -> anyhow::Result<()> { fn zip(src_path: &Path, symbols_path: Option<&PathBuf>, dest_path: &Path) -> anyhow::Result<()> { let file = File::create(dest_path)?; let mut writer = ZipWriter::new(BufWriter::new(file)); - writer.start_file( + writer.start_file::<_, zip::write::ExtendedFileOptions>( src_path.file_name().unwrap().to_str().unwrap(), FileOptions::default() .last_modified_time( @@ -102,7 +102,7 @@ fn zip(src_path: &Path, symbols_path: Option<&PathBuf>, dest_path: &Path) -> any let mut input = io::BufReader::new(File::open(src_path)?); io::copy(&mut input, &mut writer)?; if let Some(symbols_path) = symbols_path { - writer.start_file( + writer.start_file::<_, zip::write::ExtendedFileOptions>( symbols_path.file_name().unwrap().to_str().unwrap(), FileOptions::default() .last_modified_time( diff --git a/xtask/src/plugin.rs b/xtask/src/plugin.rs index 2a931929..d6f2b349 100644 --- a/xtask/src/plugin.rs +++ b/xtask/src/plugin.rs @@ -17,13 +17,7 @@ const TAO_DIR: &str = "ore"; const MISC_DIR: &str = "misc"; impl flags::Plugin { - pub(crate) fn run(self, sh: &Shell) -> anyhow::Result<()> { - let dwarf_home = env::var("DWARF_HOME").unwrap_or_else(|_| { - let mut home = env::var("HOME").unwrap(); - home.push_str("/.dwarf"); - home - }); - + pub(crate) fn run(self, sh: &Shell, dwarf_home: &String) -> anyhow::Result<()> { let mut current_dir = std::env::current_dir()?; current_dir.push(PLUGIN_DIR); sh.change_dir(PLUGIN_DIR); @@ -103,13 +97,13 @@ fn build_plugin( let target_dir = if debug { "debug" } else { "release" }; if env::consts::OS == "macos" { - println!("Copying lib{}.dylib", name); + println!("Copying lib{}.dylib to ${lib_dir}", name); sh.copy_file(format!("target/{target_dir}/lib{name}.dylib"), lib_dir)?; } else if env::consts::OS == "linux" { - println!("Copying lib{}.so", name); + println!("Copying lib{}.so to ${lib_dir}", name); sh.copy_file(format!("target/{target_dir}/lib{name}.so"), lib_dir)?; } else if env::consts::OS == "windows" { - println!("Copying {}.dll", name); + println!("Copying {}.dll to ${lib_dir}", name); sh.copy_file(format!("target/{target_dir}/{name}.dll"), lib_dir)?; } else { panic!("{} is not a supported platform", env::consts::OS); @@ -121,7 +115,7 @@ fn build_plugin( for entry in fs::read_dir(¤t_dir)? { let path = entry?.path(); - println!("Copying {}", path.display()); + println!("Copying {} to ${src_dir}", path.display()); sh.copy_file(path, &src_dir)?; } @@ -132,7 +126,7 @@ fn build_plugin( if current_dir.exists() { for entry in fs::read_dir(¤t_dir)? { let path = entry?.path(); - println!("Copying {}", path.display()); + println!("Copying {} to ${misc_dir}", path.display()); sh.copy_file(path, &misc_dir)?; } } @@ -150,7 +144,7 @@ fn build_plugin( if metadata.is_dir() { continue; } - println!("Copying {}", path.display()); + println!("Copying {} to ${model_dir}", path.display()); sh.copy_file(path, &model_dir)?; } }