diff --git a/Cargo.lock b/Cargo.lock index a25b8af2..fc2bdea7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -56,6 +56,12 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" +[[package]] +name = "ambient-authority" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9d4ee0d472d1cd2e28c97dfa124b3d8d992e10eb0a035f33f5d12e3a177ba3b" + [[package]] name = "android-tzdata" version = "0.1.1" @@ -125,6 +131,12 @@ version = "1.0.80" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5ad32ce52e4161730f7098c077cd2ed6229b5804ccf99e5366be1ab72a98b4e1" +[[package]] +name = "arbitrary" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" + [[package]] name = "arrayref" version = "0.3.7" @@ -590,6 +602,71 @@ dependencies = [ "serde", ] +[[package]] +name = "cap-fs-ext" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88e341d15ac1029aadce600be764a1a1edafe40e03cde23285bc1d261b3a4866" +dependencies = [ + "cap-primitives", + "cap-std", + "io-lifetimes 2.0.3", + "windows-sys 0.52.0", +] + +[[package]] +name = "cap-primitives" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe16767ed8eee6d3f1f00d6a7576b81c226ab917eb54b96e5f77a5216ef67abb" +dependencies = [ + "ambient-authority", + "fs-set-times", + "io-extras", + "io-lifetimes 2.0.3", + "ipnet", + "maybe-owned", + "rustix 0.38.31", + "windows-sys 0.52.0", + "winx", +] + +[[package]] +name = "cap-rand" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20e5695565f0cd7106bc3c7170323597540e772bb73e0be2cd2c662a0f8fa4ca" +dependencies = [ + "ambient-authority", + "rand", +] + +[[package]] +name = "cap-std" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "593db20e4c51f62d3284bae7ee718849c3214f93a3b94ea1899ad85ba119d330" +dependencies = [ + "cap-primitives", + "io-extras", + "io-lifetimes 2.0.3", + "rustix 0.38.31", +] + +[[package]] +name = "cap-time-ext" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03261630f291f425430a36f38c847828265bc928f517cdd2004c56f4b02f002b" +dependencies = [ + "ambient-authority", + "cap-primitives", + "iana-time-zone", + "once_cell", + "rustix 0.38.31", + "winx", +] + [[package]] name = "cargo-platform" version = "0.1.7" @@ -840,6 +917,115 @@ dependencies = [ "libc", ] +[[package]] +name = "cranelift-bforest" +version = "0.103.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c22542c0b95bd3302f7ed6839869c561f2324bac2fd5e7e99f5cfa65fdc8b92" +dependencies = [ + "cranelift-entity", +] + +[[package]] +name = "cranelift-codegen" +version = "0.103.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b3db903ef2e9c8a4de2ea6db5db052c7857282952f9df604aa55d169e6000d8" +dependencies = [ + "bumpalo", + "cranelift-bforest", + "cranelift-codegen-meta", + "cranelift-codegen-shared", + "cranelift-control", + "cranelift-entity", + "cranelift-isle", + "gimli", + "hashbrown 0.14.3", + "log", + "regalloc2", + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cranelift-codegen-meta" +version = "0.103.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6590feb5a1d6438f974bf6a5ac4dddf69fca14e1f07f3265d880f69e61a94463" +dependencies = [ + "cranelift-codegen-shared", +] + +[[package]] +name = "cranelift-codegen-shared" +version = "0.103.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7239038c56fafe77fddc8788fc8533dd6c474dc5bdc5637216404f41ba807330" + +[[package]] +name = "cranelift-control" +version = "0.103.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7dc9c595341404d381d27a3d950160856b35b402275f0c3990cd1ad683c8053" +dependencies = [ + "arbitrary", +] + +[[package]] +name = "cranelift-entity" +version = "0.103.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44e3ee532fc4776c69bcedf7e62f9632cbb3f35776fa9a525cdade3195baa3f7" +dependencies = [ + "serde", + "serde_derive", +] + +[[package]] +name = "cranelift-frontend" +version = "0.103.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a612c94d09e653662ec37681dc2d6fd2b9856e6df7147be0afc9aabb0abf19df" +dependencies = [ + "cranelift-codegen", + "log", + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cranelift-isle" +version = "0.103.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85db9830abeb1170b7d29b536ffd55af1d4d26ac8a77570b5d1aca003bf225cc" + +[[package]] +name = "cranelift-native" +version = "0.103.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "301ef0edafeaeda5771a5d2db64ac53e1818ae3111220a185677025fe91db4a1" +dependencies = [ + "cranelift-codegen", + "libc", + "target-lexicon", +] + +[[package]] +name = "cranelift-wasm" +version = "0.103.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "380f0abe8264e4570ac615fc31cef32a3b90a77f7eb97b08331f9dd357b1f500" +dependencies = [ + "cranelift-codegen", + "cranelift-entity", + "cranelift-frontend", + "itertools 0.10.5", + "log", + "smallvec", + "wasmparser", + "wasmtime-types", +] + [[package]] name = "crc32fast" version = "1.4.0" @@ -849,6 +1035,19 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "crossbeam" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-epoch", + "crossbeam-queue", + "crossbeam-utils", +] + [[package]] name = "crossbeam-channel" version = "0.5.11" @@ -858,6 +1057,16 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + [[package]] name = "crossbeam-epoch" version = "0.9.18" @@ -867,6 +1076,15 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "crossbeam-queue" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-utils" version = "0.8.19" @@ -1165,6 +1383,37 @@ dependencies = [ "crypto-common", ] +[[package]] +name = "dircpy" +version = "0.3.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29259db751c34980bfc44100875890c507f585323453b91936960ab1104272ca" +dependencies = [ + "jwalk", + "log", + "walkdir", +] + +[[package]] +name = "dirs" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + [[package]] name = "dotenvy" version = "0.15.7" @@ -1211,6 +1460,7 @@ dependencies = [ "integer-encoding 4.0.0", "itertools 0.10.5", "json-patch", + "json-schema-faker", "jsonptr", "jsonschema", "lazy_static", @@ -1462,6 +1712,12 @@ dependencies = [ "synstructure", ] +[[package]] +name = "fallible-iterator" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" + [[package]] name = "fancy-regex" version = "0.7.1" @@ -1487,6 +1743,17 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" +[[package]] +name = "fd-lock" +version = "4.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e5768da2206272c81ef0b5e951a41862938a6070da63bcea197899942d3b947" +dependencies = [ + "cfg-if", + "rustix 0.38.31", + "windows-sys 0.52.0", +] + [[package]] name = "feature-flags-contract" version = "1.0.0-dev.5" @@ -1568,6 +1835,17 @@ dependencies = [ "num", ] +[[package]] +name = "fs-set-times" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "033b337d725b97690d86893f9de22b67b80dcc4e9ad815f348254c38119db8fb" +dependencies = [ + "io-lifetimes 2.0.3", + "rustix 0.38.31", + "windows-sys 0.52.0", +] + [[package]] name = "fs_extra" version = "1.3.0" @@ -1728,6 +2006,11 @@ name = "gimli" version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +dependencies = [ + "fallible-iterator", + "indexmap 2.2.3", + "stable_deref_trait", +] [[package]] name = "glob" @@ -1877,6 +2160,15 @@ dependencies = [ "ahash 0.7.8", ] +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash 0.8.9", +] + [[package]] name = "hashbrown" version = "0.14.3" @@ -2118,6 +2410,16 @@ dependencies = [ "serde", ] +[[package]] +name = "io-extras" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c301e73fb90e8a29e600a9f402d095765f74310d582916a952f618836a1bd1ed" +dependencies = [ + "io-lifetimes 2.0.3", + "windows-sys 0.52.0", +] + [[package]] name = "io-lifetimes" version = "1.0.11" @@ -2129,6 +2431,12 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "io-lifetimes" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a611371471e98973dbcab4e0ec66c31a10bc356eeb4d54a0e05eac8158fe38c" + [[package]] name = "ipnet" version = "2.9.0" @@ -2208,6 +2516,19 @@ dependencies = [ "treediff 3.0.2", ] +[[package]] +name = "json-schema-faker" +version = "0.1.0" +source = "git+https://github.com/fominok/json-schema-faker-rs?rev=2dd1cf7#2dd1cf7ea17b9246aa2aabd7026a3a320e3fa903" +dependencies = [ + "dircpy", + "serde_json", + "thiserror", + "wasi-common", + "wasmtime", + "wasmtime-wasi", +] + [[package]] name = "jsonptr" version = "0.1.5" @@ -2257,6 +2578,16 @@ dependencies = [ "uuid 0.8.2", ] +[[package]] +name = "jwalk" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2735847566356cd2179a2a38264839308f7079fa96e6bd5a42d740460e003c56" +dependencies = [ + "crossbeam", + "rayon", +] + [[package]] name = "lazy-regex" version = "3.1.0" @@ -2292,6 +2623,12 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" +[[package]] +name = "leb128" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" + [[package]] name = "lhash" version = "1.1.0" @@ -2314,6 +2651,17 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "libredox" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" +dependencies = [ + "bitflags 2.4.2", + "libc", + "redox_syscall", +] + [[package]] name = "librocksdb-sys" version = "0.11.0+8.1.1" @@ -2397,6 +2745,15 @@ dependencies = [ "libc", ] +[[package]] +name = "mach" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" +dependencies = [ + "libc", +] + [[package]] name = "mach2" version = "0.4.2" @@ -2440,12 +2797,27 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" +[[package]] +name = "maybe-owned" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4facc753ae494aeb6e3c22f839b158aebd4f9270f55cd3c79906c45476c47ab4" + [[package]] name = "memchr" version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" +[[package]] +name = "memfd" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2cffa4ad52c6f791f4f8b15f0c05f9824b2ced1160e88cc393d64fff9a8ac64" +dependencies = [ + "rustix 0.38.31", +] + [[package]] name = "memoffset" version = "0.6.5" @@ -2455,6 +2827,15 @@ dependencies = [ "autocfg", ] +[[package]] +name = "memoffset" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +dependencies = [ + "autocfg", +] + [[package]] name = "memoize" version = "0.4.2" @@ -2575,7 +2956,7 @@ dependencies = [ "bitflags 1.3.2", "cfg-if", "libc", - "memoffset", + "memoffset 0.6.5", ] [[package]] @@ -2781,6 +3162,9 @@ version = "0.32.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" dependencies = [ + "crc32fast", + "hashbrown 0.14.3", + "indexmap 2.2.3", "memchr", ] @@ -3229,6 +3613,15 @@ dependencies = [ "prost 0.12.3", ] +[[package]] +name = "psm" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874" +dependencies = [ + "cc", +] + [[package]] name = "ptr_meta" version = "0.1.4" @@ -3372,19 +3765,63 @@ dependencies = [ ] [[package]] -name = "redox_syscall" -version = "0.4.1" +name = "rayon" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +checksum = "fa7237101a77a10773db45d62004a272517633fbcc3df19d96455ede1122e051" dependencies = [ - "bitflags 1.3.2", + "either", + "rayon-core", ] [[package]] -name = "regex" -version = "1.10.3" +name = "rayon-core" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[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_users" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" +dependencies = [ + "getrandom", + "libredox", + "thiserror", +] + +[[package]] +name = "regalloc2" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad156d539c879b7a24a363a2016d77961786e71f48f2e2fc8302a92abd2429a6" +dependencies = [ + "hashbrown 0.13.2", + "log", + "rustc-hash", + "slice-group-by", + "smallvec", +] + +[[package]] +name = "regex" +version = "1.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" dependencies = [ "aho-corasick", "memchr", @@ -3681,7 +4118,7 @@ checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" dependencies = [ "bitflags 1.3.2", "errno", - "io-lifetimes", + "io-lifetimes 1.0.11", "libc", "linux-raw-sys 0.3.8", "windows-sys 0.48.0", @@ -3695,8 +4132,10 @@ checksum = "6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949" dependencies = [ "bitflags 2.4.2", "errno", + "itoa", "libc", "linux-raw-sys 0.4.13", + "once_cell", "windows-sys 0.52.0", ] @@ -4009,6 +4448,15 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "shellexpand" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ccc8076840c4da029af4f87e4e8daeb0fca6b87bbb02e10cb60b791450e11e4" +dependencies = [ + "dirs", +] + [[package]] name = "shlex" version = "1.3.0" @@ -4094,6 +4542,12 @@ dependencies = [ "autocfg", ] +[[package]] +name = "slice-group-by" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" + [[package]] name = "smallvec" version = "1.13.1" @@ -4151,6 +4605,12 @@ dependencies = [ "der", ] +[[package]] +name = "sptr" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b9b39299b249ad65f3b7e96443bad61c02ca5cd3589f46cb6d610a0fd6c0d6a" + [[package]] name = "sqlparser" version = "0.38.0" @@ -4160,6 +4620,12 @@ dependencies = [ "log", ] +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "str-buf" version = "1.0.6" @@ -4348,6 +4814,22 @@ dependencies = [ "libc", ] +[[package]] +name = "system-interface" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0682e006dd35771e392a6623ac180999a9a854b1d4a6c12fb2e804941c2b1f58" +dependencies = [ + "bitflags 2.4.2", + "cap-fs-ext", + "cap-std", + "fd-lock", + "io-lifetimes 2.0.3", + "rustix 0.38.31", + "windows-sys 0.52.0", + "winx", +] + [[package]] name = "tagptr" version = "0.2.0" @@ -4360,6 +4842,12 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" +[[package]] +name = "target-lexicon" +version = "0.12.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1fc403891a21bcfb7c37834ba66a547a8f402146eba7265b5a6d88059c9ff2f" + [[package]] name = "tempfile" version = "3.10.0" @@ -4777,6 +5265,7 @@ version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ + "log", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -5112,6 +5601,49 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasi-cap-std-sync" +version = "16.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "154528979a211aa28d969846e883df75705809ed9bcc70aba61460683ea7355b" +dependencies = [ + "anyhow", + "async-trait", + "cap-fs-ext", + "cap-rand", + "cap-std", + "cap-time-ext", + "fs-set-times", + "io-extras", + "io-lifetimes 2.0.3", + "once_cell", + "rustix 0.38.31", + "system-interface", + "tracing", + "wasi-common", + "windows-sys 0.48.0", +] + +[[package]] +name = "wasi-common" +version = "16.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d888b611fee7d273dd057dc009d2dd3132736f36710ffd65657ac83628d1e3b" +dependencies = [ + "anyhow", + "bitflags 2.4.2", + "cap-rand", + "cap-std", + "io-extras", + "log", + "rustix 0.38.31", + "thiserror", + "tracing", + "wasmtime", + "wiggle", + "windows-sys 0.48.0", +] + [[package]] name = "wasm-bindgen" version = "0.2.91" @@ -5178,6 +5710,242 @@ version = "0.2.91" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4f186bd2dcf04330886ce82d6f33dd75a7bfcf69ecf5763b89fcde53b6ac9838" +[[package]] +name = "wasm-encoder" +version = "0.38.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ad2b51884de9c7f4fe2fd1043fccb8dcad4b1e29558146ee57a144d15779f3f" +dependencies = [ + "leb128", +] + +[[package]] +name = "wasmparser" +version = "0.118.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77f1154f1ab868e2a01d9834a805faca7bf8b50d041b4ca714d005d0dab1c50c" +dependencies = [ + "indexmap 2.2.3", + "semver", +] + +[[package]] +name = "wasmtime" +version = "16.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8e539fded2495422ea3c4dfa7beeddba45904eece182cf315294009e1a323bf" +dependencies = [ + "anyhow", + "bincode 1.3.3", + "bumpalo", + "cfg-if", + "indexmap 2.2.3", + "libc", + "log", + "object", + "once_cell", + "paste", + "serde", + "serde_derive", + "serde_json", + "target-lexicon", + "wasmparser", + "wasmtime-cranelift", + "wasmtime-environ", + "wasmtime-jit", + "wasmtime-runtime", + "windows-sys 0.48.0", +] + +[[package]] +name = "wasmtime-asm-macros" +version = "16.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "660ba9143e15a2acd921820df221b73aee256bd3ca2d208d73d8adc9587ccbb9" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "wasmtime-cranelift" +version = "16.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d648c8b4064a7911093b02237cd5569f71ca171d3a0a486bf80600b19e1cba2" +dependencies = [ + "anyhow", + "cfg-if", + "cranelift-codegen", + "cranelift-control", + "cranelift-entity", + "cranelift-frontend", + "cranelift-native", + "cranelift-wasm", + "gimli", + "log", + "object", + "target-lexicon", + "thiserror", + "wasmparser", + "wasmtime-cranelift-shared", + "wasmtime-environ", + "wasmtime-versioned-export-macros", +] + +[[package]] +name = "wasmtime-cranelift-shared" +version = "16.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290a89027688782da8ff60b12bb95695494b1874e0d0ba2ba387d23dace6d70c" +dependencies = [ + "anyhow", + "cranelift-codegen", + "cranelift-control", + "cranelift-native", + "gimli", + "object", + "target-lexicon", + "wasmtime-environ", +] + +[[package]] +name = "wasmtime-environ" +version = "16.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61eb64fb3e0da883e2df4a13a81d6282e072336e6cb6295021d0f7ab2e352754" +dependencies = [ + "anyhow", + "cranelift-entity", + "gimli", + "indexmap 2.2.3", + "log", + "object", + "serde", + "serde_derive", + "target-lexicon", + "thiserror", + "wasmparser", + "wasmtime-types", +] + +[[package]] +name = "wasmtime-jit" +version = "16.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f485336add49267d8859e8f8084d2d4b9a4b1564496b6f30ba5b168d50c10ceb" +dependencies = [ + "anyhow", + "bincode 1.3.3", + "cfg-if", + "gimli", + "log", + "object", + "rustix 0.38.31", + "serde", + "serde_derive", + "target-lexicon", + "wasmtime-environ", + "wasmtime-jit-icache-coherence", + "wasmtime-runtime", + "windows-sys 0.48.0", +] + +[[package]] +name = "wasmtime-jit-icache-coherence" +version = "16.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b6d197fcc34ad32ed440e1f9552fd57d1f377d9699d31dee1b5b457322c1f8a" +dependencies = [ + "cfg-if", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "wasmtime-runtime" +version = "16.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "794b2bb19b99ef8322ff0dd9fe1ba7e19c41036dfb260b3f99ecce128c42ff92" +dependencies = [ + "anyhow", + "cc", + "cfg-if", + "indexmap 2.2.3", + "libc", + "log", + "mach", + "memfd", + "memoffset 0.9.0", + "paste", + "psm", + "rustix 0.38.31", + "sptr", + "wasm-encoder", + "wasmtime-asm-macros", + "wasmtime-environ", + "wasmtime-versioned-export-macros", + "wasmtime-wmemcheck", + "windows-sys 0.48.0", +] + +[[package]] +name = "wasmtime-types" +version = "16.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d995db8bb56f2cd8d2dc0ed5ffab94ffb435283b0fe6747f80f7aab40b2d06a1" +dependencies = [ + "cranelift-entity", + "serde", + "serde_derive", + "thiserror", + "wasmparser", +] + +[[package]] +name = "wasmtime-versioned-export-macros" +version = "16.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f55c5565959287c21dd0f4277ae3518dd2ae62679f655ee2dbc4396e19d210db" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "wasmtime-wasi" +version = "16.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccd8370078149d49a3a47e93741553fd79b700421464b6a27ca32718192ab130" +dependencies = [ + "anyhow", + "bytes", + "io-extras", + "libc", + "log", + "once_cell", + "url", + "wasi-cap-std-sync", + "wasi-common", + "wasmtime", + "wiggle", + "windows-sys 0.48.0", +] + +[[package]] +name = "wasmtime-wmemcheck" +version = "16.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67761d8f8c0b3c13a5d34356274b10a40baba67fe9cfabbfc379a8b414e45de2" + +[[package]] +name = "wast" +version = "35.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ef140f1b49946586078353a453a1d28ba90adfc54dde75710bc1931de204d68" +dependencies = [ + "leb128", +] + [[package]] name = "wayland-client" version = "0.29.5" @@ -5268,6 +6036,48 @@ dependencies = [ "rustix 0.38.31", ] +[[package]] +name = "wiggle" +version = "16.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0afb26cd3269289bb314a361ff0a6685e5ce793b62181a9fe3f81ace15051697" +dependencies = [ + "anyhow", + "async-trait", + "bitflags 2.4.2", + "thiserror", + "tracing", + "wasmtime", + "wiggle-macro", +] + +[[package]] +name = "wiggle-generate" +version = "16.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cef2868fed7584d2b552fa317104858ded80021d23b073b2d682d3c932a027bd" +dependencies = [ + "anyhow", + "heck", + "proc-macro2", + "quote", + "shellexpand", + "syn 2.0.50", + "witx", +] + +[[package]] +name = "wiggle-macro" +version = "16.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31ae1ec11a17ea481539ee9a5719a278c9790d974060fbf71db4b2c05378780b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", + "wiggle-generate", +] + [[package]] name = "winapi" version = "0.3.9" @@ -5477,6 +6287,16 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "winx" +version = "0.36.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9643b83820c0cd246ecabe5fa454dd04ba4fa67996369466d0747472d337346" +dependencies = [ + "bitflags 2.4.2", + "windows-sys 0.52.0", +] + [[package]] name = "withdrawals-contract" version = "1.0.0-dev.5" @@ -5490,6 +6310,18 @@ dependencies = [ "thiserror", ] +[[package]] +name = "witx" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e366f27a5cabcddb2706a78296a40b8fcc451e1a6aba2fc1d94b4a01bdaaef4b" +dependencies = [ + "anyhow", + "log", + "thiserror", + "wast", +] + [[package]] name = "wl-clipboard-rs" version = "0.7.0" diff --git a/Cargo.toml b/Cargo.toml index 492919b6..4125523d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,7 +10,7 @@ strum = { version = "0.26.1", features = ["derive"] } tui-realm-stdlib = "1.3.1" tuirealm = "1.9.1" bs58 = "0.5.0" -dpp = { path = "../platform/packages/rs-dpp", features = ["client"]} +dpp = { path = "../platform/packages/rs-dpp", features = ["client", "documents-faker"]} rs-sdk = { path = "../platform/packages/rs-sdk"} drive = { path = "../platform/packages/rs-drive" } thiserror = "1" diff --git a/src/backend/documents.rs b/src/backend/documents.rs index 71235cfd..0aef9cf6 100644 --- a/src/backend/documents.rs +++ b/src/backend/documents.rs @@ -1,36 +1,13 @@ -use std::{ - collections::{BTreeMap, HashSet}, - iter, - sync::Arc, - time::{SystemTime, UNIX_EPOCH}, -}; +mod broadcast_random_documents; -use dpp::{ - data_contract::{ - accessors::v0::DataContractV0Getters, - document_type::{ - accessors::DocumentTypeV0Getters, - random_document::{CreateRandomDocument, DocumentFieldFillSize, DocumentFieldFillType}, - DocumentType, - }, - }, - document::Document, - identity::{ - accessors::IdentityGettersV0, - identity_public_key::accessors::v0::IdentityPublicKeyGettersV0, KeyType, Purpose, - }, - prelude::{DataContract, Identity, IdentityPublicKey}, -}; -use futures::{stream::FuturesUnordered, Future, StreamExt}; -use rand::{prelude::StdRng, Rng, SeedableRng}; +use dpp::{data_contract::accessors::v0::DataContractV0Getters, document::Document}; use rs_sdk::{ - platform::{transition::put_document::PutDocument, DocumentQuery, FetchMany}, + platform::{DocumentQuery, FetchMany}, Sdk, }; -use simple_signer::signer::SimpleSigner; -use super::{state::IdentityPrivateKeysMap, AppStateUpdate, CompletedTaskPayload}; -use crate::backend::{error::Error, AppState, BackendEvent, Task}; +use super::{AppStateUpdate, CompletedTaskPayload}; +pub(crate) use crate::backend::{AppState, BackendEvent, Task}; #[derive(Debug, Clone)] pub(crate) enum DocumentTask { @@ -89,7 +66,7 @@ impl AppState { }; }; - broadcast_random_documents( + broadcast_random_documents::broadcast_random_documents( sdk, identity, &identity_private_keys_lock, @@ -131,138 +108,3 @@ impl AppState { } } } - -struct BroadcastRandomDocumentsStats { - total: u16, - completed: u16, - last_error: Option, -} - -impl BroadcastRandomDocumentsStats { - fn info_display(&self) -> String { - format!( - "Broadcast random documents results: -Completed {} of {} -Last error: {}", - self.completed, - self.total, - self.last_error - .as_ref() - .map(|e| e.to_string()) - .unwrap_or("".to_owned()) - ) - } -} - -async fn broadcast_random_documents<'s>( - sdk: &Sdk, - identity: &Identity, - identity_private_keys: &IdentityPrivateKeysMap, - data_contract: &DataContract, - document_type: &DocumentType, - count: u16, -) -> Result { - let mut std_rng = StdRng::from_entropy(); - - let identity_public_key = identity - .get_first_public_key_matching( - Purpose::AUTHENTICATION, - HashSet::from([document_type.security_level_requirement()]), - HashSet::from([KeyType::ECDSA_SECP256K1, KeyType::BLS12_381]), - ) - .ok_or(Error::DocumentSigningError( - "No public key matching security level requirements".to_string(), - ))?; - - let Some(private_key) = identity_private_keys.get(&(identity.id(), identity_public_key.id())) - else { - // TODO inappropriate error type - return Err(Error::IdentityTopUpError(format!( - "expected private keys, but we only have private keys for {:?}, trying to get {:?} : \ - {}", - identity_private_keys - .keys() - .map(|(id, key_id)| (id, key_id)) - .collect::>(), - identity.id(), - identity_public_key.id(), - ))); - }; - - let data_contract = Arc::new(data_contract.clone()); - let mut signer = SimpleSigner::default(); - signer.add_key(identity_public_key.clone(), private_key.to_vec()); - - fn put_random_document<'a, 'r>( - sdk: &'a Sdk, - document_type: &'a DocumentType, - identity: &'a Identity, - rng: &'r mut StdRng, - signer: &'a SimpleSigner, - identity_public_key: &'a IdentityPublicKey, - data_contract: Arc, - ) -> impl Future> + 'a { - let document_state_transition_entropy: [u8; 32] = rng.gen(); - let time_ms = SystemTime::now() - .duration_since(UNIX_EPOCH) - .expect("clock may have gone backwards") - .as_millis(); - - let random_document = document_type - .random_document_with_params( - identity.id(), - document_state_transition_entropy.into(), - time_ms as u64, - DocumentFieldFillType::FillIfNotRequired, - DocumentFieldFillSize::AnyDocumentFillSize, - rng, - sdk.version(), - ) - .expect("expected a random document"); - - async move { - random_document - .put_to_platform_and_wait_for_response( - sdk, - document_type.clone(), - document_state_transition_entropy, - identity_public_key.clone(), - data_contract, - signer, - ) - .await - .map(|_| ()) - .map_err(|e| e.to_string()) - } - } - - let mut futures: FuturesUnordered<_> = iter::repeat_with(|| { - put_random_document( - sdk, - document_type, - identity, - &mut std_rng, - &signer, - identity_public_key, - Arc::clone(&data_contract), - ) - }) - .take(count as usize) - .collect(); - - let mut completed = 0; - let mut last_error = None; - - while let Some(result) = futures.next().await { - match result { - Ok(_) => completed += 1, - Err(e) => last_error = Some(e), - } - } - - Ok(BroadcastRandomDocumentsStats { - total: count, - completed, - last_error, - }) -} diff --git a/src/backend/documents/broadcast_random_documents.rs b/src/backend/documents/broadcast_random_documents.rs new file mode 100644 index 00000000..d9c456a5 --- /dev/null +++ b/src/backend/documents/broadcast_random_documents.rs @@ -0,0 +1,158 @@ +//! Random documents broadcasting functionality and tools. + +use std::{ + collections::{BTreeMap, HashSet}, + iter, + sync::Arc, +}; + +use dapi_grpc::core::v0::{get_status_response, GetStatusRequest, GetStatusResponse}; +use dpp::{ + data_contract::{ + document_type::{ + accessors::DocumentTypeV0Getters, random_document::CreateRandomDocument, DocumentType, + }, + DataContract, + }, + identity::{ + accessors::IdentityGettersV0, + identity_public_key::accessors::v0::IdentityPublicKeyGettersV0, Identity, KeyType, Purpose, + }, + platform_value::{Bytes32, Value}, + system_data_contracts::dashpay_contract::v1::document_types::contact_request::properties::CORE_HEIGHT_CREATED_AT, + version::PlatformVersion, +}; +use futures::{stream::FuturesUnordered, StreamExt}; +use rand::{rngs::StdRng, Rng, SeedableRng}; +use rs_dapi_client::{DapiRequestExecutor, RequestSettings}; +use rs_sdk::{platform::transition::put_document::PutDocument, Sdk}; +use simple_signer::signer::SimpleSigner; + +use crate::backend::{error::Error, state::IdentityPrivateKeysMap}; + +pub(super) struct BroadcastRandomDocumentsStats { + total: u16, + completed: u16, + last_error: Option, +} + +impl BroadcastRandomDocumentsStats { + pub fn info_display(&self) -> String { + format!( + "Broadcast random documents results: +Completed {} of {} +Last error: {}", + self.completed, + self.total, + self.last_error + .as_ref() + .map(|e| e.to_string()) + .unwrap_or("".to_owned()) + ) + } +} + +pub(super) async fn broadcast_random_documents<'s>( + sdk: &Sdk, + identity: &Identity, + identity_private_keys: &IdentityPrivateKeysMap, + data_contract: &DataContract, + document_type: &DocumentType, + count: u16, +) -> Result { + let mut std_rng = StdRng::from_entropy(); + + let identity_public_key = identity + .get_first_public_key_matching( + Purpose::AUTHENTICATION, + HashSet::from([document_type.security_level_requirement()]), + HashSet::from([KeyType::ECDSA_SECP256K1, KeyType::BLS12_381]), + ) + .ok_or(Error::DocumentSigningError( + "No public key matching security level requirements".to_string(), + ))?; + + let Some(private_key) = identity_private_keys.get(&(identity.id(), identity_public_key.id())) + else { + // TODO inappropriate error type + return Err(Error::IdentityTopUpError(format!( + "expected private keys, but we only have private keys for {:?}, trying to get {:?} : \ + {}", + identity_private_keys + .keys() + .map(|(id, key_id)| (id, key_id)) + .collect::>(), + identity.id(), + identity_public_key.id(), + ))); + }; + + let data_contract = Arc::new(data_contract.clone()); + let mut signer = SimpleSigner::default(); + signer.add_key(identity_public_key.clone(), private_key.to_vec()); + + let substitutions = prepare_substitutions(&sdk).await?; + + let mut futures: FuturesUnordered<_> = iter::repeat_with(|| { + let entropy = Bytes32(std_rng.gen()); + let data_contract = Arc::clone(&data_contract); + let signer = &signer; + let substitutions = &substitutions; + async move { + let documents = document_type.random_documents_faker( + identity.id(), + &entropy, + 1, + &PlatformVersion::latest(), + substitutions, + )?; + documents[0] + .put_to_platform_and_wait_for_response( + sdk, + document_type.clone(), + entropy.0, + identity_public_key.clone(), + data_contract, + signer, + ) + .await + } + }) + .take(count as usize) + .collect(); + + let mut completed = 0; + let mut last_error = None; + + while let Some(result) = futures.next().await { + match result { + Ok(_) => completed += 1, + Err(e) => last_error = Some(e.to_string()), + } + } + + Ok(BroadcastRandomDocumentsStats { + total: count, + completed, + last_error, + }) +} + +async fn prepare_substitutions(sdk: &Sdk) -> Result, rs_sdk::Error> { + let GetStatusResponse { + chain: Some(get_status_response::Chain { blocks_count, .. }), + .. + } = sdk + .execute(GetStatusRequest {}, RequestSettings::default()) + .await? + else { + return Err(rs_sdk::Error::Generic( + "malformed status response".to_owned(), + )); + }; + + let mut substitutions = BTreeMap::new(); + substitutions.insert(CORE_HEIGHT_CREATED_AT, blocks_count.into()); + + Ok(substitutions) +}