From 20baa6a24193b5a6f40ae2eff3b4fd574c195c6c Mon Sep 17 00:00:00 2001 From: juicermv Date: Sat, 26 Jul 2025 22:30:56 +0300 Subject: [PATCH 1/2] syntax updates --- .gitignore | 1 + Cargo.lock | 829 ++++++++++++------------- Cargo.toml | 4 +- examples/sdl2/project.lua | 120 ++-- src/lib/compilers/generic.rs | 5 +- src/lib/compilers/mingw.rs | 11 +- src/lib/compilers/msvc.rs | 9 +- src/lib/data/flag_type.rs | 32 + src/lib/data/mod.rs | 3 +- src/lib/data/project.rs | 269 ++++---- src/lib/data/project_language.rs | 47 +- src/lib/data/project_type.rs | 65 +- src/lib/data/source_file_collection.rs | 3 +- src/lib/data/source_file_type.rs | 10 +- src/lib/init/mod.rs | 2 +- src/lib/runtime/mod.rs | 102 +-- src/lib/runtime/network.rs | 92 ++- src/lib/runtime/task_manager.rs | 5 +- src/lib/util/either.rs | 20 + src/lib/util/mod.rs | 336 +++++----- 20 files changed, 931 insertions(+), 1034 deletions(-) create mode 100644 src/lib/data/flag_type.rs create mode 100644 src/lib/util/either.rs diff --git a/.gitignore b/.gitignore index 0c53206..7d5985e 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,5 @@ .vscode/ .numake/ examples/*/numake +examples/*/numake_build .DS_Store diff --git a/Cargo.lock b/Cargo.lock index 5c880bc..66f5a8d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -13,9 +13,9 @@ dependencies = [ [[package]] name = "adler2" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] name = "aes" @@ -30,9 +30,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.18" +version = "0.6.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" +checksum = "301af1932e46185686725e0fad2f8f2aa7da69dd70bf6ecc44d6b703844a3933" dependencies = [ "anstyle", "anstyle-parse", @@ -45,43 +45,44 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" +checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" [[package]] name = "anstyle-parse" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" +checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" +checksum = "6c8bdeb6047d8983be085bab0ba1472e6dc604e7041dbf6fcd5e71523014fae9" dependencies = [ "windows-sys 0.59.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.6" +version = "3.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" +checksum = "403f75924867bb1033c59fbf0797484329750cfbe3c4325cd33127941fabc882" dependencies = [ "anstyle", + "once_cell_polyfill", "windows-sys 0.59.0", ] [[package]] name = "anyhow" -version = "1.0.95" +version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" +checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" [[package]] name = "arbitrary" @@ -100,9 +101,9 @@ checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "async-trait" -version = "0.1.85" +version = "0.1.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f934833b4b7233644e5848f235df3f57ed8c80f1528a26c3dfa13d2147fa056" +checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" dependencies = [ "proc-macro2", "quote", @@ -117,15 +118,15 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "backtrace" -version = "0.3.74" +version = "0.3.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" dependencies = [ "addr2line", "cfg-if", @@ -168,9 +169,9 @@ dependencies = [ [[package]] name = "bitflags" -version = "2.6.0" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" [[package]] name = "block-buffer" @@ -183,9 +184,9 @@ dependencies = [ [[package]] name = "bstr" -version = "1.11.3" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "531a9155a481e2ee699d4f98f43c0ca4ff8ee1bfd55c31e9e98fb29d2b176fe0" +checksum = "234113d19d0d7d613b40e86fb654acf958910802bcceab913a4f9e7cda03b1a4" dependencies = [ "memchr", "serde", @@ -193,9 +194,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.16.0" +version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" [[package]] name = "bytemuck" @@ -205,19 +206,9 @@ checksum = "5c76a5792e44e4abe34d3abf15636779261d45a7450612059293d1d2cfc63422" [[package]] name = "bytes" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" - -[[package]] -name = "bzip2" -version = "0.5.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bafdbf26611df8c14810e268ddceda071c297570a5fb360ceddf617fe417ef58" -dependencies = [ - "bzip2-sys", - "libc", -] +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" [[package]] name = "bzip2" @@ -228,22 +219,11 @@ dependencies = [ "libbz2-rs-sys", ] -[[package]] -name = "bzip2-sys" -version = "0.1.11+1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" -dependencies = [ - "cc", - "libc", - "pkg-config", -] - [[package]] name = "cc" -version = "1.2.7" +version = "1.2.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a012a0df96dd6d06ba9a1b29d6402d1a5d77c6befd2566afdc26e10603dc93d7" +checksum = "deec109607ca693028562ed836a5f1c4b8bd77755c4e132fc5ce11b0b6211ae7" dependencies = [ "jobserver", "libc", @@ -252,9 +232,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" [[package]] name = "cipher" @@ -268,9 +248,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.40" +version = "4.5.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40b6887a1d8685cebccf115538db5c0efe625ccac9696ad45c409d96566e910f" +checksum = "be92d32e80243a54711e5d7ce823c35c41c9d929dc4ab58e1276f625841aadf9" dependencies = [ "clap_builder", "clap_derive", @@ -278,9 +258,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.40" +version = "4.5.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0c66c08ce9f0c698cbce5c0279d0bb6ac936d8674174fe48f736533b964f59e" +checksum = "707eab41e9622f9139419d573eca0900137718000c517d47da73045f54331c3d" dependencies = [ "anstream", "anstyle", @@ -290,9 +270,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.40" +version = "4.5.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2c7947ae4cc3d851207c1adb5b5e260ff0cca11446b1d6d1423788e442257ce" +checksum = "ef4f52386a59ca4c860f7393bcf8abd8dfd91ecccc0f774635ff68e92eeef491" dependencies = [ "heck", "proc-macro2", @@ -302,21 +282,21 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" +checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" [[package]] name = "colorchoice" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" +checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" [[package]] name = "console" -version = "0.15.10" +version = "0.15.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea3c6ecd8059b57859df5c69830340ed3c41d30e3da0c1cbed90a96ac853041b" +checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8" dependencies = [ "encode_unicode", "libc", @@ -362,18 +342,18 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ "libc", ] [[package]] name = "crc32fast" -version = "1.4.2" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" dependencies = [ "cfg-if", ] @@ -396,9 +376,9 @@ checksum = "da692b8d1080ea3045efaab14434d40468c3d8657e42abddfffca87b428f4c1b" [[package]] name = "deranged" -version = "0.3.11" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" dependencies = [ "powerfmt", ] @@ -420,7 +400,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "658bce805d770f407bc62102fca7c2c64ceef2fbcb2b8bd19d2765ce093980de" dependencies = [ - "console 0.15.10", + "console 0.15.11", "shell-words", "tempfile", "thiserror 1.0.69", @@ -457,9 +437,9 @@ checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] name = "either" -version = "1.13.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[package]] name = "encode_unicode" @@ -476,20 +456,26 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "env_home" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7f84e12ccf0a7ddc17a6c41c93326024c42920d7ee630d04950e6926645c0fe" + [[package]] name = "equivalent" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.10" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" +checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -601,13 +587,13 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ "cfg-if", "libc", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi 0.11.1+wasi-snapshot-preview1", ] [[package]] @@ -617,11 +603,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" dependencies = [ "cfg-if", - "js-sys", "libc", "r-efi", "wasi 0.14.2+wasi-0.2.4", - "wasm-bindgen", ] [[package]] @@ -632,15 +616,15 @@ checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "glam" -version = "0.30.4" +version = "0.30.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50a99dbe56b72736564cfa4b85bf9a33079f16ae8b74983ab06af3b1a3696b11" +checksum = "f2d1aab06663bdce00d6ca5e5ed586ec8d18033a771906c993a1e3755b368d85" [[package]] name = "h2" -version = "0.4.7" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e" +checksum = "17da50a276f1e01e0ba6c029e47b7100754904ee8a278f886546e98575380785" dependencies = [ "atomic-waker", "bytes", @@ -657,9 +641,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.2" +version = "0.15.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" [[package]] name = "heck" @@ -682,20 +666,11 @@ dependencies = [ "digest", ] -[[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" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" +checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" dependencies = [ "bytes", "fnv", @@ -714,12 +689,12 @@ dependencies = [ [[package]] name = "http-body-util" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", - "futures-util", + "futures-core", "http", "http-body", "pin-project-lite", @@ -727,15 +702,15 @@ dependencies = [ [[package]] name = "httparse" -version = "1.9.5" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] name = "hyper" -version = "1.5.2" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "256fb8d4bd6413123cc9d91832d78325c48ff41677595be797d90f42969beae0" +checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" dependencies = [ "bytes", "futures-channel", @@ -753,11 +728,10 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.5" +version = "0.27.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" +checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" dependencies = [ - "futures-util", "http", "hyper", "hyper-util", @@ -786,40 +760,48 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.10" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" +checksum = "8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e" dependencies = [ + "base64", "bytes", "futures-channel", + "futures-core", "futures-util", "http", "http-body", "hyper", + "ipnet", + "libc", + "percent-encoding", "pin-project-lite", "socket2", + "system-configuration", "tokio", "tower-service", "tracing", + "windows-registry", ] [[package]] name = "icu_collections" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" dependencies = [ "displaydoc", + "potential_utf", "yoke", "zerofrom", "zerovec", ] [[package]] -name = "icu_locid" -version = "1.5.0" +name = "icu_locale_core" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" dependencies = [ "displaydoc", "litemap", @@ -828,31 +810,11 @@ dependencies = [ "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" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" dependencies = [ "displaydoc", "icu_collections", @@ -860,67 +822,54 @@ dependencies = [ "icu_properties", "icu_provider", "smallvec", - "utf16_iter", - "utf8_iter", - "write16", "zerovec", ] [[package]] name = "icu_normalizer_data" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" +checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" [[package]] name = "icu_properties" -version = "1.5.1" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" dependencies = [ "displaydoc", "icu_collections", - "icu_locid_transform", + "icu_locale_core", "icu_properties_data", "icu_provider", - "tinystr", + "potential_utf", + "zerotrie", "zerovec", ] [[package]] name = "icu_properties_data" -version = "1.5.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" +checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" [[package]] name = "icu_provider" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" dependencies = [ "displaydoc", - "icu_locid", - "icu_provider_macros", + "icu_locale_core", "stable_deref_trait", "tinystr", "writeable", "yoke", "zerofrom", + "zerotrie", "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", -] - [[package]] name = "idna" version = "1.0.3" @@ -934,9 +883,9 @@ dependencies = [ [[package]] name = "idna_adapter" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" dependencies = [ "icu_normalizer", "icu_properties", @@ -944,9 +893,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.7.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" +checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" dependencies = [ "equivalent", "hashbrown", @@ -954,11 +903,11 @@ dependencies = [ [[package]] name = "indicatif" -version = "0.17.9" +version = "0.17.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbf675b85ed934d3c67b5c5469701eec7db22689d0a2139d856e0925fa28b281" +checksum = "183b3088984b400f4cfac3620d5e076c84da5364016b4f49473de574b2586235" dependencies = [ - "console 0.15.10", + "console 0.15.11", "number_prefix", "portable-atomic", "unicode-width", @@ -967,18 +916,39 @@ dependencies = [ [[package]] name = "inout" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" dependencies = [ "generic-array", ] +[[package]] +name = "io-uring" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4" +dependencies = [ + "bitflags", + "cfg-if", + "libc", +] + [[package]] name = "ipnet" -version = "2.10.1" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" + +[[package]] +name = "iri-string" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" +dependencies = [ + "memchr", + "serde", +] [[package]] name = "is_terminal_polyfill" @@ -988,16 +958,17 @@ checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" [[package]] name = "itoa" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "jobserver" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" dependencies = [ + "getrandom 0.3.3", "libc", ] @@ -1019,18 +990,18 @@ checksum = "775bf80d5878ab7c2b1080b5351a48b2f737d9f6f8b383574eebcc22be0dfccb" [[package]] name = "libc" -version = "0.2.169" +version = "0.2.174" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" +checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" [[package]] name = "libloading" -version = "0.8.6" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" +checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" dependencies = [ "cfg-if", - "windows-targets 0.52.6", + "windows-targets 0.53.2", ] [[package]] @@ -1062,12 +1033,6 @@ dependencies = [ "zlib-rs", ] -[[package]] -name = "linux-raw-sys" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" - [[package]] name = "linux-raw-sys" version = "0.9.4" @@ -1076,31 +1041,25 @@ checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" [[package]] name = "litemap" -version = "0.7.4" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" +checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" [[package]] name = "lock_api" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" dependencies = [ "autocfg", "scopeguard", ] -[[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" +version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" [[package]] name = "lua-src" @@ -1113,9 +1072,9 @@ dependencies = [ [[package]] name = "luajit-src" -version = "210.5.11+97813fb" +version = "210.5.12+a4f56a4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3015551c284515db7c30c559fc1080f9cb9ee990d1f6fca315451a107c7540bb" +checksum = "b3a8e7962a5368d5f264d045a5a255e90f9aa3fc1941ae15a8d2940d42cac671" dependencies = [ "cc", "which", @@ -1123,18 +1082,18 @@ dependencies = [ [[package]] name = "luau0-src" -version = "0.11.2+luau653" +version = "0.12.3+luau663" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02313a53daf1fae25e82f7e7ca56180b72d1f08c514426672877cd957298201c" +checksum = "76ae337c644bbf86a8d8e9ce3ee023311833d41741baf5e51acc31b37843aba1" dependencies = [ "cc", ] [[package]] name = "memchr" -version = "2.7.4" +version = "2.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" [[package]] name = "mime" @@ -1153,20 +1112,20 @@ dependencies = [ [[package]] name = "mio" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" +checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" dependencies = [ "libc", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.52.0", + "wasi 0.11.1+wasi-snapshot-preview1", + "windows-sys 0.59.0", ] [[package]] name = "mlua" -version = "0.10.2" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea43c3ffac2d0798bd7128815212dd78c98316b299b7a902dabef13dc7b6b8d" +checksum = "c1f5f8fbebc7db5f671671134b9321c4b9aa9adeafccfd9a8c020ae45c6a35d0" dependencies = [ "anyhow", "bstr", @@ -1176,13 +1135,14 @@ dependencies = [ "num-traits", "parking_lot", "rustc-hash", + "rustversion", ] [[package]] name = "mlua-sys" -version = "0.6.6" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63a11d485edf0f3f04a508615d36c7d50d299cf61a7ee6d3e2530651e0a31771" +checksum = "380c1f7e2099cafcf40e51d3a9f20a346977587aa4d012eae1f043149a728a93" dependencies = [ "cc", "cfg-if", @@ -1194,9 +1154,9 @@ dependencies = [ [[package]] name = "native-tls" -version = "0.2.12" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" +checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" dependencies = [ "libc", "log", @@ -1231,7 +1191,7 @@ dependencies = [ "anyhow", "base64", "bitcode", - "bzip2 0.6.0", + "bzip2", "clap", "console 0.16.0", "dialoguer", @@ -1269,15 +1229,21 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.20.2" +version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "once_cell_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" [[package]] name = "openssl" -version = "0.10.68" +version = "0.10.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" +checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" dependencies = [ "bitflags", "cfg-if", @@ -1301,15 +1267,15 @@ dependencies = [ [[package]] name = "openssl-probe" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-sys" -version = "0.9.104" +version = "0.9.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" +checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" dependencies = [ "cc", "libc", @@ -1319,9 +1285,9 @@ dependencies = [ [[package]] name = "parking_lot" -version = "0.12.3" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" dependencies = [ "lock_api", "parking_lot_core", @@ -1329,9 +1295,9 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.10" +version = "0.9.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" dependencies = [ "cfg-if", "libc", @@ -1376,15 +1342,24 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] name = "portable-atomic" -version = "1.10.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" +checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" + +[[package]] +name = "potential_utf" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" +dependencies = [ + "zerovec", +] [[package]] name = "powerfmt" @@ -1392,20 +1367,26 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" +[[package]] +name = "ppmd-rust" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c834641d8ad1b348c9ee86dec3b9840d805acd5f24daa5f90c788951a52ff59b" + [[package]] name = "proc-macro2" -version = "1.0.92" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.38" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" dependencies = [ "proc-macro2", ] @@ -1418,18 +1399,18 @@ checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" [[package]] name = "redox_syscall" -version = "0.5.8" +version = "0.5.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" +checksum = "7251471db004e509f4e75a62cca9435365b5ec7bcdff530d612ac7c87c44a792" dependencies = [ "bitflags", ] [[package]] name = "reqwest" -version = "0.12.12" +version = "0.12.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" +checksum = "cbc931937e6ca3a06e3b6c0aa7841849b160a90351d6ab467a8b9b9959767531" dependencies = [ "base64", "bytes", @@ -1445,89 +1426,72 @@ dependencies = [ "hyper-rustls", "hyper-tls", "hyper-util", - "ipnet", "js-sys", "log", "mime", "native-tls", - "once_cell", "percent-encoding", "pin-project-lite", - "rustls-pemfile", + "rustls-pki-types", "serde", "serde_json", "serde_urlencoded", "sync_wrapper", - "system-configuration", "tokio", "tokio-native-tls", "tower", + "tower-http", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "windows-registry", ] [[package]] name = "ring" -version = "0.17.8" +version = "0.17.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", - "getrandom 0.2.15", + "getrandom 0.2.16", "libc", - "spin", "untrusted", "windows-sys 0.52.0", ] [[package]] name = "rustc-demangle" -version = "0.1.24" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" +checksum = "989e6739f80c4ad5b13e0fd7fe89531180375b18520cc8c82080e4dc4035b84f" [[package]] name = "rustc-hash" -version = "2.1.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7fb8039b3032c191086b10f11f319a6e99e1e82889c5cc6046f515c9db1d497" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" [[package]] name = "rustix" -version = "0.38.42" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93dc38ecbab2eb790ff964bb77fa94faf256fd3e73285fd7ba0903b76bedb85" +checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" dependencies = [ "bitflags", "errno", "libc", - "linux-raw-sys 0.4.14", - "windows-sys 0.59.0", -] - -[[package]] -name = "rustix" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" -dependencies = [ - "bitflags", - "errno", - "libc", - "linux-raw-sys 0.9.4", - "windows-sys 0.59.0", + "linux-raw-sys", + "windows-sys 0.60.2", ] [[package]] name = "rustls" -version = "0.23.20" +version = "0.23.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5065c3f250cbd332cd894be57c40fa52387247659b14a2d6041d121547903b1b" +checksum = "2491382039b29b9b11ff08b76ff6c97cf287671dbb74f0be44bda389fffe9bd1" dependencies = [ "once_cell", "rustls-pki-types", @@ -1537,25 +1501,19 @@ dependencies = [ ] [[package]] -name = "rustls-pemfile" -version = "2.2.0" +name = "rustls-pki-types" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" +checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" dependencies = [ - "rustls-pki-types", + "zeroize", ] -[[package]] -name = "rustls-pki-types" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2bf47e6ff922db3825eb750c4e2ff784c6ff8fb9e13046ef6a1d1c5401b0b37" - [[package]] name = "rustls-webpki" -version = "0.102.8" +version = "0.103.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc" dependencies = [ "ring", "rustls-pki-types", @@ -1564,15 +1522,15 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.19" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" +checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" [[package]] name = "ryu" -version = "1.0.18" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "schannel" @@ -1604,9 +1562,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.13.0" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1863fd3768cd83c56a7f60faa4dc0d403f1b6df0a38c3c25f44b7894e45370d5" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" dependencies = [ "core-foundation-sys", "libc", @@ -1614,18 +1572,18 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.217" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.217" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", @@ -1634,9 +1592,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.140" +version = "1.0.141" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +checksum = "30b9eff21ebe718216c6ec64e1d9ac57087aad11efc64e32002bce4a0d4c03d3" dependencies = [ "itoa", "memchr", @@ -1646,9 +1604,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.9" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" +checksum = "40734c41988f7306bb04f0ecf60ec0f3f1caa34290e4e8ea471dcd3346483b83" dependencies = [ "serde", ] @@ -1678,9 +1636,9 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.8" +version = "0.10.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", "cpufeatures", @@ -1689,9 +1647,9 @@ dependencies = [ [[package]] name = "sha256" -version = "1.5.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18278f6a914fa3070aa316493f7d2ddfb9ac86ebc06fa3b83bffda487e9065b0" +checksum = "f880fc8562bdeb709793f00eb42a2ad0e672c4f883bbe59122b926eca935c8f6" dependencies = [ "async-trait", "bytes", @@ -1720,35 +1678,26 @@ checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" [[package]] name = "slab" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] +checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" [[package]] name = "smallvec" -version = "1.13.2" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" [[package]] name = "socket2" -version = "0.5.8" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" +checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.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" @@ -1763,20 +1712,22 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "strum" -version = "0.27.1" +version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f64def088c51c9510a8579e3c5d67c65349dcf755e5479ad3d010aa6454e2c32" +checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" +dependencies = [ + "strum_macros", +] [[package]] name = "strum_macros" -version = "0.27.1" +version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c77a8c5abcaf0f9ce05d62342b7d298c346515365c36b673df4ebe3ced01fde8" +checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" dependencies = [ "heck", "proc-macro2", "quote", - "rustversion", "syn", ] @@ -1788,9 +1739,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "2.0.95" +version = "2.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46f71c0377baf4ef1cc3e3402ded576dccc315800fbc62dfc7fe04b009773b4a" +checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" dependencies = [ "proc-macro2", "quote", @@ -1808,9 +1759,9 @@ dependencies = [ [[package]] name = "synstructure" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", @@ -1847,7 +1798,7 @@ dependencies = [ "fastrand", "getrandom 0.3.3", "once_cell", - "rustix 1.0.7", + "rustix", "windows-sys 0.59.0", ] @@ -1893,9 +1844,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.37" +version = "0.3.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" +checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" dependencies = [ "deranged", "num-conv", @@ -1906,15 +1857,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.2" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" +checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" [[package]] name = "tinystr" -version = "0.7.6" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" dependencies = [ "displaydoc", "zerovec", @@ -1922,17 +1873,19 @@ dependencies = [ [[package]] name = "tokio" -version = "1.42.0" +version = "1.47.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cec9b21b0450273377fc97bd4c33a8acffc8c996c987a7c5b319a0083707551" +checksum = "43864ed400b6043a4757a25c7a64a8efde741aed79a056a2fb348a406701bb35" dependencies = [ "backtrace", "bytes", + "io-uring", "libc", "mio", "pin-project-lite", + "slab", "socket2", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -1947,9 +1900,9 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.26.1" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" +checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" dependencies = [ "rustls", "tokio", @@ -1957,9 +1910,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.13" +version = "0.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" +checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" dependencies = [ "bytes", "futures-core", @@ -1970,44 +1923,42 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.23" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" +checksum = "ed0aee96c12fa71097902e0bb061a5e1ebd766a6636bb605ba401c45c1650eac" dependencies = [ + "indexmap", "serde", "serde_spanned", "toml_datetime", - "toml_edit", + "toml_parser", + "toml_writer", + "winnow", ] [[package]] name = "toml_datetime" -version = "0.6.11" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" +checksum = "bade1c3e902f58d73d3f294cd7f20391c1cb2fbcb643b73566bc773971df91e3" dependencies = [ "serde", ] [[package]] -name = "toml_edit" -version = "0.22.27" +name = "toml_parser" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" +checksum = "97200572db069e74c512a14117b296ba0a80a30123fbbb5aa1f4a348f639ca30" dependencies = [ - "indexmap", - "serde", - "serde_spanned", - "toml_datetime", - "toml_write", "winnow", ] [[package]] -name = "toml_write" -version = "0.1.2" +name = "toml_writer" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" +checksum = "fcc842091f2def52017664b53082ecbbeb5c7731092bad69d2c63050401dfd64" [[package]] name = "tower" @@ -2024,6 +1975,24 @@ dependencies = [ "tower-service", ] +[[package]] +name = "tower-http" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" +dependencies = [ + "bitflags", + "bytes", + "futures-util", + "http", + "http-body", + "iri-string", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", +] + [[package]] name = "tower-layer" version = "0.3.3" @@ -2048,9 +2017,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.33" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" +checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" dependencies = [ "once_cell", ] @@ -2063,21 +2032,21 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "typenum" -version = "1.17.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" [[package]] name = "unicode-ident" -version = "1.0.14" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" [[package]] name = "unicode-width" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" +checksum = "4a1a07cc7db3810833284e8d372ccdc6da29741639ecc70c9ec107df0fa6154c" [[package]] name = "untrusted" @@ -2096,12 +2065,6 @@ dependencies = [ "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" @@ -2137,9 +2100,9 @@ dependencies = [ [[package]] name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" +version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasi" @@ -2243,44 +2206,49 @@ dependencies = [ [[package]] name = "which" -version = "6.0.3" +version = "7.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ee928febd44d98f2f459a4a79bd4d928591333a494a10a868418ac1b39cf1f" +checksum = "24d643ce3fd3e5b54854602a080f34fb10ab75e0b813ee32d00ca2b44fa74762" dependencies = [ "either", - "home", - "rustix 0.38.42", + "env_home", + "rustix", "winsafe", ] +[[package]] +name = "windows-link" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" + [[package]] name = "windows-registry" -version = "0.2.0" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" +checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" dependencies = [ + "windows-link", "windows-result", "windows-strings", - "windows-targets 0.52.6", ] [[package]] name = "windows-result" -version = "0.2.0" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" dependencies = [ - "windows-targets 0.52.6", + "windows-link", ] [[package]] name = "windows-strings" -version = "0.1.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" dependencies = [ - "windows-result", - "windows-targets 0.52.6", + "windows-link", ] [[package]] @@ -2440,12 +2408,9 @@ checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" [[package]] name = "winnow" -version = "0.7.11" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74c7b26e3480b707944fc872477815d29a8e429d2f93a1ce000f5fa84a15cbcd" -dependencies = [ - "memchr", -] +checksum = "f3edebf492c8125044983378ecb5766203ad3b4c2f7a922bd7dd207f6d443e95" [[package]] name = "winsafe" @@ -2462,23 +2427,17 @@ dependencies = [ "bitflags", ] -[[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" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" +checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" [[package]] name = "yoke" -version = "0.7.5" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" dependencies = [ "serde", "stable_deref_trait", @@ -2488,9 +2447,9 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.7.5" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" dependencies = [ "proc-macro2", "quote", @@ -2500,18 +2459,18 @@ dependencies = [ [[package]] name = "zerofrom" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" dependencies = [ "zerofrom-derive", ] [[package]] name = "zerofrom-derive" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", @@ -2539,11 +2498,22 @@ dependencies = [ "syn", ] +[[package]] +name = "zerotrie" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + [[package]] name = "zerovec" -version = "0.10.4" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" dependencies = [ "yoke", "zerofrom", @@ -2552,9 +2522,9 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.10.3" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" dependencies = [ "proc-macro2", "quote", @@ -2563,13 +2533,13 @@ dependencies = [ [[package]] name = "zip" -version = "4.2.0" +version = "4.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95ab361742de920c5535880f89bbd611ee62002bf11341d16a5f057bb8ba6899" +checksum = "9aed4ac33e8eb078c89e6cbb1d5c4c7703ec6d299fc3e7c3695af8f8b423468b" dependencies = [ "aes", "arbitrary", - "bzip2 0.5.0", + "bzip2", "constant_time_eq", "crc32fast", "deflate64", @@ -2580,6 +2550,7 @@ dependencies = [ "liblzma", "memchr", "pbkdf2", + "ppmd-rust", "sha1", "time", "zeroize", @@ -2595,41 +2566,39 @@ checksum = "626bd9fa9734751fc50d6060752170984d7053f5a39061f524cda68023d4db8a" [[package]] name = "zopfli" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5019f391bac5cf252e93bbcc53d039ffd62c7bfb7c150414d61369afe57e946" +checksum = "edfc5ee405f504cd4984ecc6f14d02d55cfda60fa4b689434ef4102aae150cd7" dependencies = [ "bumpalo", "crc32fast", - "lockfree-object-pool", "log", - "once_cell", "simd-adler32", ] [[package]] name = "zstd" -version = "0.13.2" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcf2b778a664581e31e389454a7072dab1647606d44f7feea22cd5abb9c9f3f9" +checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a" dependencies = [ "zstd-safe", ] [[package]] name = "zstd-safe" -version = "7.2.1" +version = "7.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54a3ab4db68cea366acc5c897c7b4d4d1b8994a9cd6e6f841f8964566a419059" +checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" dependencies = [ "zstd-sys", ] [[package]] name = "zstd-sys" -version = "2.0.13+zstd.1.5.6" +version = "2.0.15+zstd.1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" +checksum = "eb81183ddd97d0c74cedf1d50d85c8d08c1b8b68ee863bdee9e706eedba1a237" dependencies = [ "cc", "pkg-config", diff --git a/Cargo.toml b/Cargo.toml index 13eaea4..0d59ba6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,11 +22,11 @@ reqwest = { version = "0.12.12", features = ["blocking"] } serde = { version = "1.0.217", features = ["derive"] } serde_json = { version = "1.0.140" } sha256 = "1.5.0" -strum = "0.27.1" +strum = {version = "0.27.1", features = ["derive"] } strum_macros = "0.27.1" tempfile = { version = "3.20.0" } thiserror = "2.0.12" -toml = { version = "0.8.23" } +toml = { version = "0.9.2" } zip = { version = "4.2.0", features = [ "deflate-zopfli", "zstd", diff --git a/examples/sdl2/project.lua b/examples/sdl2/project.lua index 7e8ba12..cbcdbd5 100644 --- a/examples/sdl2/project.lua +++ b/examples/sdl2/project.lua @@ -2,48 +2,35 @@ sdl_path_mingw = network:zip("https://github.com/libsdl-org/SDL/releases/download/release-2.30.2/SDL2-devel-2.30.2-mingw.zip") .. "/SDL2-2.30.2" sdl_path_msvc = network:zip("https://github.com/libsdl-org/SDL/releases/download/release-2.30.2/SDL2-devel-2.30.2-VC.zip") -sdl2_project = Project ( - "SDL2 Project", -- Name - "C++", -- Language - "sdl2_test.exe", - { -- Source files - "main.cpp" - }, - nil, - { -- Includes - sdl_path_msvc .. "/SDL2-2.30.2/include" - }, - { -- Library paths - sdl_path_msvc .. "/SDL2-2.30.2/lib/x64", - }, - { -- Libraries - "shell32.lib", - "SDL2.lib", - "SDL2main.lib" - }, - nil, - nil, - { "/SUBSYSTEM:WINDOWS" }, -- Linker flags - nil, - nil, - "x64", -- Architecture - "executable" -- Project Type -) +sdl2_project = new_project("SDL2 Project", "CPP") +sdl2_project:output("sdl2_test.exe") +sdl2_project:file("main.cpp") +sdl2_project:type("Executable") tasks:create("x64 MSVC", function() - sdl2_project.defines = { "MSVC" } + sdl2_project:lib("shell32.lib") + sdl2_project:lib("SDL2.lib") + sdl2_project:lib("SDL2main.lib") + sdl2_project:arch("x64") + sdl2_project:flag("Linker", "/SUBSYSTEM:WINDOWS") + sdl2_project:include(sdl_path_msvc .. "/SDL2-2.30.2/include") + sdl2_project:lib_path(sdl_path_msvc .. "/SDL2-2.30.2/lib/x64") + sdl2_project:define("MSVC") msvc:build(sdl2_project) end ) tasks:create("x86 MSVC", function() - sdl2_project.defines = { "MSVC" } - sdl2_project.arch = "x86" - sdl2_project.lib_paths = { - sdl_path_msvc .. "/SDL2-2.30.2/lib/x86", - } + sdl2_project:lib("shell32.lib") + sdl2_project:lib("SDL2.lib") + sdl2_project:lib("SDL2main.lib") + sdl2_project:flag("Linker", "/SUBSYSTEM:WINDOWS") + sdl2_project:include(sdl_path_msvc .. "/SDL2-2.30.2/include") + sdl2_project:define("MSVC") + sdl2_project:arch("x86") + sdl2_project:lib_path(sdl_path_msvc .. "/SDL2-2.30.2/lib/x86") msvc:build(sdl2_project) end @@ -52,10 +39,11 @@ tasks:create("x86 MSVC", tasks:create("x86_64-MinGW", function() - sdl2_project.arch = "x86_64" - sdl2_project.include_paths = { sdl_path_mingw .. "/x86_64-w64-mingw32/include" } - sdl2_project.lib_paths = { sdl_path_mingw .. "/x86_64-w64-mingw32/lib" } - sdl2_project.libs = { + sdl2_project:arch("x86_64") + sdl2_project:include(sdl_path_mingw .. "/x86_64-w64-mingw32/include") + sdl2_project:lib_path(sdl_path_mingw .. "/x86_64-w64-mingw32/lib") + + sdl2_project:lib({ "mingw32", "SDL2.dll", "SDL2main", @@ -73,11 +61,11 @@ tasks:create("x86_64-MinGW", "setupapi", "version", "uuid" - } + }) - sdl2_project.compiler_flags = {"--verbose", "-mwindows", "-static"} - sdl2_project.linker_flags = { "--high-entropy-va", "-subsystem", "windows", "--nxcompat", "-Bstatic"} - sdl2_project.asset_files = { [sdl_path_mingw .. "/x86_64-w64-mingw32/bin/SDL2.dll"] = "SDL2.dll" } + sdl2_project:flag("Compiler", {"--verbose", "-mwindows", "-static"}) + sdl2_project:flag("Linker", { "--high-entropy-va", "-subsystem", "windows", "--nxcompat", "-Bstatic"}) + sdl2_project:asset(sdl_path_mingw .. "/x86_64-w64-mingw32/bin/SDL2.dll", "SDL2.dll") mingw:build(sdl2_project) end @@ -85,10 +73,10 @@ tasks:create("x86_64-MinGW", tasks:create("i686-MinGW", function() - sdl2_project.arch = "i686" - sdl2_project.include_paths = { sdl_path_mingw .. "/i686-w64-mingw32/include" } - sdl2_project.lib_paths = { sdl_path_mingw .. "/i686-w64-mingw32/lib" } - sdl2_project.libs = { + sdl2_project:arch("i686") + sdl2_project:include(sdl_path_mingw .. "/i686-w64-mingw32/include") + sdl2_project:lib_path(sdl_path_mingw .. "/i686-w64-mingw32/lib") + sdl2_project:lib({ "mingw32", "SDL2", "SDL2main", @@ -106,43 +94,25 @@ tasks:create("i686-MinGW", "setupapi", "version", "uuid" - } + }) - sdl2_project.compiler_flags = {"--verbose", "-mwindows", "-static" } - sdl2_project.linker_flags = { "-subsystem", "windows", "--nxcompat", "-Bstatic"} - sdl2_project.asset_files = { [sdl_path_mingw .. "/i686-w64-mingw32/bin/SDL2.dll"] = "SDL2.dll" } + sdl2_project:flag("Compiler", {"--verbose", "-mwindows", "-static" }) + sdl2_project:flag("Linker", { "-subsystem", "windows", "--nxcompat", "-Bstatic"}) + sdl2_project:asset(sdl_path_mingw .. "/i686-w64-mingw32/bin/SDL2.dll", "SDL2.dll") mingw:build(sdl2_project) end ) -sdl2_gcc_project = Project( - "SDL2 Project GCC", - nil, - "sdl2_test", - { - "main.cpp" - }, - nil, - nil, - { - "SDL2" - }, - { - "linux" - }, - { - "--verbose" - }, - { - "--verbose" - }, - nil, - nil, - nil, - "executable" -) tasks:create("GCC", function() + sdl2_gcc_project = new_project("SDL2 Project GCC", "sdl2_test") + sdl2_gcc_project:file("main.cpp") + sdl2_gcc_project:lib("SDL2") + sdl2_gcc_project:define("linux") + sdl2_gcc_project:flag("Linker", "--verbose") + sdl2_gcc_project:flag("Compiler", "--verbose") + sdl2_gcc_project:type("Executable") + generic:build(sdl2_gcc_project, "g++", "g++") end) diff --git a/src/lib/compilers/generic.rs b/src/lib/compilers/generic.rs index 6f4c669..801e3aa 100644 --- a/src/lib/compilers/generic.rs +++ b/src/lib/compilers/generic.rs @@ -27,6 +27,7 @@ use crate::lib::{ ui::UI, util::build_cache::BuildCache, }; +use crate::lib::data::flag_type::FlagType; #[derive(Clone)] pub struct Generic @@ -151,7 +152,7 @@ impl Generic compiler_args.push(format!("-D{define}")) } - for flag in project.compiler_flags.clone() { + for flag in project.get_flags(FlagType::Compiler).clone() { compiler_args.push(flag) } @@ -218,7 +219,7 @@ impl Generic linker_args.push(format!("-l{lib}")) } - for flag in project.linker_flags.clone() { + for flag in project.get_flags(FlagType::Linker).clone() { linker_args.push(flag) } diff --git a/src/lib/compilers/mingw.rs b/src/lib/compilers/mingw.rs index a243849..c2f258e 100644 --- a/src/lib/compilers/mingw.rs +++ b/src/lib/compilers/mingw.rs @@ -30,6 +30,7 @@ use crate::lib::{ ui::UI, util::build_cache::BuildCache, }; +use crate::lib::data::flag_type::FlagType; #[derive(Clone)] pub struct MinGW @@ -168,7 +169,7 @@ impl MinGW compiler_args.push(format!("-D{define}")) } - for flag in project.compiler_flags.clone() { + for flag in project.get_flags(FlagType::Compiler).clone() { compiler_args.push(flag) } @@ -246,6 +247,10 @@ impl MinGW res_compiler_args.push(format!("-D{define}")); } + for flag in project.get_flags(FlagType::WINDRES).clone() { + res_compiler_args.push(flag) + } + res_compiler_args .push(format!("-o{}", coff_file.to_str().unwrap())); @@ -340,11 +345,11 @@ impl MinGW linker_args.push(format!("-l{lib}")) } - for flag in project.compiler_flags.clone() { + for flag in project.get_flags(FlagType::Compiler).clone() { linker_args.push(flag) } - for flag in project.linker_flags.clone() { + for flag in project.get_flags(FlagType::Linker).clone() { linker_args.push("-Wl,".to_string() + &flag) } diff --git a/src/lib/compilers/msvc.rs b/src/lib/compilers/msvc.rs index c2cc57f..9c91353 100644 --- a/src/lib/compilers/msvc.rs +++ b/src/lib/compilers/msvc.rs @@ -40,6 +40,7 @@ use crate::lib::{ error::NuMakeError::VcNotFound, }, }; +use crate::lib::data::flag_type::FlagType; #[derive(Clone)] pub struct MSVC @@ -256,7 +257,7 @@ impl MSVC compiler_args.push(format!("-D{define}")); } - for flag in project.compiler_flags.clone() { + for flag in project.get_flags(FlagType::Compiler).clone() { compiler_args.push(flag) } @@ -331,6 +332,10 @@ impl MSVC res_compiler_args.push(format!("-d{define}")); } + for flag in project.get_flags(FlagType::RC).clone() { + res_compiler_args.push(flag) + } + res_compiler_args .push(resource_file.to_str().unwrap_or("ERROR").to_string()); @@ -416,7 +421,7 @@ impl MSVC .push(format!("/DEF:{}", def_file.to_str().unwrap_or("ERROR"))); } - for flag in project.linker_flags.clone() { + for flag in project.get_flags(FlagType::Linker).clone() { linker_args.push(flag); } diff --git a/src/lib/data/flag_type.rs b/src/lib/data/flag_type.rs new file mode 100644 index 0000000..e324d4c --- /dev/null +++ b/src/lib/data/flag_type.rs @@ -0,0 +1,32 @@ +use std::str::FromStr; +use mlua::{ExternalError, FromLua, Lua, Value}; +use serde::{Deserialize, Serialize}; +use strum_macros::{EnumString, IntoStaticStr}; + +#[derive( + Debug, + Clone, + IntoStaticStr, + Default, + Serialize, + Deserialize, + EnumString, + Eq, + PartialEq, +)] +pub enum FlagType { + #[default] + Compiler, + Linker, + RC, + WINDRES, +} + +impl FromLua for FlagType { + fn from_lua(value: Value, lua: &Lua) -> mlua::Result { + match value { + Value::String(str) => Self::from_str(&str.to_str()?.to_string()).map_err(|e| e.into_lua_err()), + _ => Err(mlua::Error::UserDataTypeMismatch) + } + } +} diff --git a/src/lib/data/mod.rs b/src/lib/data/mod.rs index 612232e..0d95e74 100644 --- a/src/lib/data/mod.rs +++ b/src/lib/data/mod.rs @@ -3,4 +3,5 @@ pub mod source_file_collection; pub mod project; pub mod project_type; pub mod environment; -pub mod project_language; \ No newline at end of file +pub mod project_language; +pub mod flag_type; \ No newline at end of file diff --git a/src/lib/data/project.rs b/src/lib/data/project.rs index 4cdedae..9fa219c 100644 --- a/src/lib/data/project.rs +++ b/src/lib/data/project.rs @@ -1,15 +1,21 @@ +use crate::lib::compilers::msvc::MSVC; +use crate::lib::data::flag_type::FlagType; +use crate::lib::data::project_language::ProjectLanguage; use crate::lib::data::project_type::ProjectType; use crate::lib::data::source_file_collection::SourceFileCollection; +use crate::lib::util::either::Either; use crate::lib::util::error::NuMakeError::{ AddFileIsDirectory, AssetCopyPathOutsideWorkingDirectory, }; use anyhow::anyhow; -use mlua::{FromLua, Lua, MetaMethod, UserData, UserDataFields, UserDataMethods, Value}; +use mlua::prelude::LuaValue; +use mlua::{ + FromLua, Lua, MetaMethod, UserData, UserDataFields, UserDataMethods, Value, +}; +use serde::{Deserialize, Serialize}; use std::collections::HashMap; use std::fs; use std::path::PathBuf; -use mlua::prelude::LuaValue; -use crate::lib::data::project_language::ProjectLanguage; #[derive(Debug, Clone, Default)] pub struct Project { @@ -27,10 +33,7 @@ pub struct Project { pub libs: Vec, pub defines: Vec, - pub compiler_flags: Vec, - pub linker_flags: Vec, - pub rc_flags: Vec, - pub windres_flags: Vec, + pub flags: Vec<(FlagType, String)>, pub arch: Option, pub project_type: ProjectType, @@ -67,191 +70,130 @@ impl Project { Ok(()) } + + pub fn get_flags( + &self, + flag_type: FlagType, + ) -> Vec { + self.flags + .iter() + .filter_map(|(ft, flag)| { + if ft.clone() == flag_type { + Some(flag.clone()) + } else { + None + } + }) + .collect() + } } impl UserData for Project { - fn add_fields>(fields: &mut F) { - fields.add_field_method_get("name", |_, this| Ok(this.name.clone())); - fields.add_field_method_get("project_language", |_, this| Ok(this.language.clone())); - fields.add_field_method_get("output", |_, this| { - Ok(this.output.clone().unwrap_or("out".into())) - }); - fields.add_field_method_get("asset_files", |_, this| { - Ok(this.asset_files.clone()) - }); - fields.add_field_method_get("include_paths", |_, this| { - Ok(this.include_paths.clone()) - }); - fields.add_field_method_get("lib_paths", |_, this| Ok(this.libs.clone())); - fields.add_field_method_get("libs", |_, this| Ok(this.libs.clone())); - fields.add_field_method_get("defines", |_, this| { - Ok(this.defines.clone()) - }); - fields.add_field_method_get("compiler_flags", |_, this| { - Ok(this.compiler_flags.clone()) - }); - fields.add_field_method_get("linker_flags", |_, this| { - Ok(this.linker_flags.clone()) - }); - fields.add_field_method_get("rc_flags", |_, this| { - Ok(this.rc_flags.clone()) - }); - fields.add_field_method_get("windres_flags", |_, this| { - Ok(this.windres_flags.clone()) - }); - fields.add_field_method_get("arch", |_, this| Ok(this.arch.clone())); - fields.add_field_method_get("project_type", |_, this| { - Ok(this.project_type.clone()) - }); - - - // SETTERS --------------------------------------------------------------------------------- - fields.add_field_method_set("name", |_, this, new_val| { - this.name = new_val; - Ok(()) - }); - - fields.add_field_method_set("project_language", |_, this, new_val| { - this.language = new_val; - Ok(()) - });fields.add_field_method_set("output", |_, this, new_val| { - this.output = new_val; - Ok(()) - }); - - fields.add_field_method_set( - "source_files", - |_, this, new_val: Vec| { - this.source_files.clear(); - for path in new_val { - this.source_files.insert(dunce::canonicalize(&path)?); + fn add_methods>(methods: &mut M) { + methods.add_method_mut( + "file", + |_, this, value: Either>| { + match value { + Either::First(path) => { + let path_buf = dunce::canonicalize(path)?; + this.source_files.insert(path_buf); + } + + Either::Second(paths) => { + for path in paths { + let path_buf = dunce::canonicalize(path)?; + this.source_files.insert(path_buf); + } + } } + Ok(()) }, ); - fields.add_field_method_set("asset_files", |_, this, new_val: HashMap| { - this.asset_files = new_val; - Ok(()) - }); - - fields.add_field_method_set("include_paths", |_, this, new_val: Vec| { - this.include_paths = new_val.clone(); + methods.add_method_mut("output", |_, this, path: String| { + this.output = Some(path); Ok(()) }); - fields.add_field_method_set("lib_paths", |_, this, new_val| { - this.lib_paths = new_val; - Ok(()) - }); + methods.add_method_mut( + "asset", + |_, this, (path, out): (String, String)| { + this.asset_files.insert(path, out); + Ok(()) + }, + ); - fields.add_field_method_set("libs", |_, this, new_val| { - this.libs = new_val; + methods.add_method_mut("include", |_, this, path: String| { + this.include_paths.push(path); Ok(()) }); - fields.add_field_method_set("defines", |_, this, new_val| { - this.defines = new_val; - Ok(()) - }); + methods.add_method_mut( + "lib", + |_, this, value: Either>| match value { + Either::First(str) => { + this.libs.push(str); + Ok(()) + } - fields.add_field_method_set("compiler_flags", |_, this, new_val| { - this.compiler_flags = new_val; - Ok(()) - }); + Either::Second(arr) => { + this.libs.extend(arr); + Ok(()) + } + }, + ); - fields.add_field_method_set("linker_flags", |_, this, new_val| { - this.linker_flags = new_val; + methods.add_method_mut("lib_path", |_, this, path: String| { + this.lib_paths.push(path); Ok(()) }); - fields.add_field_method_set("rc_flags", |_, this, new_val| { - this.rc_flags = new_val; - Ok(()) - }); + methods.add_method_mut( + "define", + |_, this, (key, value): (String, Option)| { + this.defines.push(match value { + Some(v) => format!("{}={}", key, v), + None => key, + }); + Ok(()) + }, + ); - fields.add_field_method_set("windres_flags", |_, this, new_val| { - this.rc_flags = new_val; - Ok(()) - }); + methods.add_method_mut( + "flag", + |_, + this, + (flag_type, value): (FlagType, Either>)| { + match value { + Either::First(str) => { + this.flags.push((flag_type, str)); + Ok(()) + } + + Either::Second(arr) => { + this.flags.extend( + arr.iter() + .map(|str| (flag_type.clone(), str.clone())) + .collect::>(), + ); + Ok(()) + } + } + }, + ); - fields.add_field_method_set("arch", |_, this, new_val| { - this.arch = new_val; + methods.add_method_mut("arch", |_, this, arch: String| { + this.arch = Some(arch); Ok(()) }); - fields.add_field_method_set("project_type", |_, this, new_val| { - this.project_type = new_val; + methods.add_method_mut("type", |_, this, project_type: ProjectType| { + this.project_type = project_type; Ok(()) }); } - - fn add_methods>(methods: &mut M) { - methods.add_meta_method( - MetaMethod::Call, - |lua, - this, - ( - name, - language, - output, - source_files, - asset_files, - include_paths, - lib_paths, - libs, - defines, - compiler_flags, - linker_flags, - rc_flags, - windres_flags, - arch, - project_type, - ): ( - Option, - Option, - Option, - Option>, - Option>, - Option>, - Option>, - Option>, - Option>, - Option>, - Option>, - Option>, - Option>, - Option, - Option, - )| { - let mut new_proj = Project { - name: name.unwrap_or_default(), - language: language.unwrap_or_default(), - output, - source_files: SourceFileCollection::new(), - asset_files: asset_files.unwrap_or_default(), - include_paths: include_paths.unwrap_or_default(), - lib_paths: lib_paths.unwrap_or_default(), - libs: libs.unwrap_or_default(), - defines: defines.unwrap_or_default(), - compiler_flags: compiler_flags.unwrap_or_default(), - linker_flags: linker_flags.unwrap_or_default(), - rc_flags: rc_flags.unwrap_or_default(), - windres_flags: windres_flags.unwrap_or_default(), - arch, - project_type: project_type.unwrap_or_default(), - }; - - for file in source_files.unwrap_or_default() { - new_proj.source_files.insert(dunce::canonicalize(&file)?); - } - - Ok(new_proj) - }, - ); - } } - impl FromLua for Project { fn from_lua( value: LuaValue, @@ -270,4 +212,3 @@ impl FromLua for Project { } } } - diff --git a/src/lib/data/project_language.rs b/src/lib/data/project_language.rs index 2f2d254..bb58617 100644 --- a/src/lib/data/project_language.rs +++ b/src/lib/data/project_language.rs @@ -1,48 +1,29 @@ +use crate::lib::data::flag_type::FlagType; use mlua::prelude::{LuaResult, LuaValue}; use mlua::Error::UserDataTypeMismatch; -use mlua::{FromLua, IntoLua, Lua}; -use strum_macros::IntoStaticStr; +use mlua::{ExternalError, FromLua, IntoLua, Lua, Value}; +use serde::{Deserialize, Serialize}; +use std::str::FromStr; +use strum_macros::{EnumString, IntoStaticStr}; -#[derive(Debug, Clone, IntoStaticStr, Default)] +#[derive( + Debug, Clone, IntoStaticStr, Default, Serialize, Deserialize, EnumString, +)] pub enum ProjectLanguage { #[default] C, CPP, } -impl IntoLua for ProjectLanguage { - fn into_lua( - self, - lua: &Lua, - ) -> LuaResult { - let me_str: &str = self.into(); - me_str.into_lua(lua) - } -} - impl FromLua for ProjectLanguage { fn from_lua( - lua_value: LuaValue, + value: Value, lua: &Lua, - ) -> LuaResult { - match lua_value { - LuaValue::String(ref string) => { - let project_type_str = string.to_str()?; - match project_type_str.to_lowercase().as_str() { - "c" => Ok(ProjectLanguage::C), - "cpp" => Ok(ProjectLanguage::CPP), - "c++" => Ok(ProjectLanguage::CPP), - _ => Err(UserDataTypeMismatch), - } - } - - LuaValue::Number(ref number) => match (number - 0f64) as i64 { - 1 => Ok(ProjectLanguage::C), - 2 => Ok(ProjectLanguage::CPP), - _ => Err(UserDataTypeMismatch), - }, - - _ => Err(UserDataTypeMismatch), + ) -> mlua::Result { + match value { + Value::String(str) => Self::from_str(&str.to_str()?.to_string()) + .map_err(|e| e.into_lua_err()), + _ => Err(mlua::Error::UserDataTypeMismatch), } } } diff --git a/src/lib/data/project_type.rs b/src/lib/data/project_type.rs index c786234..cddad7b 100644 --- a/src/lib/data/project_type.rs +++ b/src/lib/data/project_type.rs @@ -1,47 +1,30 @@ -use mlua::{FromLua, IntoLua, Lua}; -use mlua::Error::UserDataTypeMismatch; +use crate::lib::data::project_language::ProjectLanguage; use mlua::prelude::{LuaResult, LuaValue}; -use strum_macros::IntoStaticStr; - +use mlua::Error::UserDataTypeMismatch; +use mlua::{ExternalError, FromLua, IntoLua, Lua, Value}; +use serde::{Deserialize, Serialize}; +use std::str::FromStr; +use strum_macros::{EnumString, IntoStaticStr}; -#[derive(Debug, Clone, IntoStaticStr, Default)] +#[derive( + Debug, Clone, IntoStaticStr, Default, Serialize, Deserialize, EnumString, +)] pub enum ProjectType { - #[default] - Executable, - StaticLibrary, - DynamicLibrary, -} - -impl IntoLua for ProjectType { - fn into_lua(self, lua: &Lua) -> LuaResult { - let me_str: &str = self.into(); - me_str.into_lua(lua) - } + #[default] + Executable, + StaticLibrary, + DynamicLibrary, } impl FromLua for ProjectType { - fn from_lua(lua_value: LuaValue, lua: &Lua) -> LuaResult { - match lua_value { - LuaValue::String(ref string) => { - let project_type_str = string.to_str()?; - match project_type_str.to_lowercase().as_str() { - "executable" => Ok(ProjectType::Executable), - "staticlibrary" => Ok(ProjectType::StaticLibrary), - "dynamiclibrary" => Ok(ProjectType::DynamicLibrary), - _ => Err(UserDataTypeMismatch) - } - } - - LuaValue::Number(ref number) => { - match (number - 0f64) as i64 { - 1 => Ok(ProjectType::Executable), - 2 => Ok(ProjectType::StaticLibrary), - 3 => Ok(ProjectType::DynamicLibrary), - _ => Err(UserDataTypeMismatch) - } - } - - _ => Err(UserDataTypeMismatch) - } - } -} \ No newline at end of file + fn from_lua( + value: Value, + lua: &Lua, + ) -> mlua::Result { + match value { + Value::String(str) => Self::from_str(&str.to_str()?.to_string()) + .map_err(|e| e.into_lua_err()), + _ => Err(mlua::Error::UserDataTypeMismatch), + } + } +} diff --git a/src/lib/data/source_file_collection.rs b/src/lib/data/source_file_collection.rs index 74ae173..060e409 100644 --- a/src/lib/data/source_file_collection.rs +++ b/src/lib/data/source_file_collection.rs @@ -1,9 +1,10 @@ use crate::lib::data::source_file_type::SourceFileType; use std::collections::{HashMap, HashSet}; use std::path::PathBuf; +use serde::{Deserialize, Serialize}; use strum::IntoEnumIterator; -#[derive(Clone, Debug, Default)] +#[derive(Clone, Debug, Default, Serialize, Deserialize)] pub struct SourceFileCollection { files: HashMap>, } diff --git a/src/lib/data/source_file_type.rs b/src/lib/data/source_file_type.rs index 175b834..d23c83c 100644 --- a/src/lib/data/source_file_type.rs +++ b/src/lib/data/source_file_type.rs @@ -1,9 +1,10 @@ use std::path::PathBuf; use mlua::{IntoLua, Lua}; use mlua::prelude::{LuaResult, LuaValue}; +use serde::{Deserialize, Serialize}; use strum_macros::{EnumIter, IntoStaticStr}; -#[derive(Debug, Copy, Clone, EnumIter, Hash, PartialEq, Eq, IntoStaticStr)] +#[derive(Debug, Copy, Clone, EnumIter, Hash, PartialEq, Eq, IntoStaticStr, Serialize, Deserialize)] pub enum SourceFileType { Code, Resource, @@ -33,11 +34,4 @@ impl From<&PathBuf> for SourceFileType { } } } -} - -impl IntoLua for SourceFileType { - fn into_lua(self, lua: &Lua) -> LuaResult { - let me_str: &str = self.into(); - me_str.into_lua(lua) - } } \ No newline at end of file diff --git a/src/lib/init/mod.rs b/src/lib/init/mod.rs index 34e1973..4c234cf 100644 --- a/src/lib/init/mod.rs +++ b/src/lib/init/mod.rs @@ -36,7 +36,7 @@ impl Init { )?; match cmd { - SubCommands::Build(args) => runtime.execute_task(&*args.task), + SubCommands::Build(args) => runtime.execute_task(&args.task), SubCommands::List(_) => { println!("Available Tasks: {}", runtime.get_tasks().join(", ")); diff --git a/src/lib/runtime/mod.rs b/src/lib/runtime/mod.rs index 7560fd1..e1f591d 100644 --- a/src/lib/runtime/mod.rs +++ b/src/lib/runtime/mod.rs @@ -1,34 +1,24 @@ -use std::fs; - -use mlua::{ - Compiler, - Lua, -}; - +use crate::lib::data::flag_type::FlagType; +use crate::lib::data::project_language::ProjectLanguage; +use crate::lib::data::project_type::ProjectType; +use crate::lib::util::build_cache::BuildCache; +use crate::lib::util::either::Either; use crate::lib::{ compilers::{ - generic, - generic::Generic, - mingw, - mingw::MinGW, - msvc, - msvc::MSVC, - }, - data::{ - environment::Environment, - project::Project, + generic, generic::Generic, mingw, mingw::MinGW, msvc, msvc::MSVC, }, + data::{environment::Environment, project::Project}, runtime::{ - filesystem::Filesystem, - network::Network, - storage::Storage, - system::System, - task_manager::TaskManager, + filesystem::Filesystem, network::Network, storage::Storage, + system::System, task_manager::TaskManager, }, ui::UI, util::cache::Cache, }; -use crate::lib::util::build_cache::BuildCache; +use clap::builder::TypedValueParser; +use mlua::{Compiler, Lua, ObjectLike, Table, Value}; +use std::fs; +use std::str::FromStr; pub mod filesystem; pub mod network; @@ -36,8 +26,7 @@ pub mod storage; pub mod system; pub mod task_manager; -pub struct Runtime -{ +pub struct Runtime { // Tools task_manager: task_manager::TaskManager, network: network::Network, @@ -57,13 +46,11 @@ pub struct Runtime lua: Lua, } -impl Runtime -{ +impl Runtime { pub fn new( ui: UI, environment: Environment, - ) -> anyhow::Result - { + ) -> anyhow::Result { let cache: Cache = Cache::new(environment.clone())?; let build_cache: BuildCache = BuildCache::new(environment.clone())?; let system = System::new(ui.clone()); @@ -106,29 +93,19 @@ impl Runtime pub(crate) fn execute_script( &mut self, filename: &String, - ) -> anyhow::Result<()> - { + ) -> anyhow::Result<()> { let file_size = fs::metadata(filename)?.len(); let mut should_compile = self.cache.get_value(filename) != Some(toml::Value::from(file_size.to_string())); let mut chunk: Vec = Vec::new(); - false; + if self.cache.check_file_exists(filename) { chunk = self.cache.read_file(filename)?; } else { should_compile = true; } - self.lua.globals().set("Project", Project::default())?; - self.lua.globals().set("storage", self.storage.clone())?; - self.lua - .globals() - .set("filesystem", self.filesystem.clone())?; - self.lua.globals().set("tasks", self.task_manager.clone())?; - self.lua.globals().set("network", self.network.clone())?; - self.lua.globals().set("msvc", self.msvc.clone())?; - self.lua.globals().set("mingw", self.mingw.clone())?; - self.lua.globals().set("generic", self.generic.clone())?; + self.push_globals(&self.lua.globals())?; if should_compile { chunk = fs::read(filename)?; @@ -136,7 +113,7 @@ impl Runtime .set_optimization_level(2) .set_coverage_level(2); chunk = compiler.compile(chunk)?; - self.cache.write_file(filename, &chunk.clone())?; + self.cache.write_file(filename, chunk.clone())?; self.cache.set_value( filename, toml::Value::from(chunk.len().to_string()), @@ -150,13 +127,46 @@ impl Runtime Ok(()) } - pub fn get_tasks(&mut self) -> Vec { self.task_manager.get_tasks() } + fn push_globals( + &self, + globals: &Table, + ) -> anyhow::Result<()> { + globals.set( + "new_project", + self.lua.create_function( + |_, (name, language): (String, ProjectLanguage)| { + Ok(Project { + name, + language, + ..Default::default() + }) + }, + )?, + )?; + + + + globals.set("storage", self.storage.clone())?; + self.lua + .globals() + .set("filesystem", self.filesystem.clone())?; + globals.set("tasks", self.task_manager.clone())?; + globals.set("network", self.network.clone())?; + globals.set("msvc", self.msvc.clone())?; + globals.set("mingw", self.mingw.clone())?; + globals.set("generic", self.generic.clone())?; + + Ok(()) + } + + pub fn get_tasks(&mut self) -> Vec { + self.task_manager.get_tasks() + } pub fn execute_task( &mut self, task: &str, - ) -> anyhow::Result<()> - { + ) -> anyhow::Result<()> { self.task_manager.run(task) } } diff --git a/src/lib/runtime/network.rs b/src/lib/runtime/network.rs index 69ca721..52d6d02 100644 --- a/src/lib/runtime/network.rs +++ b/src/lib/runtime/network.rs @@ -39,56 +39,54 @@ impl Network { .to_str() .unwrap_or("ERROR") .to_string()) - } else { - if self.cache.check_file_exists(&url) { - let spinner = self.ui.create_spinner(format!( - "Archive found in cache. Extracting... [{}]", - &url - )); - ZipArchive::new(Cursor::new(self.cache.read_file(&url)?))? - .extract(self.cache.get_dir(&url)?)?; - self.ui.println("Done!", ok::Ok::default()); - spinner.finish(); + } else if self.cache.check_file_exists(&url) { + let spinner = self.ui.create_spinner(format!( + "Archive found in cache. Extracting... [{}]", + &url + )); + ZipArchive::new(Cursor::new(self.cache.read_file(&url)?))? + .extract(self.cache.get_dir(&url)?)?; + self.ui.println("Done!", ok::Ok::default()); + spinner.finish(); - Ok(self - .cache - .get_dir(&url)? - .to_str() - .unwrap_or("ERROR") - .to_string()) - } else { - let response = reqwest::blocking::get(&url)?; - let status = response.status(); - if status.is_success() { - let spinner = self - .ui - .create_spinner("Downloading & extracting archive..."); - self.ui.println( - format!( - "Server responded with {}! [{}]", - response.status(), - &url - ), - ok::Ok::default(), - ); - let path = self.cache.get_dir(&url)?; + Ok(self + .cache + .get_dir(&url)? + .to_str() + .unwrap_or("ERROR") + .to_string()) + } else { + let response = reqwest::blocking::get(&url)?; + let status = response.status(); + if status.is_success() { + let spinner = self + .ui + .create_spinner("Downloading & extracting archive..."); + self.ui.println( + format!( + "Server responded with {}! [{}]", + response.status(), + &url + ), + ok::Ok::default(), + ); + let path = self.cache.get_dir(&url)?; - let data = response.bytes()?; - self.cache.write_file(&url, data.clone())?; - ZipArchive::new(Cursor::new(data.clone()))? - .extract(&path)?; - spinner.finish_and_clear(); - self.ui.println( - format!("Done extracting! [{}]", url), - ok::Ok::default(), - ); + let data = response.bytes()?; + self.cache.write_file(&url, data.clone())?; + ZipArchive::new(Cursor::new(data.clone()))? + .extract(&path)?; + spinner.finish_and_clear(); + self.ui.println( + format!("Done extracting! [{}]", url), + ok::Ok::default(), + ); - Ok(path.to_str().unwrap().to_string()) - } else { - anyhow::bail!("Server responded with {}! [{}]", status, url) - } - } - } + Ok(path.to_str().unwrap().to_string()) + } else { + anyhow::bail!("Server responded with {}! [{}]", status, url) + } + } } } diff --git a/src/lib/runtime/task_manager.rs b/src/lib/runtime/task_manager.rs index 0cb7e9e..d9898c7 100644 --- a/src/lib/runtime/task_manager.rs +++ b/src/lib/runtime/task_manager.rs @@ -3,17 +3,18 @@ use anyhow::anyhow; use mlua::prelude::{LuaFunction, LuaResult, LuaValue}; use mlua::{FromLua, Lua, UserData, UserDataMethods, Value}; use std::collections::HashMap; +use std::rc::Rc; use std::sync::{Arc, Mutex}; #[derive(Clone)] pub struct TaskManager { - tasks: Arc>>, + tasks: Rc>>, } impl TaskManager { pub fn new() -> Self { TaskManager { - tasks: Arc::new(Mutex::new(HashMap::new())), + tasks: Rc::new(Mutex::new(HashMap::new())), } } diff --git a/src/lib/util/either.rs b/src/lib/util/either.rs new file mode 100644 index 0000000..788dc58 --- /dev/null +++ b/src/lib/util/either.rs @@ -0,0 +1,20 @@ +use std::error::Error; +use mlua::{FromLua, FromLuaMulti, IntoLuaMulti, Lua, Value}; + +#[derive(Debug, Eq, PartialEq, Clone)] +pub enum Either { + First(A), + Second(B) +} + +impl FromLua for Either { + fn from_lua(value: Value, lua: &Lua) -> mlua::Result { + match A::from_lua(value.clone(), lua) { + Ok(a) => Ok(Either::First(a)), + Err(e) => match B::from_lua(value, lua) { + Ok(b) => Ok(Either::Second(b)), + Err(e2) => Err(mlua::Error::runtime("Could not parse either value!")) + } + } + } +} \ No newline at end of file diff --git a/src/lib/util/mod.rs b/src/lib/util/mod.rs index f5de633..e40c02d 100644 --- a/src/lib/util/mod.rs +++ b/src/lib/util/mod.rs @@ -1,206 +1,190 @@ -use std::{ - collections::HashMap, - fs, - path::Path, - process::Command, -}; +use std::{collections::HashMap, fs, path::Path, process::Command}; use anyhow::anyhow; -use mlua::{ - Integer, - IntoLua, - Lua, -}; +use mlua::{Integer, IntoLua, Lua, Value}; +use crate::lib::data::flag_type::FlagType; +use crate::lib::util::either::Either; +use crate::lib::util::either::Either::{First, Second}; use sha256::digest; +pub mod build_cache; pub mod cache; +pub mod either; pub mod error; -pub mod build_cache; pub fn hash_string(val: &str) -> String { - let mut result = digest(val); - result.truncate(16); + let mut result = digest(val); + result.truncate(16); - result + result } // Horror pub fn into_lua_value( - lua: &Lua, - origin: &toml::Value, -) -> mlua::Result -{ - let mut dest: mlua::Value = mlua::Value::Nil; - if origin.is_bool() { - dest = mlua::Value::Boolean(origin.as_bool().unwrap()) - } else if origin.is_array() { - dest = origin - .as_array() - .unwrap() - .iter() - .map(|val| into_lua_value(lua, val).unwrap_or(mlua::Nil)) - .collect::>() - .into_lua(&lua)?; - } else if origin.is_table() { - dest = mlua::Value::Table(into_lua_table( - lua, - origin.as_table().unwrap(), - )?); - } else if origin.is_float() { - dest = mlua::Value::Number(origin.as_float().unwrap()); - } else if origin.is_str() { - dest = - mlua::Value::String(lua.create_string(origin.as_str().unwrap())?); - } else if origin.is_integer() { - dest = mlua::Value::Integer(origin.as_integer().unwrap() as Integer); - } else if origin.is_datetime() { - dest = mlua::Value::String( - lua.create_string(origin.as_datetime().unwrap().to_string())?, - ); - } - - Ok(dest) + lua: &Lua, + origin: &toml::Value, +) -> mlua::Result { + let mut dest: mlua::Value = mlua::Value::Nil; + if origin.is_bool() { + dest = mlua::Value::Boolean(origin.as_bool().unwrap()) + } else if origin.is_array() { + dest = origin + .as_array() + .unwrap() + .iter() + .map(|val| into_lua_value(lua, val).unwrap_or(mlua::Nil)) + .collect::>() + .into_lua(&lua)?; + } else if origin.is_table() { + dest = mlua::Value::Table(into_lua_table( + lua, + origin.as_table().unwrap(), + )?); + } else if origin.is_float() { + dest = mlua::Value::Number(origin.as_float().unwrap()); + } else if origin.is_str() { + dest = + mlua::Value::String(lua.create_string(origin.as_str().unwrap())?); + } else if origin.is_integer() { + dest = mlua::Value::Integer(origin.as_integer().unwrap() as Integer); + } else if origin.is_datetime() { + dest = mlua::Value::String( + lua.create_string(origin.as_datetime().unwrap().to_string())?, + ); + } + + Ok(dest) } pub fn into_lua_table( - lua: &Lua, - origin: &toml::Table, -) -> mlua::Result -{ - let dest: mlua::Table = lua.create_table()?; - for (key, val) in origin { - dest.set(key.clone(), into_lua_value(lua, val)?)?; - } - - Ok(dest) + lua: &Lua, + origin: &toml::Table, +) -> mlua::Result { + let dest: mlua::Table = lua.create_table()?; + for (key, val) in origin { + dest.set(key.clone(), into_lua_value(lua, val)?)?; + } + + Ok(dest) } -pub fn into_toml_value(origin: &mlua::Value) -> mlua::Result -{ - let mut dest = toml::Value::String("Nil".to_string()); - if origin.is_table() { - dest = toml::Value::Table(into_toml_table(origin.as_table().unwrap())?); - } else if origin.is_integer() { - dest = toml::Value::Integer(origin.as_i64().unwrap()); - } else if origin.is_boolean() { - dest = toml::Value::Boolean(origin.as_boolean().unwrap()); - } else if origin.is_number() { - dest = toml::Value::Float(origin.as_number().unwrap()); - } else if origin.is_string() { - dest = toml::Value::String(origin.as_str().unwrap().to_string()); - } - Ok(dest) +pub fn into_toml_value(origin: &mlua::Value) -> mlua::Result { + let mut dest = toml::Value::String("Nil".to_string()); + if origin.is_table() { + dest = toml::Value::Table(into_toml_table(origin.as_table().unwrap())?); + } else if origin.is_integer() { + dest = toml::Value::Integer(origin.as_i64().unwrap()); + } else if origin.is_boolean() { + dest = toml::Value::Boolean(origin.as_boolean().unwrap()); + } else if origin.is_number() { + dest = toml::Value::Float(origin.as_number().unwrap()); + } else if origin.is_string() { + dest = toml::Value::String(origin.as_str().unwrap().to_string()); + } + Ok(dest) } -pub fn into_toml_table(origin: &mlua::Table) -> mlua::Result -{ - let mut dest = toml::Table::new(); - // Love this - for pair in origin.clone().pairs::() { - let (key, val) = pair?; - dest.insert(key, into_toml_value(&val)?); - } - Ok(dest) +pub fn into_toml_table(origin: &mlua::Table) -> mlua::Result { + let mut dest = toml::Table::new(); + // Love this + for pair in origin.clone().pairs::() { + let (key, val) = pair?; + dest.insert(key, into_toml_value(&val)?); + } + Ok(dest) } -pub fn to_lua_result(val: anyhow::Result) -> mlua::Result -{ - if val.is_err() { - Err(mlua::Error::external(val.err().unwrap()))? - } else { - Ok(val.ok().unwrap()) - } +pub fn to_lua_result(val: anyhow::Result) -> mlua::Result { + if val.is_err() { + Err(mlua::Error::external(val.err().unwrap()))? + } else { + Ok(val.ok().unwrap()) + } } -pub fn download_vswhere>(path: &P) -> anyhow::Result<()> -{ - let response = reqwest::blocking::get("https://github.com/microsoft/vswhere/releases/latest/download/vswhere.exe")?; - if response.status().is_success() { - fs::write(path, response.bytes()?.as_ref())?; - Ok(()) - } else { - Err(anyhow!(response.status())) - } +pub fn download_vswhere>(path: &P) -> anyhow::Result<()> { + let response = reqwest::blocking::get("https://github.com/microsoft/vswhere/releases/latest/download/vswhere.exe")?; + if response.status().is_success() { + fs::write(path, response.bytes()?.as_ref())?; + Ok(()) + } else { + Err(anyhow!(response.status())) + } } -pub fn args_to_map(args: Vec) -> HashMap> -{ - let mut output: HashMap> = HashMap::new(); - - for arg in args { - let split_arg = arg - .split("=") - .map(|val| val.to_string()) - .collect::>(); - - if split_arg.len() == 2 { - output.insert(split_arg[0].clone(), Some(split_arg[1].clone())); - } else if split_arg.len() > 1 { - output.insert( - split_arg[0].clone(), - Some( - split_arg[1 ..] - .iter() - .map(|val| val.clone() + "=") - .collect::(), - ), - ); - } else { - output.insert(split_arg[0].clone(), None); - } - } - - output +pub fn args_to_map(args: Vec) -> HashMap> { + let mut output: HashMap> = HashMap::new(); + + for arg in args { + let split_arg = arg + .split("=") + .map(|val| val.to_string()) + .collect::>(); + + if split_arg.len() == 2 { + output.insert(split_arg[0].clone(), Some(split_arg[1].clone())); + } else if split_arg.len() > 1 { + output.insert( + split_arg[0].clone(), + Some( + split_arg[1..] + .iter() + .map(|val| val.clone() + "=") + .collect::(), + ), + ); + } else { + output.insert(split_arg[0].clone(), None); + } + } + + output } -pub fn get_gcc_includes(cmd: String) -> anyhow::Result> -{ - let result = Command::new(&cmd).args(["-E", "-v", "-"]).output(); - if result.is_ok() { - let mut return_vec: Vec = Vec::new(); - let mut output = - String::from_utf8_lossy(result.ok().unwrap().stderr.as_slice()) - .to_string(); - output = output - .split("#include <...> search starts here:") - .collect::>()[1] - .to_string(); - output = output.split("End of search list.").collect::>()[0] - .to_string(); - for line_r in output.lines() { - let mut line = line_r.to_string(); - if line.is_empty() { - continue; - } - - while line.starts_with(' ') { - line.replace_range(0..1, ""); - } - - line = line.replace(" /", "/"); - - if line.ends_with(" (framework directory)") { - // MacOS specific - return_vec.push( - dunce::canonicalize( - line.replace(" (framework directory)", "") - )? - .to_str() - .unwrap() - .to_string(), - ); - } else { - return_vec.push( - dunce::canonicalize(line)? - .to_str() - .unwrap() - .to_string(), - ); - } - } - Ok(return_vec) - } else { - Ok(Vec::default()) - } +pub fn get_gcc_includes(cmd: String) -> anyhow::Result> { + let result = Command::new(&cmd).args(["-E", "-v", "-"]).output(); + if result.is_ok() { + let mut return_vec: Vec = Vec::new(); + let mut output = + String::from_utf8_lossy(result.ok().unwrap().stderr.as_slice()) + .to_string(); + output = output + .split("#include <...> search starts here:") + .collect::>()[1] + .to_string(); + output = output.split("End of search list.").collect::>()[0] + .to_string(); + for line_r in output.lines() { + let mut line = line_r.to_string(); + if line.is_empty() { + continue; + } + + while line.starts_with(' ') { + line.replace_range(0..1, ""); + } + + line = line.replace(" /", "/"); + + if line.ends_with(" (framework directory)") { + // MacOS specific + return_vec.push( + dunce::canonicalize( + line.replace(" (framework directory)", ""), + )? + .to_str() + .unwrap() + .to_string(), + ); + } else { + return_vec.push( + dunce::canonicalize(line)?.to_str().unwrap().to_string(), + ); + } + } + Ok(return_vec) + } else { + Ok(Vec::default()) + } } From 089ee3d1c8cee46721ef9085975a9d94b0df36fe Mon Sep 17 00:00:00 2001 From: juicermv Date: Sat, 26 Jul 2025 22:38:17 +0300 Subject: [PATCH 2/2] Update project.rs --- src/lib/data/project.rs | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/src/lib/data/project.rs b/src/lib/data/project.rs index 9fa219c..1b9e497 100644 --- a/src/lib/data/project.rs +++ b/src/lib/data/project.rs @@ -124,8 +124,11 @@ impl UserData for Project { }, ); - methods.add_method_mut("include", |_, this, path: String| { - this.include_paths.push(path); + methods.add_method_mut("include", |_, this, value: Either>| { + match value { + Either::First(path) => this.include_paths.push(path), + Either::Second(paths) => this.include_paths.extend(paths), + } Ok(()) }); @@ -144,18 +147,21 @@ impl UserData for Project { }, ); - methods.add_method_mut("lib_path", |_, this, path: String| { - this.lib_paths.push(path); + methods.add_method_mut("lib_path", |_, this, value: Either>| { + match value { + Either::First(path) => this.lib_paths.push(path), + Either::Second(paths) => this.lib_paths.extend(paths), + } Ok(()) }); methods.add_method_mut( "define", - |_, this, (key, value): (String, Option)| { - this.defines.push(match value { - Some(v) => format!("{}={}", key, v), - None => key, - }); + |_, this, value: Either>| { + match value { + Either::First(str) => this.defines.push(str), + Either::Second(arr) => this.defines.extend(arr) + } Ok(()) }, );