diff --git a/codegenerator/Cargo.lock b/codegenerator/Cargo.lock index 8180187f1..65117179e 100644 --- a/codegenerator/Cargo.lock +++ b/codegenerator/Cargo.lock @@ -14,18 +14,18 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.22.0" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ "gimli", ] [[package]] -name = "adler" -version = "1.0.2" +name = "adler2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "aes" @@ -62,15 +62,15 @@ dependencies = [ [[package]] name = "allocator-api2" -version = "0.2.18" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" +checksum = "45862d1c77f2228b9e10bc609d5bc203d86ebc9b87ad8d5d5167a6c9abf739d9" [[package]] name = "anstream" -version = "0.6.14" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" dependencies = [ "anstyle", "anstyle-parse", @@ -83,49 +83,49 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.7" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" [[package]] name = "anstyle-parse" -version = "0.2.4" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.0" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad186efb764318d35165f1758e7dcef3b10628e26d41a44bc5550652e6804391" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.3" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" +checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" dependencies = [ "anstyle", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "anyhow" -version = "1.0.86" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" +checksum = "4c95c10ba0b00a02636238b814946408b1322d5ac4760326e6fb8ec956d85775" [[package]] name = "arrayvec" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "ascii" @@ -150,18 +150,18 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.87", ] [[package]] name = "async-trait" -version = "0.1.81" +version = "0.1.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" +checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.87", ] [[package]] @@ -192,28 +192,28 @@ checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.87", ] [[package]] name = "autocfg" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "backtrace" -version = "0.3.73" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", - "cc", "cfg-if", "libc", "miniz_oxide", "object", "rustc-demangle", + "windows-targets 0.52.6", ] [[package]] @@ -327,9 +327,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.6.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a12916984aab3fa6e39d655a33e09c0071eb36d6ab3aea5c2d78551f1df6d952" +checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" dependencies = [ "serde", ] @@ -357,9 +357,9 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.7" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0ec6b951b160caa93cc0c7b209e5a3bff7aae9062213451ac99493cd844c239" +checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" dependencies = [ "serde", ] @@ -389,12 +389,13 @@ dependencies = [ [[package]] name = "cc" -version = "1.1.6" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2aba8f4e9906c7ce3c73463f62a7f0c65183ada1a2d47e397cc8810827f9694f" +checksum = "fd9de9f2205d5ef3fd67e685b0df337994ddd4495e2a28d185500d0e1edfea47" dependencies = [ "jobserver", "libc", + "shlex", ] [[package]] @@ -424,9 +425,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.10" +version = "4.5.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f6b81fb3c84f5563d509c59b5a48d935f689e993afa90fe39047f05adef9142" +checksum = "fb3b4b9e5a7c7514dfa52869339ee98b3156b0bfb4e8a77c4ff4babb64b1604f" dependencies = [ "clap_builder", "clap_derive", @@ -443,9 +444,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.10" +version = "4.5.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca6706fd5224857d9ac5eb9355f6683563cc0541c7cd9d014043b57cbec78ac" +checksum = "b17a95aa67cc7b5ebd32aa5370189aa0d79069ef1c64ce893bd30fb24bff20ec" dependencies = [ "anstream", "anstyle", @@ -455,21 +456,21 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.8" +version = "4.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bac35c6dafb060fd4d275d9a4ffae97917c13a6327903a8be2153cd964f7085" +checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.87", ] [[package]] name = "clap_lex" -version = "0.7.1" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b82cf0babdbd58558212896d1a4272303a57bdb245c2bf1147185fb45640e70" +checksum = "afb84c814227b90d6895e01398aee0d8033c00e7466aca416fb6a8e0eb19d8a7" [[package]] name = "coins-bip32" @@ -525,9 +526,9 @@ dependencies = [ [[package]] name = "colorchoice" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" [[package]] name = "colored" @@ -552,26 +553,11 @@ dependencies = [ "unreachable", ] -[[package]] -name = "console" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3993e6445baa160675931ec041a5e03ca84b9c6e32a056150d3aa2bdda0a1f45" -dependencies = [ - "encode_unicode", - "lazy_static", - "libc", - "regex", - "terminal_size", - "unicode-width", - "winapi", -] - [[package]] name = "const-hex" -version = "1.12.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94fb8a24a26d37e1ffd45343323dc9fe6654ceea44c12f2fcb3d7ac29e610bc6" +checksum = "0121754e84117e65f9d90648ee6aa4882a6e63110307ab73967a4c5e7e69e586" dependencies = [ "cfg-if", "cpufeatures", @@ -613,15 +599,15 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.12" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +checksum = "0ca741a962e1b0bff6d724a1a0958b686406e853bb14061f218562e1896f95e6" dependencies = [ "libc", ] @@ -774,25 +760,22 @@ dependencies = [ [[package]] name = "derive_more" -version = "0.99.18" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" +checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.72", + "derive_more-impl", ] [[package]] -name = "dialoguer" -version = "0.8.0" +name = "derive_more-impl" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9dd058f8b65922819fabb4a41e7d1964e56344042c26efbccd465202c23fa0c" +checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" dependencies = [ - "console", - "lazy_static", - "tempfile", - "zeroize", + "proc-macro2", + "quote", + "syn 2.0.87", ] [[package]] @@ -855,17 +838,33 @@ dependencies = [ "winapi", ] +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + [[package]] name = "dotenvy" version = "0.15.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" +[[package]] +name = "dotenvy" +version = "0.15.7" +source = "git+https://github.com/enviodev/dotenvy?rev=e2da110668572cf2d67178f192eb1fc285224040#e2da110668572cf2d67178f192eb1fc285224040" + [[package]] name = "dunce" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] name = "dyn-clone" @@ -924,17 +923,11 @@ dependencies = [ "log", ] -[[package]] -name = "encode_unicode" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" - [[package]] name = "encoding_rs" -version = "0.8.34" +version = "0.8.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" dependencies = [ "cfg-if", ] @@ -967,7 +960,7 @@ dependencies = [ "clap-markdown", "colored", "convert_case", - "dialoguer", + "dotenvy 0.15.7 (git+https://github.com/enviodev/dotenvy?rev=e2da110668572cf2d67178f192eb1fc285224040)", "ethers", "fuel-abi-types", "graphql-parser", @@ -1160,7 +1153,7 @@ dependencies = [ "reqwest", "serde", "serde_json", - "syn 2.0.72", + "syn 2.0.87", "toml", "walkdir", ] @@ -1178,7 +1171,7 @@ dependencies = [ "proc-macro2", "quote", "serde_json", - "syn 2.0.72", + "syn 2.0.87", ] [[package]] @@ -1204,7 +1197,7 @@ dependencies = [ "serde", "serde_json", "strum", - "syn 2.0.72", + "syn 2.0.87", "tempfile", "thiserror", "tiny-keccak", @@ -1339,7 +1332,7 @@ dependencies = [ "tokio", "tracing", "walkdir", - "yansi", + "yansi 0.5.1", ] [[package]] @@ -1360,9 +1353,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" +checksum = "486f806e73c5707928240ddc295403b1b93c96a02038563881c4a2fd84b81ac4" [[package]] name = "ff" @@ -1394,9 +1387,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.30" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" +checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" dependencies = [ "crc32fast", "miniz_oxide", @@ -1404,9 +1397,9 @@ dependencies = [ [[package]] name = "flume" -version = "0.11.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" +checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" dependencies = [ "futures-core", "futures-sink", @@ -1472,7 +1465,7 @@ dependencies = [ "regex", "serde", "serde_json", - "syn 2.0.72", + "syn 2.0.87", "thiserror", ] @@ -1484,9 +1477,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" dependencies = [ "futures-channel", "futures-core", @@ -1499,9 +1492,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", "futures-sink", @@ -1509,15 +1502,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" dependencies = [ "futures-core", "futures-task", @@ -1537,9 +1530,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-locks" @@ -1553,26 +1546,26 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.87", ] [[package]] name = "futures-sink" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-timer" @@ -1586,9 +1579,9 @@ dependencies = [ [[package]] name = "futures-util" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-channel", "futures-core", @@ -1635,9 +1628,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.29.0" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "glob" @@ -1699,11 +1692,12 @@ dependencies = [ [[package]] name = "handlebars" -version = "6.0.0" +version = "6.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5226a0e122dc74917f3a701484482bed3ee86d016c7356836abbaa033133a157" +checksum = "fd4ccde012831f9a071a637b0d4e31df31c0f6c525784b35ae76a9ac6bc1e315" dependencies = [ "log", + "num-order", "pest", "pest_derive", "serde", @@ -1721,6 +1715,12 @@ dependencies = [ "allocator-api2", ] +[[package]] +name = "hashbrown" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a9bfc1af68b1726ea47d3d5109de126281def866b33970e10fbab11b5dafab3" + [[package]] name = "hashers" version = "1.0.1" @@ -1736,7 +1736,7 @@ version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" dependencies = [ - "hashbrown", + "hashbrown 0.14.5", ] [[package]] @@ -1817,9 +1817,9 @@ dependencies = [ [[package]] name = "httparse" -version = "1.9.4" +version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" +checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" [[package]] name = "httpdate" @@ -1829,9 +1829,9 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" -version = "0.14.30" +version = "0.14.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a152ddd61dfaec7273fe8419ab357f33aee0d914c5f4efbf0d96fa749eea5ec9" +checksum = "8c08302e8fa335b151b788c775ff56e7a03ae64ff85c548ee820fecb70356e85" dependencies = [ "bytes", "futures-channel", @@ -1878,14 +1878,143 @@ dependencies = [ "tokio-native-tls", ] +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + [[package]] name = "idna" -version = "0.5.0" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +dependencies = [ + "icu_normalizer", + "icu_properties", ] [[package]] @@ -1953,12 +2082,12 @@ checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" [[package]] name = "indexmap" -version = "2.2.6" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.15.1", ] [[package]] @@ -2009,9 +2138,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.9.0" +version = "2.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" [[package]] name = "is-docker" @@ -2034,9 +2163,9 @@ dependencies = [ [[package]] name = "is_terminal_polyfill" -version = "1.70.0" +version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" [[package]] name = "itertools" @@ -2073,9 +2202,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.69" +version = "0.3.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" dependencies = [ "wasm-bindgen", ] @@ -2096,9 +2225,9 @@ dependencies = [ [[package]] name = "k256" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" +checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" dependencies = [ "cfg-if", "ecdsa", @@ -2158,15 +2287,15 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.155" +version = "0.2.164" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +checksum = "433bfe06b8c75da9b2e3fbea6e5329ff87748f0b144ef75306e674c3f6f7c13f" [[package]] name = "libm" -version = "0.2.8" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" +checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" [[package]] name = "libredox" @@ -2195,6 +2324,12 @@ version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +[[package]] +name = "litemap" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "643cb0b8d4fcc284004d5fd0d67ccf61dfffadb7f75e1e71bc420f4688a3a704" + [[package]] name = "lock_api" version = "0.4.12" @@ -2241,11 +2376,11 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.4" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" dependencies = [ - "adler", + "adler2", ] [[package]] @@ -2262,9 +2397,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4569e456d394deccd22ce1c1913e6ea0e54519f577285001215d33557431afe4" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" dependencies = [ "hermit-abi", "libc", @@ -2377,6 +2512,21 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-modular" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17bb261bf36fa7d83f4c294f834e91256769097b3cb505d44831e0a179ac647f" + +[[package]] +name = "num-order" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "537b596b97c40fcf8056d153049eb22f481c17ebce72a513ec9286e4986d1bb6" +dependencies = [ + "num-modular", +] + [[package]] name = "num-traits" version = "0.2.19" @@ -2399,45 +2549,45 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845" +checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" dependencies = [ "num_enum_derive", ] [[package]] name = "num_enum_derive" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" +checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.87", ] [[package]] name = "object" -version = "0.36.2" +version = "0.36.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f203fa8daa7bb185f760ae12bd8e097f63d17041dcdcaf675ac54cdf863170e" +checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" dependencies = [ "memchr", ] [[package]] name = "once_cell" -version = "1.19.0" +version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "open" -version = "5.3.0" +version = "5.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61a877bf6abd716642a53ef1b89fb498923a4afca5c754f9050b4d081c05c4b3" +checksum = "3ecd52f0b8d15c40ce4820aa251ed5de032e5d91fab27f7db2f40d42a8bdf69c" dependencies = [ "is-wsl", "libc", @@ -2471,9 +2621,9 @@ dependencies = [ [[package]] name = "openssl" -version = "0.10.66" +version = "0.10.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" +checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" dependencies = [ "bitflags 2.6.0", "cfg-if", @@ -2492,7 +2642,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.87", ] [[package]] @@ -2503,18 +2653,18 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-src" -version = "300.3.1+3.3.1" +version = "300.4.1+3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7259953d42a81bf137fbbd73bd30a8e1914d6dce43c2b90ed575783a22608b91" +checksum = "faa4eac4138c62414b5622d1b31c5c304f34b406b013c079c2bbc652fdd6678c" dependencies = [ "cc", ] [[package]] name = "openssl-sys" -version = "0.9.103" +version = "0.9.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6" +checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" dependencies = [ "cc", "libc", @@ -2537,28 +2687,29 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "parity-scale-codec" -version = "3.6.12" +version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "306800abfa29c7f16596b5970a588435e3d5b3149683d00c12b699cc19f895ee" +checksum = "8be4817d39f3272f69c59fe05d0535ae6456c2dc2fa1ba02910296c7e0a5c590" dependencies = [ "arrayvec", "bitvec", "byte-slice-cast", "impl-trait-for-tuples", "parity-scale-codec-derive", + "rustversion", "serde", ] [[package]] name = "parity-scale-codec-derive" -version = "3.6.12" +version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" +checksum = "8781a75c6205af67215f382092b6e0a4ff3734798523e69073d4bcd294ec767b" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.87", ] [[package]] @@ -2579,7 +2730,7 @@ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.3", + "redox_syscall", "smallvec", "windows-targets 0.52.6", ] @@ -2609,9 +2760,9 @@ checksum = "1e91099d4268b0e11973f036e885d652fb0b21fedcf69738c627f94db6a44f42" [[package]] name = "pathdiff" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" +checksum = "d61c5ce1153ab5b689d0c074c4e7fc613e942dfb7dd9eea5ab202d2ad91fe361" [[package]] name = "pbkdf2" @@ -2661,9 +2812,9 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.7.11" +version = "2.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd53dff83f26735fdc1ca837098ccf133605d794cdae66acfc2bfac3ec809d95" +checksum = "879952a81a83930934cbf1786752d6dedc3b1f29e8f8fb2ad1d0a36f377cf442" dependencies = [ "memchr", "thiserror", @@ -2672,9 +2823,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.7.11" +version = "2.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a548d2beca6773b1c244554d36fcf8548a8a58e74156968211567250e48e49a" +checksum = "d214365f632b123a47fd913301e14c946c61d1c183ee245fa76eb752e59a02dd" dependencies = [ "pest", "pest_generator", @@ -2682,22 +2833,22 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.7.11" +version = "2.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c93a82e8d145725dcbaf44e5ea887c8a869efdcc28706df2d08c69e17077183" +checksum = "eb55586734301717aea2ac313f50b2eb8f60d2fc3dc01d190eefa2e625f60c4e" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.87", ] [[package]] name = "pest_meta" -version = "2.7.11" +version = "2.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a941429fea7e08bedec25e4f6785b6ffaacc6b755da98df5ef3e7dcf4a124c4f" +checksum = "b75da2a70cf4d9cb76833c990ac9cd3923c9a8905a8929789ce347c84564d03d" dependencies = [ "once_cell", "pest", @@ -2754,7 +2905,7 @@ dependencies = [ "phf_shared 0.11.2", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.87", ] [[package]] @@ -2777,29 +2928,29 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.1.5" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +checksum = "be57f64e946e500c8ee36ef6331845d40a93055567ec57e8fae13efd33759b95" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.5" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.87", ] [[package]] name = "pin-project-lite" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" +checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" [[package]] name = "pin-utils" @@ -2830,9 +2981,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] name = "powerfmt" @@ -2842,9 +2993,12 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.17" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] [[package]] name = "precomputed-hash" @@ -2854,22 +3008,22 @@ checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" [[package]] name = "pretty_assertions" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af7cee1a6c8a5b9208b3cb1061f10c0cb689087b3d8ce85fb9d2dd7a29b6ba66" +checksum = "3ae130e2f271fbc2ac3a40fb1d07180839cdbbe443c7a27e1e3c13c5cac0116d" dependencies = [ "diff", - "yansi", + "yansi 1.0.1", ] [[package]] name = "prettyplease" -version = "0.2.20" +version = "0.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" +checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033" dependencies = [ "proc-macro2", - "syn 2.0.72", + "syn 2.0.87", ] [[package]] @@ -2888,18 +3042,18 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "3.1.0" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" dependencies = [ - "toml_edit 0.21.1", + "toml_edit", ] [[package]] name = "proc-macro2" -version = "1.0.86" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" dependencies = [ "unicode-ident", ] @@ -2922,9 +3076,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.36" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ "proc-macro2", ] @@ -3033,27 +3187,18 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" -dependencies = [ - "bitflags 1.3.2", -] - -[[package]] -name = "redox_syscall" -version = "0.5.3" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" +checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" dependencies = [ "bitflags 2.6.0", ] [[package]] name = "redox_users" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ "getrandom", "libredox", @@ -3077,14 +3222,14 @@ checksum = "bcc303e793d3734489387d205e9b186fac9c6cfacedd98cbb2e8a5943595f3e6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.87", ] [[package]] name = "regex" -version = "1.10.5" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", @@ -3094,9 +3239,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.7" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", @@ -3105,9 +3250,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "remove_dir_all" @@ -3267,18 +3412,18 @@ checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" [[package]] name = "rustc_version" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ "semver", ] [[package]] name = "rustix" -version = "0.38.34" +version = "0.38.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +checksum = "d7f649912bc1495e167a6edee79151c84b1bad49748cb4f1f1167f459f6224f6" dependencies = [ "bitflags 2.6.0", "errno", @@ -3320,9 +3465,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" +checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" [[package]] name = "ryu" @@ -3350,9 +3495,9 @@ dependencies = [ [[package]] name = "scale-info" -version = "2.11.3" +version = "2.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eca070c12893629e2cc820a9761bedf6ce1dcddc9852984d1dc734b8bd9bd024" +checksum = "1aa7ffc1c0ef49b0452c6e2986abf2b07743320641ffd5fc63d552458e3b779b" dependencies = [ "cfg-if", "derive_more", @@ -3362,30 +3507,30 @@ dependencies = [ [[package]] name = "scale-info-derive" -version = "2.11.3" +version = "2.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d35494501194174bda522a32605929eefc9ecf7e0a326c26db1fdd85881eb62" +checksum = "46385cc24172cf615450267463f937c10072516359b3ff1cb24228a4a08bf951" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.87", ] [[package]] name = "schannel" -version = "0.1.23" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "schemars" -version = "1.0.0-alpha.2" +version = "1.0.0-alpha.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec9b1e7918a904d86cb6de7147ff4da21f12ac1462c8049e12b30a8846f4699e" +checksum = "1848710f31190edab07d4dfee50b89cb4429a789c4aa9aa07356fbe59c59af52" dependencies = [ "dyn-clone", "ref-cast", @@ -3396,14 +3541,14 @@ dependencies = [ [[package]] name = "schemars_derive" -version = "1.0.0-alpha.2" +version = "1.0.0-alpha.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2730d5d2dbaf504ab238832cad00b0bdd727436583c7b05f9328e65fee2b475" +checksum = "09196e95ccdbafef196a660dc9380e322a222c73341162b611f0a8f32cc02375" dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.72", + "syn 2.0.87", ] [[package]] @@ -3463,9 +3608,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.11.1" +version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf" +checksum = "fa39c7303dc58b5543c94d22c1766b0d31f2ee58306363ea622b10bbc075eaa2" dependencies = [ "core-foundation-sys", "libc", @@ -3494,22 +3639,22 @@ checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" [[package]] name = "serde" -version = "1.0.204" +version = "1.0.215" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc76f558e0cbb2a839d37354c575f1dc3fdc6546b5be373ba43d95f231bf7c12" +checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.204" +version = "1.0.215" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222" +checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.87", ] [[package]] @@ -3520,26 +3665,27 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.87", ] [[package]] name = "serde_json" -version = "1.0.120" +version = "1.0.133" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e0d21c9a8cae1235ad58a00c11cb40d4b1e5c784f1ef2c537876ed6ffd8b7c5" +checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377" dependencies = [ "indexmap", "itoa", + "memchr", "ryu", "serde", ] [[package]] name = "serde_spanned" -version = "0.6.6" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" dependencies = [ "serde", ] @@ -3610,6 +3756,12 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "signal-hook" version = "0.3.17" @@ -3622,9 +3774,9 @@ dependencies = [ [[package]] name = "signal-hook-mio" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af" +checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd" dependencies = [ "libc", "mio 0.8.11", @@ -3734,9 +3886,9 @@ dependencies = [ [[package]] name = "sqlformat" -version = "0.2.4" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f895e3734318cc55f1fe66258926c9b910c124d47520339efecbb6c59cec7c1f" +checksum = "7bba3a93db0cc4f7bdece8bb09e77e2e785c20bfebf79eb8340ed80708048790" dependencies = [ "nom", "unicode_categories", @@ -3816,7 +3968,7 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5833ef53aaa16d860e92123292f1f6a3d53c34ba8b1969f152ef1a7bb803f3c8" dependencies = [ - "dotenvy", + "dotenvy 0.15.7 (registry+https://github.com/rust-lang/crates.io-index)", "either", "heck 0.4.1", "hex", @@ -3849,7 +4001,7 @@ dependencies = [ "bytes", "crc", "digest", - "dotenvy", + "dotenvy 0.15.7 (registry+https://github.com/rust-lang/crates.io-index)", "either", "futures-channel", "futures-core", @@ -3889,7 +4041,7 @@ dependencies = [ "bitflags 2.6.0", "byteorder", "crc", - "dotenvy", + "dotenvy 0.15.7 (registry+https://github.com/rust-lang/crates.io-index)", "etcetera", "futures-channel", "futures-core", @@ -3939,6 +4091,12 @@ dependencies = [ "urlencoding", ] +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "static_assertions" version = "1.1.0" @@ -3994,7 +4152,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.72", + "syn 2.0.87", ] [[package]] @@ -4048,9 +4206,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.72" +version = "2.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc4b9b9bf2add8093d3f2c0204471e951b2285580335de42f9d2534f3ae7a8af" +checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" dependencies = [ "proc-macro2", "quote", @@ -4063,6 +4221,17 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + [[package]] name = "system-configuration" version = "0.5.1" @@ -4102,14 +4271,15 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.10.1" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +checksum = "28cce251fcbc87fac86a866eeb0d6c2d536fc16d06f184bb61aeae11aa4cee0c" dependencies = [ "cfg-if", "fastrand", + "once_cell", "rustix", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -4123,34 +4293,24 @@ dependencies = [ "winapi", ] -[[package]] -name = "terminal_size" -version = "0.1.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df" -dependencies = [ - "libc", - "winapi", -] - [[package]] name = "thiserror" -version = "1.0.63" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.63" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.87", ] [[package]] @@ -4203,6 +4363,16 @@ dependencies = [ "crunchy", ] +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + [[package]] name = "tinyvec" version = "1.8.0" @@ -4220,14 +4390,14 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.39.1" +version = "1.41.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d040ac2b29ab03b09d4129c2f5bbd012a3ac2f79d38ff506a4bf8dd34b0eac8a" +checksum = "22cfb5bee7a6a52939ca9224d6ac897bb669134078daa8735560897f69de4d33" dependencies = [ "backtrace", "bytes", "libc", - "mio 1.0.1", + "mio 1.0.2", "parking_lot", "pin-project-lite", "signal-hook-registry", @@ -4244,7 +4414,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.87", ] [[package]] @@ -4269,9 +4439,9 @@ dependencies = [ [[package]] name = "tokio-stream" -version = "0.1.15" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" +checksum = "4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1" dependencies = [ "futures-core", "pin-project-lite", @@ -4295,9 +4465,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.11" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" dependencies = [ "bytes", "futures-core", @@ -4308,54 +4478,43 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.15" +version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac2caab0bf757388c6c0ae23b3293fdb463fee59434529014f85e3263b995c28" +checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.22.16", + "toml_edit", ] [[package]] name = "toml_datetime" -version = "0.6.6" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" dependencies = [ "serde", ] [[package]] name = "toml_edit" -version = "0.21.1" +version = "0.22.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" -dependencies = [ - "indexmap", - "toml_datetime", - "winnow 0.5.40", -] - -[[package]] -name = "toml_edit" -version = "0.22.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "278f3d518e152219c994ce877758516bca5e118eaed6996192a774fb9fbf0788" +checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" dependencies = [ "indexmap", "serde", "serde_spanned", "toml_datetime", - "winnow 0.6.15", + "winnow", ] [[package]] name = "tower-service" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" @@ -4377,7 +4536,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.87", ] [[package]] @@ -4459,9 +4618,9 @@ checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "ucd-trie" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" [[package]] name = "uint" @@ -4483,48 +4642,48 @@ checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" [[package]] name = "unicode-bidi" -version = "0.3.15" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" +checksum = "5ab17db44d7388991a428b2ee655ce0c212e862eff1768a455c58f9aad6e7893" [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" [[package]] name = "unicode-normalization" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" +checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" dependencies = [ "tinyvec", ] [[package]] name = "unicode-properties" -version = "0.1.1" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4259d9d4425d9f0661581b804cb85fe66a4c631cadd8f490d1c13a35d5d9291" +checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" [[package]] name = "unicode-segmentation" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] name = "unicode-width" -version = "0.1.13" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" [[package]] name = "unicode-xid" -version = "0.2.4" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "unicode_categories" @@ -4561,9 +4720,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.2" +version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" +checksum = "8d157f1b96d14500ffdc1f10ba712e780825526c03d9a49b4d0324b0d9113ada" dependencies = [ "form_urlencoded", "idna", @@ -4582,6 +4741,18 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + [[package]] name = "utf8parse" version = "0.2.2" @@ -4612,9 +4783,9 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "void" @@ -4655,34 +4826,35 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" -version = "0.2.92" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" dependencies = [ "cfg-if", + "once_cell", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.92" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.87", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.42" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b" dependencies = [ "cfg-if", "js-sys", @@ -4692,9 +4864,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.92" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4702,28 +4874,28 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.92" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.87", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.92" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" [[package]] name = "web-sys" -version = "0.3.69" +version = "0.3.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" dependencies = [ "js-sys", "wasm-bindgen", @@ -4737,11 +4909,11 @@ checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" [[package]] name = "whoami" -version = "1.5.1" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44ab49fad634e88f55bf8f9bb3abd2f27d7204172a112c7c9987e01c1c94ea9" +checksum = "372d5b87f58ec45c384ba03563b03544dc5fadc3983e434b286913f5b4a9bb6d" dependencies = [ - "redox_syscall 0.4.1", + "redox_syscall", "wasite", ] @@ -4763,11 +4935,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -4794,6 +4966,15 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + [[package]] name = "windows-targets" version = "0.48.5" @@ -4917,18 +5098,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.5.40" +version = "0.6.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" -dependencies = [ - "memchr", -] - -[[package]] -name = "winnow" -version = "0.6.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "557404e450152cd6795bb558bca69e43c585055f4606e3bcae5894fc6dac9ba0" +checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" dependencies = [ "memchr", ] @@ -4943,6 +5115,18 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + [[package]] name = "ws_stream_wasm" version = "0.7.4" @@ -4977,12 +5161,43 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" +[[package]] +name = "yansi" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" + +[[package]] +name = "yoke" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c5b1314b079b0930c31e3af543d8ee1757b1951ae1e1565ec704403a7240ca5" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", + "synstructure", +] + [[package]] name = "zerocopy" version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ + "byteorder", "zerocopy-derive", ] @@ -4994,7 +5209,28 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.87", +] + +[[package]] +name = "zerofrom" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ec111ce797d0e0784a1116d0ddcdbea84322cd79e5d5ad173daeba4f93ab55" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", + "synstructure", ] [[package]] @@ -5003,6 +5239,28 @@ version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + [[package]] name = "zip" version = "0.6.6" @@ -5044,9 +5302,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.12+zstd.1.5.6" +version = "2.0.13+zstd.1.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a4e40c320c3cb459d9a9ff6de98cff88f4751ee9275d140e2be94a2b74e4c13" +checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" dependencies = [ "cc", "pkg-config", diff --git a/codegenerator/cli/Cargo.toml b/codegenerator/cli/Cargo.toml index 1374c1ed8..9a006a5cc 100644 --- a/codegenerator/cli/Cargo.toml +++ b/codegenerator/cli/Cargo.toml @@ -8,7 +8,6 @@ edition = "2021" [dependencies] clap = { version = "4.2.2", features = ["derive", "env"] } clap-markdown = { version = "0.1.0" } -dialoguer = "0.8" ethers = "2.0.14" graphql-parser = "0.4.0" handlebars = "6.0.0" @@ -44,9 +43,7 @@ thiserror = "1.0.50" fuel-abi-types = "0.7.0" schemars = { version = "1.0.0-alpha.2", features = ["preserve_order"] } convert_case = "0.6.0" -# TODO: replace ethers with alloy and foundry-block-explorers since these are actively maintained -# foundry-block-explorers = "0.5.1" -# alloy-chains = "0.1.23" +dotenvy = { git = "https://github.com/enviodev/dotenvy", rev = "e2da110668572cf2d67178f192eb1fc285224040" } [dev-dependencies] tempdir = "0.3" diff --git a/codegenerator/cli/src/config_parsing/chain_helpers.rs b/codegenerator/cli/src/config_parsing/chain_helpers.rs index 9abcbda3b..97fdc7af9 100644 --- a/codegenerator/cli/src/config_parsing/chain_helpers.rs +++ b/codegenerator/cli/src/config_parsing/chain_helpers.rs @@ -55,7 +55,7 @@ pub enum Network { #[subenum(HypersyncNetwork, GraphNetwork, NetworkWithExplorer)] Avalanche = 43114, - #[subenum(HypersyncNetwork, NetworkWithExplorer)] + #[subenum(NetworkWithExplorer)] B2Testnet = 1123, #[subenum(HypersyncNetwork, NetworkWithExplorer, GraphNetwork)] @@ -513,7 +513,7 @@ impl HypersyncNetwork { } SophonTestnet | MorphTestnet | GaladrielDevnet | CitreaTestnet | Goerli - | BscTestnet | B2Testnet | UnichainSepolia => Experimental, + | BscTestnet | UnichainSepolia => Experimental, } } diff --git a/codegenerator/cli/src/config_parsing/human_config.rs b/codegenerator/cli/src/config_parsing/human_config.rs index 6c4106b12..984066a81 100644 --- a/codegenerator/cli/src/config_parsing/human_config.rs +++ b/codegenerator/cli/src/config_parsing/human_config.rs @@ -1,7 +1,7 @@ use crate::utils::normalized_list::{NormalizedList, SingleOrList}; use schemars::{json_schema, JsonSchema, Schema, SchemaGenerator}; use serde::{Deserialize, Serialize}; -use std::borrow::Cow; +use std::{borrow::Cow, fmt::Display}; impl JsonSchema for SingleOrList { fn schema_name() -> Cow<'static, str> { @@ -93,6 +93,25 @@ pub struct ConfigDiscriminant { pub ecosystem: Option, } +#[derive(Debug)] +pub enum HumanConfig { + Evm(evm::HumanConfig), + Fuel(fuel::HumanConfig), +} + +impl Display for HumanConfig { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!( + f, + "{}", + match self { + HumanConfig::Evm(config) => config.to_string(), + HumanConfig::Fuel(config) => config.to_string(), + } + ) + } +} + pub mod evm { use super::{GlobalContract, NetworkContract, NetworkId}; use crate::utils::normalized_list::SingleOrList; diff --git a/codegenerator/cli/src/config_parsing/system_config.rs b/codegenerator/cli/src/config_parsing/system_config.rs index b33810ff2..f907d0816 100644 --- a/codegenerator/cli/src/config_parsing/system_config.rs +++ b/codegenerator/cli/src/config_parsing/system_config.rs @@ -8,6 +8,7 @@ use super::{ Network as EvmNetwork, }, fuel::{EventConfig as FuelEventConfig, HumanConfig as FuelConfig}, + HumanConfig, }, hypersync_endpoints, validation::{self, validate_names_valid_rescript}, @@ -21,6 +22,7 @@ use crate::{ utils::unique_hashmap, }; use anyhow::{anyhow, Context, Result}; +use dotenvy::{EnvLoader, EnvMap, EnvSequence}; use ethers::abi::{ethabi::Event as EthAbiEvent, EventExt, EventParam, HumanReadableParser}; use itertools::Itertools; use serde::{Deserialize, Serialize}; @@ -45,10 +47,327 @@ pub enum Ecosystem { Fuel, } +// Allows to get an env var with a lazy loading of .env file +#[derive(Debug)] +struct EnvState { + // Lazy loading of .env file + maybe_dotenv: Option, + project_root: PathBuf, +} + +impl EnvState { + fn new(project_root: &PathBuf) -> Self { + EnvState { + maybe_dotenv: None, + project_root: project_root.clone(), + } + } + + fn var(&mut self, name: &str) -> Option { + match std::env::var(name) { + Ok(val) => Some(val), + Err(_) => { + let result = match &self.maybe_dotenv { + Some(env_map) => env_map.var(name), + None => { + match EnvLoader::with_path(self.project_root.join(".env")) + .sequence(EnvSequence::InputOnly) + .load() + { + Ok(env_map) => { + self.maybe_dotenv = Some(env_map.clone()); + env_map.var(name) + } + Err(err) => { + match err { + dotenvy::Error::Io(_, _) => (), + _ => println!("Warning: Failed loading .env file with unexpected error: {err}"), + }; + self.maybe_dotenv = Some(EnvMap::new()); + Err(err) + } + } + } + }; + match result { + Ok(val) => Some(val), + Err(_) => None, + } + } + } + } +} + +mod interpolation { + use anyhow::{anyhow, Result}; + use regex::{Captures, Regex}; + + #[derive(PartialEq)] + enum InterpolationResult { + DirectSubstitution, + InvalidName, + DefaultForMissing(String), + DefaultForMissingAndEmpty(String), + } + + fn parse_capture(inner: &str) -> (String, InterpolationResult) { + let (name, result) = match (inner.find(":-"), inner.find('-')) { + (Some(pos1), Some(pos2)) if pos1 < pos2 => { + let name = &inner[..pos1]; + let default_value = inner[pos1 + 2..].to_string(); + ( + name, + InterpolationResult::DefaultForMissingAndEmpty(default_value), + ) + } + (_, Some(pos)) => { + let name = &inner[..pos]; + let default_value = inner[pos + 1..].to_string(); + (name, InterpolationResult::DefaultForMissing(default_value)) + } + (Some(pos), _) => { + let name = &inner[..pos]; + let default_value = inner[pos + 2..].to_string(); + ( + name, + InterpolationResult::DefaultForMissingAndEmpty(default_value), + ) + } + (None, None) => (inner, InterpolationResult::DirectSubstitution), + }; + + if name.is_empty() + || name.chars().next().map_or(false, |c| c.is_ascii_digit()) + || !name.chars().all(|c| match c { + 'a'..='z' | 'A'..='Z' | '0'..='9' | '_' => true, + _ => false, + }) + { + return (name.to_string(), InterpolationResult::InvalidName); + } + + (name.to_string(), result) + } + + pub fn interpolate_config_variables( + config_string: String, + mut get_env: impl FnMut(&str) -> Option, + ) -> Result { + let mut missing_vars = Vec::new(); + let mut invalid_vars = Vec::new(); + + // If we don't have `[^}]` and simpley use `.` in the regex, it will match the last `}` and the rest of the string until the last `}` + let re = Regex::new(r"\$\{([^}]*)\}").unwrap(); + let config_string = re.replace_all(&config_string, |caps: &Captures| { + let name = &caps[1]; + let (name, interpolation_result) = parse_capture(name); + if interpolation_result == InterpolationResult::InvalidName { + // Wrap invalid vars with quotes to make them more visible in the error message + // Don't need to do this for missing ones, because they won't have spaces in the name + invalid_vars.push(format!("\"{name}\"")); + return "".to_string(); + } + match (get_env(&name), interpolation_result) { + (Some(val), InterpolationResult::DefaultForMissingAndEmpty(default)) + if val == "" => + { + default + } + (Some(val), _) => val, + (None, InterpolationResult::DefaultForMissing(default)) + | (None, InterpolationResult::DefaultForMissingAndEmpty(default)) => default, + (None, _) => { + missing_vars.push(name.to_string()); + "".to_string() + } + } + }); + + if !invalid_vars.is_empty() { + return Err(anyhow!( + "Failed to interpolate variables into your config file. Invalid environment variables are present: {}", + invalid_vars.join(", ") + )); + } + + if !missing_vars.is_empty() { + return Err(anyhow!( + "Failed to interpolate variables into your config file. Environment variables are not present: {}", + missing_vars.join(", ") + )); + } + + Ok(config_string.to_string()) + } + + #[cfg(test)] + mod test { + use pretty_assertions::assert_eq; + + #[test] + fn test_interpolate_config_variables_with_single_capture() { + let config_string = r#" +networks: + - id: ${ENVIO_NETWORK_ID} + start_block: 0 +"#; + let interpolated_config_string = + super::interpolate_config_variables(config_string.to_string(), |name| match name { + "ENVIO_NETWORK_ID" => Some("0".to_string()), + _ => None, + }) + .unwrap(); + assert_eq!( + interpolated_config_string, + r#" +networks: + - id: 0 + start_block: 0 +"# + ); + } + + #[test] + fn test_interpolate_config_variables_with_multiple_captures() { + let config_string = r#" +networks: + - id: ${ENVIO_NETWORK_ID} + rpc_config: + url: ${ENVIO_ETH_RPC_URL}?api_key=${ENVIO_ETH_RPC_KEY} +"#; + let interpolated_config_string = + super::interpolate_config_variables(config_string.to_string(), |name| match name { + "ENVIO_NETWORK_ID" => Some("0".to_string()), + "ENVIO_ETH_RPC_URL" => Some("https://eth.com".to_string()), + "ENVIO_ETH_RPC_KEY" => Some("foo".to_string()), + _ => None, + }) + .unwrap(); + assert_eq!( + interpolated_config_string, + r#" +networks: + - id: 0 + rpc_config: + url: https://eth.com?api_key=foo +"# + ); + } + + #[test] + fn test_interpolate_config_variables_with_no_captures() { + let config_string = r#" +networks: + - id: 0 + start_block: 0 +"#; + let interpolated_config_string = + super::interpolate_config_variables(config_string.to_string(), |name| match name { + "ENVIO_NETWORK_ID" => Some("0".to_string()), + _ => None, + }) + .unwrap(); + assert_eq!( + interpolated_config_string, + r#" +networks: + - id: 0 + start_block: 0 +"# + ); + } + + #[test] + fn test_interpolate_config_variables_with_missing_env() { + let config_string = r#" +networks: + - id: ${ENVIO_NETWORK_ID} + rpc_config: + url: https://eth.com?api_key=${ENVIO_ETH_API_KEY} +"#; + let interpolated_config_string = + super::interpolate_config_variables(config_string.to_string(), |name| match name { + "ENVIO_NETWORK_ID" => Some("0".to_string()), + _ => None, + }) + .unwrap_err(); + assert_eq!( + interpolated_config_string.to_string(), + r#"Failed to interpolate variables into your config file. Environment variables are not present: ENVIO_ETH_API_KEY"# + ); + } + + #[test] + fn test_interpolate_config_variables_with_invalid_captures_and_missing_env() { + let config_string = r#" +networks: + - id: ${ENVIO_NETWORK_ID} + rpc_config: + url: ${My RPC URL}?api_key=${} +"#; + let interpolated_config_string = + super::interpolate_config_variables(config_string.to_string(), |name| match name { + "ENVIO_NETWORK_ID" => Some("0".to_string()), + _ => None, + }) + .unwrap_err(); + assert_eq!( + interpolated_config_string.to_string(), + r#"Failed to interpolate variables into your config file. Invalid environment variables are present: "My RPC URL", """# + ); + } + + #[test] + fn test_interpolate_config_variables_with_different_substituations() { + let config_string = r#" +DirectSubstitution with existing env: "${EXISTING_ENV}" +DefaultForMissing with existing env: "${EXISTING_ENV-default}" +DefaultForMissing with existing env and many dashes: "${EXISTING_ENV----:---}" +DefaultForMissing with missing env: "${MISSING_ENV-default}" +DefaultForMissing with missing env and many dashes: "${MISSING_ENV----:---}" +DefaultForMissing with missing env and empty default: "${MISSING_ENV-}" +DefaultForMissingAndEmpty with existing env: "${EXISTING_ENV:-default}" +DefaultForMissingAndEmpty with existing env and many dashes: "${EXISTING_ENV:----:---}" +DefaultForMissingAndEmpty with missing env: "${MISSING_ENV:-default}" +DefaultForMissingAndEmpty with missing env and many dashes: "${MISSING_ENV:----:---}" +DefaultForMissingAndEmpty with missing env and empty default: "${MISSING_ENV:-}" +DefaultForMissingAndEmpty with empty env: "${EMPTY_ENV:-default}" +DefaultForMissingAndEmpty with empty env and many dashes: "${EMPTY_ENV:----:---}" +DefaultForMissingAndEmpty with empty env and empty default: "${EMPTY_ENV:-}" +"#; + let interpolated_config_string = + super::interpolate_config_variables(config_string.to_string(), |name| match name { + "EXISTING_ENV" => Some("val".to_string()), + "EMPTY_ENV" => Some("".to_string()), + _ => None, + }) + .unwrap(); + assert_eq!( + interpolated_config_string, + r#" +DirectSubstitution with existing env: "val" +DefaultForMissing with existing env: "val" +DefaultForMissing with existing env and many dashes: "val" +DefaultForMissing with missing env: "default" +DefaultForMissing with missing env and many dashes: "---:---" +DefaultForMissing with missing env and empty default: "" +DefaultForMissingAndEmpty with existing env: "val" +DefaultForMissingAndEmpty with existing env and many dashes: "val" +DefaultForMissingAndEmpty with missing env: "default" +DefaultForMissingAndEmpty with missing env and many dashes: "---:---" +DefaultForMissingAndEmpty with missing env and empty default: "" +DefaultForMissingAndEmpty with empty env: "default" +DefaultForMissingAndEmpty with empty env and many dashes: "---:---" +DefaultForMissingAndEmpty with empty env and empty default: "" +"# + ); + } + } +} + #[derive(Debug)] pub struct SystemConfig { pub name: String, - pub ecosystem: Ecosystem, pub schema_path: String, pub parsed_project_paths: ParsedProjectPaths, pub networks: NetworkMap, @@ -59,6 +378,7 @@ pub struct SystemConfig { pub schema: Schema, pub field_selection: FieldSelection, pub enable_raw_events: bool, + pub human_config: HumanConfig, } //Getter methods for system config @@ -69,6 +389,13 @@ impl SystemConfig { contracts } + pub fn get_ecosystem(&self) -> Ecosystem { + match &self.human_config { + HumanConfig::Evm(_) => Ecosystem::Evm, + HumanConfig::Fuel(_) => Ecosystem::Fuel, + } + } + pub fn get_contract(&self, name: &ContractNameKey) -> Option<&Contract> { self.contracts.get(name) } @@ -161,290 +488,292 @@ impl SystemConfig { filtered_unique_abi_files.sort(); Ok(filtered_unique_abi_files) } -} -//Parse methods for system config -impl SystemConfig { - pub fn from_evm_config( - evm_config: EvmConfig, + pub fn from_human_config( + human_config: HumanConfig, schema: Schema, project_paths: &ParsedProjectPaths, ) -> Result { - // TODO: Add similar validation for Fuel - validation::validate_deserialized_config_yaml(&evm_config)?; - let mut networks: NetworkMap = HashMap::new(); let mut contracts: ContractMap = HashMap::new(); - //Add all global contracts - if let Some(global_contracts) = evm_config.contracts { - for g_contract in global_contracts { - let (events, evm_abi) = Event::from_evm_events_config( - g_contract.config.events, - &g_contract.config.abi_file_path, - &project_paths, - ) - .context(format!( - "Failed parsing abi types for events in global contract {}", - g_contract.name, - ))?; - - let contract = Contract::new( - g_contract.name.clone(), - g_contract.config.handler.clone(), - events, - Abi::Evm(evm_abi), - ) - .context("Failed parsing globally defined contract")?; - - //Check if contract exists - unique_hashmap::try_insert(&mut contracts, contract.name.clone(), contract) - .context("Failed inserting globally defined contract")?; - } - } + match human_config { + HumanConfig::Evm(ref evm_config) => { + // TODO: Add similar validation for Fuel + validation::validate_deserialized_config_yaml(&evm_config)?; - for network in evm_config.networks { - for contract in network.contracts.clone() { - //Add values for local contract - match contract.config { - Some(l_contract) => { + //Add all global contracts + if let Some(global_contracts) = &evm_config.contracts { + for g_contract in global_contracts { let (events, evm_abi) = Event::from_evm_events_config( - l_contract.events, - &l_contract.abi_file_path, + g_contract.config.events.clone(), + &g_contract.config.abi_file_path, &project_paths, ) .context(format!( - "Failed parsing abi types for events in contract {} on network {}", - contract.name, network.id, + "Failed parsing abi types for events in global contract {}", + g_contract.name, ))?; let contract = Contract::new( - contract.name, - l_contract.handler, + g_contract.name.clone(), + g_contract.config.handler.clone(), events, Abi::Evm(evm_abi), ) - .context(format!( + .context("Failed parsing globally defined contract")?; + + //Check if contract exists + unique_hashmap::try_insert(&mut contracts, contract.name.clone(), contract) + .context("Failed inserting globally defined contract")?; + } + } + + for network in &evm_config.networks { + for contract in network.contracts.clone() { + //Add values for local contract + match contract.config { + Some(l_contract) => { + let (events, evm_abi) = Event::from_evm_events_config( + l_contract.events, + &l_contract.abi_file_path, + &project_paths, + ) + .context(format!( + "Failed parsing abi types for events in contract {} on network {}", + contract.name, network.id, + ))?; + + let contract = Contract::new( + contract.name, + l_contract.handler, + events, + Abi::Evm(evm_abi), + ) + .context(format!( "Failed parsing locally defined network contract at network id {}", network.id ))?; - //Check if contract exists - unique_hashmap::try_insert(&mut contracts, contract.name.clone(), contract) - .context(format!( + //Check if contract exists + unique_hashmap::try_insert( + &mut contracts, + contract.name.clone(), + contract, + ) + .context(format!( "Failed inserting locally defined network contract at network id \ {}", network.id, ))?; - } - None => { - //Validate that there is a global contract for the given contract if - //there is no config - if !contracts.get(&contract.name).is_some() { - Err(anyhow!( + } + None => { + //Validate that there is a global contract for the given contract if + //there is no config + if !contracts.get(&contract.name).is_some() { + Err(anyhow!( "Failed to parse contract '{}' for the network '{}'. If you use a \ global contract definition, please verify that the name \ reference is correct.", contract.name, network.id ))?; + } + } } } - } - } - - let sync_source = SyncSource::from_evm_network_config( - network.clone(), - evm_config.event_decoder.clone(), - )?; - - let contracts: Vec = network - .contracts - .iter() - .cloned() - .map(|c| NetworkContract { - name: c.name, - addresses: c.address.into(), - }) - .collect(); - - let network = Network { - id: network.id, - confirmed_block_threshold: network - .confirmed_block_threshold - .unwrap_or(get_confirmed_block_threshold_from_id(network.id)), - start_block: network.start_block, - end_block: network.end_block, - sync_source, - contracts, - }; - unique_hashmap::try_insert(&mut networks, network.id.clone(), network) - .context("Failed inserting network at networks map")?; - } - - let field_selection = FieldSelection::try_from_config_field_selection( - evm_config - .field_selection - .unwrap_or(human_config::evm::FieldSelection { - transaction_fields: None, - block_fields: None, - }), - &networks, - )?; - - Ok(SystemConfig { - name: evm_config.name.clone(), - ecosystem: Ecosystem::Evm, - parsed_project_paths: project_paths.clone(), - schema_path: evm_config - .schema - .clone() - .unwrap_or_else(|| DEFAULT_SCHEMA_PATH.to_string()), - networks, - contracts, - unordered_multichain_mode: evm_config.unordered_multichain_mode.unwrap_or(false), - rollback_on_reorg: evm_config.rollback_on_reorg.unwrap_or(true), - save_full_history: evm_config.save_full_history.unwrap_or(false), - schema, - field_selection, - enable_raw_events: evm_config.raw_events.unwrap_or(false), - }) - } + let sync_source = SyncSource::from_evm_network_config( + network.clone(), + evm_config.event_decoder.clone(), + )?; + + let contracts: Vec = network + .contracts + .iter() + .cloned() + .map(|c| NetworkContract { + name: c.name, + addresses: c.address.into(), + }) + .collect(); + + let network = Network { + id: network.id, + confirmed_block_threshold: network + .confirmed_block_threshold + .unwrap_or(get_confirmed_block_threshold_from_id(network.id)), + start_block: network.start_block, + end_block: network.end_block, + sync_source, + contracts, + }; - pub fn from_fuel_config( - fuel_config: FuelConfig, - schema: Schema, - project_paths: &ParsedProjectPaths, - ) -> Result { - let mut networks: NetworkMap = HashMap::new(); - let mut contracts: ContractMap = HashMap::new(); + unique_hashmap::try_insert(&mut networks, network.id.clone(), network) + .context("Failed inserting network at networks map")?; + } - //Add all global contracts - if let Some(global_contracts) = &fuel_config.contracts { - for g_contract in global_contracts { - let (events, fuel_abi) = Event::from_fuel_events_config( - &g_contract.config.events, - &g_contract.config.abi_file_path, - &project_paths, - ) - .context(format!( - "Failed parsing abi types for events in global contract {}", - g_contract.name, - ))?; - - let contract = Contract::new( - g_contract.name.clone(), - g_contract.config.handler.clone(), - events, - Abi::Fuel(fuel_abi), + let field_selection = FieldSelection::try_from_config_field_selection( + evm_config.field_selection.clone().unwrap_or( + human_config::evm::FieldSelection { + transaction_fields: None, + block_fields: None, + }, + ), + &networks, )?; - //Check if contract exists - unique_hashmap::try_insert(&mut contracts, contract.name.clone(), contract) - .context("Failed inserting globally defined contract")?; + Ok(SystemConfig { + name: evm_config.name.clone(), + parsed_project_paths: project_paths.clone(), + schema_path: evm_config + .schema + .clone() + .unwrap_or_else(|| DEFAULT_SCHEMA_PATH.to_string()), + networks, + contracts, + unordered_multichain_mode: evm_config + .unordered_multichain_mode + .unwrap_or(false), + rollback_on_reorg: evm_config.rollback_on_reorg.unwrap_or(true), + save_full_history: evm_config.save_full_history.unwrap_or(false), + schema, + field_selection, + enable_raw_events: evm_config.raw_events.unwrap_or(false), + human_config, + }) } - } - - for network in &fuel_config.networks { - for contract in network.contracts.clone() { - //Add values for local contract - match contract.config { - Some(l_contract) => { + HumanConfig::Fuel(ref fuel_config) => { + //Add all global contracts + if let Some(global_contracts) = &fuel_config.contracts { + for g_contract in global_contracts { let (events, fuel_abi) = Event::from_fuel_events_config( - &l_contract.events, - &l_contract.abi_file_path, + &g_contract.config.events, + &g_contract.config.abi_file_path, &project_paths, ) .context(format!( - "Failed parsing abi types for events in contract {} on network {}", - contract.name, network.id, + "Failed parsing abi types for events in global contract {}", + g_contract.name, ))?; let contract = Contract::new( - contract.name.clone(), - l_contract.handler, + g_contract.name.clone(), + g_contract.config.handler.clone(), events, Abi::Fuel(fuel_abi), )?; //Check if contract exists unique_hashmap::try_insert(&mut contracts, contract.name.clone(), contract) - .context(format!( - "Failed inserting locally defined network contract at network id \ - {}", - network.id, - ))?; - } - None => { - //Validate that there is a global contract for the given contract if - //there is no local_contract_config - if !contracts.get(&contract.name).is_some() { - Err(anyhow!( - "Failed to parse contract '{}' for the network '{}'. If you use a \ - global contract definition, please verify that the name \ - reference is correct.", - contract.name, - network.id - ))?; - } + .context("Failed inserting globally defined contract")?; } } - } - let sync_source = SyncSource::HyperfuelConfig(HyperfuelConfig { - endpoint_url: match &network.hyperfuel_config { - Some(config) => config.url.clone(), - None => match network.id { - 0 => "https://fuel-testnet.hypersync.xyz".to_string(), - 9889 => "https://fuel.hypersync.xyz".to_string(), - _ => { - return Err(anyhow!("Fuel network id {} is not supported", network.id)) + for network in &fuel_config.networks { + for contract in network.contracts.clone() { + //Add values for local contract + match contract.config { + Some(l_contract) => { + let (events, fuel_abi) = Event::from_fuel_events_config( + &l_contract.events, + &l_contract.abi_file_path, + &project_paths, + ) + .context(format!( + "Failed parsing abi types for events in contract {} on network {}", + contract.name, network.id, + ))?; + + let contract = Contract::new( + contract.name.clone(), + l_contract.handler, + events, + Abi::Fuel(fuel_abi), + )?; + + //Check if contract exists + unique_hashmap::try_insert(&mut contracts, contract.name.clone(), contract) + .context(format!( + "Failed inserting locally defined network contract at network id \ + {}", + network.id, + ))?; + } + None => { + //Validate that there is a global contract for the given contract if + //there is no local_contract_config + if !contracts.get(&contract.name).is_some() { + Err(anyhow!( + "Failed to parse contract '{}' for the network '{}'. If you use a \ + global contract definition, please verify that the name \ + reference is correct.", + contract.name, + network.id + ))?; + } + } } - }, - }, - }); + } - let contracts: Vec = network - .contracts - .iter() - .cloned() - .map(|c| NetworkContract { - name: c.name, - addresses: c.address.into(), - }) - .collect(); + let sync_source = SyncSource::HyperfuelConfig(HyperfuelConfig { + endpoint_url: match &network.hyperfuel_config { + Some(config) => config.url.clone(), + None => match network.id { + 0 => "https://fuel-testnet.hypersync.xyz".to_string(), + 9889 => "https://fuel.hypersync.xyz".to_string(), + _ => { + return Err(anyhow!( + "Fuel network id {} is not supported", + network.id + )) + } + }, + }, + }); + + let contracts: Vec = network + .contracts + .iter() + .cloned() + .map(|c| NetworkContract { + name: c.name, + addresses: c.address.into(), + }) + .collect(); + + let network = Network { + id: network.id as u64, + start_block: network.start_block, + end_block: network.end_block, + confirmed_block_threshold: 0, + sync_source, + contracts, + }; - let network = Network { - id: network.id as u64, - start_block: network.start_block, - end_block: network.end_block, - confirmed_block_threshold: 0, - sync_source, - contracts, - }; + unique_hashmap::try_insert(&mut networks, network.id.clone(), network) + .context("Failed inserting network at networks map")?; + } - unique_hashmap::try_insert(&mut networks, network.id.clone(), network) - .context("Failed inserting network at networks map")?; + Ok(SystemConfig { + name: fuel_config.name.clone(), + parsed_project_paths: project_paths.clone(), + schema_path: fuel_config + .schema + .clone() + .unwrap_or_else(|| DEFAULT_SCHEMA_PATH.to_string()), + networks, + contracts, + unordered_multichain_mode: false, + rollback_on_reorg: false, + save_full_history: false, + schema, + field_selection: FieldSelection::fuel(), + enable_raw_events: fuel_config.raw_events.unwrap_or(false), + human_config, + }) + } } - - Ok(SystemConfig { - name: fuel_config.name.clone(), - ecosystem: Ecosystem::Fuel, - parsed_project_paths: project_paths.clone(), - schema_path: fuel_config - .schema - .clone() - .unwrap_or_else(|| DEFAULT_SCHEMA_PATH.to_string()), - networks, - contracts, - unordered_multichain_mode: false, - rollback_on_reorg: false, - save_full_history: false, - schema, - field_selection: FieldSelection::fuel(), - enable_raw_events: fuel_config.raw_events.unwrap_or(false), - }) } pub fn parse_from_project_files(project_paths: &ParsedProjectPaths) -> Result { @@ -455,6 +784,12 @@ impl SystemConfig { &project_paths.config.to_str().unwrap_or("{unknown}"), ))?; + let mut env_state = EnvState::new(&project_paths.project_root); + let human_config_string = + interpolation::interpolate_config_variables(human_config_string, |name| { + env_state.var(name) + })?; + let config_discriminant: human_config::ConfigDiscriminant = serde_yaml::from_str(&human_config_string).context( "EE105: Failed to deserialize config. The config.yaml file is either not a valid \ @@ -483,7 +818,7 @@ impl SystemConfig { ))?; let schema = Schema::parse_from_file(&project_paths, &evm_config.schema) .context("Parsing schema file for config")?; - Self::from_evm_config(evm_config, schema, project_paths) + Self::from_human_config(HumanConfig::Evm(evm_config), schema, project_paths) } Ecosystem::Fuel => { let fuel_config: FuelConfig = @@ -494,7 +829,7 @@ impl SystemConfig { ))?; let schema = Schema::parse_from_file(&project_paths, &fuel_config.schema) .context("Parsing schema file for config")?; - Self::from_fuel_config(fuel_config, schema, project_paths) + Self::from_human_config(HumanConfig::Fuel(fuel_config), schema, project_paths) } } } @@ -1282,6 +1617,7 @@ mod test { }; use ethers::abi::{Event as EthAbiEvent, EventParam, ParamType}; use handlebars::Handlebars; + use pretty_assertions::assert_eq; use serde_json::json; #[test] diff --git a/codegenerator/cli/src/executor/init.rs b/codegenerator/cli/src/executor/init.rs index 9365ffddc..cffe21cd5 100644 --- a/codegenerator/cli/src/executor/init.rs +++ b/codegenerator/cli/src/executor/init.rs @@ -7,7 +7,7 @@ use crate::{ commands, config_parsing::{ entity_parsing::Schema, graph_migration::generate_config_from_subgraph_id, - system_config::SystemConfig, + human_config::HumanConfig, system_config::SystemConfig, }, hbs_templating::{ contract_import_templates, hbs_dir_generator::HandleBarsDirGenerator, @@ -94,9 +94,12 @@ pub async fn run_init_args(init_args: InitArgs, project_paths: &ProjectPaths) -> .await .context("Failed generating config from subgraph")?; - let system_config = - SystemConfig::from_evm_config(evm_config, Schema::empty(), &parsed_project_paths) - .context("Failed parsing config")?; + let system_config = SystemConfig::from_human_config( + HumanConfig::Evm(evm_config), + Schema::empty(), + &parsed_project_paths, + ) + .context("Failed parsing config")?; let auto_schema_handler_template = contract_import_templates::AutoSchemaHandlerTemplate::try_from( @@ -143,9 +146,12 @@ pub async fn run_init_args(init_args: InitArgs, project_paths: &ProjectPaths) -> //Use an empty schema config to generate auto_schema_handler_template //After it's been generated, the schema exists and codegen can parse it/use it - let system_config = - SystemConfig::from_fuel_config(fuel_config, Schema::empty(), &parsed_project_paths) - .context("Failed parsing config")?; + let system_config = SystemConfig::from_human_config( + HumanConfig::Fuel(fuel_config), + Schema::empty(), + &parsed_project_paths, + ) + .context("Failed parsing config")?; let auto_schema_handler_template = contract_import_templates::AutoSchemaHandlerTemplate::try_from( @@ -193,9 +199,12 @@ pub async fn run_init_args(init_args: InitArgs, project_paths: &ProjectPaths) -> //Use an empty schema config to generate auto_schema_handler_template //After it's been generated, the schema exists and codegen can parse it/use it - let system_config = - SystemConfig::from_evm_config(evm_config, Schema::empty(), &parsed_project_paths) - .context("Failed parsing config")?; + let system_config = SystemConfig::from_human_config( + HumanConfig::Evm(evm_config), + Schema::empty(), + &parsed_project_paths, + ) + .context("Failed parsing config")?; let auto_schema_handler_template = contract_import_templates::AutoSchemaHandlerTemplate::try_from( diff --git a/codegenerator/cli/src/hbs_templating/codegen_templates.rs b/codegenerator/cli/src/hbs_templating/codegen_templates.rs index b040de78e..e5dd541cd 100644 --- a/codegenerator/cli/src/hbs_templating/codegen_templates.rs +++ b/codegenerator/cli/src/hbs_templating/codegen_templates.rs @@ -1036,8 +1036,8 @@ impl ProjectTemplate { enable_raw_events: cfg.enable_raw_events, has_multiple_events, field_selection, - is_evm_ecosystem: cfg.ecosystem == Ecosystem::Evm, - is_fuel_ecosystem: cfg.ecosystem == Ecosystem::Fuel, + is_evm_ecosystem: cfg.get_ecosystem() == Ecosystem::Evm, + is_fuel_ecosystem: cfg.get_ecosystem() == Ecosystem::Fuel, //Used for the package.json reference to handlers in generated relative_path_to_root_from_generated, }) diff --git a/codegenerator/cli/src/hbs_templating/contract_import_templates.rs b/codegenerator/cli/src/hbs_templating/contract_import_templates.rs index aed1af96d..072f33d6e 100644 --- a/codegenerator/cli/src/hbs_templating/contract_import_templates.rs +++ b/codegenerator/cli/src/hbs_templating/contract_import_templates.rs @@ -381,7 +381,7 @@ impl AutoSchemaHandlerTemplate { .map(|contract| { Contract::from_config_contract( contract, - config.ecosystem == Ecosystem::Fuel, + config.get_ecosystem() == Ecosystem::Fuel, &language, ) }) diff --git a/codegenerator/cli/src/persisted_state/db.rs b/codegenerator/cli/src/persisted_state/db.rs index f3f9b656b..e9d409fa3 100644 --- a/codegenerator/cli/src/persisted_state/db.rs +++ b/codegenerator/cli/src/persisted_state/db.rs @@ -24,38 +24,32 @@ impl PersistedState { self.upsert_to_db_with_pool(&pool).await } - pub async fn upsert_to_db_with_pool( - &self, - pool: &PgPool, - ) -> Result { + async fn upsert_to_db_with_pool(&self, pool: &PgPool) -> Result { sqlx::query( - "INSERT INTO public.persisted_state ( - id, - envio_version, - config_hash, - schema_hash, - handler_files_hash, - abi_files_hash - ) VALUES ( - $1, - $2, - $3, - $4, - $5, - $6 - ) ON CONFLICT (id) DO UPDATE SET ( - envio_version, - config_hash, - schema_hash, - handler_files_hash, - abi_files_hash - ) = ( - $2, - $3, - $4, - $5, - $6 - )", + r#" + INSERT INTO public.persisted_state ( + id, + envio_version, + config_hash, + schema_hash, + handler_files_hash, + abi_files_hash + ) VALUES ( + $1, + $2, + $3, + $4, + $5, + $6 + ) + ON CONFLICT (id) DO UPDATE + SET + envio_version = EXCLUDED.envio_version, + config_hash = EXCLUDED.config_hash, + schema_hash = EXCLUDED.schema_hash, + handler_files_hash = EXCLUDED.handler_files_hash, + abi_files_hash = EXCLUDED.abi_files_hash + "#, ) .bind(1) //Always only 1 id to update .bind(&self.envio_version) diff --git a/codegenerator/cli/src/persisted_state/hash_string.rs b/codegenerator/cli/src/persisted_state/hash_string.rs index 0cc92138b..309f80a14 100644 --- a/codegenerator/cli/src/persisted_state/hash_string.rs +++ b/codegenerator/cli/src/persisted_state/hash_string.rs @@ -50,6 +50,13 @@ impl HashString { Self::from_file_paths(vec![file_path], true) } + pub fn from_string(string: String) -> Self { + let mut hasher = Sha256::new(); + hasher.update(string); + let hash = hasher.finalize().to_vec(); + HashString(format!("{:?}", hash)) + } + #[cfg(test)] fn inner(&self) -> String { self.0.clone() diff --git a/codegenerator/cli/src/persisted_state/mod.rs b/codegenerator/cli/src/persisted_state/mod.rs index 14757caf7..69a1c7b5f 100644 --- a/codegenerator/cli/src/persisted_state/mod.rs +++ b/codegenerator/cli/src/persisted_state/mod.rs @@ -86,8 +86,7 @@ impl PersistedState { Ok(PersistedState { envio_version: CURRENT_CRATE_VERSION.to_string(), - config_hash: HashString::from_file_path(config.parsed_project_paths.config.clone()) - .context("Failed hashing config file")?, + config_hash: HashString::from_string(config.human_config.to_string()), schema_hash: HashString::from_file_path(schema_path.clone()) .context("Failed hashing schema file")?, handler_files_hash: HashString::from_file_paths( @@ -205,7 +204,7 @@ mod test { "config_hash": "", "schema_hash": "", "handler_files_hash": "", - "abi_files_hash": "" + "abi_files_hash": "", })) .unwrap(); @@ -214,7 +213,7 @@ mod test { "config_hash": "", "schema_hash": "", "handler_files_hash": "", - "abi_files_hash": "" + "abi_files_hash": "", })) .unwrap(); @@ -234,7 +233,7 @@ mod test { "config_hash": "", "schema_hash": "", "handler_files_hash": "", - "abi_files_hash": "" + "abi_files_hash": "", })) .unwrap(); @@ -243,7 +242,7 @@ mod test { "config_hash": "", "schema_hash": "", "handler_files_hash": "", - "abi_files_hash": "" + "abi_files_hash": "", })) .unwrap(); @@ -263,7 +262,7 @@ mod test { "config_hash": "", "schema_hash": "", "handler_files_hash": "", - "abi_files_hash": "" + "abi_files_hash": "", })) .unwrap(); @@ -272,7 +271,7 @@ mod test { "config_hash": "", "schema_hash": "", "handler_files_hash": "", - "abi_files_hash": "" + "abi_files_hash": "", })) .unwrap(); @@ -300,7 +299,7 @@ mod test { "config_hash": "", "schema_hash": "", "handler_files_hash": "", - "abi_files_hash": "" + "abi_files_hash": "", })) .unwrap(); @@ -309,7 +308,7 @@ mod test { "config_hash": "", "schema_hash": "", "handler_files_hash": "", - "abi_files_hash": "" + "abi_files_hash": "", })) .unwrap(); @@ -336,7 +335,7 @@ mod test { "config_hash": "", "schema_hash": "", "handler_files_hash": "", - "abi_files_hash": "" + "abi_files_hash": "", })) .unwrap(); @@ -345,7 +344,7 @@ mod test { "config_hash": "", "schema_hash": "", "handler_files_hash": "", - "abi_files_hash": "" + "abi_files_hash": "", })) .unwrap();