From fbe5355bbd344c79e831bde1532be232220e9d73 Mon Sep 17 00:00:00 2001 From: lostman Date: Mon, 20 Nov 2023 06:56:25 -0800 Subject: [PATCH] enhancement: implement find on entity (#1446) * implement find on entity * add find indexing test * add Find to indexer-test to separate the find handler from the rest * update contract id * switch to sqlparser for expr generation, add order_by * change how NULL works: is_null, is_not_null * remove comment * add proper conversion of scalar types to sqlparser::ast::Value * move find-related code to a separate crate * renaming, documentation * update test * add Cargo.lock which was mistakenly removed during rebase * update test * fmt * more renaming and docs * Update packages/fuel-indexer-plugin/src/find.rs Co-authored-by: rashad * change order_by syntax * update other contracts to 0.46.0 --------- Co-authored-by: rashad --- Cargo.lock | 1031 +++++++++-------- .../greetings/contracts/greeting/Forc.lock | 16 +- packages/fuel-indexer-api-server/src/ffi.rs | 4 + packages/fuel-indexer-macros/Cargo.toml | 1 + packages/fuel-indexer-macros/src/decoder.rs | 38 + packages/fuel-indexer-macros/src/helpers.rs | 1 + packages/fuel-indexer-plugin/Cargo.toml | 1 + packages/fuel-indexer-plugin/src/find.rs | 310 +++++ packages/fuel-indexer-plugin/src/lib.rs | 2 + packages/fuel-indexer-plugin/src/wasm.rs | 24 + .../contracts/fuel-indexer-test/Forc.lock | 16 +- .../out/debug/fuel-indexer-test-abi.json | 142 ++- .../out/debug/fuel-indexer-test.bin | Bin 7364 -> 7476 bytes .../contracts/fuel-indexer-test/src/main.sw | 129 ++- .../contracts/simple-wasm/Forc.lock | 16 +- .../out/debug/contracts-flat-abi.json | 87 -- .../simple-wasm/out/debug/contracts.bin | Bin 1532 -> 4220 bytes .../contracts/simple-wasm/src/main.sw | 2 +- .../fuel-indexer-test/fuel_indexer_test.yaml | 2 +- .../schema/fuel_indexer_test.graphql | 6 + .../indexers/fuel-indexer-test/src/lib.rs | 73 ++ packages/fuel-indexer-tests/src/fixtures.rs | 16 + packages/fuel-indexer-tests/tests/indexing.rs | 56 +- packages/fuel-indexer/src/database.rs | 32 + packages/fuel-indexer/src/ffi.rs | 76 ++ 25 files changed, 1418 insertions(+), 663 deletions(-) create mode 100644 packages/fuel-indexer-plugin/src/find.rs delete mode 100644 packages/fuel-indexer-tests/contracts/simple-wasm/out/debug/contracts-flat-abi.json diff --git a/Cargo.lock b/Cargo.lock index 16a36256b..02e1d808c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -39,9 +39,9 @@ dependencies = [ "actix-rt", "actix-service", "actix-utils", - "ahash 0.8.3", - "base64 0.21.3", - "bitflags 2.4.0", + "ahash 0.8.6", + "base64 0.21.5", + "bitflags 2.4.1", "bytes", "bytestring", "derive_more", @@ -109,7 +109,7 @@ dependencies = [ "futures-core", "futures-util", "mio", - "socket2 0.5.3", + "socket2 0.5.5", "tokio", "tracing", ] @@ -150,7 +150,7 @@ dependencies = [ "actix-service", "actix-utils", "actix-web-codegen", - "ahash 0.8.3", + "ahash 0.8.6", "bytes", "bytestring", "cfg-if", @@ -169,8 +169,8 @@ dependencies = [ "serde_json", "serde_urlencoded", "smallvec", - "socket2 0.5.3", - "time 0.3.28", + "socket2 0.5.5", + "time 0.3.30", "url", ] @@ -214,9 +214,9 @@ dependencies = [ [[package]] name = "ahash" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +checksum = "5a824f2aa7e75a0c98c5a504fceb80649e9c35265d44525b5f94de4771a395cd" dependencies = [ "getrandom", "once_cell", @@ -225,21 +225,22 @@ dependencies = [ [[package]] name = "ahash" -version = "0.8.3" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" +checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" dependencies = [ "cfg-if", "getrandom", "once_cell", "version_check", + "zerocopy", ] [[package]] name = "aho-corasick" -version = "1.0.5" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c378d78423fdad8089616f827526ee33c19f2fddbd5de1629152c9593ba4783" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" dependencies = [ "memchr", ] @@ -288,9 +289,9 @@ checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" [[package]] name = "annotate-snippets" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3b9d411ecbaf79885c6df4d75fff75858d5995ff25385657a28af47e82f9c36" +checksum = "ccaf7e9dfbb6ab22c82e473cd1a8a7bd313c19a5b7e40970f3d89ef5a5c9e81e" dependencies = [ "unicode-width", "yansi-term", @@ -316,9 +317,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.5.0" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f58811cfac344940f1a400b6e6231ce35171f614f26439e80f8c1465c5cc0c" +checksum = "2ab91ebe16eb252986481c5b62f6098f3b698a45e34b5b98200cf20dd2484a44" dependencies = [ "anstyle", "anstyle-parse", @@ -330,15 +331,15 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.2" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15c4c2c83f81532e5845a733998b6971faca23490340a418e9b72a3ec9de12ea" +checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" [[package]] name = "anstyle-parse" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333" +checksum = "317b9a89c1868f5ea6ff1d9539a69f45dffc21ce321ac1fd1160dfa48c8e2140" dependencies = [ "utf8parse", ] @@ -354,9 +355,9 @@ dependencies = [ [[package]] name = "anstyle-wincon" -version = "2.1.0" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58f54d10c6dfa51283a066ceab3ec1ab78d13fae00aa49243a45e4571fb79dfd" +checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628" dependencies = [ "anstyle", "windows-sys 0.48.0", @@ -419,14 +420,14 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.5.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fa3dc5f2a8564f07759c008b9109dc0d39de92a88d5588b8a5036d286383afb" +checksum = "4b0c4a4f319e45986f347ee47fef8bf5e81c9abc3f6f58dc2391439f30df65f0" dependencies = [ "async-lock", "async-task", "concurrent-queue", - "fastrand 1.9.0", + "fastrand 2.0.1", "futures-lite", "slab", ] @@ -623,9 +624,9 @@ dependencies = [ "log", "parking", "polling", - "rustix 0.37.23", + "rustix 0.37.27", "slab", - "socket2 0.4.9", + "socket2 0.4.10", "waker-fn", ] @@ -688,15 +689,15 @@ dependencies = [ [[package]] name = "async-task" -version = "4.4.0" +version = "4.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc7ab41815b3c653ccd2978ec3255c81349336702dfdf62ee6f7069b12a3aae" +checksum = "b4eb2cdb97421e01129ccb49169d8279ed21e829929144f4a22a6e54ac549ca1" [[package]] name = "async-trait" -version = "0.1.73" +version = "0.1.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0" +checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9" dependencies = [ "proc-macro2", "quote", @@ -723,9 +724,9 @@ dependencies = [ [[package]] name = "atomic-waker" -version = "1.1.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1181e1e0d1fce796a03db1ae795d67167da795f9cf4a39c37589e85ef57f26d3" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "atty" @@ -784,7 +785,7 @@ dependencies = [ "async-trait", "axum-core 0.3.4", "axum-macros", - "base64 0.21.3", + "base64 0.21.5", "bitflags 1.3.2", "bytes", "futures-util", @@ -793,7 +794,7 @@ dependencies = [ "http-body", "hyper", "itoa", - "matchit 0.7.2", + "matchit 0.7.3", "memchr", "mime", "multer", @@ -915,9 +916,9 @@ checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "base64" -version = "0.21.3" +version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "414dcefbc63d77c526a76b3afcf6fbb9b5e2791c19c3aa2297733208750c6e53" +checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" [[package]] name = "base64ct" @@ -927,9 +928,9 @@ checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" [[package]] name = "basic-toml" -version = "0.1.4" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bfc506e7a2370ec239e1d072507b2a80c833083699d3c6fa176fbb4de8448c6" +checksum = "2f2139706359229bfa8f19142ac1155b4b80beafb7a60471ac5dd109d4a19778" dependencies = [ "serde", ] @@ -995,9 +996,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.4.0" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635" +checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" [[package]] name = "bitmaps" @@ -1041,16 +1042,15 @@ dependencies = [ [[package]] name = "blake3" -version = "1.4.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "199c42ab6972d92c9f8995f086273d25c42fc0f7b2a1fcefba465c1352d25ba5" +checksum = "0231f06152bf547e9c2b5194f247cd97aacf6dcd8b15d8e5ec0663f64580da87" dependencies = [ "arrayref", "arrayvec", "cc", "cfg-if", "constant_time_eq", - "digest 0.10.7", ] [[package]] @@ -1094,17 +1094,18 @@ dependencies = [ [[package]] name = "blocking" -version = "1.3.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77231a1c8f801696fc0123ec6150ce92cffb8e164a02afb9c8ddee0e9b65ad65" +checksum = "8c36a4d0d48574b3dd360b4b7d95cc651d2b6557b6402848a27d4b228a473e2a" dependencies = [ "async-channel", "async-lock", "async-task", - "atomic-waker", - "fastrand 1.9.0", + "fastrand 2.0.1", + "futures-io", "futures-lite", - "log", + "piper", + "tracing", ] [[package]] @@ -1115,9 +1116,9 @@ checksum = "008b57b368e638ed60664350ea4f2f3647a0192173478df2736cc255a025a796" [[package]] name = "brotli" -version = "3.3.4" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68" +checksum = "516074a47ef4bce09577a3b379392300159ce5b1ba2e501ff1c819950066100f" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -1126,9 +1127,9 @@ dependencies = [ [[package]] name = "brotli-decompressor" -version = "2.3.4" +version = "2.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b6561fd3f895a11e8f72af2cb7d22e08366bebc2b6b57f7744c4bda27034744" +checksum = "4e2e4afe60d7dd600fdd3de8d0f08c2b7ec039712e3b6137ff98b7004e82de4f" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -1152,9 +1153,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.13.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" [[package]] name = "byte-slice-cast" @@ -1192,9 +1193,9 @@ dependencies = [ [[package]] name = "byteorder" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" @@ -1207,9 +1208,9 @@ dependencies = [ [[package]] name = "bytestring" -version = "1.3.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "238e4886760d98c4f899360c834fa93e62cf7f721ac3c2da375cbdf4b8679aae" +checksum = "74d80203ea6b29df88012294f62733de21cfeab47f17b41af3a38bc30a03ee72" dependencies = [ "bytes", ] @@ -1348,24 +1349,23 @@ dependencies = [ [[package]] name = "clap" -version = "4.4.1" +version = "4.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c8d502cbaec4595d2e7d5f61e318f05417bd2b66fdc3809498f0d3fdf0bea27" +checksum = "ac495e00dcec98c83465d5ad66c5c4fabd652fd6686e7c6269b117e729a6f17b" dependencies = [ "clap_builder", - "clap_derive 4.4.0", - "once_cell", + "clap_derive 4.4.7", ] [[package]] name = "clap_builder" -version = "4.4.1" +version = "4.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5891c7bc0edb3e1c2204fc5e94009affabeb1821c9e5fdc3959536c5c0bb984d" +checksum = "c77ed9a32a62e6ca27175d00d29d05ca32e396ea1eb5fb01d8256b669cec7663" dependencies = [ "anstream", "anstyle", - "clap_lex 0.5.1", + "clap_lex 0.6.0", "strsim", ] @@ -1384,9 +1384,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.4.0" +version = "4.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9fd1a5729c4548118d7d70ff234a44868d00489a4b6597b0b020918a0e91a1a" +checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" dependencies = [ "heck 0.4.1", "proc-macro2", @@ -1405,9 +1405,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.5.1" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd7cc57abe963c6d3b9d8be5b06ba7c8957a930305ca90304f24ef040aa6f961" +checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" [[package]] name = "cobs" @@ -1510,7 +1510,7 @@ version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5286a0843c21f8367f7be734f89df9b822e0321d8bcce8d6e735aadff7d74979" dependencies = [ - "base64 0.21.3", + "base64 0.21.5", "bech32 0.9.1", "bs58 0.5.0", "digest 0.10.7", @@ -1551,9 +1551,9 @@ dependencies = [ [[package]] name = "concurrent-queue" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62ec6771ecfa0762d24683ee5a32ad78487a3d3afdc0fb8cae19d2c5deb50b7c" +checksum = "f057a694a54f12365049b0958a1685bb52d567f5593b355fbf685838e873d400" dependencies = [ "crossbeam-utils", ] @@ -1589,6 +1589,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" +[[package]] +name = "convert_case" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" +dependencies = [ + "unicode-segmentation", +] + [[package]] name = "cookie" version = "0.16.2" @@ -1596,7 +1605,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e859cd57d0710d9e06c381b550c06e76992472a8c6d527aecd2fc673dcc231fb" dependencies = [ "percent-encoding", - "time 0.3.28", + "time 0.3.30", "version_check", ] @@ -1613,7 +1622,7 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "time 0.3.28", + "time 0.3.30", "url", ] @@ -1657,9 +1666,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.9" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1" +checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0" dependencies = [ "libc", ] @@ -1758,9 +1767,9 @@ dependencies = [ [[package]] name = "crc-catalog" -version = "2.2.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cace84e55f07e7301bae1c519df89cdad8cc3cd868413d3fdbdeca9ff3db484" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" [[package]] name = "crc32fast" @@ -1780,7 +1789,7 @@ dependencies = [ "anes", "cast", "ciborium", - "clap 4.4.1", + "clap 4.4.7", "criterion-plot", "futures", "is-terminal", @@ -1815,16 +1824,6 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7059fff8937831a9ae6f0fe4d658ffabf58f2ca96aa9dec1c889f936f705f216" -[[package]] -name = "crossbeam-channel" -version = "0.5.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" -dependencies = [ - "cfg-if", - "crossbeam-utils", -] - [[package]] name = "crossbeam-deque" version = "0.8.3" @@ -1888,9 +1887,9 @@ dependencies = [ [[package]] name = "crypto-bigint" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4c2f4e1afd912bc40bfd6fed5d9dc1f288e0ba01bfcc835cc5bc3eb13efe15" +checksum = "740fe28e594155f10cfc383984cbefd529d7396050557148f79cb0f621204124" dependencies = [ "generic-array 0.14.7", "rand_core", @@ -2104,10 +2103,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if", - "hashbrown 0.14.0", + "hashbrown 0.14.2", "lock_api", "once_cell", - "parking_lot_core 0.9.8", + "parking_lot_core 0.9.9", ] [[package]] @@ -2138,9 +2137,12 @@ dependencies = [ [[package]] name = "deranged" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2696e8a945f658fd14dc3b87242e6b80cd0f36ff04ea560fa39082368847946" +checksum = "0f32d04922c60427da6f9fef14d042d9edddef64cb9d4ce0d64d0685fbeb1fd3" +dependencies = [ + "powerfmt", +] [[package]] name = "derivative" @@ -2159,7 +2161,7 @@ version = "0.99.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" dependencies = [ - "convert_case", + "convert_case 0.4.0", "proc-macro2", "quote", "rustc_version", @@ -2315,9 +2317,9 @@ dependencies = [ [[package]] name = "educe" -version = "0.4.22" +version = "0.4.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "079044df30bb07de7d846d41a184c4b00e66ebdac93ee459253474f3a47e50ae" +checksum = "0f0042ff8246a363dbe77d2ceedb073339e85a804b9a47636c6e016a9a32c05f" dependencies = [ "enum-ordinalize", "proc-macro2", @@ -2361,7 +2363,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d97ca172ae9dc9f9b779a6e3a65d308f2af74e5b8c921299075bdb4a0370e914" dependencies = [ "base16ct 0.2.0", - "crypto-bigint 0.5.2", + "crypto-bigint 0.5.3", "digest 0.10.7", "ff 0.13.0", "generic-array 0.14.7", @@ -2373,6 +2375,12 @@ dependencies = [ "zeroize", ] +[[package]] +name = "embedded-io" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced" + [[package]] name = "encode_unicode" version = "0.3.6" @@ -2430,9 +2438,9 @@ dependencies = [ [[package]] name = "enum-ordinalize" -version = "3.1.13" +version = "3.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4f76552f53cefc9a7f64987c3701b99d982f7690606fd67de1d09712fbf52f1" +checksum = "1bf1fa3f06bbff1ea5b1a9c7b14aa992a39657db60a2759457328d7e058f49ee" dependencies = [ "num-bigint", "num-traits", @@ -2443,9 +2451,9 @@ dependencies = [ [[package]] name = "enumset" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e875f1719c16de097dee81ed675e2d9bb63096823ed3f0ca827b7dea3028bbbb" +checksum = "226c0da7462c13fb57e5cc9e0dc8f0635e7d27f276a3a7fd30054647f669007d" dependencies = [ "enumset_derive", ] @@ -2470,25 +2478,14 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.3" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "136526188508e25c6fef639d7927dfb3e0e3084488bf202267829cf7fc23dbdd" +checksum = "7c18ee0ed65a5f1f81cac6b1d213b69c35fa47d4252ad41f1486dbd8226fe36e" dependencies = [ - "errno-dragonfly", "libc", "windows-sys 0.48.0", ] -[[package]] -name = "errno-dragonfly" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" -dependencies = [ - "cc", - "libc", -] - [[package]] name = "eth-keystore" version = "0.5.0" @@ -2540,9 +2537,9 @@ dependencies = [ [[package]] name = "ethnum" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8ff382b2fa527fb7fb06eeebfc5bbb3f17e3cc6b9d70b006c41daa8824adac" +checksum = "b90ca2580b73ab6a1f724b76ca11ab632df820fd6040c336200d2c1df7b3c82c" [[package]] name = "event-listener" @@ -2608,9 +2605,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" [[package]] name = "ff" @@ -2634,9 +2631,9 @@ dependencies = [ [[package]] name = "fiat-crypto" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a481586acf778f1b1455424c343f71124b048ffa5f4fc3f8f6ae9dc432dcb3c7" +checksum = "f69037fe1b785e84986b4f2cbcf647381876a00671d25ceef715d7812dd7e1dd" [[package]] name = "filecheck" @@ -2660,6 +2657,12 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "finl_unicode" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fcfdc7a0362c9f4444381a9e697c79d435fe65b52a37466fc2c1184cee9edc6" + [[package]] name = "fixed-hash" version = "0.8.0" @@ -2680,9 +2683,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.27" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6c98ee8095e9d1dcbf2fcc6d95acccb90d1c81db1e44725c6a984b1dbdfb010" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" dependencies = [ "crc32fast", "miniz_oxide", @@ -2872,7 +2875,7 @@ dependencies = [ "async-graphql 4.0.16", "async-trait", "axum 0.5.17", - "clap 4.4.1", + "clap 4.4.7", "derive_more", "enum-iterator 1.4.1", "fuel-core-chain-config", @@ -2906,7 +2909,7 @@ dependencies = [ "tokio-stream", "tower-http", "tracing", - "uuid 1.4.1", + "uuid 1.5.0", ] [[package]] @@ -2942,7 +2945,7 @@ dependencies = [ "fuel-core-types", "futures", "hex", - "hyper-rustls 0.24.1", + "hyper-rustls 0.24.2", "itertools 0.10.5", "reqwest", "serde", @@ -3284,7 +3287,7 @@ dependencies = [ "jsonwebtoken", "serde", "serde_json", - "sqlparser", + "sqlparser 0.35.0", "sqlx", "strum", "thiserror", @@ -3402,6 +3405,7 @@ version = "0.23.0" dependencies = [ "async-graphql-parser 5.0.10", "async-graphql-value 5.0.10", + "convert_case 0.6.0", "fuel-abi-types 0.3.0", "fuel-indexer-database-types", "fuel-indexer-lib", @@ -3442,6 +3446,7 @@ dependencies = [ "serde", "serde_json", "sha2 0.10.8", + "sqlparser 0.39.0", ] [[package]] @@ -3456,7 +3461,7 @@ dependencies = [ "fuel-indexer-metrics", "sqlx", "tracing", - "uuid 1.4.1", + "uuid 1.5.0", ] [[package]] @@ -3527,7 +3532,7 @@ dependencies = [ "sqlx", "thiserror", "tokio", - "toml 0.8.0", + "toml 0.8.8", "tracing", "tracing-subscriber 0.2.25", "trybuild", @@ -3899,7 +3904,7 @@ dependencies = [ "rand", "serde", "serde_json", - "serde_with 3.3.0", + "serde_with 3.4.0", "tempfile", "tokio", "which", @@ -3913,9 +3918,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" +checksum = "da0290714b38af9b4a7b094b8a37086d1b4e61f2df9122c3cad2577669145335" dependencies = [ "futures-channel", "futures-core", @@ -3928,9 +3933,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" +checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb" dependencies = [ "futures-core", "futures-sink", @@ -3938,15 +3943,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" +checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" [[package]] name = "futures-executor" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" +checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc" dependencies = [ "futures-core", "futures-task", @@ -3966,9 +3971,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" +checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa" [[package]] name = "futures-lite" @@ -3987,9 +3992,9 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" +checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb" dependencies = [ "proc-macro2", "quote", @@ -3998,21 +4003,21 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" +checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817" [[package]] name = "futures-task" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" +checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2" [[package]] name = "futures-util" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" +checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104" dependencies = [ "futures-channel", "futures-core", @@ -4066,9 +4071,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.10" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" +checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f" dependencies = [ "cfg-if", "js-sys", @@ -4204,9 +4209,9 @@ checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" [[package]] name = "handlebars" -version = "4.3.7" +version = "4.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83c3372087601b532857d332f5957cbae686da52bb7810bf038c3e3c3cc2fa0d" +checksum = "faa67bab9ff362228eb3d00bd024a4965d8231bbb7921167f0cfa66c6626b225" dependencies = [ "log", "pest", @@ -4231,7 +4236,7 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" dependencies = [ - "ahash 0.7.6", + "ahash 0.7.7", ] [[package]] @@ -4240,16 +4245,16 @@ version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" dependencies = [ - "ahash 0.8.3", + "ahash 0.8.6", ] [[package]] name = "hashbrown" -version = "0.14.0" +version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" +checksum = "f93e7192158dbcda357bdec5fb5788eebf8bbac027f3f33e719d29135ae84156" dependencies = [ - "ahash 0.8.3", + "ahash 0.8.6", "allocator-api2", ] @@ -4259,7 +4264,7 @@ version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" dependencies = [ - "hashbrown 0.14.0", + "hashbrown 0.14.2", ] [[package]] @@ -4268,7 +4273,7 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06683b93020a07e3dbcf5f8c0f6d40080d725bea7936fc01ad345c01b97dc270" dependencies = [ - "base64 0.21.3", + "base64 0.21.5", "bytes", "headers-core", "http", @@ -4338,9 +4343,9 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" +checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" [[package]] name = "hex" @@ -4441,7 +4446,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2 0.4.9", + "socket2 0.4.10", "tokio", "tower-service", "tracing", @@ -4482,19 +4487,19 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.24.1" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d78e1e73ec14cf7375674f74d7dde185c8206fd9dea6fb6295e8a98098aaa97" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ "futures-util", "http", "hyper", "log", - "rustls 0.21.7", + "rustls 0.21.8", "rustls-native-certs 0.6.3", "tokio", "tokio-rustls 0.24.1", - "webpki-roots 0.23.1", + "webpki-roots 0.25.2", ] [[package]] @@ -4524,16 +4529,16 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.57" +version = "0.1.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613" +checksum = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "windows", + "windows-core", ] [[package]] @@ -4647,19 +4652,19 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" +checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" dependencies = [ "equivalent", - "hashbrown 0.14.0", + "hashbrown 0.14.2", ] [[package]] name = "indicatif" -version = "0.17.6" +version = "0.17.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b297dc40733f23a0e52728a58fa9489a5b7638a324932de16b41adc3ef80730" +checksum = "fb28741c9db9a713d93deb3bb9515c20788cef5815265bee4980e87bde7e0f25" dependencies = [ "console", "instant", @@ -4679,9 +4684,9 @@ dependencies = [ [[package]] name = "insta" -version = "1.31.0" +version = "1.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0770b0a3d4c70567f0d58331f3088b0e4c4f56c9b8d764efe654b4a5d46de3a" +checksum = "5d64600be34b2fcfc267740a243fa7744441bb4947a619ac4e5bb6507f35fbfc" dependencies = [ "console", "lazy_static", @@ -4706,16 +4711,16 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" dependencies = [ - "hermit-abi 0.3.2", + "hermit-abi 0.3.3", "libc", "windows-sys 0.48.0", ] [[package]] name = "ipnet" -version = "2.8.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" [[package]] name = "is-terminal" @@ -4723,8 +4728,8 @@ version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" dependencies = [ - "hermit-abi 0.3.2", - "rustix 0.38.10", + "hermit-abi 0.3.3", + "rustix 0.38.21", "windows-sys 0.48.0", ] @@ -4754,18 +4759,18 @@ checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" [[package]] name = "jobserver" -version = "0.1.26" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" +checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d" dependencies = [ "libc", ] [[package]] name = "js-sys" -version = "0.3.64" +version = "0.3.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" +checksum = "54c0c35952f67de54bb584e9fd912b3023117cbafc0a77d8f3dee1fb5f572fe8" dependencies = [ "wasm-bindgen", ] @@ -4776,9 +4781,9 @@ version = "8.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6971da4d9c3aa03c3d8f3ff0f4155b534aad021292003895a469716b2a230378" dependencies = [ - "base64 0.21.3", + "base64 0.21.5", "pem", - "ring", + "ring 0.16.20", "serde", "serde_json", "simple_asn1", @@ -4854,9 +4859,9 @@ checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" [[package]] name = "libc" -version = "0.2.147" +version = "0.2.150" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" +checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" [[package]] name = "libloading" @@ -4868,6 +4873,17 @@ dependencies = [ "winapi", ] +[[package]] +name = "libredox" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" +dependencies = [ + "bitflags 2.4.1", + "libc", + "redox_syscall 0.4.1", +] + [[package]] name = "librocksdb-sys" version = "0.11.0+8.1.1" @@ -4908,33 +4924,32 @@ checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" [[package]] name = "linux-raw-sys" -version = "0.4.5" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503" +checksum = "969488b55f8ac402214f3f5fd243ebb7206cf82de60d3172994707a4bcc2b829" [[package]] name = "local-channel" -version = "0.1.3" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f303ec0e94c6c54447f84f3b0ef7af769858a9c4ef56ef2a986d3dcd4c3fc9c" +checksum = "b6cbc85e69b8df4b8bb8b89ec634e7189099cea8927a276b7384ce5488e53ec8" dependencies = [ "futures-core", "futures-sink", - "futures-util", "local-waker", ] [[package]] name = "local-waker" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e34f76eb3611940e0e7d53a9aaa4e6a3151f69541a282fd0dad5571420c53ff1" +checksum = "4d873d7c67ce09b42110d801813efbc9364414e356be9935700d368351657487" [[package]] name = "lock_api" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" dependencies = [ "autocfg", "scopeguard", @@ -5011,24 +5026,25 @@ checksum = "73cbba799671b762df5a175adf59ce145165747bb891505c43d09aefbbf38beb" [[package]] name = "matchit" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed1202b2a6f884ae56f04cff409ab315c5ce26b5e58d7412e484f01fd52f52ef" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" [[package]] name = "md-5" -version = "0.10.5" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" dependencies = [ + "cfg-if", "digest 0.10.7", ] [[package]] name = "memchr" -version = "2.6.2" +version = "2.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5486aed0026218e61b8a01d5fbd5a0a134649abb71a0e53b7bc088529dced86e" +checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" [[package]] name = "memmap2" @@ -5039,6 +5055,15 @@ dependencies = [ "libc", ] +[[package]] +name = "memmap2" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d28bba84adfe6646737845bc5ebbfa2c08424eb1c37e94a1fd2a82adb56a872" +dependencies = [ + "libc", +] + [[package]] name = "memoffset" version = "0.8.0" @@ -5101,9 +5126,9 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" +checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0" dependencies = [ "libc", "log", @@ -5196,9 +5221,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" dependencies = [ "autocfg", ] @@ -5209,7 +5234,7 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi 0.3.2", + "hermit-abi 0.3.3", "libc", ] @@ -5221,9 +5246,9 @@ checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" [[package]] name = "object" -version = "0.32.0" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77ac5bbd07aea88c60a577a1ce218075ffd59208b2d7ca97adf9bfc5aeb21ebe" +checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" dependencies = [ "memchr", ] @@ -5254,11 +5279,11 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "openssl" -version = "0.10.57" +version = "0.10.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bac25ee399abb46215765b1cb35bc0212377e58a061560d8b29b024fd0430e7c" +checksum = "7a257ad03cd8fb16ad4172fedf8094451e1af1c4b70097636ef2eac9a5f0cc33" dependencies = [ - "bitflags 2.4.0", + "bitflags 2.4.1", "cfg-if", "foreign-types", "libc", @@ -5286,18 +5311,18 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-src" -version = "111.27.0+1.1.1v" +version = "300.1.6+3.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06e8f197c82d7511c5b014030c9b1efeda40d7d5f99d23b4ceed3524a5e63f02" +checksum = "439fac53e092cd7442a3660c85dde4643ab3b5bd39040912388dcdabf6b88085" dependencies = [ "cc", ] [[package]] name = "openssl-sys" -version = "0.9.92" +version = "0.9.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db7e971c2c2bba161b2d2fdf37080177eff520b3bc044787c7f1f5f9e78d869b" +checksum = "40a4130519a360279579c2053038317e40eff64d13fd3f004f9e1b72b8a6aaf9" dependencies = [ "cc", "libc", @@ -5318,9 +5343,9 @@ dependencies = [ [[package]] name = "os_str_bytes" -version = "6.5.1" +version = "6.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d5d9eb14b174ee9aa2ef96dc2b94637a2d4b6e7cb873c7e171f0c20c6cf3eac" +checksum = "e2355d85b9a3786f481747ced0e0ff2ba35213a1f9bd406ed906554d7af805a1" [[package]] name = "overload" @@ -5374,9 +5399,9 @@ dependencies = [ [[package]] name = "parking" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14f2252c834a40ed9bb5422029649578e63aa341ac401f74e719dd1afda8394e" +checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" [[package]] name = "parking_lot" @@ -5396,7 +5421,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ "lock_api", - "parking_lot_core 0.9.8", + "parking_lot_core 0.9.9", ] [[package]] @@ -5415,13 +5440,13 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.8" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.3.5", + "redox_syscall 0.4.1", "smallvec", "windows-targets 0.48.5", ] @@ -5515,9 +5540,9 @@ checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" [[package]] name = "pest" -version = "2.7.3" +version = "2.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7a4d085fd991ac8d5b05a147b437791b4260b76326baf0fc60cf7c9c27ecd33" +checksum = "ae9cee2a55a544be8b89dc6848072af97a20f2422603c10865be2a42b580fff5" dependencies = [ "memchr", "thiserror", @@ -5526,9 +5551,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.7.3" +version = "2.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2bee7be22ce7918f641a33f08e3f43388c7656772244e2bbb2477f44cc9021a" +checksum = "81d78524685f5ef2a3b3bd1cafbc9fcabb036253d9b1463e726a91cd16e2dfc2" dependencies = [ "pest", "pest_generator", @@ -5536,9 +5561,9 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.7.3" +version = "2.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1511785c5e98d79a05e8a6bc34b4ac2168a0e3e92161862030ad84daa223141" +checksum = "68bd1206e71118b5356dae5ddc61c8b11e28b09ef6a31acbd15ea48a28e0c227" dependencies = [ "pest", "pest_meta", @@ -5549,9 +5574,9 @@ dependencies = [ [[package]] name = "pest_meta" -version = "2.7.3" +version = "2.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42f0394d3123e33353ca5e1e89092e533d2cc490389f2bd6131c43c634ebc5f" +checksum = "7c747191d4ad9e4a4ab9c8798f1e82a39affe7ef9648390b7e5548d18e099de6" dependencies = [ "once_cell", "pest", @@ -5565,7 +5590,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ "fixedbitset", - "indexmap 2.0.0", + "indexmap 2.1.0", ] [[package]] @@ -5664,6 +5689,17 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "piper" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4" +dependencies = [ + "atomic-waker", + "fastrand 2.0.1", + "futures-io", +] + [[package]] name = "pkcs8" version = "0.9.0" @@ -5742,9 +5778,9 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.4.3" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31114a898e107c51bb1609ffaf55a0e011cf6a4d7f1170d0015a165082c0338b" +checksum = "3bccab0e7fd7cc19f820a1c8c91720af652d0c88dc9664dd72aef2614f04af3b" [[package]] name = "portpicker" @@ -5757,15 +5793,22 @@ dependencies = [ [[package]] name = "postcard" -version = "1.0.7" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d534c6e61df1c7166e636ca612d9820d486fe96ddad37f7abc671517b297488e" +checksum = "a55c51ee6c0db07e68448e336cf8ea4131a620edefebf9893e759b2d793420f8" dependencies = [ "cobs", + "embedded-io", "heapless", "serde", ] +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "ppv-lite86" version = "0.2.17" @@ -5784,9 +5827,9 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.12" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c64d9ba0963cdcea2e1b2230fbae2bab30eb25a174be395c41e764bfb65dd62" +checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d" dependencies = [ "proc-macro2", "syn 2.0.39", @@ -5794,18 +5837,18 @@ dependencies = [ [[package]] name = "primeorder" -version = "0.13.2" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c2fcef82c0ec6eefcc179b978446c399b3cdf73c392c35604e399eee6df1ee3" +checksum = "c7dbe9ed3b56368bd99483eb32fe9c17fdd3730aebadc906918ce78d54c7eeb4" dependencies = [ "elliptic-curve 0.13.6", ] [[package]] name = "primitive-types" -version = "0.12.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f3486ccba82358b11a77516035647c34ba167dfa53312630de83b12bd4f3d66" +checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" dependencies = [ "fixed-hash", "impl-codec", @@ -5821,7 +5864,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" dependencies = [ "once_cell", - "toml_edit 0.19.14", + "toml_edit 0.19.15", ] [[package]] @@ -6028,9 +6071,9 @@ dependencies = [ [[package]] name = "rayon" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" +checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1" dependencies = [ "either", "rayon-core", @@ -6038,14 +6081,12 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" +checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed" dependencies = [ - "crossbeam-channel", "crossbeam-deque", "crossbeam-utils", - "num_cpus", ] [[package]] @@ -6066,14 +6107,23 @@ dependencies = [ "bitflags 1.3.2", ] +[[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.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" dependencies = [ "getrandom", - "redox_syscall 0.2.16", + "libredox", "thiserror", ] @@ -6147,20 +6197,20 @@ dependencies = [ [[package]] name = "rend" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581008d2099240d37fb08d77ad713bcaec2c4d89d50b5b21a8bb1996bbab68ab" +checksum = "a2571463863a6bd50c32f94402933f03457a3fbaf697a707c5be741e459f08fd" dependencies = [ "bytecheck", ] [[package]] name = "reqwest" -version = "0.11.20" +version = "0.11.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e9ad3fe7488d7e34558a2033d45a0c90b72d97b4f80705666fea71472e2e6a1" +checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b" dependencies = [ - "base64 0.21.3", + "base64 0.21.5", "bytes", "cookie", "cookie_store", @@ -6171,7 +6221,7 @@ dependencies = [ "http", "http-body", "hyper", - "hyper-rustls 0.24.1", + "hyper-rustls 0.24.2", "hyper-tls", "ipnet", "js-sys", @@ -6182,11 +6232,12 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls 0.21.7", + "rustls 0.21.8", "rustls-pemfile", "serde", "serde_json", "serde_urlencoded", + "system-configuration", "tokio", "tokio-native-tls", "tokio-rustls 0.24.1", @@ -6232,11 +6283,25 @@ dependencies = [ "libc", "once_cell", "spin 0.5.2", - "untrusted", + "untrusted 0.7.1", "web-sys", "winapi", ] +[[package]] +name = "ring" +version = "0.17.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb0205304757e5d899b9c2e448b867ffd03ae7f988002e47cd24954391394d0b" +dependencies = [ + "cc", + "getrandom", + "libc", + "spin 0.9.8", + "untrusted 0.9.0", + "windows-sys 0.48.0", +] + [[package]] name = "ripemd" version = "0.1.3" @@ -6261,7 +6326,7 @@ dependencies = [ "rkyv_derive", "seahash", "tinyvec", - "uuid 1.4.1", + "uuid 1.5.0", ] [[package]] @@ -6324,9 +6389,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.37.23" +version = "0.37.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d69718bf81c6127a49dc64e44a742e8bb9213c0ff8869a22c308f84c1d4ab06" +checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" dependencies = [ "bitflags 1.3.2", "errno", @@ -6338,14 +6403,14 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.10" +version = "0.38.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed6248e1caa625eb708e266e06159f135e8c26f2bb7ceb72dc4b2766d0340964" +checksum = "2b426b0506e5d50a7d8dafcf2e81471400deb602392c7dd110815afb4eaf02a3" dependencies = [ - "bitflags 2.4.0", + "bitflags 2.4.1", "errno", "libc", - "linux-raw-sys 0.4.5", + "linux-raw-sys 0.4.11", "windows-sys 0.48.0", ] @@ -6357,7 +6422,7 @@ checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7" dependencies = [ "base64 0.13.1", "log", - "ring", + "ring 0.16.20", "sct 0.6.1", "webpki 0.21.4", ] @@ -6369,21 +6434,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b80e3dec595989ea8510028f30c408a4630db12c9cbb8de34203b89d6577e99" dependencies = [ "log", - "ring", - "sct 0.7.0", - "webpki 0.22.1", + "ring 0.16.20", + "sct 0.7.1", + "webpki 0.22.4", ] [[package]] name = "rustls" -version = "0.21.7" +version = "0.21.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd8d6c9f025a446bc4d18ad9632e69aec8f287aa84499ee335599fabd20c3fd8" +checksum = "446e14c5cda4f3f30fe71863c34ec70f5ac79d6087097ad0bb433e1be5edf04c" dependencies = [ "log", - "ring", - "rustls-webpki 0.101.4", - "sct 0.7.0", + "ring 0.17.5", + "rustls-webpki", + "sct 0.7.1", ] [[package]] @@ -6412,31 +6477,21 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2" -dependencies = [ - "base64 0.21.3", -] - -[[package]] -name = "rustls-webpki" -version = "0.100.2" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e98ff011474fa39949b7e5c0428f9b4937eda7da7848bbb947786b7be0b27dab" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" dependencies = [ - "ring", - "untrusted", + "base64 0.21.5", ] [[package]] name = "rustls-webpki" -version = "0.101.4" +version = "0.101.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d93931baf2d282fff8d3a532bbfd7653f734643161b87e3e01e59a04439bf0d" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" dependencies = [ - "ring", - "untrusted", + "ring 0.17.5", + "untrusted 0.9.0", ] [[package]] @@ -6502,18 +6557,18 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce" dependencies = [ - "ring", - "untrusted", + "ring 0.16.20", + "untrusted 0.7.1", ] [[package]] name = "sct" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" dependencies = [ - "ring", - "untrusted", + "ring 0.17.5", + "untrusted 0.9.0", ] [[package]] @@ -6620,6 +6675,12 @@ dependencies = [ "libc", ] +[[package]] +name = "self_cell" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c309e515543e67811222dbc9e3dd7e1056279b782e1dacffe4242b718734fb6" + [[package]] name = "semver" version = "1.0.20" @@ -6628,9 +6689,9 @@ checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" [[package]] name = "serde" -version = "1.0.188" +version = "1.0.192" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e" +checksum = "bca2a08484b285dcb282d0f67b26cadc0df8b19f8c12502c13d966bf9482f001" dependencies = [ "serde_derive", ] @@ -6648,9 +6709,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.188" +version = "1.0.192" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2" +checksum = "d6c7207fbec9faa48073f3e3074cbe553af6ea512d7c21ba46e434e70ea9fbc1" dependencies = [ "proc-macro2", "quote", @@ -6680,9 +6741,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186" +checksum = "12022b835073e5b11e90a14f86838ceb1c8fb0325b72416845c487ac0fa95e80" dependencies = [ "serde", ] @@ -6711,9 +6772,9 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ca3b16a3d82c4088f343b7480a93550b3eabe1a358569c2dfe38bbcead07237" +checksum = "64cd236ccc1b7a29e7e2739f27c0b2dd199804abc4290e32f59f3b68d6405c23" dependencies = [ "serde", ] @@ -6744,9 +6805,9 @@ dependencies = [ [[package]] name = "sha1" -version = "0.10.5" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if", "cpufeatures", @@ -6801,13 +6862,23 @@ dependencies = [ [[package]] name = "sharded-slab" -version = "0.1.4" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" dependencies = [ "lazy_static", ] +[[package]] +name = "shared-buffer" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2cf61602ee61e2f83dd016b3e6387245291cf728ea071c378b35088125b4d995" +dependencies = [ + "bytes", + "memmap2 0.6.2", +] + [[package]] name = "shared_child" version = "1.0.0" @@ -6820,9 +6891,9 @@ dependencies = [ [[package]] name = "shlex" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3" +checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380" [[package]] name = "signal-hook-registry" @@ -6861,9 +6932,9 @@ checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a" [[package]] name = "similar" -version = "2.2.1" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "420acb44afdae038210c99e69aae24109f32f15500aa708e81d46c9f29d55fcf" +checksum = "2aeaf503862c419d66959f5d7ca015337d864e9c49485d771b732e2a20453597" [[package]] name = "simple-wasm" @@ -6885,7 +6956,7 @@ dependencies = [ "num-bigint", "num-traits", "thiserror", - "time 0.3.28", + "time 0.3.30", ] [[package]] @@ -6921,9 +6992,9 @@ checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" [[package]] name = "smallvec" -version = "1.11.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9" +checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a" [[package]] name = "snafu" @@ -6950,9 +7021,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" dependencies = [ "libc", "winapi", @@ -6960,9 +7031,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.3" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2538b18701741680e0322a2302176d3253a35388e2e62f172f64f4f16605f877" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" dependencies = [ "libc", "windows-sys 0.48.0", @@ -7005,11 +7076,11 @@ dependencies = [ [[package]] name = "sqlformat" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c12bc9199d1db8234678b7051747c07f517cdcf019262d1847b94ec8b1aee3e" +checksum = "6b7b278788e7be4d0d29c0f39497a0eef3fba6bbc8e70d8bf7fde46edeaa9e85" dependencies = [ - "itertools 0.10.5", + "itertools 0.11.0", "nom", "unicode_categories", ] @@ -7023,6 +7094,15 @@ dependencies = [ "log", ] +[[package]] +name = "sqlparser" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "743b4dc2cbde11890ccb254a8fc9d537fa41b36da00de2a1c5e9848c9bc42bd7" +dependencies = [ + "log", +] + [[package]] name = "sqlx" version = "0.6.3" @@ -7039,7 +7119,7 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa8241483a83a3f33aa5fff7e7d9def398ff9990b2752b6c6112b83c6d246029" dependencies = [ - "ahash 0.7.6", + "ahash 0.7.7", "atoi", "base64 0.13.1", "bigdecimal", @@ -7083,7 +7163,7 @@ dependencies = [ "sqlx-rt", "stringprep", "thiserror", - "time 0.3.28", + "time 0.3.30", "tokio-stream", "url", "webpki-roots 0.22.6", @@ -7137,10 +7217,11 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "stringprep" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db3737bde7edce97102e0e2b15365bf7a20bfdb5f60f4f9e8d7004258a51a8da" +checksum = "bb41d74e231a107a1b4ee36bd1214b11285b77768d2e3824aedafa988fd36ee6" dependencies = [ + "finl_unicode", "unicode-bidi", "unicode-normalization", ] @@ -7351,6 +7432,27 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "tai64" version = "4.0.0" @@ -7379,28 +7481,28 @@ dependencies = [ [[package]] name = "target-lexicon" -version = "0.12.11" +version = "0.12.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d0e916b1148c8e263850e1ebcbd046f333e0683c724876bb0da63ea4373dc8a" +checksum = "14c39fd04924ca3a864207c66fc2cd7d22d7c016007f9ce846cbb9326331930a" [[package]] name = "tempfile" -version = "3.8.0" +version = "3.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef" +checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5" dependencies = [ "cfg-if", - "fastrand 2.0.0", - "redox_syscall 0.3.5", - "rustix 0.38.10", + "fastrand 2.0.1", + "redox_syscall 0.4.1", + "rustix 0.38.21", "windows-sys 0.48.0", ] [[package]] name = "termcolor" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" +checksum = "6093bad37da69aab9d123a8091e4be0aa4a03e4d601ec641c327398315f62b64" dependencies = [ "winapi-util", ] @@ -7454,12 +7556,13 @@ dependencies = [ [[package]] name = "time" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17f6bb557fd245c28e6411aa56b6403c689ad95061f50e4be16c274e70a17e48" +checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5" dependencies = [ "deranged", "itoa", + "powerfmt", "serde", "time-core", "time-macros", @@ -7467,15 +7570,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a942f44339478ef67935ab2bbaec2fb0322496cf3cbe84b261e06ac3814c572" +checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20" dependencies = [ "time-core", ] @@ -7516,9 +7619,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.33.0" +version = "1.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f38200e3ef7995e5ef13baec2f432a6da0aa9ac495b2c0e8f3b7eec2c92d653" +checksum = "d0c014766411e834f7af5b8f4cf46257aab4036ca95e9d2c144a10f59ad6f5b9" dependencies = [ "backtrace", "bytes", @@ -7528,7 +7631,7 @@ dependencies = [ "parking_lot 0.12.1", "pin-project-lite", "signal-hook-registry", - "socket2 0.5.3", + "socket2 0.5.5", "tokio-macros", "windows-sys 0.48.0", ] @@ -7545,9 +7648,9 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" +checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", @@ -7593,7 +7696,7 @@ checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" dependencies = [ "rustls 0.20.9", "tokio", - "webpki 0.22.1", + "webpki 0.22.4", ] [[package]] @@ -7602,7 +7705,7 @@ version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" dependencies = [ - "rustls 0.21.7", + "rustls 0.21.8", "tokio", ] @@ -7620,9 +7723,9 @@ dependencies = [ [[package]] name = "tokio-tungstenite" -version = "0.20.0" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b2dbec703c26b00d74844519606ef15d09a7d6857860f84ad223dec002ddea2" +checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c" dependencies = [ "futures-util", "log", @@ -7632,9 +7735,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.8" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" dependencies = [ "bytes", "futures-core", @@ -7656,43 +7759,43 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.0" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c226a7bba6d859b63c92c4b4fe69c5b6b72d0cb897dbc8e6012298e6154cb56e" +checksum = "a1a195ec8c9da26928f773888e0742ca3ca1040c6cd859c919c9f59c1954ab35" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.20.0", + "toml_edit 0.21.0", ] [[package]] name = "toml_datetime" -version = "0.6.3" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" dependencies = [ "serde", ] [[package]] name = "toml_edit" -version = "0.19.14" +version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.0.0", + "indexmap 2.1.0", "toml_datetime", "winnow", ] [[package]] name = "toml_edit" -version = "0.20.0" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ff63e60a958cefbb518ae1fd6566af80d9d4be430a33f3723dfc47d1d411d95" +checksum = "d34d383cd00a163b4a5b85053df514d45bc330f6de7737edfe0a93311d1eaa03" dependencies = [ - "indexmap 2.0.0", + "indexmap 2.1.0", "serde", "serde_spanned", "toml_datetime", @@ -7756,11 +7859,10 @@ checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" [[package]] name = "tracing" -version = "0.1.37" +version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ - "cfg-if", "log", "pin-project-lite", "tracing-attributes", @@ -7769,9 +7871,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.26" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", @@ -7780,9 +7882,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.31" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ "once_cell", "valuable", @@ -7802,12 +7904,12 @@ dependencies = [ [[package]] name = "tracing-log" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" +checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2" dependencies = [ - "lazy_static", "log", + "once_cell", "tracing-core", ] @@ -7872,9 +7974,9 @@ checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" [[package]] name = "trybuild" -version = "1.0.83" +version = "1.0.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6df60d81823ed9c520ee897489573da4b1d79ffbe006b8134f46de1a1aa03555" +checksum = "196a58260a906cedb9bf6d8034b6379d0c11f552416960452f267402ceeddff1" dependencies = [ "basic-toml", "glob", @@ -7887,9 +7989,9 @@ dependencies = [ [[package]] name = "tungstenite" -version = "0.20.0" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e862a1c4128df0112ab625f55cd5c934bcb4312ba80b39ae4b4835a3fd58e649" +checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" dependencies = [ "byteorder", "bytes", @@ -7906,9 +8008,9 @@ dependencies = [ [[package]] name = "typenum" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "ucd-trie" @@ -7945,9 +8047,9 @@ checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-ident" -version = "1.0.11" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-normalization" @@ -7966,9 +8068,9 @@ checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" [[package]] name = "unicode-width" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" +checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" [[package]] name = "unicode-xid" @@ -7997,6 +8099,12 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + [[package]] name = "url" version = "2.4.1" @@ -8032,9 +8140,9 @@ dependencies = [ [[package]] name = "uuid" -version = "1.4.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d" +checksum = "88ad59a7560b41a70d191093a945f0b87bc1deeda46fb237479708a1d6b6cdfc" dependencies = [ "getrandom", ] @@ -8047,9 +8155,9 @@ checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" [[package]] name = "value-bag" -version = "1.4.1" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d92ccd67fb88503048c01b59152a04effd0782d035a83a6d256ce6085f08f4a3" +checksum = "4a72e1902dde2bd6441347de2b70b7f5d59bf157c6c62f0c44572607a1d55bbe" [[package]] name = "vcpkg" @@ -8077,15 +8185,15 @@ checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" [[package]] name = "waker-fn" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" +checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690" [[package]] name = "walkdir" -version = "2.3.3" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" +checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" dependencies = [ "same-file", "winapi-util", @@ -8114,9 +8222,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.87" +version = "0.2.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342" +checksum = "7daec296f25a1bae309c0cd5c29c4b260e510e6d813c286b19eaadf409d40fce" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -8124,9 +8232,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.87" +version = "0.2.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd" +checksum = "e397f4664c0e4e428e8313a469aaa58310d302159845980fd23b0f22a847f217" dependencies = [ "bumpalo", "log", @@ -8162,9 +8270,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.37" +version = "0.4.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03" +checksum = "9afec9963e3d0994cac82455b2b3502b81a7f40f9a0d32181f7528d9f4b43e02" dependencies = [ "cfg-if", "js-sys", @@ -8174,9 +8282,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.87" +version = "0.2.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" +checksum = "5961017b3b08ad5f3fe39f1e79877f8ee7c23c5e5fd5eb80de95abc41f1f16b2" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -8184,9 +8292,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.87" +version = "0.2.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" +checksum = "c5353b8dab669f5e10f5bd76df26a9360c748f054f862ff5f3f8aae0c7fb3907" dependencies = [ "proc-macro2", "quote", @@ -8197,9 +8305,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.87" +version = "0.2.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" +checksum = "0d046c5d029ba91a1ed14da14dca44b68bf2f124cfbaf741c54151fdb3e0750b" [[package]] name = "wasm-encoder" @@ -8225,9 +8333,9 @@ dependencies = [ [[package]] name = "wasmer" -version = "4.1.2" +version = "4.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7142dbb91ede83cc0aef2301fa75fcc7e0c9e5a7d5358e3c4f3a7249fe9ce8" +checksum = "50cb1ae2956aac1fbbcf334c543c1143cdf7d5b0a5fb6c3d23a17bf37dd1f47b" dependencies = [ "bytes", "cfg-if", @@ -8238,6 +8346,7 @@ dependencies = [ "rustc-demangle", "serde", "serde-wasm-bindgen", + "shared-buffer", "target-lexicon", "thiserror", "wasm-bindgen", @@ -8253,19 +8362,23 @@ dependencies = [ [[package]] name = "wasmer-compiler" -version = "4.1.2" +version = "4.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5b99c70711ec7631b602a9fc95577c40df21e8f3916159c9d80c3fb4f77abdc" +checksum = "12fd9aeef339095798d1e04957d5657d97490b1112f145cbf08b98f6393b4a0a" dependencies = [ "backtrace", + "bytes", "cfg-if", "enum-iterator 0.7.0", "enumset", "lazy_static", "leb128", - "memmap2", + "memmap2 0.5.10", "more-asserts", "region", + "rkyv", + "self_cell", + "shared-buffer", "smallvec", "thiserror", "wasmer-types", @@ -8276,9 +8389,9 @@ dependencies = [ [[package]] name = "wasmer-compiler-cranelift" -version = "4.1.2" +version = "4.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52aef2ef35513a04fed54de9a7dc9c469d4742a5c2e378a5f7e2a79b1327e3bd" +checksum = "344f5f1186c122756232fe7f156cc8d2e7bf333d5a658e81e25efa3415c26d07" dependencies = [ "cranelift-codegen", "cranelift-entity", @@ -8295,9 +8408,9 @@ dependencies = [ [[package]] name = "wasmer-derive" -version = "4.1.2" +version = "4.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25bb1425c9e4dc3e2d3aacd6e82e22e27a3127379e0d09bcbdf25ff376229162" +checksum = "2ac8c1f2dc0ed3c7412a5546e468365184a461f8ce7dfe2a707b621724339f91" dependencies = [ "proc-macro-error", "proc-macro2", @@ -8307,9 +8420,9 @@ dependencies = [ [[package]] name = "wasmer-middlewares" -version = "4.1.2" +version = "4.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acfc08fb8e2e1511f1d69302d7406ace6c0ec0c90e103f8c0a5aa81ecb9fe81f" +checksum = "2dcde781a2db145acfff3873197838dc125bb2fab3e7ee3edbcf6b094eae6588" dependencies = [ "wasmer", "wasmer-types", @@ -8318,9 +8431,9 @@ dependencies = [ [[package]] name = "wasmer-types" -version = "4.1.2" +version = "4.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7e32ed799fa8c0d96ca9615d9ea8006857a0f0c18e7c2ed8082bd5c63a9ea70" +checksum = "5a57ecbf218c0a9348d4dfbdac0f9d42d9201ae276dffb13e61ea4ff939ecce7" dependencies = [ "bytecheck", "enum-iterator 0.7.0", @@ -8334,14 +8447,15 @@ dependencies = [ [[package]] name = "wasmer-vm" -version = "4.1.2" +version = "4.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0847513cb176b5d62a6f65d6ae474594935e726a10e9e3387177d9cbf8b8cda0" +checksum = "60c3513477bc0097250f6e34a640e2a903bb0ee57e6bb518c427f72c06ac7728" dependencies = [ "backtrace", "cc", "cfg-if", "corosensei", + "crossbeam-queue", "dashmap", "derivative", "enum-iterator 0.7.0", @@ -8401,9 +8515,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.64" +version = "0.3.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b" +checksum = "5db499c5f66323272151db0e666cd34f78617522fb0c1604d31a27c50c206a85" dependencies = [ "js-sys", "wasm-bindgen", @@ -8415,18 +8529,18 @@ version = "0.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea" dependencies = [ - "ring", - "untrusted", + "ring 0.16.20", + "untrusted 0.7.1", ] [[package]] name = "webpki" -version = "0.22.1" +version = "0.22.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0e74f82d49d545ad128049b7e88f6576df2da6b02e9ce565c6f533be576957e" +checksum = "ed63aea5ce73d0ff405984102c42de94fc55a6b75765d621c65262469b3c9b53" dependencies = [ - "ring", - "untrusted", + "ring 0.17.5", + "untrusted 0.9.0", ] [[package]] @@ -8435,16 +8549,7 @@ version = "0.22.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" dependencies = [ - "webpki 0.22.1", -] - -[[package]] -name = "webpki-roots" -version = "0.23.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b03058f88386e5ff5310d9111d53f48b17d732b401aeb83a8d5190f2ac459338" -dependencies = [ - "rustls-webpki 0.100.2", + "webpki 0.22.4", ] [[package]] @@ -8462,7 +8567,7 @@ dependencies = [ "either", "home", "once_cell", - "rustix 0.38.10", + "rustix 0.38.21", ] [[package]] @@ -8493,9 +8598,9 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" dependencies = [ "winapi", ] @@ -8507,10 +8612,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] -name = "windows" -version = "0.48.0" +name = "windows-core" +version = "0.51.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" dependencies = [ "windows-targets 0.48.5", ] @@ -8692,9 +8797,9 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "winnow" -version = "0.5.15" +version = "0.5.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c2e3184b9c4e92ad5167ca73039d0c42476302ab603e2fec4487511f38ccefc" +checksum = "829846f3e3db426d4cee4510841b71a8e58aa2a76b1132579487ae430ccd9c7b" dependencies = [ "memchr", ] @@ -8781,6 +8886,26 @@ dependencies = [ "winapi", ] +[[package]] +name = "zerocopy" +version = "0.7.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cd369a67c0edfef15010f980c3cbe45d7f651deac2cd67ce097cd801de16557" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2f140bda219a26ccc0cdb03dba58af72590c53b22642577d88a927bc5c87d6b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + [[package]] name = "zeroize" version = "1.6.0" diff --git a/examples/greetings/contracts/greeting/Forc.lock b/examples/greetings/contracts/greeting/Forc.lock index 9ef19e4f3..bb327f8e9 100644 --- a/examples/greetings/contracts/greeting/Forc.lock +++ b/examples/greetings/contracts/greeting/Forc.lock @@ -1,13 +1,13 @@ [[package]] -name = 'core' -source = 'path+from-root-63B5D95B29B128A3' +name = "core" +source = "path+from-root-AD80769CAE44474A" [[package]] -name = 'greeting' -source = 'member' -dependencies = ['std'] +name = "greeting" +source = "member" +dependencies = ["std"] [[package]] -name = 'std' -source = 'git+https://github.com/fuellabs/sway?tag=v0.45.0#92dc9f361a9508a940c0d0708130f26fa044f6b3' -dependencies = ['core'] +name = "std" +source = "git+https://github.com/fuellabs/sway?tag=v0.46.0#e75f14b03636bc96751a6760304a1a6d3eb5937d" +dependencies = ["core"] diff --git a/packages/fuel-indexer-api-server/src/ffi.rs b/packages/fuel-indexer-api-server/src/ffi.rs index 81cfff951..76a9595d2 100644 --- a/packages/fuel-indexer-api-server/src/ffi.rs +++ b/packages/fuel-indexer-api-server/src/ffi.rs @@ -18,6 +18,10 @@ pub(crate) fn check_wasm_toolchain_version(data: Vec) -> anyhow::Result` or + /// `OptionField` which are the used to construct `Constraint` for use + /// with `T::find()` + pub field_selectors: Vec, + /// `TypeDefinition`. typdef: TypeDefinition, @@ -50,6 +55,7 @@ impl Default for ImplementationDecoder { parameters: quote! {}, hasher: quote! {}, struct_fields: quote! {}, + field_selectors: vec![], typdef: TypeDefinition { description: None, extend: false, @@ -74,6 +80,7 @@ impl Decoder for ImplementationDecoder { let obj_name = typ.name.to_string(); let mut struct_fields = quote! {}; + let mut field_selectors = vec![]; let mut parameters = quote! {}; let mut hasher = quote! { Sha256::new() }; @@ -141,12 +148,37 @@ impl Decoder for ImplementationDecoder { #field_name_ident, }; } + + let ident = format_ident!("{obj_name}"); + let field_name_ident_string = field_name_ident.to_string(); + + // Skip generics + if processed_type_result.inner_type_ident.is_none() + && !processed_type_result.nullable + { + field_selectors.push(quote! { + pub fn #field_name_ident () -> Field<#ident, #field_type_tokens> { + Field::new(#field_name_ident_string .to_string()) + } + }); + } + + if processed_type_result.nullable + && processed_type_result.field_type_ident != "Array" + { + field_selectors.push(quote! { + pub fn #field_name_ident () -> OptionField<#ident, #field_type_ident> { + OptionField::new(#field_name_ident_string .to_string()) + } + }); + } } ImplementationDecoder { parameters, hasher, struct_fields, + field_selectors, typdef: typ.clone(), parsed: parsed.clone(), } @@ -240,6 +272,7 @@ impl From for TokenStream { struct_fields, typdef, parsed, + field_selectors, } = decoder; let typdef_name = typdef.name.to_string(); @@ -296,10 +329,13 @@ impl From for TokenStream { } } + #(#field_selectors)* + #impl_get_or_create } } } + TypeKind::Union(u) => { let union_name = typdef.name.to_string(); @@ -309,6 +345,8 @@ impl From for TokenStream { } else { quote! { impl #ident { + #(#field_selectors)* + #impl_get_or_create } } diff --git a/packages/fuel-indexer-macros/src/helpers.rs b/packages/fuel-indexer-macros/src/helpers.rs index 050410aa4..550335c30 100644 --- a/packages/fuel-indexer-macros/src/helpers.rs +++ b/packages/fuel-indexer-macros/src/helpers.rs @@ -310,6 +310,7 @@ impl Codegen for TypeDeclaration { "u32" => quote! { u32 }, "u64" => quote! { u64 }, "u8" => quote! { u8 }, + "str" => quote! { String }, o if o.starts_with("str[") => quote! { String }, o => { proc_macro_error::abort_call_site!( diff --git a/packages/fuel-indexer-plugin/Cargo.toml b/packages/fuel-indexer-plugin/Cargo.toml index 8b1e29f41..8c991313e 100644 --- a/packages/fuel-indexer-plugin/Cargo.toml +++ b/packages/fuel-indexer-plugin/Cargo.toml @@ -23,3 +23,4 @@ hex = "0.4" serde = { workspace = true } serde_json = { workspace = true } sha2 = { version = "0.10" } +sqlparser = { version = "0.39" } diff --git a/packages/fuel-indexer-plugin/src/find.rs b/packages/fuel-indexer-plugin/src/find.rs new file mode 100644 index 000000000..c27cf74fc --- /dev/null +++ b/packages/fuel-indexer-plugin/src/find.rs @@ -0,0 +1,310 @@ +use fuel_indexer_types::scalar::{Boolean, UID}; +use sqlparser::ast as sql; + +/// Represents `filter` and `order_by` parts of the `SELECT object from {table} +/// WHERE {filter} {order_by}` statement that is assembled by the indexer to +/// fetch an object from the database. The table name is not available to the +/// plugin and thus only a part of the statment is generated there. The indexer +/// maps the TYPE_ID to the tale name and assemles the full statemnt. +pub struct QueryFragment { + filter: Filter, + field: Option, + order_by: Option, +} + +impl QueryFragment { + pub fn asc(mut self) -> Self { + if let Some(ref field) = self.field { + self.order_by = Some(sql::OrderByExpr { + expr: sql::Expr::Identifier(sql::Ident::new(field)), + asc: Some(true), + nulls_first: None, + }); + } + self + } + + pub fn desc(mut self) -> Self { + if let Some(ref field) = self.field { + self.order_by = Some(sql::OrderByExpr { + expr: sql::Expr::Identifier(sql::Ident::new(field)), + asc: Some(false), + nulls_first: None, + }); + } + self + } +} + +/// Convert `QueryFragment` to `String`. `SELECT * from table_name` is later +/// added by the Fuel indexer to generate the entire query. +impl std::fmt::Display for QueryFragment { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{}", self.filter)?; + if let Some(ref order_by) = self.order_by { + write!(f, " ORDER BY {}", order_by)?; + } + Ok(()) + } +} + +/// Automatic lifting of `Filter` into `QueryFragment` leaving `ORDER BY` +/// unspecified. +impl From> for QueryFragment { + fn from(filter: Filter) -> Self { + QueryFragment { + filter, + field: None, + order_by: None, + } + } +} + +/// Represents a WHERE clause of the SQL statement. Multiple `Filter`s can be +/// joined with `and` and `or` and also ordered, at which point they become +/// `QueryFragment`s. +pub struct Filter { + filter: sql::Expr, + phantom: std::marker::PhantomData, +} + +impl std::fmt::Display for Filter { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{}", self.filter) + } +} + +impl Filter { + fn new(filter: sql::Expr) -> Self { + Self { + filter, + phantom: std::marker::PhantomData, + } + } + + pub fn and(self, right: Filter) -> Filter { + let filter = sql::Expr::BinaryOp { + left: Box::new(self.filter), + op: sql::BinaryOperator::And, + right: Box::new(right.filter), + }; + Filter { + filter, + phantom: std::marker::PhantomData, + } + } + + pub fn or(self, right: Filter) -> Filter { + let filter = sql::Expr::BinaryOp { + left: Box::new(self.filter), + op: sql::BinaryOperator::Or, + right: Box::new(right.filter), + }; + Filter { + filter, + phantom: std::marker::PhantomData, + } + } + + pub fn order_by(self, f: Field) -> QueryFragment { + QueryFragment { + filter: self, + field: Some(f.field), + order_by: None, + } + } +} + +/// A trait used to convert a value of scalar type into `sqlparser::ast::Value`. +/// That is, for injecting a value into the `sqlparser`'s representation which +/// we then use to generate a `QueryFragment`. +pub trait ToSQLValue +where + Self: Sized, +{ + fn to_sql_value(self) -> sql::Value; +} + +impl ToSQLValue for String { + fn to_sql_value(self) -> sql::Value { + sql::Value::SingleQuotedString(self) + } +} + +impl ToSQLValue for Boolean { + fn to_sql_value(self) -> sql::Value { + sql::Value::Boolean(self) + } +} + +impl ToSQLValue for UID { + fn to_sql_value(self) -> sql::Value { + sql::Value::SingleQuotedString(self.to_string()) + } +} + +macro_rules! impl_bytes_to_sql_value { + ($T:ident) => { + impl ToSQLValue for fuel_indexer_types::scalar::$T { + fn to_sql_value(self) -> sql::Value { + unsafe { + sql::Value::SingleQuotedByteStringLiteral( + std::str::from_utf8_unchecked(self.as_ref()).to_string(), + ) + } + } + } + }; +} + +impl_bytes_to_sql_value!(B256); +impl_bytes_to_sql_value!(Bytes32); +impl_bytes_to_sql_value!(Bytes8); +impl_bytes_to_sql_value!(Bytes4); +impl_bytes_to_sql_value!(Bytes); +impl_bytes_to_sql_value!(AssetId); +impl_bytes_to_sql_value!(Address); +impl_bytes_to_sql_value!(ContractId); +impl_bytes_to_sql_value!(MessageId); +impl_bytes_to_sql_value!(Nonce); +impl_bytes_to_sql_value!(Salt); + +macro_rules! impl_number_to_sql_value { + ($T:ident) => { + impl ToSQLValue for fuel_indexer_types::scalar::$T { + fn to_sql_value(self) -> sql::Value { + sqlparser::test_utils::number(&self.to_string()) + } + } + }; +} + +impl_number_to_sql_value!(I128); +impl_number_to_sql_value!(U128); + +impl_number_to_sql_value!(I64); +impl_number_to_sql_value!(U64); + +impl_number_to_sql_value!(I32); +impl_number_to_sql_value!(U32); + +impl_number_to_sql_value!(I8); +impl_number_to_sql_value!(U8); + +impl_number_to_sql_value!(BlockHeight); + +/// Captures the information necessary to represent `struct T { field: F }`. +/// It is then used to build a type-safe `Filter`, e.g., `Filter`. +pub struct Field { + field: String, + phantom: std::marker::PhantomData<(T, F)>, +} + +impl Field { + pub fn new(field: String) -> Self { + Field { + field, + phantom: std::marker::PhantomData, + } + } +} + +impl Field { + pub fn eq(self, val: F) -> Filter { + self.filter(sql::BinaryOperator::Eq, val) + } + + pub fn ne(self, val: F) -> Filter { + self.filter(sql::BinaryOperator::NotEq, val) + } + + pub fn gt(self, val: F) -> Filter { + self.filter(sql::BinaryOperator::Gt, val) + } + + pub fn ge(self, val: F) -> Filter { + self.filter(sql::BinaryOperator::GtEq, val) + } + + pub fn lt(self, val: F) -> Filter { + self.filter(sql::BinaryOperator::Lt, val) + } + + pub fn le(self, val: F) -> Filter { + self.filter(sql::BinaryOperator::LtEq, val) + } + + fn filter(self, op: sql::BinaryOperator, val: F) -> Filter { + let expr = sql::Expr::BinaryOp { + left: Box::new(sql::Expr::Identifier(sql::Ident::new(self.field.clone()))), + op, + right: Box::new(sql::Expr::Value(val.to_sql_value())), + }; + Filter::new(expr) + } +} + +/// Captures the information necessary to represent `struct T { field: Option }` +/// which requires additional logic for dealing with NULL values. Like `Field`, +/// it is used to build a type-safe `Filter`. +pub struct OptionField { + field: String, + phantom: std::marker::PhantomData<(T, F)>, +} + +impl OptionField { + pub fn new(field: String) -> Self { + OptionField { + field, + phantom: std::marker::PhantomData, + } + } +} + +impl OptionField { + pub fn eq(self, val: F) -> Filter { + self.filter(sql::BinaryOperator::Eq, val) + } + + pub fn ne(self, val: F) -> Filter { + self.filter(sql::BinaryOperator::NotEq, val) + } + + pub fn gt(self, val: F) -> Filter { + self.filter(sql::BinaryOperator::Gt, val) + } + + pub fn ge(self, val: F) -> Filter { + self.filter(sql::BinaryOperator::GtEq, val) + } + + pub fn lt(self, val: F) -> Filter { + self.filter(sql::BinaryOperator::Lt, val) + } + + pub fn le(self, val: F) -> Filter { + self.filter(sql::BinaryOperator::LtEq, val) + } + + pub fn is_null(self) -> Filter { + Filter::new(sql::Expr::IsNull(Box::new(sql::Expr::Identifier( + sql::Ident::new(self.field), + )))) + } + + pub fn is_not_null(self) -> Filter { + Filter::new(sql::Expr::IsNotNull(Box::new(sql::Expr::Identifier( + sql::Ident::new(self.field), + )))) + } + + // Helper function that unwraps the Option converting None to NULL. + fn filter(self, op: sql::BinaryOperator, val: F) -> Filter { + let expr = sql::Expr::BinaryOp { + left: Box::new(sql::Expr::Identifier(sql::Ident::new(self.field))), + op, + right: Box::new(sql::Expr::Value(val.to_sql_value())), + }; + Filter::new(expr) + } +} diff --git a/packages/fuel-indexer-plugin/src/lib.rs b/packages/fuel-indexer-plugin/src/lib.rs index 06e798b65..6ec5bfec3 100644 --- a/packages/fuel-indexer-plugin/src/lib.rs +++ b/packages/fuel-indexer-plugin/src/lib.rs @@ -1,3 +1,5 @@ +mod find; + pub mod wasm; pub mod types { diff --git a/packages/fuel-indexer-plugin/src/wasm.rs b/packages/fuel-indexer-plugin/src/wasm.rs index e8af8578e..409e7b780 100644 --- a/packages/fuel-indexer-plugin/src/wasm.rs +++ b/packages/fuel-indexer-plugin/src/wasm.rs @@ -17,11 +17,14 @@ pub use hex::FromHex; pub use sha2::{Digest, Sha256}; pub use std::collections::{HashMap, HashSet}; +pub use crate::find::{Field, Filter, OptionField, QueryFragment}; + // These are instantiated with functions which return // `Result`. `wasmer` unwraps the `Result` and uses the // `Err` variant for ealy exit. extern "C" { fn ff_get_object(type_id: i64, ptr: *const u8, len: *mut u8) -> *mut u8; + fn ff_single_select(type_id: i64, ptr: *const u8, len: *mut u8) -> *mut u8; fn ff_log_data(ptr: *const u8, len: u32, log_level: u32); fn ff_put_object(type_id: i64, ptr: *const u8, len: u32); fn ff_put_many_to_many_record(ptr: *const u8, len: u32); @@ -124,6 +127,27 @@ pub trait Entity<'a>: Sized + PartialEq + Eq + std::fmt::Debug { } } + /// Finds the first entity that satisfies the given constraints. + fn find(query: impl Into>) -> Option { + let query: QueryFragment = query.into(); + unsafe { + let buff = bincode::serialize(&query.to_string()).unwrap(); + let mut bufflen = (buff.len() as u32).to_le_bytes(); + + let ptr = + ff_single_select(Self::TYPE_ID, buff.as_ptr(), bufflen.as_mut_ptr()); + + if !ptr.is_null() { + let len = u32::from_le_bytes(bufflen) as usize; + let bytes = Vec::from_raw_parts(ptr, len, len); + let data = deserialize(&bytes).unwrap(); + Some(Self::from_row(data)) + } else { + None + } + } + } + /// Saves a record. fn save(&self) { self.save_unsafe() diff --git a/packages/fuel-indexer-tests/contracts/fuel-indexer-test/Forc.lock b/packages/fuel-indexer-tests/contracts/fuel-indexer-test/Forc.lock index d643155c4..5f646df66 100644 --- a/packages/fuel-indexer-tests/contracts/fuel-indexer-test/Forc.lock +++ b/packages/fuel-indexer-tests/contracts/fuel-indexer-test/Forc.lock @@ -1,13 +1,13 @@ [[package]] -name = 'core' -source = 'path+from-root-63B5D95B29B128A3' +name = "core" +source = "path+from-root-AD80769CAE44474A" [[package]] -name = 'fuel-indexer-test' -source = 'member' -dependencies = ['std'] +name = "fuel-indexer-test" +source = "member" +dependencies = ["std"] [[package]] -name = 'std' -source = 'git+https://github.com/fuellabs/sway?tag=v0.45.0#92dc9f361a9508a940c0d0708130f26fa044f6b3' -dependencies = ['core'] +name = "std" +source = "git+https://github.com/fuellabs/sway?tag=v0.46.0#e75f14b03636bc96751a6760304a1a6d3eb5937d" +dependencies = ["core"] diff --git a/packages/fuel-indexer-tests/contracts/fuel-indexer-test/out/debug/fuel-indexer-test-abi.json b/packages/fuel-indexer-tests/contracts/fuel-indexer-test/out/debug/fuel-indexer-test-abi.json index 7e50dcb21..ce7b2896a 100644 --- a/packages/fuel-indexer-tests/contracts/fuel-indexer-test/out/debug/fuel-indexer-test-abi.json +++ b/packages/fuel-indexer-tests/contracts/fuel-indexer-test/out/debug/fuel-indexer-test-abi.json @@ -12,12 +12,12 @@ "components": [ { "name": "__tuple_element", - "type": 18, + "type": 19, "typeArguments": null }, { "name": "__tuple_element", - "type": 31, + "type": 32, "typeArguments": null } ], @@ -29,7 +29,7 @@ "components": [ { "name": "__tuple_element", - "type": 33, + "type": 34, "typeArguments": null }, { @@ -46,7 +46,7 @@ "components": [ { "name": "__tuple_element", - "type": 34, + "type": 35, "typeArguments": null }, { @@ -68,17 +68,17 @@ "components": [ { "name": "__tuple_element", - "type": 33, + "type": 34, "typeArguments": null }, { "name": "__tuple_element", - "type": 34, + "type": 35, "typeArguments": null }, { "name": "__tuple_element", - "type": 16, + "type": 17, "typeArguments": null } ], @@ -90,7 +90,7 @@ "components": [ { "name": "__array_element", - "type": 35, + "type": 36, "typeArguments": null } ], @@ -114,12 +114,12 @@ "components": [ { "name": "Ping", - "type": 25, + "type": 26, "typeArguments": null }, { "name": "Pung", - "type": 27, + "type": 28, "typeArguments": null }, { @@ -226,25 +226,25 @@ }, { "typeId": 16, - "type": "str[12]", + "type": "str", "components": null, "typeParameters": null }, { "typeId": 17, - "type": "str[32]", + "type": "str[12]", "components": null, "typeParameters": null }, { "typeId": 18, - "type": "str[5]", + "type": "str[32]", "components": null, "typeParameters": null }, { "typeId": 19, - "type": "str[78]", + "type": "str[5]", "components": null, "typeParameters": null }, @@ -290,12 +290,12 @@ "components": [ { "name": "id", - "type": 34, + "type": 35, "typeArguments": null }, { "name": "message", - "type": 17, + "type": 18, "typeArguments": null } ], @@ -307,7 +307,7 @@ "components": [ { "name": "id", - "type": 34, + "type": 35, "typeArguments": null } ], @@ -315,55 +315,61 @@ }, { "typeId": 25, + "type": "struct Find", + "components": [], + "typeParameters": null + }, + { + "typeId": 26, "type": "struct Ping", "components": [ { "name": "id", - "type": 34, + "type": 35, "typeArguments": null }, { "name": "value", - "type": 34, + "type": 35, "typeArguments": null }, { "name": "message", - "type": 17, + "type": 18, "typeArguments": null } ], "typeParameters": null }, { - "typeId": 26, + "typeId": 27, "type": "struct Pong", "components": [ { "name": "id", - "type": 34, + "type": 35, "typeArguments": null }, { "name": "value", - "type": 34, + "type": 35, "typeArguments": null } ], "typeParameters": null }, { - "typeId": 27, + "typeId": 28, "type": "struct Pung", "components": [ { "name": "id", - "type": 34, + "type": 35, "typeArguments": null }, { "name": "value", - "type": 34, + "type": 35, "typeArguments": null }, { @@ -380,7 +386,7 @@ "typeParameters": null }, { - "typeId": 28, + "typeId": 29, "type": "struct RawVec", "components": [ { @@ -390,7 +396,7 @@ }, { "name": "cap", - "type": 34, + "type": 35, "typeArguments": null } ], @@ -399,19 +405,19 @@ ] }, { - "typeId": 29, + "typeId": 30, "type": "struct SimpleQueryStruct", "components": [ { "name": "id", - "type": 34, + "type": 35, "typeArguments": null } ], "typeParameters": null }, { - "typeId": 30, + "typeId": 31, "type": "struct SimpleTupleStruct", "components": [ { @@ -423,12 +429,12 @@ "typeParameters": null }, { - "typeId": 31, + "typeId": 32, "type": "struct TupleStructItem", "components": [ { "name": "id", - "type": 34, + "type": 35, "typeArguments": null }, { @@ -440,12 +446,12 @@ "typeParameters": null }, { - "typeId": 32, + "typeId": 33, "type": "struct Vec", "components": [ { "name": "buf", - "type": 28, + "type": 29, "typeArguments": [ { "name": "", @@ -456,7 +462,7 @@ }, { "name": "len", - "type": 34, + "type": 35, "typeArguments": null } ], @@ -465,19 +471,19 @@ ] }, { - "typeId": 33, + "typeId": 34, "type": "u32", "components": null, "typeParameters": null }, { - "typeId": 34, + "typeId": 35, "type": "u64", "components": null, "typeParameters": null }, { - "typeId": 35, + "typeId": 36, "type": "u8", "components": null, "typeParameters": null @@ -504,7 +510,7 @@ "name": "trigger_callreturn", "output": { "name": "", - "type": 27, + "type": 28, "typeArguments": null }, "attributes": null @@ -514,7 +520,7 @@ "name": "trigger_deeply_nested", "output": { "name": "", - "type": 29, + "type": 30, "typeArguments": null }, "attributes": null @@ -533,7 +539,7 @@ "inputs": [ { "name": "num", - "type": 34, + "type": 35, "typeArguments": null } ], @@ -555,6 +561,16 @@ }, "attributes": null }, + { + "inputs": [], + "name": "trigger_find", + "output": { + "name": "", + "type": 25, + "typeArguments": null + }, + "attributes": null + }, { "inputs": [], "name": "trigger_generics", @@ -564,7 +580,7 @@ "typeArguments": [ { "name": "", - "type": 25, + "type": 26, "typeArguments": null } ] @@ -621,7 +637,7 @@ "name": "trigger_multiargs", "output": { "name": "", - "type": 25, + "type": 26, "typeArguments": null }, "attributes": null @@ -631,7 +647,7 @@ "name": "trigger_panic", "output": { "name": "", - "type": 34, + "type": 35, "typeArguments": null }, "attributes": null @@ -641,7 +657,7 @@ "name": "trigger_ping", "output": { "name": "", - "type": 25, + "type": 26, "typeArguments": null }, "attributes": null @@ -651,7 +667,7 @@ "name": "trigger_ping_for_optional", "output": { "name": "", - "type": 25, + "type": 26, "typeArguments": null }, "attributes": null @@ -661,7 +677,7 @@ "name": "trigger_pong", "output": { "name": "", - "type": 26, + "type": 27, "typeArguments": null }, "attributes": null @@ -739,12 +755,12 @@ { "inputs": [ { - "name": "v", - "type": 32, + "name": "_v", + "type": 33, "typeArguments": [ { "name": "", - "type": 35, + "type": 36, "typeArguments": null } ] @@ -802,7 +818,7 @@ "typeArguments": [ { "name": "", - "type": 25, + "type": 26, "typeArguments": [] } ] @@ -812,11 +828,11 @@ "logId": 4, "loggedType": { "name": "", - "type": 32, + "type": 33, "typeArguments": [ { "name": "", - "type": 25, + "type": 26, "typeArguments": [] } ] @@ -826,7 +842,7 @@ "logId": 5, "loggedType": { "name": "", - "type": 34, + "type": 35, "typeArguments": null } }, @@ -834,7 +850,7 @@ "logId": 6, "loggedType": { "name": "", - "type": 27, + "type": 28, "typeArguments": [] } }, @@ -842,7 +858,7 @@ "logId": 7, "loggedType": { "name": "", - "type": 27, + "type": 28, "typeArguments": [] } }, @@ -850,7 +866,7 @@ "logId": 8, "loggedType": { "name": "", - "type": 26, + "type": 27, "typeArguments": [] } }, @@ -858,7 +874,7 @@ "logId": 9, "loggedType": { "name": "", - "type": 34, + "type": 35, "typeArguments": null } }, @@ -866,7 +882,7 @@ "logId": 10, "loggedType": { "name": "", - "type": 30, + "type": 31, "typeArguments": [] } }, @@ -874,7 +890,7 @@ "logId": 11, "loggedType": { "name": "", - "type": 19, + "type": 16, "typeArguments": null } }, @@ -882,11 +898,11 @@ "logId": 12, "loggedType": { "name": "", - "type": 32, + "type": 33, "typeArguments": [ { "name": "", - "type": 26, + "type": 27, "typeArguments": [] } ] diff --git a/packages/fuel-indexer-tests/contracts/fuel-indexer-test/out/debug/fuel-indexer-test.bin b/packages/fuel-indexer-tests/contracts/fuel-indexer-test/out/debug/fuel-indexer-test.bin index fca1fe78f45ba0d1c77c3d4a48b0d6118ea636f3..ab5e16c42bccebb0743c84cc7d0b3871b84832ca 100644 GIT binary patch delta 1794 zcmZXUT}&KR6vyv{DJ(3I0d`rIv36mh9W6!-wx9-?$uilcP#IVdaM{kPTR~c7T`5*+ z0uPPhp^4RFQWBepi4T2TJ`x)>k;EqY(4;&PC6O2(jFz}jANpX_|IFMarJaYpzx#2{ z`QLNT*;~(SJi9Q&DRBtkxAF1t?w7D2N1%6TRAb3>pBzR2l zG&s^; zT^v6@s~J8O}(rECwYSM{egGqJX0TDe_#X|$5IUB-ie zjg~IkEaO~A)tfall3Ox$CMR{AiRQ*AMLy-Gm>HZEpk2xg=glLj30rsx|< z8JgWp4&<9uqj}RbQnI}x8?uI7+3Lk93lb8mGQx(famYIgC_$tB9E?urTMn8Eyv|jNDpQ5dbdHwL50 zXx3z1(vW5QrDQd_v4|HLqEPMOa6I=tG=;4}=+QM>PuQ*RwnBllQL6T_g_z9dG$x@> zJa*yWT%FSEW66;=*kNs)F~8ojh%+3S^up(mqDzZM(Ps@>hWU*Yo9l7*ieU>)X-(CK zwT2PKtkb6B!_raI=p`o)=s%}G4d_5qOxS|&yGXrr5u?Ysh^qV00j^+KXPOBkCuND% zj5(UyhM0hbK&Ecm7Yw);-0uL>?tuNo?fMmd16^<+Z>k$^*v(s8AV|9ZDAyh`Tz=57 z^FhPFC^RK<_n;|mA!(+Lj*jNzH0(RKuVKg6ejt3z^@4v6_t}EA5qOENj$yst?tge2 zUY`iu=F}bxkrpgnj|V^F^b{t4H+;%ppexF-bf@{mZ?vOa8&5Om3tkc9EiwM$jtxCx Y{9KH;-BD>37%Q6vt;`C$ST|o!CwsXJhKhX}fJAaFvL(<)gbwR(9$-nS9{{$E<;rxFkTZ zP=yphd;&|&q41FELnU&66FsbxNK^s|4oKvH1Sgam9FXWCfTc<(he+k^?rh{1$RY2y zGjHB|^Pl(RolD2f=?j7 zB={_{E_evJAovpU%MJXB%~MU!;Kr+B<2mF-n_d0L*96~3e$8gLnP5rqQ>8jtd%8|Y z&psy~5faOf)Qhk{`{{M4&^7PtOmz|TU*7gLP0>Kp9?xxY^jWdi)Abc7yQZ%db&U|N zGLNpHoiM5;g)li2!nFjm){ zN-2z~xyxK#b>huIsu_;ry^HbA*|BIAo@|i=+;L3dVJ2%cW!MZ%!%g=&hz5_b3s@$T z)fvSqPvhWfJp-k12%c}f?45Tjc-sr7=HY|ZQ>f(K)}`nhLdgOB53Da~c$}J0hwG5= z4ALSjdiqguEl9BTH=*kJk*+||JBa`9c!5?R(RR6`XvX2mT7hfK!_%lsxh?*$RT*~L zrXxS;3g$}Js#vT?#yP-QX+~Y=Al9zai%@PK_SaD}ucdvuwh6a<68zHMOLyV0J>JQ! zw@cRy=RBTG!H{nvdeCs{p0kV5ThQY^Z2Hd7J=pcdX#w_qYxF}X`s4I{*zot`E${gU z>07Yxzin5r{nfEAXcK)1MHZ)j!v?c_*syn1DE2lSuwkk~qT~BcbE>bPVkNP66;d`Akes z?v%}SSO`YrSz{Lqz&1N--MHPl38!NexD!0PJj%!og}8A9JZ6ueU|o_HBKffdwmGg% z64I%5nm!bTYsZ)w33Hyt5$c&+#XZH@bJ=^NM4s;>J!1u;XRxg?hLv~3C_^F?jx<)? z?ewfwbs-c9XKSlGXY665us&~AUNDC)4Arh>N0L~0@R1<09c0nDdIa9S+v5{ Ping; fn trigger_callreturn() -> Pung; @@ -106,6 +110,7 @@ abi FuelIndexer { #[payable] fn trigger_burn(); fn trigger_generics() -> Option; + fn trigger_find() -> Find; } impl FuelIndexer for Contract { @@ -117,10 +122,16 @@ impl FuelIndexer for Contract { pung_from: Identity::ContractId(ContractId::from(0x322ee5fb2cabec472409eb5f9b42b59644edb7bf9943eda9c2e3947305ed5e96)), }); - log(Pong { id: 45678, value: 45678 }); - + log(Pong { + id: 45678, + value: 45678, + }); - Ping { id: 12345, value: 12345, message: "a multiarg ping entity " } + Ping { + id: 12345, + value: 12345, + message: __to_str_array("a multiarg ping entity "), + } } fn trigger_callreturn() -> Pung { @@ -136,7 +147,7 @@ impl FuelIndexer for Contract { let p = Ping { id: 1, value: 123, - message: "aaaasdfsdfasdfsdfaasdfsdfasdfsdf", + message: __to_str_array("aaaasdfsdfasdfsdfaasdfsdfasdfsdf"), }; p } @@ -145,7 +156,7 @@ impl FuelIndexer for Contract { let p = Ping { id: 8675309, value: 123, - message: "aaaasdfsdfasdfsdfaasdfsdfasdfsdf", + message: __to_str_array("aaaasdfsdfasdfsdfaasdfsdfasdfsdf"), }; p } @@ -194,15 +205,32 @@ impl FuelIndexer for Contract { let example = ExampleMessageStruct { id: 1234, - message: "abcdefghijklmnopqrstuvwxyz123456" + message: __to_str_array("abcdefghijklmnopqrstuvwxyz123456"), }; send_typed_message(RECEIVER, example, 100); } fn trigger_tuple() -> ComplexTupleStruct { - log(SimpleTupleStruct { data: (4u32, 5u64, "hello world!")}); - ComplexTupleStruct{ data: (1u32, (5u64, true, ("abcde", TupleStructItem { id: 54321, arr: [1u8, 2, 3] })))} + log(SimpleTupleStruct { + data: (4u32, 5u64, __to_str_array("hello world!")), + }); + ComplexTupleStruct { + data: ( + 1u32, + ( + 5u64, + true, + ( + __to_str_array("abcde"), + TupleStructItem { + id: 54321, + arr: [1u8, 2, 3], + }, + ), + ), + ), + } } fn trigger_explicit() -> ExplicitQueryStruct { @@ -214,18 +242,33 @@ impl FuelIndexer for Contract { } // NOTE: Keeping this to ensure Vec in ABI JSON is ok, even though we don't support it yet - fn trigger_vec_pong_calldata(v: Vec) { + fn trigger_vec_pong_calldata(_v: Vec) { log("This does nothing as we don't handle CallData. But should implement this soon."); } fn trigger_vec_pong_logdata() { let mut v: Vec = Vec::new(); - v.push(Pong{ id: 5555, value: 5555 }); - v.push(Pong{ id: 6666, value: 6666 }); - v.push(Pong{ id: 7777, value: 7777 }); - v.push(Pong{ id: 8888, value: 8888 }); - v.push(Pong{ id: 9999, value: 9999 }); - + v.push(Pong { + id: 5555, + value: 5555, + }); + v.push(Pong { + id: 6666, + value: 6666, + }); + v.push(Pong { + id: 7777, + value: 7777, + }); + v.push(Pong { + id: 8888, + value: 8888, + }); + v.push(Pong { + id: 9999, + value: 9999, + }); + log(v); } @@ -237,7 +280,7 @@ impl FuelIndexer for Contract { let r0: u64 = 18_446_744_073_709_551_615u64; // add r0 & r0 (which is the maximum u64 value) and put the result in r1 asm(r0: r0, r1) { - add r1 r0 r0; + add r1 r0 r0; r1: u64 } } @@ -261,32 +304,52 @@ impl FuelIndexer for Contract { log(NestedEnum::Inner(AnotherSimpleEnum::Call(SimpleEnum::Three))); AnotherSimpleEnum::Ping(Ping { - id: 7777, - value: 7775, - message: "hello world! I am, a log event!!" + id: 7777, + value: 7775, + message: __to_str_array("hello world! I am, a log event!!"), }) } - fn trigger_mint () { - mint(BASE_ASSET_ID, 100); + fn trigger_mint() { + mint(ZERO_B256, 100); } #[payable] fn trigger_burn() { - burn(BASE_ASSET_ID, 100); + burn(ZERO_B256, 100); } fn trigger_generics() -> Option { - let x = Some(Ping{ id: 8888, value: 8888, message: "aaaasdfsdfasdfsdfaasdfsdfasdfsdf" }); + let x = Some(Ping { + id: 8888, + value: 8888, + message: __to_str_array("aaaasdfsdfasdfsdfaasdfsdfasdfsdf"), + }); let mut v: Vec = Vec::new(); - v.push(Ping{ id: 5555, value: 5555, message: "aaaasdfsdfasdfsdfaasdfsdfasdfsdf" }); - v.push(Ping{ id: 6666, value: 6666, message: "aaaasdfsdfasdfsdfaasdfsdfasdfsdf" }); - v.push(Ping{ id: 7777, value: 7777, message: "aaaasdfsdfasdfsdfaasdfsdfasdfsdf" }); + v.push(Ping { + id: 5555, + value: 5555, + message: __to_str_array("aaaasdfsdfasdfsdfaasdfsdfasdfsdf"), + }); + v.push(Ping { + id: 6666, + value: 6666, + message: __to_str_array("aaaasdfsdfasdfsdfaasdfsdfasdfsdf"), + }); + v.push(Ping { + id: 7777, + value: 7777, + message: __to_str_array("aaaasdfsdfasdfsdfaasdfsdfasdfsdf"), + }); log(x); log(v); x } + + fn trigger_find() -> Find { + Find {} + } } diff --git a/packages/fuel-indexer-tests/contracts/simple-wasm/Forc.lock b/packages/fuel-indexer-tests/contracts/simple-wasm/Forc.lock index 95fa04b8a..2ad1ba1af 100644 --- a/packages/fuel-indexer-tests/contracts/simple-wasm/Forc.lock +++ b/packages/fuel-indexer-tests/contracts/simple-wasm/Forc.lock @@ -1,13 +1,13 @@ [[package]] -name = 'contracts' -source = 'member' -dependencies = ['std'] +name = "contracts" +source = "member" +dependencies = ["std"] [[package]] -name = 'core' -source = 'path+from-root-EB296BD18C0E4CC4' +name = "core" +source = "path+from-root-AD80769CAE44474A" [[package]] -name = 'std' -source = 'git+https://github.com/fuellabs/sway?tag=v0.44.1#04a597093e7441898933dd412b8e4dc6ac860cd3' -dependencies = ['core'] +name = "std" +source = "git+https://github.com/fuellabs/sway?tag=v0.46.0#e75f14b03636bc96751a6760304a1a6d3eb5937d" +dependencies = ["core"] diff --git a/packages/fuel-indexer-tests/contracts/simple-wasm/out/debug/contracts-flat-abi.json b/packages/fuel-indexer-tests/contracts/simple-wasm/out/debug/contracts-flat-abi.json deleted file mode 100644 index 387305b6a..000000000 --- a/packages/fuel-indexer-tests/contracts/simple-wasm/out/debug/contracts-flat-abi.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "types": [ - { - "typeId": 0, - "type": "b256", - "components": null, - "typeParameters": null - }, - { - "typeId": 1, - "type": "struct AnotherEvent", - "components": [ - { - "name": "id", - "type": 3, - "typeArguments": null - }, - { - "name": "account", - "type": 0, - "typeArguments": null - }, - { - "name": "hash", - "type": 0, - "typeArguments": null - } - ], - "typeParameters": null - }, - { - "typeId": 2, - "type": "struct SomeEvent", - "components": [ - { - "name": "id", - "type": 3, - "typeArguments": null - }, - { - "name": "account", - "type": 0, - "typeArguments": null - } - ], - "typeParameters": null - }, - { - "typeId": 3, - "type": "u64", - "components": null, - "typeParameters": null - } - ], - "functions": [ - { - "inputs": [ - { - "name": "num", - "type": 3, - "typeArguments": null - } - ], - "name": "gimme_someevent", - "output": { - "name": "", - "type": 2, - "typeArguments": null - } - }, - { - "inputs": [ - { - "name": "num", - "type": 3, - "typeArguments": null - } - ], - "name": "gimme_anotherevent", - "output": { - "name": "", - "type": 1, - "typeArguments": null - } - } - ] -} \ No newline at end of file diff --git a/packages/fuel-indexer-tests/contracts/simple-wasm/out/debug/contracts.bin b/packages/fuel-indexer-tests/contracts/simple-wasm/out/debug/contracts.bin index f40363bd398b418e02d5feaaa66af5ec3b27574a..f025bfd6c9003aa3524910fce6e456e5db182fdb 100644 GIT binary patch literal 4220 zcmeHLJ!l+982wIKNh_I<0ZZmGPRJIL+43N9P#}TboR+)w<(Vj@#C9Bh=FW%}B@t*{J zMWvf!es7a|M3?a8UYkTMsYC&h@R=PUCK^er;}LViNyHpxV%5F4Ge>3DpZ3JsUM#9f zm;cC!9}+na-k_C72Seh~fwe{SE069H`dh*$CVk{Xei1NR28_=8!0J&6<6aYf%hvtp z@#S-j5V!Ie@YBU$lBC}v5n^2E(A2_Yye-V!b8@j;y0|dsT@sip+B9|5q3tEpH!PRY z7tVO@f)#V$qi9vv*0Lj?X023xU?yZ&U1 z`KA`;lP568@U^UY*eh$S{HQM%-|3QGs#$Aezq4jEFo4G#bRudOBIr`iJM|}qU8IH{ihua^=(7PFqdI3lMB!6A!oQ#pv zH95Q5TWB`wL0>&qih9ma)T<0fJMi26UE+-cLOt2~r|Y3Ip9c?% zNxid#wH7XW82fmAq1V4mdVRNchxmO)UlVQehYqcF#jLCd<#B`FQ04cJ)4a}hI8cD z5n|Z46>x|1KCMK^SX4)>k=#bCobBtrY3u&AWFKc|tdOgo=aTc?u_&nMd~u(As*q2? zR~WQ{@s1v^u-;8G2Rf378Q-cV%6R!PybkT$r?n5mPinc>WxwCfeGX|E#hJ!ygi&zay}u}ysXxN>snaB z1=aRGA-V`1mEASy2>1*}4|vkE^h9p>>^bHSYi_&n0mlt2+yO}!zxTCwV%>caItKrH z`h4iKw_thvz6X7l7=I|VKE;{(TvMYmQe*NXWkaju(5fhCb!8x}_IAgi*NFl2TFEt* z={4QUf?iQ$**%_&b$zB?yA$`(YAerE&}yo?LN0LgG_5B6v?^{uQ~KRw<4@`}*zKp+ zouV$FSMQni8e*M6^}2x#^>_vi#~q_u5Yf^w$@x+1Y=HX8U{WzhATezY}DC zyZyy?f_Bl%;IZXr)@uXr9)o&ppL_ei_)hTne*!c_>Br5U!`bs`4_gmd`}o1j`uXL4 R??e6k{FU$D(N7}w=I>tgYXATM delta 341 zcmeyP@P}KVgn@zCodE_|=S&pPXXKgakjKQxIdQ}M$=S>*lZzQW7>{kpKd?*r1Taiw zVBm=NWnge}HD#CtWCPWCAgS|+_5Z*i@5^!^Ab3MZQ3z0fpsGWF_lAzxaG?GGsQy3$ z1}9Hf2ax{ww+svc&Ko8hvuHZN+yGSXQRD;E>nU;oXgA1Ab}0|2UQdwSDhI%JdvDM{ zQl~Mwhb6!PsF+*8*O&q501t=*OdUXuM0Ehr5MPJ`fa)}m)M-rSVfC3TA&|txx&;7F C4_%f3 diff --git a/packages/fuel-indexer-tests/contracts/simple-wasm/src/main.sw b/packages/fuel-indexer-tests/contracts/simple-wasm/src/main.sw index c93b6cdb9..b442604aa 100644 --- a/packages/fuel-indexer-tests/contracts/simple-wasm/src/main.sw +++ b/packages/fuel-indexer-tests/contracts/simple-wasm/src/main.sw @@ -1,6 +1,6 @@ contract; -use std::{address::Address, hash::sha256}; +use std::{address::Address, hash::{sha256, Hash}}; abi Simple { fn gimme_someevent(num: u64) -> SomeEvent; diff --git a/packages/fuel-indexer-tests/indexers/fuel-indexer-test/fuel_indexer_test.yaml b/packages/fuel-indexer-tests/indexers/fuel-indexer-test/fuel_indexer_test.yaml index 0c99411d8..e7d34ebf0 100644 --- a/packages/fuel-indexer-tests/indexers/fuel-indexer-test/fuel_indexer_test.yaml +++ b/packages/fuel-indexer-tests/indexers/fuel-indexer-test/fuel_indexer_test.yaml @@ -4,7 +4,7 @@ graphql_schema: packages/fuel-indexer-tests/indexers/fuel-indexer-test/schema/fu abi: packages/fuel-indexer-tests/contracts/fuel-indexer-test/out/debug/fuel-indexer-test-abi.json start_block: ~ end_block: ~ -contract_id: fuel1jjrj8zjyjc3s4qkw345mt57mwn56lnc9zwqnt5krrx9umwxacrvs2c3jyg +contract_id: fuel17fpcf8dmhdfhs008llq7cy4p66jzz5452mgmgc8yzwsfw62dy37stzyegh identifier: index1 module: wasm: target/wasm32-unknown-unknown/release/fuel_indexer_test.wasm diff --git a/packages/fuel-indexer-tests/indexers/fuel-indexer-test/schema/fuel_indexer_test.graphql b/packages/fuel-indexer-tests/indexers/fuel-indexer-test/schema/fuel_indexer_test.graphql index eb7c16554..335145cc3 100644 --- a/packages/fuel-indexer-tests/indexers/fuel-indexer-test/schema/fuel_indexer_test.graphql +++ b/packages/fuel-indexer-tests/indexers/fuel-indexer-test/schema/fuel_indexer_test.graphql @@ -333,3 +333,9 @@ type ListTypeEntity @entity { virtual_optional_inner: [VirtualEntity]! enum_required_all: [EnumEntity!]! } + +type FindEntity @entity { + id: ID! + value: U64! + string_value: String! +} \ No newline at end of file diff --git a/packages/fuel-indexer-tests/indexers/fuel-indexer-test/src/lib.rs b/packages/fuel-indexer-tests/indexers/fuel-indexer-test/src/lib.rs index b3658f8bd..f0bb8e713 100644 --- a/packages/fuel-indexer-tests/indexers/fuel-indexer-test/src/lib.rs +++ b/packages/fuel-indexer-tests/indexers/fuel-indexer-test/src/lib.rs @@ -579,4 +579,77 @@ mod fuel_indexer_test { ping.save(); } + + fn fuel_indexer_test_trigger_find(_find: Find, block_data: BlockData) { + FindEntity::new( + block_data.height as u64, + format!("find{}", block_data.height), + ) + .save(); + + if block_data.height == 4 { + // Test == 1 + let i = IndexMetadataEntity::find(IndexMetadataEntity::block_height().eq(1)) + .unwrap(); + assert_eq!(i.block_height, 1); + + // Test > 1 && < 3 (expected: 2) + let i = IndexMetadataEntity::find( + IndexMetadataEntity::block_height() + .gt(1) + .and(IndexMetadataEntity::block_height().lt(3)), + ) + .unwrap(); + assert_eq!(i.block_height, 2); + + // Test < 2 (expected: 1) + let i = IndexMetadataEntity::find(IndexMetadataEntity::block_height().lt(2)) + .unwrap(); + assert_eq!(i.block_height, 1); + } else if block_data.height == 5 { + // Test >= 2 order_by_asc. We have 4 indexed blocks, so the result should be 2. + let i = IndexMetadataEntity::find( + IndexMetadataEntity::block_height() + .ge(2) + .order_by(IndexMetadataEntity::block_height()) + .asc(), + ) + .unwrap(); + assert_eq!(i.block_height, 2); + + // Test >= 2 order_by_desc. We have 4 indexed blocks, so the result should be 4. + let i = IndexMetadataEntity::find( + IndexMetadataEntity::block_height() + .ge(2) + .order_by(IndexMetadataEntity::block_height()) + .desc(), + ) + .unwrap(); + assert_eq!(i.block_height, 4); + + // Test searching for a string field + let f = FindEntity::find( + FindEntity::string_value() + .gt("f".to_string()) + .order_by(FindEntity::value()) + .asc(), + ) + .unwrap(); + assert_eq!(&f.string_value, "find2"); + + // Test searching for a string field + let f = FindEntity::find( + FindEntity::string_value() + .gt("f".to_string()) + .order_by(FindEntity::value()) + .desc(), + ) + .unwrap(); + assert_eq!(&f.string_value, "find5"); + } else if block_data.height == 6 { + // There is no such block. The lookup will fail. + IndexMetadataEntity::find(IndexMetadataEntity::block_height().eq(777)) + .unwrap(); + } + } } diff --git a/packages/fuel-indexer-tests/src/fixtures.rs b/packages/fuel-indexer-tests/src/fixtures.rs index c00a39cb3..c7925edb4 100644 --- a/packages/fuel-indexer-tests/src/fixtures.rs +++ b/packages/fuel-indexer-tests/src/fixtures.rs @@ -824,6 +824,21 @@ pub mod test_web { HttpResponse::Ok() } + async fn fuel_indexer_test_trigger_find( + state: web::Data>, + ) -> impl Responder { + let _ = state + .contract + .methods() + .trigger_find() + .tx_params(tx_params()) + .call() + .await + .unwrap(); + + HttpResponse::Ok() + } + pub struct AppState { pub contract: FuelIndexerTest, } @@ -893,6 +908,7 @@ pub mod test_web { "/generics", web::post().to(fuel_indexer_test_trigger_generics), ) + .route("/find", web::post().to(fuel_indexer_test_trigger_find)) } pub async fn server() -> Result<(), Box> { diff --git a/packages/fuel-indexer-tests/tests/indexing.rs b/packages/fuel-indexer-tests/tests/indexing.rs index e506a5a07..2a7c77d9d 100644 --- a/packages/fuel-indexer-tests/tests/indexing.rs +++ b/packages/fuel-indexer-tests/tests/indexing.rs @@ -10,7 +10,7 @@ use std::{collections::HashSet, str::FromStr}; const REVERT_VM_CODE: u64 = 0x0004; const EXPECTED_CONTRACT_ID: &str = - "9487238a4496230a82ce8d69b5d3db74e9afcf05138135d2c3198bcdb8ddc0d9"; + "f243849dbbbb53783de7ffc1ec12a1d6a42152b456d1b460e413a097694d247d"; const TRANSFER_BASE_ASSET_ID: &str = "0000000000000000000000000000000000000000000000000000000000000000"; @@ -719,3 +719,57 @@ async fn test_no_missing_blocks() { assert_eq!(start, 2); } + +#[actix_web::test] +async fn test_find() { + let IndexingTestComponents { + ref node, ref db, .. + } = setup_indexing_test_components(None).await; + + mock_request("/find").await; + mock_request("/find").await; + mock_request("/find").await; + + tokio::time::sleep(std::time::Duration::from_secs(2)).await; + + let mut conn = db.pool.acquire().await.unwrap(); + + let row = sqlx::query("SELECT * FROM index_status") + .fetch_one(&mut conn) + .await + .unwrap(); + + assert_eq!(row.get::<&str, usize>(2), "Indexed 4 blocks"); + assert_eq!(row.get::<&str, usize>(1), "running"); + + let mut values = sqlx::query("SELECT * FROM fuel_indexer_test_index1.findentity") + .fetch_all(&mut conn) + .await + .unwrap() + .iter() + .map(|r| r.get::(1).to_u64().unwrap()) + .collect::>(); + values.sort(); + + // We've triggered 3x /find above, at blocks 2, 3, 4. + assert_eq!(values, vec![2, 3, 4]); + + // Trigger 2x more /find, at blocks 5, and 6. + mock_request("/find").await; + mock_request("/find").await; + + node.abort(); + + tokio::time::sleep(std::time::Duration::from_secs(2)).await; + + let row = sqlx::query("SELECT * FROM index_status") + .fetch_one(&mut conn) + .await + .unwrap(); + + // Failure is expected at block 6. + assert_eq!(row.get::<&str, usize>(1), "error"); + assert!(row + .get::<&str, usize>(2) + .contains("called `Option::unwrap()` on a `None` value")); +} diff --git a/packages/fuel-indexer/src/database.rs b/packages/fuel-indexer/src/database.rs index 9d9ef38c5..382417d54 100644 --- a/packages/fuel-indexer/src/database.rs +++ b/packages/fuel-indexer/src/database.rs @@ -212,6 +212,38 @@ Do your WASM modules need to be rebuilt? } } + /// Get an object from the database. + pub async fn single_select( + &mut self, + type_id: i64, + constraints: String, + ) -> IndexerResult>> { + let table = &self + .tables + .get(&type_id) + .ok_or(IndexerDatabaseError::TableMappingDoesNotExist(type_id))?; + + let query = format!("SELECT object from {table} WHERE {constraints} LIMIT 1"); + + let conn = self + .stashed + .as_mut() + .ok_or(IndexerError::NoTransactionError( + "single_select".to_string(), + ))?; + match queries::get_object(conn, query).await { + Ok(v) => Ok(Some(v)), + Err(e) => { + if let sqlx::Error::RowNotFound = e { + debug!("Row not found"); + } else { + error!("Failed to get_object: {e:?}"); + } + Ok(None) + } + } + } + /// Load the schema for this indexer from the database, and build a mapping of `TypeId`s to tables. pub async fn load_schema(&mut self, version: String) -> IndexerResult<()> { self.version = version; diff --git a/packages/fuel-indexer/src/ffi.rs b/packages/fuel-indexer/src/ffi.rs index a84d25266..3b91d49f5 100644 --- a/packages/fuel-indexer/src/ffi.rs +++ b/packages/fuel-indexer/src/ffi.rs @@ -206,6 +206,80 @@ fn get_object( } } +fn single_select( + mut env: FunctionEnvMut, + type_id: i64, + ptr: u32, + len_ptr: u32, +) -> Result { + let (idx_env, mut store) = env.data_and_store_mut(); + + if idx_env + .kill_switch + .load(std::sync::atomic::Ordering::SeqCst) + { + // If the kill switch has been flipped, returning an error will cause an + // early termination of WASM execution. + return Err(WasmIndexerError::KillSwitch); + } + + let mem = idx_env + .memory + .as_mut() + .ok_or(WasmIndexerError::UninitializedMemory)? + .view(&store); + + let len = WasmPtr::::new(len_ptr) + .deref(&mem) + .read() + .expect("Failed to read length from memory."); + + let constraints = get_object_id(&mem, ptr + 1, len - 1).unwrap(); + + let rt = tokio::runtime::Handle::current(); + let bytes = rt + .block_on(async { + idx_env + .db + .lock() + .await + .single_select(type_id, constraints) + .await + }) + .unwrap(); + + if let Some(bytes) = bytes { + let alloc_fn = idx_env + .alloc + .as_mut() + .ok_or(WasmIndexerError::AllocMissing)?; + + let size = bytes.len() as u32; + let result = alloc_fn + .call(&mut store, size) + .map_err(|_| WasmIndexerError::AllocFailed)?; + let range = result as usize..result as usize + size as usize; + + let mem = idx_env + .memory + .as_mut() + .expect("Memory unitialized.") + .view(&store); + WasmPtr::::new(len_ptr) + .deref(&mem) + .write(size) + .expect("Failed to write length to memory."); + + unsafe { + mem.data_unchecked_mut()[range].copy_from_slice(&bytes); + } + + Ok(result) + } else { + Ok(0) + } +} + /// Put the given type at the given pointer into memory. fn put_object( mut env: FunctionEnvMut, @@ -351,6 +425,7 @@ pub fn get_exports(store: &mut Store, env: &wasmer::FunctionEnv) -> Ex let mut exports = Exports::new(); let f_get_obj = Function::new_typed_with_env(store, env, get_object); + let f_single_select = Function::new_typed_with_env(store, env, single_select); let f_put_obj = Function::new_typed_with_env(store, env, put_object); let f_log_data = Function::new_typed_with_env(store, env, log_data); let f_put_many_to_many_record = @@ -359,6 +434,7 @@ pub fn get_exports(store: &mut Store, env: &wasmer::FunctionEnv) -> Ex exports.insert("ff_early_exit".to_string(), f_early_exit); exports.insert("ff_get_object".to_string(), f_get_obj); + exports.insert("ff_single_select".to_string(), f_single_select); exports.insert("ff_put_object".to_string(), f_put_obj); exports.insert( "ff_put_many_to_many_record".to_string(),