diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index 2e9d2989..e6963834 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -5,7 +5,7 @@ on: - main env: - toolchain: nightly-2022-05-01 + toolchain: nightly-2023-06-03 jobs: coverage: diff --git a/.github/workflows/launchpad_docker.yml b/.github/workflows/launchpad_docker.yml index e5c5673d..699ac2eb 100644 --- a/.github/workflows/launchpad_docker.yml +++ b/.github/workflows/launchpad_docker.yml @@ -15,7 +15,7 @@ on: default: "development" env: - toolchain: nightly-2022-05-01 + toolchain: nightly-2023-06-03 CARGO_HTTP_MULTIPLEXING: false CARGO_TERM_COLOR: always diff --git a/.github/workflows/launchpad_v2.yml b/.github/workflows/launchpad_v2.yml index 4deefe5d..27d19ab2 100644 --- a/.github/workflows/launchpad_v2.yml +++ b/.github/workflows/launchpad_v2.yml @@ -19,7 +19,7 @@ jobs: ./.github/workflows/reusable-ci-jobs.yml with: lints: true - toolchain: "nightly-2022-05-01" + toolchain: "nightly-2023-06-03" build-tari: true build-launchpad-fe: true check-ffi: false diff --git a/Cargo.lock b/Cargo.lock index 67d40b61..d0ab8b51 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,15 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "addr2line" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4fa78e18c64fce05e902adecd7a5eed15a5e0a3439f7b0e169f0252214865e3" +dependencies = [ + "gimli", +] + [[package]] name = "adler" version = "1.0.2" @@ -17,6 +26,16 @@ dependencies = [ "generic-array", ] +[[package]] +name = "aead" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" +dependencies = [ + "crypto-common", + "generic-array", +] + [[package]] name = "aes" version = "0.7.5" @@ -24,20 +43,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" dependencies = [ "cfg-if", - "cipher", + "cipher 0.3.0", "cpufeatures", "opaque-debug", ] [[package]] name = "aes-gcm" -version = "0.9.4" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df5f85a83a7d8b0442b6aa7b504b8212c1733da07b98aae43d4bc21b2cb3cdf6" +checksum = "bc3be92e19a7ef47457b8e6f90707e12b6ac5d20c6f3866584fa3be0787d839f" dependencies = [ - "aead", + "aead 0.4.3", "aes", - "cipher", + "cipher 0.3.0", "ctr", "ghash", "subtle", @@ -49,16 +68,27 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" dependencies = [ - "getrandom 0.2.7", + "getrandom 0.2.10", + "once_cell", + "version_check 0.9.4", +] + +[[package]] +name = "ahash" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" +dependencies = [ + "cfg-if", "once_cell", - "version_check", + "version_check 0.9.4", ] [[package]] name = "aho-corasick" -version = "0.7.19" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4f55bd91a0978cbfd91c457a164bab8b4001c833b7f323132c0a4e1922dd44e" +checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41" dependencies = [ "memchr", ] @@ -78,6 +108,12 @@ dependencies = [ "alloc-no-stdlib", ] +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + [[package]] name = "android_system_properties" version = "0.1.5" @@ -98,15 +134,15 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.70" +version = "1.0.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4" +checksum = "3b13c32d80ecc7ab747b80c3784bce54ee8a7a0cc4fbda9bf4cda2cf6fe90854" [[package]] name = "arc-swap" -version = "1.5.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "983cd8b9d4b02a6dc6ffa557262eb5858a27a0038ffffe21a0f133eaa819a164" +checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" [[package]] name = "argon2" @@ -115,52 +151,53 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db4ce4441f99dbd377ca8a8f57b698c44d0d6e712d8329b5040da5a64aa1ce73" dependencies = [ "base64ct", - "blake2 0.10.4", + "blake2 0.10.6", "password-hash", ] [[package]] name = "arrayref" -version = "0.3.6" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" +checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" [[package]] name = "arrayvec" -version = "0.7.2" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "async-stream" -version = "0.3.3" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dad5c83079eae9969be7fadefe640a1c566901f05ff91ab221de4b6f68d9507e" +checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" dependencies = [ "async-stream-impl", "futures-core", + "pin-project-lite", ] [[package]] name = "async-stream-impl" -version = "0.3.3" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10f203db73a71dfa2fb6dd22763990fa26f3d2625a6da2da900d23b87d26be27" +checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn 2.0.27", ] [[package]] name = "async-trait" -version = "0.1.68" +version = "0.1.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" +checksum = "cc6dde6e4ed435a4c1ee4e73592f5ba9da2151af10076cc04858746af9352d09" dependencies = [ "proc-macro2", "quote", - "syn 2.0.13", + "syn 2.0.27", ] [[package]] @@ -184,16 +221,7 @@ dependencies = [ "glib-sys", "gobject-sys", "libc", - "system-deps 6.0.2", -] - -[[package]] -name = "atoi" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "616896e05fc0e2649463a93a15183c6a16bf03413a7af88ef1285ddedfa9cda5" -dependencies = [ - "num-traits", + "system-deps 6.1.1", ] [[package]] @@ -209,7 +237,7 @@ dependencies = [ "serde", "serde_json", "serde_urlencoded", - "url 2.3.1", + "url", ] [[package]] @@ -230,10 +258,64 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] -name = "base-x" -version = "0.2.11" +name = "axum" +version = "0.6.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6a1de45611fdb535bfde7b7de4fd54f4fd2b17b1737c0a59b69bf9b92074b8c" +dependencies = [ + "async-trait", + "axum-core", + "bitflags 1.3.2", + "bytes 1.4.0", + "futures-util", + "http", + "http-body", + "hyper", + "itoa 1.0.9", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "sync_wrapper", + "tower", + "tower-layer", + "tower-service", +] + +[[package]] +name = "axum-core" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" +dependencies = [ + "async-trait", + "bytes 1.4.0", + "futures-util", + "http", + "http-body", + "mime", + "rustversion", + "tower-layer", + "tower-service", +] + +[[package]] +name = "backtrace" +version = "0.3.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" +checksum = "4319208da049c43661739c5fade2ba182f09d1dc2299b32298d3a31692b17e12" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] [[package]] name = "base58-monero" @@ -264,27 +346,27 @@ dependencies = [ [[package]] name = "base64" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "base64" -version = "0.21.0" +version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" +checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" [[package]] name = "base64ct" -version = "1.5.2" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea2b2456fd614d856680dcd9fcc660a51a820fa09daef2e49772b56a193c8474" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" [[package]] name = "bigdecimal" -version = "0.1.2" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1374191e2dd25f9ae02e3aa95041ed5d747fc77b3c102b49fe2dd9a8117a6244" +checksum = "a6773ddc0eafc0e509fb60e48dff7f450f8e674a0686ae8605e8d9901bd5eefa" dependencies = [ "num-bigint", "num-integer", @@ -319,6 +401,12 @@ dependencies = [ "shlex", ] +[[package]] +name = "bitfield" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46afbd2983a5d5a7bd740ccb198caf5b82f45c40c09c0eed36052d91cb92e719" + [[package]] name = "bitflags" version = "0.9.1" @@ -331,12 +419,30 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitflags" +version = "2.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "630be753d4e58660abd17930c71b647fe46c27ea6b63cc59e1e3851406972e42" + [[package]] name = "bitstring" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22a39c0db600cfe77ef1b6d9ea71173bdccf190722877969d526d380519b6ecc" +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + [[package]] name = "blake2" version = "0.9.2" @@ -350,11 +456,11 @@ dependencies = [ [[package]] name = "blake2" -version = "0.10.4" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9cf849ee05b2ee5fba5e36f97ff8ec2533916700fc0758d40d92136a42f3388" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" dependencies = [ - "digest 0.10.5", + "digest 0.10.7", ] [[package]] @@ -375,28 +481,49 @@ dependencies = [ [[package]] name = "block-buffer" -version = "0.10.3" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ "generic-array", ] +[[package]] +name = "block-modes" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2cb03d1bed155d89dce0f845b7899b18a9a163e148fd004e1c28421a783e2d8e" +dependencies = [ + "block-padding", + "cipher 0.3.0", +] + [[package]] name = "block-padding" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" +[[package]] +name = "blowfish" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe3ff3fc1de48c1ac2e3341c4df38b0d1bfb8fdf04632a187c8b75aaa319a7ab" +dependencies = [ + "byteorder", + "cipher 0.3.0", + "opaque-debug", +] + [[package]] name = "bollard" version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af254ed2da4936ef73309e9597180558821cb16ae9bba4cb24ce6b612d8d80ed" dependencies = [ - "base64 0.21.0", + "base64 0.21.2", "bollard-stubs", - "bytes 1.2.1", + "bytes 1.4.0", "futures-core", "futures-util", "hex", @@ -412,8 +539,8 @@ dependencies = [ "serde_urlencoded", "thiserror", "tokio", - "tokio-util 0.7.4", - "url 2.3.1", + "tokio-util 0.7.8", + "url", "winapi", ] @@ -424,7 +551,97 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "602bda35f33aeb571cef387dcd4042c643a8bf689d8aaac2cc47ea24cb7bc7e0" dependencies = [ "serde", - "serde_with 2.2.0", + "serde_with 2.3.3", +] + +[[package]] +name = "borsh" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15bf3650200d8bffa99015595e10f1fbd17de07abbc25bb067da79e769939bfa" +dependencies = [ + "borsh-derive 0.9.3", + "hashbrown 0.11.2", +] + +[[package]] +name = "borsh" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4114279215a005bc675e386011e594e1d9b800918cea18fcadadcce864a2046b" +dependencies = [ + "borsh-derive 0.10.3", + "hashbrown 0.13.2", +] + +[[package]] +name = "borsh-derive" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6441c552f230375d18e3cc377677914d2ca2b0d36e52129fe15450a2dce46775" +dependencies = [ + "borsh-derive-internal 0.9.3", + "borsh-schema-derive-internal 0.9.3", + "proc-macro-crate 0.1.5", + "proc-macro2", + "syn 1.0.109", +] + +[[package]] +name = "borsh-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0754613691538d51f329cce9af41d7b7ca150bc973056f1156611489475f54f7" +dependencies = [ + "borsh-derive-internal 0.10.3", + "borsh-schema-derive-internal 0.10.3", + "proc-macro-crate 0.1.5", + "proc-macro2", + "syn 1.0.109", +] + +[[package]] +name = "borsh-derive-internal" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5449c28a7b352f2d1e592a8a28bf139bc71afb0764a14f3c02500935d8c44065" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "borsh-derive-internal" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afb438156919598d2c7bad7e1c0adf3d26ed3840dbc010db1a882a65583ca2fb" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "borsh-schema-derive-internal" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdbd5696d8bfa21d53d9fe39a714a18538bad11492a42d066dbbc395fb1951c0" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "borsh-schema-derive-internal" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634205cc43f74a1b9046ef87c4540ebda95696ec0f315024860cad7c5b0f5ccd" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] @@ -440,9 +657,9 @@ dependencies = [ [[package]] name = "brotli-decompressor" -version = "2.3.2" +version = "2.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ad2d4653bf5ca36ae797b1f4bb4dbddb60ce49ca4aed8a2ce4829f60425b80" +checksum = "4b6561fd3f895a11e8f72af2cb7d22e08366bebc2b6b57f7744c4bda27034744" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -456,18 +673,29 @@ checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" [[package]] name = "bstr" -version = "0.2.17" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6798148dccfbff0fae41c7574d2fa8f1ef3492fba0face179de5d8d447d67b05" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "buf_redux" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223" +checksum = "b953a6887648bb07a535631f2bc00fbdb2a2216f135552cb3f534ed136b9c07f" dependencies = [ "memchr", + "safemem", ] [[package]] name = "bumpalo" -version = "3.11.0" +version = "3.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1ad822118d20d2c234f427000d5acc36eabe1e29a348c89b63dd60b13f28e5d" +checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" [[package]] name = "byte-unit" @@ -479,11 +707,33 @@ dependencies = [ "utf8-width", ] +[[package]] +name = "bytecheck" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6372023ac861f6e6dc89c8344a8f398fb42aaba2b5dbc649ca0c0e9dbcb627" +dependencies = [ + "bytecheck_derive", + "ptr_meta", + "simdutf8", +] + +[[package]] +name = "bytecheck_derive" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7ec4c6f261935ad534c0c22dbef2201b45918860eb1c574b972bd213a76af61" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "bytemuck" -version = "1.12.1" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f5715e491b5a1598fc2bef5a606847b5dc1d48ea625bd3c02c00de8285591da" +checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" [[package]] name = "byteorder" @@ -499,9 +749,9 @@ checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38" [[package]] name = "bytes" -version = "1.2.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db" +checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" dependencies = [ "serde", ] @@ -527,17 +777,7 @@ checksum = "3c55d429bef56ac9172d25fecb85dc8068307d17acd74b377866b7a1ef25d3c8" dependencies = [ "glib-sys", "libc", - "system-deps 6.0.2", -] - -[[package]] -name = "cargo_toml" -version = "0.13.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497049e9477329f8f6a559972ee42e117487d01d1e8c2cc9f836ea6fa23a9e1a" -dependencies = [ - "serde", - "toml 0.5.11", + "system-deps 6.1.1", ] [[package]] @@ -546,6 +786,17 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53" +[[package]] +name = "cast5" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f69790da27038b52ffcf09e7874e1aae353c674d65242549a733ad9372e7281f" +dependencies = [ + "byteorder", + "cipher 0.3.0", + "opaque-debug", +] + [[package]] name = "cbindgen" version = "0.17.0" @@ -554,22 +805,25 @@ checksum = "744fcfb4c9f64d649756fd972afec5120641eaa8b2ff86a4ae981f68648780b8" dependencies = [ "clap 2.34.0", "heck 0.3.3", - "indexmap", + "indexmap 1.9.3", "log", "proc-macro2", "quote", "serde", "serde_json", - "syn 1.0.107", + "syn 1.0.109", "tempfile", "toml 0.5.11", ] [[package]] name = "cc" -version = "1.0.73" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" +checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +dependencies = [ + "jobserver", +] [[package]] name = "cesu8" @@ -583,17 +837,27 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" dependencies = [ - "nom 7.1.1", + "nom 7.1.3", ] [[package]] name = "cfb" -version = "0.6.1" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74f89d248799e3f15f91b70917f65381062a01bb8e222700ea0e5a7ff9785f9c" +checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f" dependencies = [ "byteorder", - "uuid 0.8.2", + "fnv", + "uuid", +] + +[[package]] +name = "cfb-mode" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "750dfbb1b1f84475c1a92fed10fa5e76cb11adc0cda5225f137c5cac84e80860" +dependencies = [ + "cipher 0.3.0", ] [[package]] @@ -607,11 +871,12 @@ dependencies = [ [[package]] name = "cfg-expr" -version = "0.10.3" +version = "0.15.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0aacacf4d96c24b2ad6eb8ee6df040e4f27b0d0b39a5710c30091baa830485db" +checksum = "215c0072ecc28f92eeb0eea38ba63ddfcb65c2828c46311d646f1a3ff5f9841c" dependencies = [ "smallvec", + "target-lexicon", ] [[package]] @@ -627,7 +892,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f08493fa7707effc63254c66c6ea908675912493cd67952eda23c09fae2610b1" dependencies = [ "cfg-if", - "cipher", + "cipher 0.3.0", "cpufeatures", ] @@ -638,38 +903,68 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c80e5460aa66fe3b91d40bcbdab953a597b60053e34d684ac6903f863b680a6" dependencies = [ "cfg-if", - "cipher", + "cipher 0.3.0", "cpufeatures", "zeroize", ] +[[package]] +name = "chacha20" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" +dependencies = [ + "cfg-if", + "cipher 0.4.4", + "cpufeatures", +] + [[package]] name = "chacha20poly1305" version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a18446b09be63d457bbec447509e85f662f32952b035ce892290396bc0b0cff5" dependencies = [ - "aead", + "aead 0.4.3", "chacha20 0.8.2", - "cipher", - "poly1305", + "cipher 0.3.0", + "poly1305 0.7.2", "zeroize", ] [[package]] -name = "chrono" -version = "0.4.24" +name = "chacha20poly1305" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b" +checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" dependencies = [ - "iana-time-zone", - "js-sys", - "num-integer", - "num-traits", - "serde", - "time 0.1.44", - "wasm-bindgen", - "winapi", + "aead 0.5.2", + "chacha20 0.9.1", + "cipher 0.4.4", + "poly1305 0.8.0", + "zeroize", +] + +[[package]] +name = "checked_int_cast" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17cc5e6b5ab06331c33589842070416baa137e8b0eb912b008cfd4a78ada7919" + +[[package]] +name = "chrono" +version = "0.4.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "serde", + "time 0.1.45", + "wasm-bindgen", + "winapi", ] [[package]] @@ -691,11 +986,28 @@ dependencies = [ "generic-array", ] +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", + "zeroize", +] + +[[package]] +name = "circular" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fc239e0f6cb375d2402d48afb92f76f5404fd1df208a41930ec81eda078bea" + [[package]] name = "clang-sys" -version = "1.4.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa2e27ae6ab525c3d369ded447057bca5438d86dc3a68f6faafb8269ba82ebf3" +checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f" dependencies = [ "glob", "libc", @@ -719,32 +1031,32 @@ dependencies = [ [[package]] name = "clap" -version = "3.2.22" +version = "3.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86447ad904c7fb335a790c9d7fe3d0d971dc523b8ccd1561a520de9a85302750" +checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123" dependencies = [ "atty", "bitflags 1.3.2", "clap_derive", "clap_lex", - "indexmap", + "indexmap 1.9.3", "once_cell", "strsim 0.10.0", "termcolor", - "textwrap 0.15.1", + "textwrap 0.16.0", ] [[package]] name = "clap_derive" -version = "3.2.18" +version = "3.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea0c8bce528c4be4da13ea6fead8965e95b6073585a2f05204bd8f4119f82a65" +checksum = "ae6371b8bdc8b7d3959e9cf7b22d4435ef3e79e138688421ec654acf8c81b008" dependencies = [ - "heck 0.4.0", + "heck 0.4.1", "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] @@ -758,18 +1070,29 @@ dependencies = [ [[package]] name = "clear_on_drop" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9cc5db465b294c3fa986d5bbb0f3017cd850bff6dd6c52f9ccff8b4d21b7b08" +checksum = "38508a63f4979f0048febc9966fadbd48e5dab31fd0ec6a3f151bbf4a74f7423" dependencies = [ "cc", ] +[[package]] +name = "clipboard-win" +version = "4.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7191c27c2357d9b7ef96baac1773290d4ca63b24205b82a3fd8a0637afcf0362" +dependencies = [ + "error-code", + "str-buf", + "winapi", +] + [[package]] name = "cocoa" -version = "0.24.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f63902e9223530efb4e26ccd0cf55ec30d592d3b42e21a28defc42a9586e832" +checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a" dependencies = [ "bitflags 1.3.2", "block", @@ -783,9 +1106,9 @@ dependencies = [ [[package]] name = "cocoa-foundation" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ade49b65d560ca58c403a479bb396592b155c0185eada742ee323d1d68d6318" +checksum = "931d3837c286f56e3c58423ce4eba12d08db2374461a785c86f672b08b5650d6" dependencies = [ "bitflags 1.3.2", "block", @@ -796,16 +1119,6 @@ dependencies = [ "objc", ] -[[package]] -name = "codespan-reporting" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" -dependencies = [ - "termcolor", - "unicode-width", -] - [[package]] name = "color_quant" version = "1.1.0" @@ -818,7 +1131,7 @@ version = "4.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4" dependencies = [ - "bytes 1.2.1", + "bytes 1.4.0", "memchr", ] @@ -829,9 +1142,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d379af7f68bfc21714c6c7dea883544201741d2ce8274bb12fa54f89507f52a7" dependencies = [ "async-trait", - "json5 0.4.1", + "json5", "lazy_static", - "nom 7.1.1", + "nom 7.1.3", "pathdiff", "ron", "rust-ini", @@ -841,6 +1154,48 @@ dependencies = [ "yaml-rust", ] +[[package]] +name = "console-api" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2895653b4d9f1538a83970077cb01dfc77a4810524e51a110944688e916b18e" +dependencies = [ + "prost 0.11.9", + "prost-types 0.11.9", + "tonic 0.9.2", + "tracing-core", +] + +[[package]] +name = "console-subscriber" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4cf42660ac07fcebed809cfe561dd8730bcd35b075215e6479c516bcd0d11cb" +dependencies = [ + "console-api", + "crossbeam-channel", + "crossbeam-utils", + "futures 0.3.28", + "hdrhistogram", + "humantime", + "prost-types 0.11.9", + "serde", + "serde_json", + "thread_local", + "tokio", + "tokio-stream", + "tonic 0.9.2", + "tracing", + "tracing-core", + "tracing-subscriber", +] + +[[package]] +name = "const-oid" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4c78c047431fee22c1a7bb92e00ad095a02a983affe4d8a72e2a2c62c1b94f3" + [[package]] name = "convert_case" version = "0.4.0" @@ -859,9 +1214,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" +checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" [[package]] name = "core-graphics" @@ -878,13 +1233,12 @@ dependencies = [ [[package]] name = "core-graphics-types" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b" +checksum = "2bb142d41022986c1d8ff29103a1411c8a3dfad3552f87a4f8dc50d61d4f4e33" dependencies = [ "bitflags 1.3.2", "core-foundation", - "foreign-types", "libc", ] @@ -899,27 +1253,18 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.5" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" +checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1" dependencies = [ "libc", ] [[package]] -name = "crc" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49fc9a695bca7f35f5f4c15cddc84415f66a74ea78eef08e90c5024f2b540e23" -dependencies = [ - "crc-catalog", -] - -[[package]] -name = "crc-catalog" -version = "1.1.1" +name = "crc24" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccaeedb56da03b09f598226e25e80088cb4cd25f316e6e4df7d695f0feeb1403" +checksum = "fd121741cf3eb82c08dd3023eb55bf2665e5f60ec20f89760cf836ae4562e6a0" [[package]] name = "crc32fast" @@ -954,31 +1299,38 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.6" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" +checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" dependencies = [ "cfg-if", "crossbeam-utils", ] [[package]] -name = "crossbeam-queue" -version = "0.3.6" +name = "crossbeam-utils" +version = "0.8.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd42583b04998a5363558e5f9291ee5a5ff6b49944332103f251e7479a82aa7" +checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" dependencies = [ "cfg-if", - "crossbeam-utils", ] [[package]] -name = "crossbeam-utils" -version = "0.8.12" +name = "crossterm" +version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edbafec5fa1f196ca66527c1b12c2ec4745ca14b50f1ad8f9f6f720b55d11fac" +checksum = "a2102ea4f781910f8a5b98dd061f4c2023f479ce7bb1236330099ceb5a93cf17" dependencies = [ - "cfg-if", + "bitflags 1.3.2", + "crossterm_winapi", + "futures-core", + "libc", + "mio", + "parking_lot", + "signal-hook", + "signal-hook-mio", + "winapi", ] [[package]] @@ -991,7 +1343,7 @@ dependencies = [ "crossterm_winapi", "libc", "mio", - "parking_lot 0.12.1", + "parking_lot", "signal-hook", "signal-hook-mio", "winapi", @@ -1007,7 +1359,7 @@ dependencies = [ "crossterm_winapi", "libc", "mio", - "parking_lot 0.12.1", + "parking_lot", "signal-hook", "signal-hook-mio", "winapi", @@ -1015,9 +1367,9 @@ dependencies = [ [[package]] name = "crossterm_winapi" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ae1b35a484aa10e07fe0638d02301c5ad24de82d310ccbd2f3693da5f09bf1c" +checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" dependencies = [ "winapi", ] @@ -1028,6 +1380,16 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" +[[package]] +name = "crypto-bigint" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03c6a1d5fa1de37e071642dfa44ec552ca5b299adb128fab16138e24b548fd21" +dependencies = [ + "generic-array", + "subtle", +] + [[package]] name = "crypto-common" version = "0.1.6" @@ -1035,6 +1397,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ "generic-array", + "rand_core 0.6.4", "typenum", ] @@ -1062,36 +1425,36 @@ dependencies = [ "proc-macro2", "quote", "smallvec", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] name = "cssparser-macros" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfae75de57f2b2e85e8768c3ea840fd159c8f33e2b6522c7835b7abac81be16e" +checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" dependencies = [ "quote", - "syn 1.0.107", + "syn 2.0.27", ] [[package]] name = "ctor" -version = "0.1.23" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdffe87e1d521a10f9696f833fe502293ea446d7f256c06128293a4119bdf4cb" +checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" dependencies = [ "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] name = "ctr" -version = "0.8.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea" +checksum = "a232f92a03f37dd7d7dd2adc67166c77e9cd88de5b019b9a9eecfaeaf7bfd481" dependencies = [ - "cipher", + "cipher 0.3.0", ] [[package]] @@ -1100,26 +1463,11 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35" -[[package]] -name = "curl-sys" -version = "0.4.56+curl-7.83.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6093e169dd4de29e468fa649fbae11cdcd5551c81fe5bf1b0677adad7ef3d26f" -dependencies = [ - "cc", - "libc", - "libz-sys", - "openssl-sys", - "pkg-config", - "vcpkg", - "winapi", -] - [[package]] name = "curve25519-dalek" -version = "3.2.1" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90f9d052967f590a76e62eb387bd0bbb1b000182c3cefe5364db6b7211651bc0" +checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" dependencies = [ "byteorder", "digest 0.9.0", @@ -1131,107 +1479,99 @@ dependencies = [ [[package]] name = "curve25519-dalek" -version = "4.0.0-pre.2" +version = "4.0.0-rc.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12dc3116fe595d7847c701796ac1b189bd86b81f4f593c6f775f9d80fb2e29f4" +checksum = "8da00a7a9a4eb92a0a0f8e75660926d48f0d0f3c537e455c457bcdaa1e16b1ac" dependencies = [ - "byteorder", - "digest 0.10.5", - "rand_core 0.6.4", + "cfg-if", + "fiat-crypto", + "packed_simd_2", + "platforms", "subtle", "zeroize", ] [[package]] -name = "cxx" -version = "1.0.79" +name = "darling" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f83d0ebf42c6eafb8d7c52f7e5f2d3003b89c7aa4fd2b79229209459a849af8" +checksum = "0d706e75d87e35569db781a9b5e2416cff1236a47ed380831f959382ccd5f858" dependencies = [ - "cc", - "cxxbridge-flags", - "cxxbridge-macro", - "link-cplusplus", + "darling_core 0.10.2", + "darling_macro 0.10.2", ] [[package]] -name = "cxx-build" -version = "1.0.79" +name = "darling" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07d050484b55975889284352b0ffc2ecbda25c0c55978017c132b29ba0818a86" +checksum = "0209d94da627ab5605dcccf08bb18afa5009cfbef48d8a8b7d7bdbc79be25c5e" dependencies = [ - "cc", - "codespan-reporting", - "once_cell", - "proc-macro2", - "quote", - "scratch", - "syn 1.0.107", + "darling_core 0.20.3", + "darling_macro 0.20.3", ] [[package]] -name = "cxxbridge-flags" -version = "1.0.79" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99d2199b00553eda8012dfec8d3b1c75fce747cf27c169a270b3b99e3448ab78" - -[[package]] -name = "cxxbridge-macro" -version = "1.0.79" +name = "darling_core" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcb67a6de1f602736dd7eaead0080cf3435df806c61b24b13328db128c58868f" +checksum = "f0c960ae2da4de88a91b2d920c2a7233b400bc33cb28453a2987822d8392519b" dependencies = [ + "fnv", + "ident_case", "proc-macro2", "quote", - "syn 1.0.107", -] - -[[package]] -name = "darling" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" -dependencies = [ - "darling_core", - "darling_macro", + "strsim 0.9.3", + "syn 1.0.109", ] [[package]] name = "darling_core" -version = "0.13.4" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" +checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim 0.10.0", - "syn 1.0.107", + "syn 2.0.27", +] + +[[package]] +name = "darling_macro" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72" +dependencies = [ + "darling_core 0.10.2", + "quote", + "syn 1.0.109", ] [[package]] name = "darling_macro" -version = "0.13.4" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" +checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" dependencies = [ - "darling_core", + "darling_core 0.20.3", "quote", - "syn 1.0.107", + "syn 2.0.27", ] [[package]] name = "data-encoding" -version = "2.3.2" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ee2393c4a91429dffb4bedf19f4d6abf27d8a732c8ce4980305d782e5426d57" +checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308" [[package]] name = "dbus" -version = "0.9.6" +version = "0.9.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f8bcdd56d2e5c4ed26a529c5a9029f5db8290d433497506f958eae3be148eb6" +checksum = "1bb21987b9fb1613058ba3843121dd18b163b254d8a6e797e144cbac14d96d1b" dependencies = [ "libc", "libdbus-sys", @@ -1240,14 +1580,22 @@ dependencies = [ [[package]] name = "decimal-rs" -version = "0.1.39" +version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2492291a982ad198a2c3b84b091b48348372ffe8a9f7194cc90a2d8b901762c" +checksum = "da0ad9d041ab836f528b91b4f4039feda1091adbef4d85850eac6b3d2f9cd6f3" dependencies = [ - "ethnum", - "fast-float", "stack-buf", - "thiserror", +] + +[[package]] +name = "der" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6919815d73839e7ad218de758883aae3a257ba6759ce7a9992501efbb53d705c" +dependencies = [ + "const-oid", + "crypto-bigint", + "pem-rfc7468", ] [[package]] @@ -1258,7 +1606,32 @@ checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", +] + +[[package]] +name = "derive_builder" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2658621297f2cf68762a6f7dc0bb7e1ff2cfd6583daef8ee0fed6f7ec468ec0" +dependencies = [ + "darling 0.10.2", + "derive_builder_core", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derive_builder_core" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2791ea3e372c8495c0bc2033991d76b512cd799d07491fbd6890124db9458bef" +dependencies = [ + "darling 0.10.2", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] @@ -1270,8 +1643,19 @@ dependencies = [ "convert_case", "proc-macro2", "quote", - "rustc_version 0.4.0", - "syn 1.0.107", + "rustc_version", + "syn 1.0.109", +] + +[[package]] +name = "des" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac41dd49fb554432020d52c875fc290e110113f864c6b1b525cd62c7e7747a5d" +dependencies = [ + "byteorder", + "cipher 0.3.0", + "opaque-debug", ] [[package]] @@ -1282,12 +1666,11 @@ checksum = "3c877555693c14d2f84191cfd3ad8582790fc52b5e2274b40b59cf5f5cea25c7" [[package]] name = "diesel" -version = "1.4.8" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b28135ecf6b7d446b43e27e225622a038cc4e2930a1022f51cdb97ada19b8e4d" +checksum = "f7a532c1f99a0f596f6960a60d1e119e91582b24b39e2d83a190e61262c3ef0c" dependencies = [ "bigdecimal", - "byteorder", "chrono", "diesel_derives", "libsqlite3-sys", @@ -1296,29 +1679,41 @@ dependencies = [ "num-traits", "r2d2", "serde_json", + "time 0.3.23", ] [[package]] name = "diesel_derives" -version = "1.4.1" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45f5098f628d02a7a0f68ddba586fb61e80edec3bdc1be3b921f4ceec60858d3" +checksum = "74398b79d81e52e130d991afeed9c86034bb1b7735f46d2f5bf7deb261d80303" dependencies = [ + "diesel_table_macro_syntax", "proc-macro2", "quote", - "syn 1.0.107", + "syn 2.0.27", ] [[package]] name = "diesel_migrations" -version = "1.4.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf3cde8413353dc7f5d72fa8ce0b99a560a359d2c5ef1e5817ca731cd9008f4c" +checksum = "6036b3f0120c5961381b570ee20a02432d7e2d27ea60de9578799cf9156914ac" dependencies = [ + "diesel", "migrations_internals", "migrations_macros", ] +[[package]] +name = "diesel_table_macro_syntax" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc5557efc453706fed5e4fa85006fe9817c224c3f480a34c7e5959fd700921c5" +dependencies = [ + "syn 2.0.27", +] + [[package]] name = "digest" version = "0.9.0" @@ -1330,11 +1725,11 @@ dependencies = [ [[package]] name = "digest" -version = "0.10.5" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adfbc57365a37acbd2ebf2b64d7e69bb766e2fea813521ed536f5d0520dcf86c" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "block-buffer 0.10.3", + "block-buffer 0.10.4", "crypto-common", "subtle", ] @@ -1370,12 +1765,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "discard" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0" - [[package]] name = "dispatch" version = "0.2.0" @@ -1388,38 +1777,55 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0688c2a7f92e427f44895cd63841bff7b29f8d7a1648b9e7e07a4a365b2e1257" -[[package]] -name = "dotenv" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" - [[package]] name = "dtoa" -version = "0.4.8" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0" +checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653" [[package]] name = "dtoa-short" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bde03329ae10e79ede66c9ce4dc930aa8599043b0743008548680f25b91502d6" +checksum = "dbaceec3c6e4211c79e7b1800fb9680527106beb2f9c51904a3210c03a448c74" dependencies = [ "dtoa", ] [[package]] name = "dunce" -version = "1.0.3" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" + +[[package]] +name = "ed25519" +version = "1.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7" +dependencies = [ + "signature", +] + +[[package]] +name = "ed25519-dalek" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bd4b30a6560bbd9b4620f4de34c3f14f60848e58a9b7216801afcb4c7b31c3c" +checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" +dependencies = [ + "curve25519-dalek 3.2.0", + "ed25519", + "rand 0.7.3", + "serde", + "sha2 0.9.9", + "zeroize", +] [[package]] name = "either" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" [[package]] name = "embed_plist" @@ -1429,9 +1835,9 @@ checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" [[package]] name = "encoding_rs" -version = "0.8.31" +version = "0.8.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b" +checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394" dependencies = [ "cfg-if", ] @@ -1448,34 +1854,27 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "21cdad81446a7f7dc43f6a77409efeb9733d2fa65553efef6018ef257c959b73" dependencies = [ - "heck 0.4.0", + "heck 0.4.1", "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] -name = "env_logger" -version = "0.10.0" +name = "equivalent" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0" -dependencies = [ - "humantime", - "is-terminal", - "log", - "regex", - "termcolor", -] +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.2.8" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" +checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" dependencies = [ "errno-dragonfly", "libc", - "winapi", + "windows-sys 0.48.0", ] [[package]] @@ -1489,53 +1888,74 @@ dependencies = [ ] [[package]] -name = "ethnum" -version = "1.3.0" +name = "error-code" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eac3c0b9fa6eb75255ebb42c0ba3e2210d102a66d2795afef6fed668f373311" +checksum = "64f18991e7bf11e7ffee451b5318b5c1a73c52d0d0ada6e5a3017c8c1ced6a21" +dependencies = [ + "libc", + "str-buf", +] [[package]] -name = "fast-float" -version = "0.2.0" +name = "fastrand" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95765f67b4b18863968b4a1bd5bb576f732b29a4a28c7cd84c09fa3e2875f33c" +checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764" [[package]] -name = "fastrand" -version = "1.8.0" +name = "fd-lock" +version = "3.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" +checksum = "ef033ed5e9bad94e55838ca0ca906db0e043f517adda0c8b79c7a8c66c93c1b5" dependencies = [ - "instant", + "cfg-if", + "rustix", + "windows-sys 0.48.0", +] + +[[package]] +name = "fdeflate" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d329bdeac514ee06249dabc27877490f17f5d371ec693360768b838e19f3ae10" +dependencies = [ + "simd-adler32", ] +[[package]] +name = "fiat-crypto" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e825f6987101665dea6ec934c09ec6d721de7bc1bf92248e1d5810c8cd636b77" + [[package]] name = "field-offset" -version = "0.3.4" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e1c54951450cbd39f3dbcf1005ac413b49487dabf18a720ad2383eccfeffb92" +checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" dependencies = [ - "memoffset", - "rustc_version 0.3.3", + "memoffset 0.9.0", + "rustc_version", ] [[package]] name = "filetime" -version = "0.2.17" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94a7bbaa59354bc20dd75b67f23e2797b4490e9d6928203fb105c79e448c86c" +checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153" dependencies = [ "cfg-if", "libc", - "redox_syscall", - "windows-sys 0.36.1", + "redox_syscall 0.2.16", + "windows-sys 0.48.0", ] [[package]] name = "fixed-hash" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcf0ed7fe52a17a03854ec54a9f76d6d84508d1c0e66bc1793301c73fc8493c" +checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" dependencies = [ "byteorder", "rand 0.8.5", @@ -1551,9 +1971,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f82b0f4c27ad9f8bfd1f3208d882da2b09c301bc1c828fd3a00d0216d2fbbff6" +checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743" dependencies = [ "crc32fast", "miniz_oxide", @@ -1582,11 +2002,11 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "form_urlencoded" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" +checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" dependencies = [ - "percent-encoding 2.2.0", + "percent-encoding", ] [[package]] @@ -1599,6 +2019,12 @@ dependencies = [ "winapi", ] +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + [[package]] name = "futf" version = "0.1.5" @@ -1609,6 +2035,12 @@ dependencies = [ "new_debug_unreachable", ] +[[package]] +name = "futures" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a471a38ef8ed83cd6e40aa59c1ffe17db6855c18e3604d9c4ed8c08ebc28678" + [[package]] name = "futures" version = "0.3.28" @@ -1651,17 +2083,6 @@ dependencies = [ "futures-util", ] -[[package]] -name = "futures-intrusive" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62007592ac46aa7c2b6416f7deb9a8a8f63a01e0f1d6e1787d5630170db2b63e" -dependencies = [ - "futures-core", - "lock_api", - "parking_lot 0.11.2", -] - [[package]] name = "futures-io" version = "0.3.28" @@ -1676,7 +2097,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn 2.0.13", + "syn 2.0.27", ] [[package]] @@ -1697,6 +2118,7 @@ version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" dependencies = [ + "futures 0.1.31", "futures-channel", "futures-core", "futures-io", @@ -1718,6 +2140,12 @@ dependencies = [ "byteorder", ] +[[package]] +name = "gcc" +version = "0.3.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2" + [[package]] name = "gdk" version = "0.15.4" @@ -1757,7 +2185,7 @@ dependencies = [ "glib-sys", "gobject-sys", "libc", - "system-deps 6.0.2", + "system-deps 6.1.1", ] [[package]] @@ -1774,7 +2202,7 @@ dependencies = [ "libc", "pango-sys", "pkg-config", - "system-deps 6.0.2", + "system-deps 6.1.1", ] [[package]] @@ -1786,31 +2214,31 @@ dependencies = [ "gdk-sys", "glib-sys", "libc", - "system-deps 6.0.2", + "system-deps 6.1.1", "x11", ] [[package]] name = "generator" -version = "0.7.1" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc184cace1cea8335047a471cc1da80f18acf8a76f3bab2028d499e328948ec7" +checksum = "5cc16584ff22b460a382b7feec54b23d2908d858152e5739a120b949293bd74e" dependencies = [ "cc", "libc", "log", "rustversion", - "windows 0.32.0", + "windows 0.48.0", ] [[package]] name = "generic-array" -version = "0.14.6" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", - "version_check", + "version_check 0.9.4", ] [[package]] @@ -1820,18 +2248,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" dependencies = [ "cfg-if", - "js-sys", "libc", - "stdweb", "wasi 0.9.0+wasi-snapshot-preview1", - "wasm-bindgen", ] [[package]] name = "getrandom" -version = "0.2.7" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6" +checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" dependencies = [ "cfg-if", "libc", @@ -1848,6 +2273,12 @@ dependencies = [ "polyval", ] +[[package]] +name = "gimli" +version = "0.27.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" + [[package]] name = "gio" version = "0.15.12" @@ -1874,23 +2305,21 @@ dependencies = [ "glib-sys", "gobject-sys", "libc", - "system-deps 6.0.2", + "system-deps 6.1.1", "winapi", ] [[package]] name = "git2" -version = "0.8.0" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7339329bfa14a00223244311560d11f8f489b453fb90092af97f267a6090ab0" +checksum = "2994bee4a3a6a51eb90c218523be382fd7ea09b16380b9312e9dbe955ff7c7d1" dependencies = [ "bitflags 1.3.2", "libc", "libgit2-sys", "log", - "openssl-probe", - "openssl-sys", - "url 1.7.2", + "url", ] [[package]] @@ -1915,17 +2344,17 @@ dependencies = [ [[package]] name = "glib-macros" -version = "0.15.11" +version = "0.15.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25a68131a662b04931e71891fb14aaf65ee4b44d08e8abc10f49e77418c86c64" +checksum = "10c6ae9f6fa26f4fb2ac16b528d138d971ead56141de489f8111e259b9df3c4a" dependencies = [ "anyhow", - "heck 0.4.0", - "proc-macro-crate", + "heck 0.4.1", + "proc-macro-crate 1.1.3", "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] @@ -1935,20 +2364,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef4b192f8e65e9cf76cbf4ea71fa8e3be4a0e18ffe3d68b8da6836974cc5bad4" dependencies = [ "libc", - "system-deps 6.0.2", + "system-deps 6.1.1", ] [[package]] name = "glob" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "globset" -version = "0.4.9" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a1e17342619edbc21a964c2afbeb6c820c6a2560032872f397bb97ea127bd0a" +checksum = "aca8bbd8e0707c1887a8bbb7e6b40e228f251ff5d62c8220a4a7a53c73aff006" dependencies = [ "aho-corasick", "bstr", @@ -1965,7 +2394,7 @@ checksum = "0d57ce44246becd17153bd035ab4d32cfee096a657fc01f2231c9278378d1e0a" dependencies = [ "glib-sys", "libc", - "system-deps 6.0.2", + "system-deps 6.1.1", ] [[package]] @@ -2006,39 +2435,39 @@ dependencies = [ "gobject-sys", "libc", "pango-sys", - "system-deps 6.0.2", + "system-deps 6.1.1", ] [[package]] name = "gtk3-macros" -version = "0.15.4" +version = "0.15.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24f518afe90c23fba585b2d7697856f9e6a7bbc62f65588035e66f6afb01a2e9" +checksum = "684c0456c086e8e7e9af73ec5b84e35938df394712054550e81558d21c44ab0d" dependencies = [ "anyhow", - "proc-macro-crate", + "proc-macro-crate 1.1.3", "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] name = "h2" -version = "0.3.14" +version = "0.3.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca32592cf21ac7ccab1825cd87f6c9b3d9022c44d086172ed0966bec8af30be" +checksum = "97ec8491ebaf99c8eaa73058b045fe58073cd6be7f596ac993ced0b0a0c01049" dependencies = [ - "bytes 1.2.1", + "bytes 1.4.0", "fnv", "futures-core", "futures-sink", "futures-util", "http", - "indexmap", + "indexmap 1.9.3", "slab", "tokio", - "tokio-util 0.7.4", + "tokio-util 0.7.8", "tracing", ] @@ -2048,7 +2477,7 @@ version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" dependencies = [ - "ahash", + "ahash 0.7.6", ] [[package]] @@ -2057,28 +2486,62 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" dependencies = [ - "ahash", + "ahash 0.7.6", ] [[package]] -name = "hashlink" -version = "0.7.0" +name = "hashbrown" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7249a3129cbc1ffccd74857f81464a323a152173cdb134e0fd81bc803b29facf" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" dependencies = [ - "hashbrown 0.11.2", + "ahash 0.8.3", ] +[[package]] +name = "hashbrown" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" + [[package]] name = "hdrhistogram" version = "7.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f19b9f54f7c7f55e31401bb647626ce0cf0f67b0004982ce815b3ee72a02aa8" dependencies = [ + "base64 0.13.1", "byteorder", + "flate2", + "nom 7.1.3", "num-traits", ] +[[package]] +name = "headers" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3e372db8e5c0d213e0cd0b9be18be2aca3d44cf2fe30a9d46a65581cd454584" +dependencies = [ + "base64 0.13.1", + "bitflags 1.3.2", + "bytes 1.4.0", + "headers-core", + "http", + "httpdate", + "mime", + "sha1 0.10.5", +] + +[[package]] +name = "headers-core" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429" +dependencies = [ + "http", +] + [[package]] name = "heck" version = "0.3.3" @@ -2090,9 +2553,9 @@ dependencies = [ [[package]] name = "heck" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] name = "hermit-abi" @@ -2105,12 +2568,9 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.2.6" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" -dependencies = [ - "libc", -] +checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" [[package]] name = "hex" @@ -2135,18 +2595,18 @@ dependencies = [ "markup5ever", "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] name = "http" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" +checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" dependencies = [ - "bytes 1.2.1", + "bytes 1.4.0", "fnv", - "itoa 1.0.4", + "itoa 1.0.9", ] [[package]] @@ -2155,7 +2615,7 @@ version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" dependencies = [ - "bytes 1.2.1", + "bytes 1.4.0", "http", "pin-project-lite", ] @@ -2186,11 +2646,11 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.20" +version = "0.14.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02c929dc5c39e335a03c405292728118860721b10190d98c2a0f0efd5baafbac" +checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" dependencies = [ - "bytes 1.2.1", + "bytes 1.4.0", "futures-channel", "futures-core", "futures-util", @@ -2199,7 +2659,7 @@ dependencies = [ "http-body", "httparse", "httpdate", - "itoa 1.0.4", + "itoa 1.0.9", "pin-project-lite", "socket2", "tokio", @@ -2226,7 +2686,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" dependencies = [ - "bytes 1.2.1", + "bytes 1.4.0", "hyper", "native-tls", "tokio", @@ -2242,39 +2702,38 @@ dependencies = [ "futures-util", "hex", "hyper", - "pin-project 1.0.12", + "pin-project 1.1.2", "tokio", ] [[package]] name = "iana-time-zone" -version = "0.1.51" +version = "0.1.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5a6ef98976b22b3b7f2f3a806f858cb862044cfa66805aa3ad84cb3d3b785ed" +checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "winapi", + "windows 0.48.0", ] [[package]] name = "iana-time-zone-haiku" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" dependencies = [ - "cxx", - "cxx-build", + "cc", ] [[package]] name = "ico" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "031530fe562d8c8d71c0635013d6d155bbfe8ba0aa4b4d2d24ce8af6b71047bd" +checksum = "e3804960be0bb5e4edb1e1ad67afd321a9ecfd875c3e65c099468fd2717d7cae" dependencies = [ "byteorder", "png", @@ -2286,17 +2745,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" -[[package]] -name = "idna" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" -dependencies = [ - "matches", - "unicode-bidi", - "unicode-normalization", -] - [[package]] name = "idna" version = "0.2.3" @@ -2310,9 +2758,9 @@ dependencies = [ [[package]] name = "idna" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" dependencies = [ "unicode-bidi", "unicode-normalization", @@ -2338,37 +2786,70 @@ dependencies = [ [[package]] name = "image" -version = "0.24.4" +version = "0.23.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24ffcb7e7244a9bf19d35bf2883b9c080c4ced3c07a9895572178cdb8f13f6a1" +dependencies = [ + "bytemuck", + "byteorder", + "color_quant", + "num-iter", + "num-rational 0.3.2", + "num-traits", +] + +[[package]] +name = "image" +version = "0.24.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd8e4fb07cf672b1642304e731ef8a6a4c7891d67bb4fd4f5ce58cd6ed86803c" +checksum = "527909aa81e20ac3a44803521443a765550f09b5130c2c2fa1ea59c2f8f50a3a" dependencies = [ "bytemuck", "byteorder", "color_quant", - "num-rational", + "num-rational 0.4.1", "num-traits", ] [[package]] name = "indexmap" -version = "1.9.1" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", "hashbrown 0.12.3", "serde", ] +[[package]] +name = "indexmap" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" +dependencies = [ + "equivalent", + "hashbrown 0.14.0", +] + [[package]] name = "infer" -version = "0.7.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20b2b533137b9cad970793453d4f921c2e91312a6d88b1085c07bc15fc51bb3b" +checksum = "a898e4b7951673fce96614ce5751d13c40fc5674bc2d759288e46c3ab62598b3" dependencies = [ "cfb", ] +[[package]] +name = "inout" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +dependencies = [ + "generic-array", +] + [[package]] name = "instant" version = "0.1.12" @@ -2384,33 +2865,11 @@ version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" -[[package]] -name = "io-lifetimes" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1abeb7a0dd0f8181267ff8adc397075586500b81b28a73e8a0208b00fc170fb3" -dependencies = [ - "libc", - "windows-sys 0.45.0", -] - [[package]] name = "ipnet" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879d54834c8c76457ef4293a689b2a8c59b076067ad77b15efafbb05f92a592b" - -[[package]] -name = "is-terminal" -version = "0.4.2" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28dfb6c8100ccc63462345b67d1bbc3679177c75ee4bf59bf29c8b1d110b8189" -dependencies = [ - "hermit-abi 0.2.6", - "io-lifetimes", - "rustix", - "windows-sys 0.42.0", -] +checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6" [[package]] name = "itertools" @@ -2429,9 +2888,9 @@ checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" [[package]] name = "itoa" -version = "1.0.4" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" [[package]] name = "javascriptcore-rs" @@ -2477,34 +2936,33 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] -name = "js-sys" -version = "0.3.60" +name = "jobserver" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" +checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" dependencies = [ - "wasm-bindgen", + "libc", ] [[package]] -name = "json-patch" -version = "0.2.6" +name = "js-sys" +version = "0.3.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f995a3c8f2bc3dd52a18a583e90f9ec109c047fa1603a853e46bcda14d2e279d" +checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" dependencies = [ - "serde", - "serde_json", - "treediff", + "wasm-bindgen", ] [[package]] -name = "json5" -version = "0.2.8" +name = "json-patch" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eb2522ff59fbfefb955e9bd44d04d5e5c2d0e8865bfc2c3d1ab3916183ef5ee" +checksum = "1f54898088ccb91df1b492cc80029a6fdf1c48ca0db7c6822a8babad69c94658" dependencies = [ - "pest", - "pest_derive", "serde", + "serde_json", + "thiserror", + "treediff", ] [[package]] @@ -2520,9 +2978,12 @@ dependencies = [ [[package]] name = "keccak" -version = "0.1.2" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9b7d56ba4a8344d6be9729995e6b06f928af29998cdf79fe390cbf6b1fee838" +checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940" +dependencies = [ + "cpufeatures", +] [[package]] name = "kuchiki" @@ -2541,6 +3002,9 @@ name = "lazy_static" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +dependencies = [ + "spin", +] [[package]] name = "lazycell" @@ -2550,83 +3014,78 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.140" +version = "0.2.147" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c" +checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" [[package]] name = "libdbus-sys" -version = "0.2.2" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c185b5b7ad900923ef3a8ff594083d4d9b5aea80bb4f32b8342363138c0d456b" +checksum = "06085512b750d640299b79be4bad3d2fa90a9c00b1fd9e1b46364f66f0485c72" dependencies = [ "pkg-config", ] [[package]] name = "libgit2-sys" -version = "0.7.11" +version = "0.14.2+1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48441cb35dc255da8ae72825689a95368bf510659ae1ad55dc4aa88cb1789bf1" +checksum = "7f3d95f6b51075fe9810a7ae22c7095f12b98005ab364d8544797a825ce946a4" dependencies = [ "cc", - "curl-sys", "libc", - "libssh2-sys", "libz-sys", - "openssl-sys", "pkg-config", ] [[package]] name = "liblmdb-sys" -version = "0.2.3" -source = "git+https://github.com/tari-project/lmdb-rs?tag=0.7.6-tari.1#8d88933179c4ab7ceafb407a9615ecdd5c569a5f" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "feed38a3a580f60bf61aaa067b0ff4123395966839adeaf67258a9e50c4d2e49" dependencies = [ - "cc", + "gcc", "libc", ] [[package]] name = "libloading" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efbc0f03f9a775e9f6aed295c6a1ba2253c5757a9e03d55c6caa46a681abcddd" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" dependencies = [ "cfg-if", "winapi", ] [[package]] -name = "libsqlite3-sys" -version = "0.22.2" +name = "libm" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290b64917f8b0cb885d9de0f9959fe1f775d7fa12f1da2db9001c1c8ab60f89d" -dependencies = [ - "cc", - "pkg-config", - "vcpkg", -] +checksum = "7fc7aa29613bd6a620df431842069224d8bc9011086b1db4c0e0cd47fa03ec9a" [[package]] -name = "libssh2-sys" -version = "0.2.23" +name = "libm" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4" + +[[package]] +name = "libsqlite3-sys" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b094a36eb4b8b8c8a7b4b8ae43b2944502be3e59cd87687595cf6b0a71b3f4ca" +checksum = "afc22eff61b133b115c6e8c74e818c628d6d5e7a502afea6f64dee076dd94326" dependencies = [ - "cc", - "libc", - "libz-sys", - "openssl-sys", "pkg-config", "vcpkg", ] [[package]] name = "libz-sys" -version = "1.1.8" +version = "1.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf" +checksum = "d97137b25e321a73eef1418d1d5d2eda4d77e12813f8e6dead84bc52c5870a7b" dependencies = [ "cc", "libc", @@ -2643,15 +3102,6 @@ dependencies = [ "safemem", ] -[[package]] -name = "link-cplusplus" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9272ab7b96c9046fbc5bc56c06c117cb639fe2d509df0c421cad82d2915cf369" -dependencies = [ - "cc", -] - [[package]] name = "linked-hash-map" version = "0.5.6" @@ -2660,9 +3110,9 @@ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "linux-raw-sys" -version = "0.1.4" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" +checksum = "09fc20d2ca12cb9f044c93e3bd6d32d523e6e2ec3db4f7b2939cd99026ecd3f0" [[package]] name = "lmdb-zero" @@ -2678,9 +3128,9 @@ dependencies = [ [[package]] name = "lock_api" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" +checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" dependencies = [ "autocfg", "scopeguard", @@ -2688,11 +3138,10 @@ dependencies = [ [[package]] name = "log" -version = "0.4.17" +version = "0.4.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" +checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4" dependencies = [ - "cfg-if", "serde", ] @@ -2717,11 +3166,35 @@ dependencies = [ "libc", "log", "log-mdc", - "parking_lot 0.12.1", + "parking_lot", "serde", "serde-value", "serde_json", - "serde_yaml", + "serde_yaml 0.8.26", + "thiserror", + "thread-id", + "typemap-ors", + "winapi", +] + +[[package]] +name = "log4rs" +version = "1.2.0" +source = "git+https://github.com/tari-project/log4rs.git#e1051fd3a1bec9c55d055f60176a96cf11e58505" +dependencies = [ + "anyhow", + "arc-swap", + "chrono", + "derivative", + "fnv", + "humantime", + "libc", + "log", + "log-mdc", + "parking_lot", + "serde", + "serde-value", + "serde_yaml 0.8.26", "thiserror", "thread-id", "typemap-ors", @@ -2751,15 +3224,15 @@ checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" [[package]] name = "mac-notification-sys" -version = "0.5.6" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e72d50edb17756489e79d52eb146927bec8eba9dd48faadf9ef08bca3791ad5" +checksum = "abc434554ad0e640d772f7f262aa28e61d485212533d3673abe5f3d1729bd42a" dependencies = [ "cc", "dirs-next 2.0.0", "objc-foundation", "objc_id", - "time 0.3.15", + "time 0.3.23", ] [[package]] @@ -2791,23 +3264,40 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" dependencies = [ - "regex-automata", + "regex-automata 0.1.10", ] [[package]] name = "matches" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" +checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" [[package]] -name = "memchr" -version = "2.5.0" +name = "matchit" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +checksum = "b87248edafb776e59e6ee64a79086f65890d3510f2c656c000bf2a7e8a0aea40" [[package]] -name = "memoffset" +name = "md-5" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5a279bb9607f9f53c22d496eade00d138d1bdcccd07d74650387cf94942a15" +dependencies = [ + "block-buffer 0.9.0", + "digest 0.9.0", + "opaque-debug", +] + +[[package]] +name = "memchr" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" + +[[package]] +name = "memoffset" version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" @@ -2816,55 +3306,62 @@ dependencies = [ ] [[package]] -name = "merlin" -version = "2.0.1" +name = "memoffset" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e261cf0f8b3c42ded9f7d2bb59dea03aa52bc8a1cbc7482f9fc3fd1229d3b42" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" dependencies = [ - "byteorder", - "keccak", - "rand_core 0.5.1", - "zeroize", + "autocfg", ] [[package]] name = "merlin" -version = "3.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" +checksum = "4e261cf0f8b3c42ded9f7d2bb59dea03aa52bc8a1cbc7482f9fc3fd1229d3b42" dependencies = [ "byteorder", "keccak", - "rand_core 0.6.4", + "rand_core 0.5.1", "zeroize", ] [[package]] name = "migrations_internals" -version = "1.4.1" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b4fc84e4af020b837029e017966f86a1c2d5e83e64b589963d5047525995860" +checksum = "0f23f71580015254b020e856feac3df5878c2c7a8812297edd6c0a485ac9dada" dependencies = [ - "diesel", + "serde", + "toml 0.7.6", ] [[package]] name = "migrations_macros" -version = "1.4.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9753f12909fd8d923f75ae5c3258cae1ed3c8ec052e1b38c93c21a6d157f789c" +checksum = "cce3325ac70e67bbab5bd837a31cae01f1a6db64e0e744a33cb03a543469ef08" dependencies = [ "migrations_internals", "proc-macro2", "quote", - "syn 1.0.107", ] [[package]] name = "mime" -version = "0.3.16" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mime_guess" +version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" +checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" +dependencies = [ + "mime", + "unicase", +] [[package]] name = "minimal-lexical" @@ -2874,32 +3371,34 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.5.4" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96590ba8f175222643a85693f33d26e9c8a015f599c216509b1a6894af675d34" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" dependencies = [ "adler", + "simd-adler32", ] [[package]] name = "mio" -version = "0.8.4" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf" +checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" dependencies = [ "libc", "log", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.36.1", + "windows-sys 0.48.0", ] [[package]] name = "monero" -version = "0.17.2" -source = "git+https://github.com/tari-project/monero-rs.git?branch=main#7aebfd0aa037025cac6cbded3f72d73bf3c18123" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a8965a7510c5d9389e2086e406c292d6bbecac099eef195be55a2d2043448b9" dependencies = [ "base58-monero 1.0.0", - "curve25519-dalek 3.2.1", + "curve25519-dalek 3.2.0", "fixed-hash", "hex", "hex-literal", @@ -2921,11 +3420,11 @@ dependencies = [ "byteorder", "data-encoding", "multihash", - "percent-encoding 2.2.0", + "percent-encoding", "serde", "static_assertions", "unsigned-varint", - "url 2.3.1", + "url", ] [[package]] @@ -2941,15 +3440,15 @@ dependencies = [ [[package]] name = "multihash-derive" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc076939022111618a5026d3be019fd8b366e76314538ff9a1b59ffbcbf98bcd" +checksum = "1d6d4752e6230d8ef7adf7bd5d8c4b1f6561c1014c5ba9a37445ccefe18aa1db" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 1.1.3", "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", "synstructure", ] @@ -2961,9 +3460,9 @@ checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" [[package]] name = "native-tls" -version = "0.2.10" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd7e2f3618557f980e0b17e8856252eee3c97fa12c54dff0ca290fb6266ca4a9" +checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" dependencies = [ "lazy_static", "libc", @@ -3026,6 +3525,19 @@ dependencies = [ "smallvec", ] +[[package]] +name = "nix" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f3790c00a0150112de0f4cd161e3d7fc4b2d8a5542ffc35f099a2562aecb35c" +dependencies = [ + "bitflags 1.3.2", + "cc", + "cfg-if", + "libc", + "memoffset 0.6.5", +] + [[package]] name = "nodrop" version = "0.1.14" @@ -3040,19 +3552,29 @@ checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" [[package]] name = "nom" -version = "5.1.2" +version = "4.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ad2a91a8e869eeb30b9cb3119ae87773a8f4ae617f41b1eb9c154b2905f7bd6" +dependencies = [ + "memchr", + "version_check 0.1.5", +] + +[[package]] +name = "nom" +version = "5.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffb4262d26ed83a1c0a33a38fe2bb15797329c85770da05e6b828ddb782627af" +checksum = "08959a387a676302eebf4ddbcbc611da04285579f76f88ee0506c63b1a61dd4b" dependencies = [ "memchr", - "version_check", + "version_check 0.9.4", ] [[package]] name = "nom" -version = "7.1.1" +version = "7.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" dependencies = [ "memchr", "minimal-lexical", @@ -3060,9 +3582,9 @@ dependencies = [ [[package]] name = "notify-rust" -version = "4.5.10" +version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368e89ea58df747ce88be669ae44e79783c1d30bfd540ad0fc520b3f41f0b3b0" +checksum = "5cc2e370356160e41aba3fd0fbac26d86a89ddd2ac4300c03de999a77cfa2509" dependencies = [ "dbus", "mac-notification-sys", @@ -3081,15 +3603,33 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.2.6" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304" +checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" dependencies = [ "autocfg", "num-integer", "num-traits", ] +[[package]] +name = "num-bigint-dig" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" +dependencies = [ + "byteorder", + "lazy_static", + "libm 0.2.7", + "num-integer", + "num-iter", + "num-traits", + "rand 0.8.5", + "serde", + "smallvec", + "zeroize", +] + [[package]] name = "num-derive" version = "0.3.3" @@ -3098,17 +3638,17 @@ checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] name = "num-format" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54b862ff8df690cf089058c98b183676a7ed0f974cc08b426800093227cbff3b" +checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" dependencies = [ "arrayvec", - "itoa 1.0.4", + "itoa 1.0.9", ] [[package]] @@ -3121,6 +3661,28 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-iter" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + [[package]] name = "num-rational" version = "0.4.1" @@ -3134,51 +3696,43 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2" dependencies = [ "autocfg", + "libm 0.2.7", ] [[package]] name = "num_cpus" -version = "1.13.1" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi 0.1.19", + "hermit-abi 0.3.2", "libc", ] [[package]] name = "num_enum" -version = "0.5.7" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf5395665662ef45796a4ff5486c5d41d29e0c09640af4c5f17fd94ee2c119c9" +checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" dependencies = [ "num_enum_derive", ] [[package]] name = "num_enum_derive" -version = "0.5.7" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b0498641e53dd6ac1a4f22547548caa6864cc4933784319cd1775271c5a46ce" +checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 1.1.3", "proc-macro2", "quote", - "syn 1.0.107", -] - -[[package]] -name = "num_threads" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44" -dependencies = [ - "libc", + "syn 1.0.109", ] [[package]] @@ -3220,11 +3774,20 @@ dependencies = [ "objc", ] +[[package]] +name = "object" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1" +dependencies = [ + "memchr", +] + [[package]] name = "once_cell" -version = "1.15.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" [[package]] name = "opaque-debug" @@ -3234,19 +3797,19 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "open" -version = "3.0.3" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4a3100141f1733ea40b53381b0ae3117330735ef22309a190ac57b9576ea716" +checksum = "2078c0039e6a54a0c42c28faa984e115fb4c2d5bf2208f77d1961002df8576f8" dependencies = [ "pathdiff", - "windows-sys 0.36.1", + "windows-sys 0.42.0", ] [[package]] name = "openssl" -version = "0.10.42" +version = "0.10.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12fc0523e3bd51a692c8850d075d74dc062ccf251c0110668cbd921917118a13" +checksum = "345df152bc43501c5eb9e4654ff05f794effb78d4efe3d53abc158baddc0703d" dependencies = [ "bitflags 1.3.2", "cfg-if", @@ -3259,13 +3822,13 @@ dependencies = [ [[package]] name = "openssl-macros" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn 2.0.27", ] [[package]] @@ -3276,20 +3839,19 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-src" -version = "111.24.0+1.1.1s" +version = "111.26.0+1.1.1u" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3498f259dab01178c6228c6b00dcef0ed2a2d5e20d648c017861227773ea4abd" +checksum = "efc62c9f12b22b8f5208c23a7200a442b2e5999f8bdf80233852122b5a4f6f37" dependencies = [ "cc", ] [[package]] name = "openssl-sys" -version = "0.9.76" +version = "0.9.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5230151e44c0f05157effb743e8d517472843121cf9243e8b81393edb5acd9ce" +checksum = "374533b0e45f3a7ced10fcaeccca020e66656bc03dac384f852e4e5a7a8104a6" dependencies = [ - "autocfg", "cc", "libc", "openssl-src", @@ -3318,9 +3880,9 @@ dependencies = [ [[package]] name = "os_info" -version = "3.5.1" +version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4750134fb6a5d49afc80777394ad5d95b04bc12068c6abb92fae8f43817270f" +checksum = "006e42d5b888366f1880eda20371fedde764ed2213dc8496f49622fa0c99cd5e" dependencies = [ "log", "serde", @@ -3329,19 +3891,19 @@ dependencies = [ [[package]] name = "os_pipe" -version = "1.1.1" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dceb7e43f59c35ee1548045b2c72945a5a3bb6ce6d6f07cdc13dc8f6bc4930a" +checksum = "0ae859aa07428ca9a929b936690f8b12dc5f11dd8c6992a18ca93919f28bc177" dependencies = [ "libc", - "winapi", + "windows-sys 0.48.0", ] [[package]] name = "os_str_bytes" -version = "6.3.0" +version = "6.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ff7415e9ae3fff1225851df9e0d9e4e5479f947619774677a63572e55e80eff" +checksum = "4d5d9eb14b174ee9aa2ef96dc2b94637a2d4b6e7cb873c7e171f0c20c6cf3eac" [[package]] name = "overload" @@ -3349,6 +3911,16 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" +[[package]] +name = "packed_simd_2" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1914cd452d8fccd6f9db48147b29fd4ae05bea9dc5d9ad578509f72415de282" +dependencies = [ + "cfg-if", + "libm 0.1.4", +] + [[package]] name = "pango" version = "0.15.10" @@ -3371,18 +3943,7 @@ dependencies = [ "glib-sys", "gobject-sys", "libc", - "system-deps 6.0.2", -] - -[[package]] -name = "parking_lot" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" -dependencies = [ - "instant", - "lock_api", - "parking_lot_core 0.8.5", + "system-deps 6.1.1", ] [[package]] @@ -3392,34 +3953,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ "lock_api", - "parking_lot_core 0.9.3", -] - -[[package]] -name = "parking_lot_core" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" -dependencies = [ - "cfg-if", - "instant", - "libc", - "redox_syscall", - "smallvec", - "winapi", + "parking_lot_core", ] [[package]] name = "parking_lot_core" -version = "0.9.3" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929" +checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" dependencies = [ "cfg-if", "libc", - "redox_syscall", + "redox_syscall 0.3.5", "smallvec", - "windows-sys 0.36.1", + "windows-targets", ] [[package]] @@ -3435,9 +3982,9 @@ dependencies = [ [[package]] name = "paste" -version = "1.0.9" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1de2e551fb905ac83f73f7aedf2f0cb4a0da7e35efa24a202a936269f1f18e1" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" [[package]] name = "path-clean" @@ -3458,22 +4005,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" [[package]] -name = "percent-encoding" -version = "1.0.1" +name = "pem-rfc7468" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" +checksum = "01de5d978f34aa4b2296576379fcc416034702fd94117c56ffd8a1a767cefb30" +dependencies = [ + "base64ct", +] [[package]] name = "percent-encoding" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" +checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" [[package]] name = "pest" -version = "2.4.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbc7bc69c062e492337d74d59b120c274fd3d261b6bf6d3207d499b4b379c41a" +checksum = "0d2d1d55045829d65aad9d389139882ad623b33b904e7c9f1b10c5b8927298e5" dependencies = [ "thiserror", "ucd-trie", @@ -3481,9 +4031,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.4.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b75706b9642ebcb34dab3bc7750f811609a0eb1dd8b88c2d15bf628c1c65b2" +checksum = "5f94bca7e7a599d89dea5dfa309e217e7906c3c007fb9c3299c40b10d6a315d3" dependencies = [ "pest", "pest_generator", @@ -3491,36 +4041,85 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.4.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f9272122f5979a6511a749af9db9bfc810393f63119970d7085fed1c4ea0db" +checksum = "99d490fe7e8556575ff6911e45567ab95e71617f43781e5c05490dc8d75c965c" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 1.0.107", + "syn 2.0.27", ] [[package]] name = "pest_meta" -version = "2.4.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8717927f9b79515e565a64fe46c38b8cd0427e64c40680b14a7365ab09ac8d" +checksum = "2674c66ebb4b4d9036012091b537aae5878970d6999f81a265034d85b136b341" dependencies = [ "once_cell", "pest", - "sha1 0.10.5", + "sha2 0.10.7", ] [[package]] name = "petgraph" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5014253a1331579ce62aa67443b4a658c5e7dd03d4bc6d302b94474888143" +checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4" dependencies = [ "fixedbitset", - "indexmap", + "indexmap 1.9.3", +] + +[[package]] +name = "pgp" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0c63db779c3f090b540dfa0484f8adc2d380e3aa60cdb0f3a7a97454e22edc5" +dependencies = [ + "aes", + "base64 0.13.1", + "bitfield", + "block-modes", + "block-padding", + "blowfish", + "buf_redux", + "byteorder", + "cast5", + "cfb-mode", + "chrono", + "cipher 0.3.0", + "circular", + "clear_on_drop", + "crc24", + "derive_builder", + "des", + "digest 0.9.0", + "ed25519-dalek", + "flate2", + "generic-array", + "hex", + "lazy_static", + "log", + "md-5", + "nom 4.2.3", + "num-bigint-dig", + "num-derive", + "num-traits", + "rand 0.8.5", + "ripemd160", + "rsa", + "sha-1", + "sha2 0.9.9", + "sha3", + "signature", + "smallvec", + "thiserror", + "twofish", + "x25519-dalek", + "zeroize", ] [[package]] @@ -3586,7 +4185,7 @@ dependencies = [ "proc-macro-hack", "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] @@ -3600,7 +4199,7 @@ dependencies = [ "proc-macro-hack", "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] @@ -3632,11 +4231,11 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.0.12" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" +checksum = "030ad2bc4db10a8944cb0d837f158bdfec4d4a4873ab701a95046770d11f8842" dependencies = [ - "pin-project-internal 1.0.12", + "pin-project-internal 1.1.2", ] [[package]] @@ -3647,25 +4246,25 @@ checksum = "851c8d0ce9bebe43790dedfc86614c23494ac9f423dd618d3a61fc693eafe61e" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] name = "pin-project-internal" -version = "1.0.12" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" +checksum = "ec2e072ecce94ec471b13398d5402c188e76ac03cf74dd1a975161b23a3f6d9c" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn 2.0.27", ] [[package]] name = "pin-project-lite" -version = "0.2.9" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" +checksum = "4c40d25201921e5ff0c862a505c6557ea88568a4e3ace775ab55e93f2f4f9d57" [[package]] name = "pin-utils" @@ -3673,34 +4272,63 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "pkcs1" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a78f66c04ccc83dd4486fd46c33896f4e17b24a7a3a6400dedc48ed0ddd72320" +dependencies = [ + "der", + "pkcs8", + "zeroize", +] + +[[package]] +name = "pkcs8" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cabda3fb821068a9a4fab19a683eac3af12edf0f34b94a8be53c4972b8149d0" +dependencies = [ + "der", + "spki", + "zeroize", +] + [[package]] name = "pkg-config" -version = "0.3.25" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae" +checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" + +[[package]] +name = "platforms" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d7ddaed09e0eb771a79ab0fd64609ba0afb0a8366421957936ad14cbd13630" [[package]] name = "plist" -version = "1.3.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd39bc6cdc9355ad1dc5eeedefee696bb35c34caf21768741e81826c0bbd7225" +checksum = "bdc0001cfea3db57a2e24bc0d818e9e20e554b5f97fabb9bc231dc240269ae06" dependencies = [ - "base64 0.13.0", - "indexmap", + "base64 0.21.2", + "indexmap 1.9.3", "line-wrap", + "quick-xml 0.29.0", "serde", - "time 0.3.15", - "xml-rs", + "time 0.3.23", ] [[package]] name = "png" -version = "0.17.6" +version = "0.17.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f0e7f4c94ec26ff209cee506314212639d6c91b80afb82984819fafce9df01c" +checksum = "59871cc5b6cce7eaccca5a802b4173377a1c2ba90654246789a8fa2334426d11" dependencies = [ "bitflags 1.3.2", "crc32fast", + "fdeflate", "flate2", "miniz_oxide", ] @@ -3713,7 +4341,18 @@ checksum = "048aeb476be11a4b6ca432ca569e375810de9294ae78f4774e78ea98a9246ede" dependencies = [ "cpufeatures", "opaque-debug", - "universal-hash", + "universal-hash 0.4.0", +] + +[[package]] +name = "poly1305" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" +dependencies = [ + "cpufeatures", + "opaque-debug", + "universal-hash 0.5.1", ] [[package]] @@ -3725,14 +4364,14 @@ dependencies = [ "cfg-if", "cpufeatures", "opaque-debug", - "universal-hash", + "universal-hash 0.4.0", ] [[package]] name = "ppv-lite86" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" [[package]] name = "precomputed-hash" @@ -3742,11 +4381,19 @@ checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" [[package]] name = "proc-macro-crate" -version = "1.2.1" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eda0fc3b0fb7c975631757e14d9049da17374063edb6ebbcbc54d880d4fe94e9" +checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" +dependencies = [ + "toml 0.5.11", +] + +[[package]] +name = "proc-macro-crate" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" dependencies = [ - "once_cell", "thiserror", "toml 0.5.11", ] @@ -3760,8 +4407,8 @@ dependencies = [ "proc-macro-error-attr", "proc-macro2", "quote", - "syn 1.0.107", - "version_check", + "syn 1.0.109", + "version_check 0.9.4", ] [[package]] @@ -3772,35 +4419,35 @@ checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" dependencies = [ "proc-macro2", "quote", - "version_check", + "version_check 0.9.4", ] [[package]] name = "proc-macro-hack" -version = "0.5.19" +version = "0.5.20+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" +checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.56" +version = "1.0.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" +checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" dependencies = [ "unicode-ident", ] [[package]] name = "prometheus" -version = "0.13.2" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45c8babc29389186697fe5a2a4859d697825496b83db5d0b65271cdc0488e88c" +checksum = "449811d15fbdf5ceb5c1144416066429cf82316e2ec8ce0c1f6f8a02e7bbcf8c" dependencies = [ "cfg-if", "fnv", "lazy_static", "memchr", - "parking_lot 0.12.1", + "parking_lot", "protobuf", "thiserror", ] @@ -3811,8 +4458,18 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "444879275cb4fd84958b1a1d5420d15e6fcf7c235fe47f053c9c2a80aceb6001" dependencies = [ - "bytes 1.2.1", - "prost-derive", + "bytes 1.4.0", + "prost-derive 0.9.0", +] + +[[package]] +name = "prost" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd" +dependencies = [ + "bytes 1.4.0", + "prost-derive 0.11.9", ] [[package]] @@ -3821,15 +4478,15 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62941722fb675d463659e49c4f3fe1fe792ff24fe5bbaa9c08cd3b98a1c354f5" dependencies = [ - "bytes 1.2.1", + "bytes 1.4.0", "heck 0.3.3", "itertools", "lazy_static", "log", "multimap", "petgraph", - "prost", - "prost-types", + "prost 0.9.0", + "prost-types 0.9.0", "regex", "tempfile", "which", @@ -3845,25 +4502,77 @@ dependencies = [ "itertools", "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] -name = "prost-types" -version = "0.9.0" +name = "prost-derive" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534b7a0e836e3c482d2693070f982e39e7611da9695d4d1f5a4b186b51faef0a" +checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" dependencies = [ - "bytes 1.2.1", - "prost", -] - -[[package]] + "anyhow", + "itertools", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "prost-types" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "534b7a0e836e3c482d2693070f982e39e7611da9695d4d1f5a4b186b51faef0a" +dependencies = [ + "bytes 1.4.0", + "prost 0.9.0", +] + +[[package]] +name = "prost-types" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13" +dependencies = [ + "prost 0.11.9", +] + +[[package]] name = "protobuf" version = "2.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "106dd99e98437432fed6519dedecfade6a06a73bb7b2a1e019fdd2bee5778d94" +[[package]] +name = "ptr_meta" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" +dependencies = [ + "ptr_meta_derive", +] + +[[package]] +name = "ptr_meta_derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "qrcode" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16d2f1455f3630c6e5107b4f2b94e74d76dea80736de0981fd27644216cff57f" +dependencies = [ + "checked_int_cast", + "image 0.23.14", +] + [[package]] name = "quick-xml" version = "0.23.1" @@ -3873,11 +4582,20 @@ dependencies = [ "memchr", ] +[[package]] +name = "quick-xml" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81b9228215d82c7b61490fec1de287136b5de6f5700f6e58ea9ad61a7964ca51" +dependencies = [ + "memchr", +] + [[package]] name = "quote" -version = "1.0.26" +version = "1.0.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" +checksum = "50f3b39ccfb720540debaa0164757101c08ecb8d326b15358ce76a62c7e85965" dependencies = [ "proc-macro2", ] @@ -3889,10 +4607,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51de85fb3fb6524929c8a2eb85e6b6d363de4e8c48f9e2c2eac4944abc181c93" dependencies = [ "log", - "parking_lot 0.12.1", + "parking_lot", "scheduled-thread-pool", ] +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + [[package]] name = "radix_trie" version = "0.2.1" @@ -3963,7 +4687,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.7", + "getrandom 0.2.10", ] [[package]] @@ -3986,8 +4710,8 @@ dependencies = [ [[package]] name = "randomx-rs" -version = "1.1.13" -source = "git+https://github.com/tari-project/randomx-rs?tag=v1.1.13#c33f8679fab73961104df9692c6c3bb1d29ad156" +version = "1.1.15" +source = "git+https://github.com/tari-project/randomx-rs?tag=v1.1.15#f7b03f336b6582af314caae3dcef75069719213b" dependencies = [ "bitflags 1.3.2", "libc", @@ -4012,26 +4736,36 @@ dependencies = [ "bitflags 1.3.2", ] +[[package]] +name = "redox_syscall" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +dependencies = [ + "bitflags 1.3.2", +] + [[package]] name = "redox_users" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" dependencies = [ - "getrandom 0.2.7", - "redox_syscall", + "getrandom 0.2.10", + "redox_syscall 0.2.16", "thiserror", ] [[package]] name = "regex" -version = "1.7.3" +version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b1f693b24f6ac912f4893ef08244d70b6067480d2f1a46e950c9691e6749d1d" +checksum = "b2eae68fc220f7cf2532e4494aded17545fce192d59cd996e0fe7887f4ceb575" dependencies = [ "aho-corasick", "memchr", - "regex-syntax", + "regex-automata 0.3.3", + "regex-syntax 0.7.4", ] [[package]] @@ -4040,7 +4774,18 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" dependencies = [ - "regex-syntax", + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39354c10dd07468c2e73926b23bb9c2caca74c5501e38a35da70406f1d923310" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.7.4", ] [[package]] @@ -4050,22 +4795,28 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] -name = "remove_dir_all" -version = "0.5.3" +name = "regex-syntax" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" +checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2" + +[[package]] +name = "rend" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "581008d2099240d37fb08d77ad713bcaec2c4d89d50b5b21a8bb1996bbab68ab" dependencies = [ - "winapi", + "bytecheck", ] [[package]] name = "reqwest" -version = "0.11.16" +version = "0.11.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b71749df584b7f4cac2c426c127a7c785a5106cc98f7a8feb044115f0fa254" +checksum = "cde824a14b7c14f85caff81225f411faacc04a2013f41670f41443742b1c1c55" dependencies = [ - "base64 0.21.0", - "bytes 1.2.1", + "base64 0.21.2", + "bytes 1.4.0", "encoding_rs", "futures-core", "futures-util", @@ -4080,7 +4831,7 @@ dependencies = [ "mime", "native-tls", "once_cell", - "percent-encoding 2.2.0", + "percent-encoding", "pin-project-lite", "serde", "serde_json", @@ -4088,7 +4839,7 @@ dependencies = [ "tokio", "tokio-native-tls", "tower-service", - "url 2.3.1", + "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -4134,17 +4885,76 @@ dependencies = [ "winapi", ] +[[package]] +name = "ripemd160" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2eca4ecc81b7f313189bf73ce724400a07da2a6dac19588b03c8bd76a2dcc251" +dependencies = [ + "block-buffer 0.9.0", + "digest 0.9.0", + "opaque-debug", +] + +[[package]] +name = "rkyv" +version = "0.7.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0200c8230b013893c0b2d6213d6ec64ed2b9be2e0e016682b7224ff82cff5c58" +dependencies = [ + "bitvec", + "bytecheck", + "hashbrown 0.12.3", + "ptr_meta", + "rend", + "rkyv_derive", + "seahash", + "tinyvec", + "uuid", +] + +[[package]] +name = "rkyv_derive" +version = "0.7.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2e06b915b5c230a17d7a736d1e2e63ee753c256a8614ef3f5147b13a4f5541d" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "ron" version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "88073939a61e5b7680558e6be56b419e208420c2adb92be54921fa6b72283f1a" dependencies = [ - "base64 0.13.0", + "base64 0.13.1", "bitflags 1.3.2", "serde", ] +[[package]] +name = "rsa" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cf22754c49613d2b3b119f0e5d46e34a2c628a937e3024b8762de4e7d8c710b" +dependencies = [ + "byteorder", + "digest 0.10.7", + "num-bigint-dig", + "num-integer", + "num-iter", + "num-traits", + "pkcs1", + "pkcs8", + "rand_core 0.6.4", + "smallvec", + "subtle", + "zeroize", +] + [[package]] name = "rust-ini" version = "0.18.0" @@ -4156,34 +4966,40 @@ dependencies = [ ] [[package]] -name = "rustc-hash" -version = "1.1.0" +name = "rust_decimal" +version = "1.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" +checksum = "d0446843641c69436765a35a5a77088e28c2e6a12da93e84aa3ab1cd4aa5a042" +dependencies = [ + "arrayvec", + "borsh 0.10.3", + "bytecheck", + "byteorder", + "bytes 1.4.0", + "num-traits", + "rand 0.8.5", + "rkyv", + "serde", + "serde_json", +] [[package]] -name = "rustc-hex" -version = "2.1.0" +name = "rustc-demangle" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" [[package]] -name = "rustc_version" -version = "0.2.3" +name = "rustc-hash" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -dependencies = [ - "semver 0.9.0", -] +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] -name = "rustc_version" -version = "0.3.3" +name = "rustc-hex" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" -dependencies = [ - "semver 0.11.0", -] +checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" [[package]] name = "rustc_version" @@ -4191,68 +5007,97 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.14", + "semver", ] [[package]] name = "rustix" -version = "0.36.7" +version = "0.38.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fdebc4b395b7fbb9ab11e462e20ed9051e7b16e42d24042c776eca0ac81b03" +checksum = "0a962918ea88d644592894bc6dc55acc6c0956488adcebbfb6e273506b7fd6e5" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.3.3", "errno", - "io-lifetimes", "libc", "linux-raw-sys", - "windows-sys 0.42.0", + "windows-sys 0.48.0", ] [[package]] name = "rustls" -version = "0.19.1" +version = "0.20.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7" +checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f" dependencies = [ - "base64 0.13.0", "log", "ring", - "sct 0.6.1", - "webpki 0.21.4", + "sct", + "webpki 0.22.0", ] [[package]] -name = "rustls" -version = "0.20.6" +name = "rustls-pemfile" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aab8ee6c7097ed6057f43c187a62418d0c05a4bd5f18b3571db50ee0f9ce033" +checksum = "1ee86d63972a7c661d1536fefe8c3c8407321c3df668891286de28abcd087360" dependencies = [ - "log", - "ring", - "sct 0.7.0", - "webpki 0.22.0", + "base64 0.13.1", ] [[package]] name = "rustls-pemfile" -version = "0.3.0" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ee86d63972a7c661d1536fefe8c3c8407321c3df668891286de28abcd087360" +checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2" dependencies = [ - "base64 0.13.0", + "base64 0.21.2", ] [[package]] name = "rustversion" -version = "1.0.9" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" + +[[package]] +name = "rustyline" +version = "9.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db7826789c0e25614b03e5a54a0717a86f9ff6e6e5247f92b369472869320039" +dependencies = [ + "bitflags 1.3.2", + "cfg-if", + "clipboard-win", + "dirs-next 2.0.0", + "fd-lock", + "libc", + "log", + "memchr", + "nix", + "radix_trie", + "scopeguard", + "smallvec", + "unicode-segmentation", + "unicode-width", + "utf8parse", + "winapi", +] + +[[package]] +name = "rustyline-derive" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97477e48b4cf8603ad5f7aaf897467cf42ab4218a38ef76fb14c2d6773a6d6a8" +checksum = "688599bdab9f42105d0ae1494335a9ffafdeb7d36325e6b10fd4abc5829d6284" +dependencies = [ + "quote", + "syn 1.0.109", +] [[package]] name = "ryu" -version = "1.0.11" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" +checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" [[package]] name = "safemem" @@ -4271,60 +5116,49 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.20" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2" +checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88" dependencies = [ - "lazy_static", - "windows-sys 0.36.1", + "windows-sys 0.48.0", ] [[package]] name = "scheduled-thread-pool" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "977a7519bff143a44f842fd07e80ad1329295bd71686457f18e496736f4bf9bf" +checksum = "3cbc66816425a074528352f5789333ecff06ca41b36b0b0efdfbb29edc391a19" dependencies = [ - "parking_lot 0.12.1", + "parking_lot", ] [[package]] name = "scoped-tls" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" [[package]] name = "scopeguard" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" - -[[package]] -name = "scratch" -version = "1.0.2" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8132065adcfd6e02db789d9285a0deb2f3fcb04002865ab67d5fb103533898" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "sct" -version = "0.6.1" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce" +checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" dependencies = [ "ring", "untrusted", ] [[package]] -name = "sct" -version = "0.7.0" +name = "seahash" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" -dependencies = [ - "ring", - "untrusted", -] +checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" [[package]] name = "sealed" @@ -4335,14 +5169,14 @@ dependencies = [ "heck 0.3.3", "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] name = "security-framework" -version = "2.7.0" +version = "2.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bc1bb97804af6631813c55739f771071e0f2ed33ee20b68c86ec505d906356c" +checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" dependencies = [ "bitflags 1.3.2", "core-foundation", @@ -4353,9 +5187,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.6.1" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556" +checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" dependencies = [ "core-foundation-sys", "libc", @@ -4383,51 +5217,18 @@ dependencies = [ [[package]] name = "semver" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" -dependencies = [ - "semver-parser 0.7.0", -] - -[[package]] -name = "semver" -version = "0.11.0" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" -dependencies = [ - "semver-parser 0.10.2", -] - -[[package]] -name = "semver" -version = "1.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e25dfac463d778e353db5be2449d1cce89bd6fd23c9f1ea21310ce6e5a1b29c4" +checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918" dependencies = [ "serde", ] -[[package]] -name = "semver-parser" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" - -[[package]] -name = "semver-parser" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" -dependencies = [ - "pest", -] - [[package]] name = "serde" -version = "1.0.159" +version = "1.0.167" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c04e8343c3daeec41f58990b9d77068df31209f2af111e059e9fe9646693065" +checksum = "7daf513456463b42aa1d94cff7e0c24d682b429f020b9afa4f5ba5c40a22b237" dependencies = [ "serde_derive", ] @@ -4453,43 +5254,42 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.159" +version = "1.0.167" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c614d17805b093df4b147b51339e7e44bf05ef59fba1e45d83500bcfb4d8585" +checksum = "b69b106b68bc8054f0e974e70d19984040f8a5cf9215ca82626ea4853f82c4b9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.13", + "syn 2.0.27", ] [[package]] name = "serde_json" -version = "1.0.95" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d721eca97ac802aa7777b701877c8004d950fc142651367300d21c1cc0194744" +checksum = "076066c5f1078eac5b722a31827a8832fe108bed65dfa75e233c89f8206e976c" dependencies = [ - "indexmap", - "itoa 1.0.4", + "itoa 1.0.9", "ryu", "serde", ] [[package]] name = "serde_repr" -version = "0.1.9" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fe39d9fbb0ebf5eb2c7cb7e2a47e4f462fad1379f1166b8ae49ad9eae89a7ca" +checksum = "8725e1dfadb3a50f7e5ce0b1a540466f6ed3fe7a0fca2ac2b8b831d31316bd00" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn 2.0.27", ] [[package]] name = "serde_spanned" -version = "0.6.1" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0efd8caf556a6cebd3b285caf480045fcc1ac04f6bd786b09a6f11af30c4fcf4" +checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186" dependencies = [ "serde", ] @@ -4501,46 +5301,52 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" dependencies = [ "form_urlencoded", - "itoa 1.0.4", + "itoa 1.0.9", "ryu", "serde", ] [[package]] name = "serde_with" -version = "1.14.0" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "678b5a069e50bf00ecd22d0cd8ddf7c236f68581b03db652061ed5eb13a312ff" +checksum = "07ff71d2c147a7b57362cead5e22f772cd52f6ab31cfcd9edcd7f6aeb2a0afbe" dependencies = [ + "base64 0.13.1", + "chrono", + "hex", + "indexmap 1.9.3", "serde", - "serde_with_macros", + "serde_json", + "time 0.3.23", ] [[package]] name = "serde_with" -version = "2.2.0" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30d904179146de381af4c93d3af6ca4984b3152db687dacb9c3c35e86f39809c" +checksum = "21e47d95bc83ed33b2ecf84f4187ad1ab9685d18ff28db000c99deac8ce180e3" dependencies = [ - "base64 0.13.0", + "base64 0.21.2", "chrono", "hex", - "indexmap", + "indexmap 1.9.3", "serde", "serde_json", - "time 0.3.15", + "serde_with_macros", + "time 0.3.23", ] [[package]] name = "serde_with_macros" -version = "1.5.2" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082" +checksum = "ea3cee93715c2e266b9338b7544da68a9f24e227722ba482bd1c024367c77c65" dependencies = [ - "darling", + "darling 0.20.3", "proc-macro2", "quote", - "syn 1.0.107", + "syn 2.0.27", ] [[package]] @@ -4549,12 +5355,25 @@ version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b" dependencies = [ - "indexmap", + "indexmap 1.9.3", "ryu", "serde", "yaml-rust", ] +[[package]] +name = "serde_yaml" +version = "0.9.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a49e178e4452f45cb61d0cd8cebc1b0fafd3e41929e996cef79aa3aca91f574" +dependencies = [ + "indexmap 2.0.0", + "itoa 1.0.9", + "ryu", + "serde", + "unsafe-libyaml", +] + [[package]] name = "serialize-to-javascript" version = "0.1.1" @@ -4574,7 +5393,7 @@ checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] @@ -4587,6 +5406,19 @@ dependencies = [ "stable_deref_trait", ] +[[package]] +name = "sha-1" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] + [[package]] name = "sha1" version = "0.6.0" @@ -4601,7 +5433,7 @@ checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.5", + "digest 0.10.7", ] [[package]] @@ -4619,13 +5451,13 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.6" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" +checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.5", + "digest 0.10.7", ] [[package]] @@ -4667,9 +5499,9 @@ checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3" [[package]] name = "signal-hook" -version = "0.3.14" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a253b5e89e2698464fc26b545c9edceb338e18a89effeeecfea192c3025be29d" +checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" dependencies = [ "libc", "signal-hook-registry", @@ -4688,13 +5520,31 @@ dependencies = [ [[package]] name = "signal-hook-registry" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" dependencies = [ "libc", ] +[[package]] +name = "signature" +version = "1.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" + +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + +[[package]] +name = "simdutf8" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a" + [[package]] name = "siphasher" version = "0.3.10" @@ -4703,32 +5553,32 @@ checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" [[package]] name = "slab" -version = "0.4.7" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" +checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" dependencies = [ "autocfg", ] [[package]] name = "smallvec" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" +checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9" [[package]] name = "snow" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "774d05a3edae07ce6d68ea6984f3c05e9bba8927e3dd591e3b479e5b03213d0d" +checksum = "12ba5f4d4ff12bdb6a169ed51b7c48c0e0ac4b0b4b31012b2571e97d78d3201d" dependencies = [ "aes-gcm", - "blake2 0.10.4", - "chacha20poly1305", - "curve25519-dalek 4.0.0-pre.2", + "blake2 0.10.6", + "chacha20poly1305 0.9.1", + "curve25519-dalek 4.0.0-rc.0", "rand_core 0.6.4", - "rustc_version 0.4.0", - "sha2 0.10.6", + "rustc_version", + "sha2 0.10.7", "subtle", ] @@ -4777,102 +5627,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" [[package]] -name = "sqlformat" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4b7922be017ee70900be125523f38bdd644f4f06a1b16e8fa5a8ee8c34bffd4" -dependencies = [ - "itertools", - "nom 7.1.1", - "unicode_categories", -] - -[[package]] -name = "sqlx" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e4b94ab0f8c21ee4899b93b06451ef5d965f1a355982ee73684338228498440" -dependencies = [ - "sqlx-core", - "sqlx-macros", -] - -[[package]] -name = "sqlx-core" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec28b91a01e1fe286d6ba66f68289a2286df023fc97444e1fd86c2fd6d5dc026" -dependencies = [ - "ahash", - "atoi", - "bitflags 1.3.2", - "byteorder", - "bytes 1.2.1", - "crc", - "crossbeam-channel", - "crossbeam-queue", - "crossbeam-utils", - "either", - "futures-channel", - "futures-core", - "futures-intrusive", - "futures-util", - "hashlink", - "hex", - "itoa 0.4.8", - "libc", - "libsqlite3-sys", - "log", - "memchr", - "once_cell", - "parking_lot 0.11.2", - "percent-encoding 2.2.0", - "rustls 0.19.1", - "serde", - "serde_json", - "sha2 0.9.9", - "smallvec", - "sqlformat", - "sqlx-rt", - "stringprep", - "thiserror", - "tokio-stream", - "url 2.3.1", - "webpki 0.21.4", - "webpki-roots", - "whoami", -] - -[[package]] -name = "sqlx-macros" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dc33c35d54774eed73d54568d47a6ac099aed8af5e1556a017c131be88217d5" -dependencies = [ - "dotenv", - "either", - "futures", - "heck 0.3.3", - "once_cell", - "proc-macro2", - "quote", - "serde_json", - "sha2 0.9.9", - "sqlx-core", - "sqlx-rt", - "syn 1.0.107", - "url 2.3.1", -] - -[[package]] -name = "sqlx-rt" -version = "0.5.13" +name = "spki" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4db708cd3e459078f85f39f96a00960bd841f66ee2a669e90bf36907f5a79aae" +checksum = "44d01ac02a6ccf3e07db148d2be087da624fea0221a16152ed01f0496a6b0a27" dependencies = [ - "once_cell", - "tokio", - "tokio-rustls 0.22.0", + "base64ct", + "der", ] [[package]] @@ -4898,70 +5659,25 @@ dependencies = [ [[package]] name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "stdweb" -version = "0.4.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d022496b16281348b52d0e30ae99e01a73d737b2f45d38fed4edf79f9325a1d5" -dependencies = [ - "discard", - "rustc_version 0.2.3", - "serde", - "serde_json", - "stdweb-derive", - "stdweb-internal-macros", - "stdweb-internal-runtime", - "wasm-bindgen", -] - -[[package]] -name = "stdweb-derive" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef" -dependencies = [ - "proc-macro2", - "quote", - "serde", - "serde_derive", - "syn 1.0.107", -] - -[[package]] -name = "stdweb-internal-macros" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11" -dependencies = [ - "base-x", - "proc-macro2", - "quote", - "serde", - "serde_derive", - "serde_json", - "sha1 0.6.0", - "syn 1.0.107", -] +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] -name = "stdweb-internal-runtime" -version = "0.1.5" +name = "str-buf" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0" +checksum = "9e08d8363704e6c71fc928674353e6b7c23dcea9d82d7012c8faf2a3a025f8d0" [[package]] name = "string_cache" -version = "0.8.4" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213494b7a2b503146286049378ce02b482200519accc31872ee8be91fa820a08" +checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" dependencies = [ "new_debug_unreachable", "once_cell", - "parking_lot 0.12.1", + "parking_lot", "phf_shared 0.10.0", "precomputed-hash", "serde", @@ -4980,20 +5696,16 @@ dependencies = [ ] [[package]] -name = "stringprep" -version = "0.1.2" +name = "strsim" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ee348cb74b87454fff4b551cbf727025810a004f88aeacae7f85b87f4e9a1c1" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] +checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" [[package]] name = "strsim" -version = "0.8.0" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" +checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c" [[package]] name = "strsim" @@ -5022,7 +5734,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] @@ -5043,6 +5755,15 @@ dependencies = [ "strum_macros 0.24.3", ] +[[package]] +name = "strum" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" +dependencies = [ + "strum_macros 0.25.1", +] + [[package]] name = "strum_macros" version = "0.22.0" @@ -5052,7 +5773,7 @@ dependencies = [ "heck 0.3.3", "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] @@ -5061,18 +5782,31 @@ version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" dependencies = [ - "heck 0.4.0", + "heck 0.4.1", + "proc-macro2", + "quote", + "rustversion", + "syn 1.0.109", +] + +[[package]] +name = "strum_macros" +version = "0.25.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6069ca09d878a33f883cc06aaa9718ede171841d3832450354410b718b097232" +dependencies = [ + "heck 0.4.1", "proc-macro2", "quote", "rustversion", - "syn 1.0.107", + "syn 2.0.27", ] [[package]] name = "subtle" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" [[package]] name = "supercow" @@ -5082,9 +5816,9 @@ checksum = "171758edb47aa306a78dfa4ab9aeb5167405bd4e3dc2b64e88f6a84bbe98bd63" [[package]] name = "syn" -version = "1.0.107" +version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ "proc-macro2", "quote", @@ -5093,15 +5827,21 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.13" +version = "2.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c9da457c5285ac1f936ebd076af6dac17a61cfe7826f2076b4d015cf47bc8ec" +checksum = "b60f673f44a8255b9c8c657daf66a596d435f2da81a555b06dc644d080ba45e0" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + [[package]] name = "synstructure" version = "0.12.6" @@ -5110,7 +5850,7 @@ checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", "unicode-xid", ] @@ -5129,15 +5869,28 @@ dependencies = [ [[package]] name = "system-deps" -version = "6.0.2" +version = "6.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a45a1c4c9015217e12347f2a411b57ce2c4fc543913b14b6fe40483328e709" +checksum = "30c2de8a4d8f4b823d634affc9cd2a74ec98c53a756f317e529a48046cbf71f3" dependencies = [ - "cfg-expr 0.10.3", - "heck 0.4.0", + "cfg-expr 0.15.3", + "heck 0.4.1", "pkg-config", - "toml 0.5.11", - "version-compare 0.1.0", + "toml 0.7.6", + "version-compare 0.1.1", +] + +[[package]] +name = "tact" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "derive_more", + "futures 0.3.28", + "log", + "thiserror", + "tokio", ] [[package]] @@ -5162,7 +5915,7 @@ dependencies = [ "glib", "glib-sys", "gtk", - "image", + "image 0.24.6", "instant", "jni", "lazy_static", @@ -5173,171 +5926,243 @@ dependencies = [ "ndk-sys", "objc", "once_cell", - "parking_lot 0.12.1", + "parking_lot", "paste", "png", "raw-window-handle", "scopeguard", "serde", "unicode-segmentation", - "uuid 1.2.1", + "uuid", "windows 0.39.0", "windows-implement", "x11-dl", ] +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + [[package]] name = "tar" -version = "0.4.38" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6" +checksum = "ec96d2ffad078296368d46ff1cb309be1c23c513b4ab0e22a45de0185275ac96" dependencies = [ "filetime", "libc", "xattr", ] +[[package]] +name = "target-lexicon" +version = "0.12.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d2faeef5759ab89935255b1a4cd98e0baf99d1085e37d36599c625dac49ae8e" + +[[package]] +name = "tari-curve25519-dalek" +version = "4.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31932eba12039b52c2bab4c77e5180cd934a359e83de99ce0b867b0425f2da5c" +dependencies = [ + "byteorder", + "digest 0.9.0", + "rand_core 0.5.1", + "serde", + "subtle", + "zeroize", +] + +[[package]] +name = "tari-lp-cli" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "crossterm 0.26.1", + "derive_more", + "log", + "log4rs 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rust_decimal", + "strum 0.24.1", + "tact", + "tari_launchpad_protocol", + "tari_sdm_assets", + "tari_sdm_launchpad", + "tari_sim_launchpad", + "thiserror", + "tokio", + "tui", + "tui-textarea", +] + [[package]] name = "tari_app_grpc" -version = "0.38.7" -source = "git+https://github.com/tari-project/tari?tag=v0.38.7#d9f009d2f3c82d5bad935de1aa199aef47ed3657" +version = "0.51.0-pre.4" +source = "git+https://github.com/tari-project/tari?tag=v0.51.0-pre.4#87c070305951152c62a0179e13fadc55065cc318" dependencies = [ "argon2", - "base64 0.13.0", + "base64 0.13.1", + "borsh 0.9.3", "chrono", - "digest 0.9.0", "log", - "num-traits", - "prost", - "prost-types", + "prost 0.9.0", + "prost-types 0.9.0", "rand 0.8.5", "tari_common_types", "tari_comms", "tari_core", "tari_crypto", "tari_script", - "tari_utilities", + "tari_utilities 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", "thiserror", - "tonic", + "tonic 0.6.2", "tonic-build", "zeroize", ] [[package]] name = "tari_app_utilities" -version = "0.38.7" -source = "git+https://github.com/tari-project/tari?tag=v0.38.7#d9f009d2f3c82d5bad935de1aa199aef47ed3657" +version = "0.51.0-pre.4" +source = "git+https://github.com/tari-project/tari?tag=v0.51.0-pre.4#87c070305951152c62a0179e13fadc55065cc318" dependencies = [ - "clap 3.2.22", - "config", - "dirs-next 1.0.2", - "futures", - "json5 0.2.8", + "clap 3.2.25", + "futures 0.3.28", + "json5", "log", "rand 0.7.3", "serde", - "structopt", "tari_common", "tari_common_types", "tari_comms", + "tari_features", + "tari_utilities 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", + "thiserror", + "tokio", +] + +[[package]] +name = "tari_base_node" +version = "0.51.0-pre.4" +source = "git+https://github.com/tari-project/tari?tag=v0.51.0-pre.4#87c070305951152c62a0179e13fadc55065cc318" +dependencies = [ + "anyhow", + "async-trait", + "bincode", + "borsh 0.9.3", + "chrono", + "clap 3.2.25", + "config", + "console-subscriber", + "crossterm 0.23.2", + "derive_more", + "either", + "futures 0.3.28", + "log", + "log-mdc", + "log4rs 1.2.0 (git+https://github.com/tari-project/log4rs.git)", + "nom 7.1.3", + "qrcode", + "rustyline", + "rustyline-derive", + "serde", + "strum 0.22.0", + "tari_app_grpc", + "tari_app_utilities", + "tari_common", + "tari_common_types", + "tari_comms", + "tari_comms_dht", + "tari_core", "tari_crypto", - "tari_utilities", + "tari_features", + "tari_metrics", + "tari_p2p", + "tari_service_framework", + "tari_shutdown", + "tari_storage", + "tari_utilities 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", "thiserror", "tokio", + "tonic 0.6.2", ] [[package]] name = "tari_base_node_grpc_client" version = "0.1.0" -source = "git+https://github.com/tari-project/tari?tag=v0.38.7#d9f009d2f3c82d5bad935de1aa199aef47ed3657" +source = "git+https://github.com/tari-project/tari?tag=v0.51.0-pre.4#87c070305951152c62a0179e13fadc55065cc318" dependencies = [ "tari_app_grpc", ] [[package]] name = "tari_bulletproofs" -version = "4.3.0" -source = "git+https://github.com/tari-project/bulletproofs?tag=v4.3.0#02d5cb51d7fdaabf0e2523d45afed8b3d206c402" +version = "4.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2386133cd3bb3dc075aa39016523a375919aa0316ba27b9dc27b7a9bbda24ca" dependencies = [ "blake2 0.9.2", "byteorder", - "curve25519-dalek 3.2.1", "digest 0.9.0", - "merlin 2.0.1", + "merlin", "rand 0.7.3", "rand_core 0.5.1", "serde", "serde_derive", "sha3", "subtle", + "tari-curve25519-dalek", "thiserror", "zeroize", ] [[package]] name = "tari_bulletproofs_plus" -version = "0.0.7" -source = "git+https://github.com/tari-project/bulletproofs-plus?tag=v0.1.0#6c221ff1661b776c26217d4b1c3605d77cbf3d43" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4681528b53b9980d9687129fd6075ba761a97a414809fc374e9bc1d23268d33" dependencies = [ "blake2 0.9.2", "byteorder", - "curve25519-dalek 3.2.1", "derivative", "derive_more", "digest 0.9.0", "lazy_static", - "merlin 3.0.0", + "merlin", "rand 0.7.3", "rand_core 0.5.1", "serde", "sha3", + "tari-curve25519-dalek", "thiserror", "zeroize", ] -[[package]] -name = "tari_cli_launchpad" -version = "0.1.0" -dependencies = [ - "anyhow", - "crossterm 0.26.1", - "env_logger", - "log", - "log4rs", - "rand 0.8.5", - "strum 0.24.1", - "tari_launchpad_protocol", - "tari_sdm", - "tari_sdm_assets", - "tari_sdm_launchpad", - "tari_sim_launchpad", - "tokio", - "tui", -] - [[package]] name = "tari_common" -version = "0.38.7" -source = "git+https://github.com/tari-project/tari?tag=v0.38.7#d9f009d2f3c82d5bad935de1aa199aef47ed3657" +version = "0.51.0-pre.4" +source = "git+https://github.com/tari-project/tari?tag=v0.51.0-pre.4#87c070305951152c62a0179e13fadc55065cc318" dependencies = [ "anyhow", "blake2 0.9.2", "config", - "derivative", "dirs-next 1.0.2", - "fs2", "git2", "log", - "log4rs", + "log4rs 1.2.0 (git+https://github.com/tari-project/log4rs.git)", "multiaddr", "path-clean", "prost-build", "serde", "serde_json", + "serde_yaml 0.9.25", "sha2 0.9.9", - "sha3", "structopt", "tari_crypto", + "tari_features", "tempfile", "thiserror", "toml 0.5.11", @@ -5345,68 +6170,74 @@ dependencies = [ [[package]] name = "tari_common_sqlite" -version = "0.38.7" -source = "git+https://github.com/tari-project/tari?tag=v0.38.7#d9f009d2f3c82d5bad935de1aa199aef47ed3657" +version = "0.51.0-pre.4" +source = "git+https://github.com/tari-project/tari?tag=v0.51.0-pre.4#87c070305951152c62a0179e13fadc55065cc318" dependencies = [ "diesel", + "diesel_migrations", "log", + "serde", + "tari_utilities 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", "thiserror", + "tokio", ] [[package]] name = "tari_common_types" -version = "0.38.7" -source = "git+https://github.com/tari-project/tari?tag=v0.38.7#d9f009d2f3c82d5bad935de1aa199aef47ed3657" +version = "0.51.0-pre.4" +source = "git+https://github.com/tari-project/tari?tag=v0.51.0-pre.4#87c070305951152c62a0179e13fadc55065cc318" dependencies = [ - "base64 0.13.0", + "base64 0.21.2", + "borsh 0.9.3", + "chacha20poly1305 0.10.1", "digest 0.9.0", "lazy_static", + "newtype-ops", "rand 0.7.3", "serde", + "tari_common", "tari_crypto", - "tari_utilities", + "tari_utilities 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", "thiserror", "tokio", - "zeroize", ] [[package]] name = "tari_comms" -version = "0.38.7" -source = "git+https://github.com/tari-project/tari?tag=v0.38.7#d9f009d2f3c82d5bad935de1aa199aef47ed3657" +version = "0.51.0-pre.4" +source = "git+https://github.com/tari-project/tari?tag=v0.51.0-pre.4#87c070305951152c62a0179e13fadc55065cc318" dependencies = [ "anyhow", "async-trait", "bitflags 1.3.2", - "blake2 0.10.4", - "bytes 1.2.1", + "blake2 0.10.6", + "bytes 1.4.0", "chrono", "cidr", - "clear_on_drop", "data-encoding", "derivative", "digest 0.9.0", - "futures", + "futures 0.3.28", "lazy_static", "lmdb-zero", "log", "log-mdc", "multiaddr", - "nom 5.1.2", + "nom 5.1.3", "once_cell", - "pin-project 1.0.12", - "prost", - "prost-types", + "pin-project 1.1.2", + "prost 0.9.0", "rand 0.7.3", "serde", "serde_derive", + "sha3", "snow", "tari_common", "tari_crypto", "tari_metrics", "tari_shutdown", "tari_storage", - "tari_utilities", + "tari_utilities 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", "thiserror", "tokio", "tokio-stream", @@ -5414,30 +6245,30 @@ dependencies = [ "tower", "tracing", "yamux", + "zeroize", ] [[package]] name = "tari_comms_dht" -version = "0.38.7" -source = "git+https://github.com/tari-project/tari?tag=v0.38.7#d9f009d2f3c82d5bad935de1aa199aef47ed3657" +version = "0.51.0-pre.4" +source = "git+https://github.com/tari-project/tari?tag=v0.51.0-pre.4#87c070305951152c62a0179e13fadc55065cc318" dependencies = [ "anyhow", "bitflags 1.3.2", "chacha20 0.7.3", - "chacha20poly1305", + "chacha20poly1305 0.10.1", "chrono", "diesel", "diesel_migrations", "digest 0.9.0", - "futures", + "futures 0.3.28", "log", "log-mdc", "pin-project 0.4.30", - "prost", - "prost-types", + "prost 0.9.0", + "prost-types 0.9.0", "rand 0.7.3", "serde", - "serde_derive", "tari_common", "tari_common_sqlite", "tari_comms", @@ -5445,7 +6276,7 @@ dependencies = [ "tari_crypto", "tari_shutdown", "tari_storage", - "tari_utilities", + "tari_utilities 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", "thiserror", "tokio", "tower", @@ -5454,32 +6285,33 @@ dependencies = [ [[package]] name = "tari_comms_rpc_macros" -version = "0.38.7" -source = "git+https://github.com/tari-project/tari?tag=v0.38.7#d9f009d2f3c82d5bad935de1aa199aef47ed3657" +version = "0.51.0-pre.4" +source = "git+https://github.com/tari-project/tari?tag=v0.51.0-pre.4#87c070305951152c62a0179e13fadc55065cc318" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] name = "tari_core" -version = "0.38.7" -source = "git+https://github.com/tari-project/tari?tag=v0.38.7#d9f009d2f3c82d5bad935de1aa199aef47ed3657" +version = "0.51.0-pre.4" +source = "git+https://github.com/tari-project/tari?tag=v0.51.0-pre.4#87c070305951152c62a0179e13fadc55065cc318" dependencies = [ "async-trait", "bincode", "bitflags 1.3.2", "blake2 0.9.2", + "borsh 0.9.3", "bytes 0.5.6", - "chacha20poly1305", + "chacha20poly1305 0.10.1", "chrono", "croaring", "decimal-rs", "derivative", "digest 0.9.0", "fs2", - "futures", + "futures 0.3.28", "hex", "integer-encoding", "lmdb-zero", @@ -5491,21 +6323,24 @@ dependencies = [ "num-format", "num-traits", "once_cell", - "prost", - "prost-types", + "prost 0.9.0", + "prost-types 0.9.0", "rand 0.7.3", "randomx-rs", "serde", "serde_json", "serde_repr", "sha3", + "strum 0.22.0", "strum_macros 0.22.0", "tari_common", + "tari_common_sqlite", "tari_common_types", "tari_comms", "tari_comms_dht", "tari_comms_rpc_macros", "tari_crypto", + "tari_key_manager", "tari_metrics", "tari_mmr", "tari_p2p", @@ -5514,76 +6349,79 @@ dependencies = [ "tari_shutdown", "tari_storage", "tari_test_utils", - "tari_utilities", + "tari_utilities 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", "thiserror", "tokio", "tracing", - "tracing-attributes", "uint", + "zeroize", ] [[package]] name = "tari_crypto" -version = "0.15.6" -source = "git+https://github.com/tari-project/tari-crypto.git?tag=v0.15.6#d4f645403c6165534474338328582979a73d2b15" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e45195ef6357eb040b4053876f942eacf7fb58dd33735284876a3d24b2d1d72" dependencies = [ "base64 0.10.1", "blake2 0.9.2", + "borsh 0.9.3", "cbindgen", - "curve25519-dalek 3.2.1", "digest 0.9.0", "lazy_static", "log", - "merlin 2.0.1", + "merlin", "once_cell", "rand 0.7.3", + "rand_chacha 0.3.1", + "rand_core 0.6.4", "serde", "serde_json", "sha3", + "tari-curve25519-dalek", "tari_bulletproofs", "tari_bulletproofs_plus", - "tari_utilities", + "tari_utilities 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", "thiserror", "zeroize", ] [[package]] -name = "tari_launchpad" -version = "0.32.5" +name = "tari_features" +version = "0.51.0-pre.4" +source = "git+https://github.com/tari-project/tari?tag=v0.51.0-pre.4#87c070305951152c62a0179e13fadc55065cc318" + +[[package]] +name = "tari_key_manager" +version = "0.51.0-pre.4" +source = "git+https://github.com/tari-project/tari?tag=v0.51.0-pre.4#87c070305951152c62a0179e13fadc55065cc318" dependencies = [ - "anyhow", - "bollard", + "argon2", + "async-trait", + "blake2 0.9.2", + "chacha20 0.7.3", + "chacha20poly1305 0.10.1", "chrono", - "config", + "crc32fast", "derivative", - "derive_more", - "env_logger", - "futures", - "hex", - "lazy_static", + "diesel", + "diesel_migrations", + "digest 0.9.0", + "futures 0.3.28", "log", - "rand 0.8.5", - "regex", - "reqwest", + "rand 0.7.3", "serde", - "serde_json", - "sqlx-core", - "strum 0.24.1", - "tari_app_grpc", - "tari_app_utilities", - "tari_common", + "strum 0.22.0", + "strum_macros 0.22.0", + "subtle", + "tari_common_sqlite", "tari_common_types", - "tari_comms", - "tari_sdm_launchpad", - "tari_utilities", - "tauri", - "tauri-build", - "tauri-plugin-sql", + "tari_crypto", + "tari_service_framework", + "tari_utilities 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", "thiserror", "tokio", - "toml 0.7.3", - "tonic", - "tor-hash-passwd", + "zeroize", ] [[package]] @@ -5595,53 +6433,60 @@ dependencies = [ "chrono", "derive_more", "serde", - "strum 0.24.1", - "tari_utilities", + "strum 0.25.0", + "tari_utilities 0.4.10 (git+https://github.com/tari-project/tari_utilities.git?tag=v0.4.10)", "thiserror", ] [[package]] name = "tari_metrics" version = "0.1.0" -source = "git+https://github.com/tari-project/tari?tag=v0.38.7#d9f009d2f3c82d5bad935de1aa199aef47ed3657" +source = "git+https://github.com/tari-project/tari?tag=v0.51.0-pre.4#87c070305951152c62a0179e13fadc55065cc318" dependencies = [ + "anyhow", + "futures 0.3.28", + "log", "once_cell", "prometheus", + "reqwest", "thiserror", + "tokio", + "warp", ] [[package]] name = "tari_mmr" -version = "0.38.7" -source = "git+https://github.com/tari-project/tari?tag=v0.38.7#d9f009d2f3c82d5bad935de1aa199aef47ed3657" +version = "0.51.0-pre.4" +source = "git+https://github.com/tari-project/tari?tag=v0.51.0-pre.4#87c070305951152c62a0179e13fadc55065cc318" dependencies = [ + "borsh 0.9.3", "croaring", "digest 0.9.0", "log", "serde", "tari_common", "tari_crypto", - "tari_utilities", + "tari_utilities 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", "thiserror", ] [[package]] name = "tari_p2p" -version = "0.38.7" -source = "git+https://github.com/tari-project/tari?tag=v0.38.7#d9f009d2f3c82d5bad935de1aa199aef47ed3657" +version = "0.51.0-pre.4" +source = "git+https://github.com/tari-project/tari?tag=v0.51.0-pre.4#87c070305951152c62a0179e13fadc55065cc318" dependencies = [ "anyhow", - "bytes 0.5.6", - "chrono", "fs2", - "futures", + "futures 0.3.28", "lmdb-zero", "log", - "prost", + "pgp", + "prost 0.9.0", "rand 0.7.3", - "rustls 0.20.6", + "reqwest", + "rustls", + "semver", "serde", - "serde_derive", "tari_common", "tari_comms", "tari_comms_dht", @@ -5649,12 +6494,11 @@ dependencies = [ "tari_service_framework", "tari_shutdown", "tari_storage", - "tari_utilities", + "tari_utilities 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", "thiserror", "tokio", "tokio-stream", "tower", - "tower-service", "trust-dns-client", "webpki 0.21.4", ] @@ -5662,16 +6506,17 @@ dependencies = [ [[package]] name = "tari_script" version = "0.12.0" -source = "git+https://github.com/tari-project/tari?tag=v0.38.7#d9f009d2f3c82d5bad935de1aa199aef47ed3657" +source = "git+https://github.com/tari-project/tari?tag=v0.51.0-pre.4#87c070305951152c62a0179e13fadc55065cc318" dependencies = [ "blake2 0.9.2", + "borsh 0.9.3", "digest 0.9.0", "integer-encoding", "serde", "sha2 0.9.9", "sha3", "tari_crypto", - "tari_utilities", + "tari_utilities 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", "thiserror", ] @@ -5684,7 +6529,7 @@ dependencies = [ "bollard", "chrono", "derive_more", - "futures", + "futures 0.3.28", "log", "tari_launchpad_protocol", "thiserror", @@ -5707,7 +6552,7 @@ version = "0.1.0" dependencies = [ "anyhow", "async-trait", - "futures", + "futures 0.3.28", "log", "openssl", "rand 0.8.5", @@ -5715,29 +6560,30 @@ dependencies = [ "serde", "serde_json", "tari_app_grpc", + "tari_base_node", "tari_base_node_grpc_client", "tari_common_types", "tari_launchpad_protocol", "tari_sdm", "tari_sdm_assets", - "tari_utilities", + "tari_utilities 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", "tari_wallet_grpc_client", "tauri", "thiserror", "tokio", - "toml 0.7.3", - "tonic", + "toml 0.7.6", + "tonic 0.9.2", "tor-hash-passwd", ] [[package]] name = "tari_service_framework" -version = "0.38.7" -source = "git+https://github.com/tari-project/tari?tag=v0.38.7#d9f009d2f3c82d5bad935de1aa199aef47ed3657" +version = "0.51.0-pre.4" +source = "git+https://github.com/tari-project/tari?tag=v0.51.0-pre.4#87c070305951152c62a0179e13fadc55065cc318" dependencies = [ "anyhow", "async-trait", - "futures", + "futures 0.3.28", "log", "tari_shutdown", "thiserror", @@ -5747,10 +6593,10 @@ dependencies = [ [[package]] name = "tari_shutdown" -version = "0.38.7" -source = "git+https://github.com/tari-project/tari?tag=v0.38.7#d9f009d2f3c82d5bad935de1aa199aef47ed3657" +version = "0.51.0-pre.4" +source = "git+https://github.com/tari-project/tari?tag=v0.51.0-pre.4#87c070305951152c62a0179e13fadc55065cc318" dependencies = [ - "futures", + "futures 0.3.28", ] [[package]] @@ -5768,24 +6614,24 @@ dependencies = [ [[package]] name = "tari_storage" -version = "0.38.7" -source = "git+https://github.com/tari-project/tari?tag=v0.38.7#d9f009d2f3c82d5bad935de1aa199aef47ed3657" +version = "0.51.0-pre.4" +source = "git+https://github.com/tari-project/tari?tag=v0.51.0-pre.4#87c070305951152c62a0179e13fadc55065cc318" dependencies = [ "bincode", "lmdb-zero", "log", "serde", - "serde_derive", "thiserror", ] [[package]] name = "tari_test_utils" -version = "0.38.7" -source = "git+https://github.com/tari-project/tari?tag=v0.38.7#d9f009d2f3c82d5bad935de1aa199aef47ed3657" +version = "0.51.0-pre.4" +source = "git+https://github.com/tari-project/tari?tag=v0.51.0-pre.4#87c070305951152c62a0179e13fadc55065cc318" dependencies = [ - "futures", + "futures 0.3.28", "rand 0.7.3", + "tari_comms", "tari_shutdown", "tempfile", "tokio", @@ -5793,15 +6639,36 @@ dependencies = [ [[package]] name = "tari_utilities" -version = "0.4.7" -source = "git+https://github.com/tari-project/tari_utilities.git?tag=v0.4.7#890a67140f56d9948ba64e8b0be981589875e75c" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96ee4eb0990ee7c898b955a24b8479134851c301b31d2426a7606f57d2d6f181" +dependencies = [ + "base58-monero 0.3.2", + "base64 0.13.1", + "bincode", + "borsh 0.9.3", + "generic-array", + "newtype-ops", + "serde", + "serde_json", + "subtle", + "thiserror", + "zeroize", +] + +[[package]] +name = "tari_utilities" +version = "0.4.10" +source = "git+https://github.com/tari-project/tari_utilities.git?tag=v0.4.10#1fd912bd69ac4980a96d7863632c69779a295ce9" dependencies = [ "base58-monero 0.3.2", - "base64 0.13.0", + "base64 0.13.1", "bincode", + "generic-array", "newtype-ops", "serde", "serde_json", + "subtle", "thiserror", "zeroize", ] @@ -5809,23 +6676,23 @@ dependencies = [ [[package]] name = "tari_wallet_grpc_client" version = "0.1.0" -source = "git+https://github.com/tari-project/tari?tag=v0.38.7#d9f009d2f3c82d5bad935de1aa199aef47ed3657" +source = "git+https://github.com/tari-project/tari?tag=v0.51.0-pre.4#87c070305951152c62a0179e13fadc55065cc318" dependencies = [ "tari_app_grpc", "tari_common_types", "thiserror", - "tonic", + "tonic 0.6.2", ] [[package]] name = "tauri" -version = "1.2.4" +version = "1.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe7e0f1d535e7cbbbab43c82be4fc992b84f9156c16c160955617e0260ebc449" +checksum = "e3a1fe72365a6d860fddf3403934649a5157b2bbb6f0b50dd3a8858cd1a22412" dependencies = [ "anyhow", "attohttpc", - "clap 3.2.22", + "clap 3.2.25", "cocoa", "dirs-next 2.0.0", "embed_plist", @@ -5835,7 +6702,7 @@ dependencies = [ "glib", "glob", "gtk", - "heck 0.4.0", + "heck 0.4.1", "http", "ignore", "notify-rust", @@ -5844,12 +6711,12 @@ dependencies = [ "open", "os_info", "os_pipe", - "percent-encoding 2.2.0", + "percent-encoding", "rand 0.8.5", "raw-window-handle", "regex", "rfd", - "semver 1.0.14", + "semver", "serde", "serde_json", "serde_repr", @@ -5864,36 +6731,20 @@ dependencies = [ "tempfile", "thiserror", "tokio", - "url 2.3.1", - "uuid 1.2.1", + "url", + "uuid", "webkit2gtk", "webview2-com", "windows 0.39.0", ] -[[package]] -name = "tauri-build" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8807c85d656b2b93927c19fe5a5f1f1f348f96c2de8b90763b3c2d561511f9b4" -dependencies = [ - "anyhow", - "cargo_toml", - "heck 0.4.0", - "json-patch", - "semver 1.0.14", - "serde_json", - "tauri-utils", - "winres", -] - [[package]] name = "tauri-codegen" -version = "1.2.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14388d484b6b1b5dc0f6a7d6cc6433b3b230bec85eaa576adcdf3f9fafa49251" +checksum = "54ad2d49fdeab4a08717f5b49a163bdc72efc3b1950b6758245fcde79b645e1a" dependencies = [ - "base64 0.13.0", + "base64 0.21.2", "brotli", "ico", "json-patch", @@ -5902,50 +6753,36 @@ dependencies = [ "proc-macro2", "quote", "regex", - "semver 1.0.14", + "semver", "serde", "serde_json", - "sha2 0.10.6", + "sha2 0.10.7", "tauri-utils", "thiserror", - "time 0.3.15", - "uuid 1.2.1", + "time 0.3.23", + "uuid", "walkdir", ] [[package]] name = "tauri-macros" -version = "1.2.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "069319e5ecbe653a799b94b0690d9f9bf5d00f7b1d3989aa331c524d4e354075" +checksum = "8eb12a2454e747896929338d93b0642144bb51e0dddbb36e579035731f0d76b7" dependencies = [ - "heck 0.4.0", + "heck 0.4.1", "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", "tauri-codegen", "tauri-utils", ] -[[package]] -name = "tauri-plugin-sql" -version = "0.0.1" -source = "git+https://github.com/tauri-apps/tauri-plugin-sql?branch=release#9d28a02cd23a40962ca8667b633fc1a56b617c5c" -dependencies = [ - "futures", - "serde", - "serde_json", - "sqlx", - "tauri", - "thiserror", - "tokio", -] - [[package]] name = "tauri-runtime" -version = "0.12.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c507d954d08ac8705d235bc70ec6975b9054fb95ff7823af72dbb04186596f3b" +checksum = "dc36898ad4acb6c381878acf903c320a36cf29b68b74f6e791d6045b6557128c" dependencies = [ "gtk", "http", @@ -5956,25 +6793,27 @@ dependencies = [ "serde_json", "tauri-utils", "thiserror", - "uuid 1.2.1", + "url", + "uuid", "webview2-com", "windows 0.39.0", ] [[package]] name = "tauri-runtime-wry" -version = "0.12.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36b1c5764a41a13176a4599b5b7bd0881bea7d94dfe45e1e755f789b98317e30" +checksum = "e2ebc22bc5566ba33310744fadd86709fa591ed163491b165855474523ac1aab" dependencies = [ "cocoa", "gtk", - "percent-encoding 2.2.0", + "percent-encoding", "rand 0.8.5", "raw-window-handle", "tauri-runtime", "tauri-utils", - "uuid 1.2.1", + "url", + "uuid", "webkit2gtk", "webview2-com", "windows 0.39.0", @@ -5983,14 +6822,15 @@ dependencies = [ [[package]] name = "tauri-utils" -version = "1.2.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5abbc109a6eb45127956ffcc26ef0e875d160150ac16cfa45d26a6b2871686f1" +checksum = "03fc02bb6072bb397e1d473c6f76c953cda48b4a2d0cce605df284aa74a12e84" dependencies = [ "brotli", "ctor", + "dunce", "glob", - "heck 0.4.0", + "heck 0.4.1", "html5ever", "infer", "json-patch", @@ -5999,39 +6839,37 @@ dependencies = [ "phf 0.10.1", "proc-macro2", "quote", - "semver 1.0.14", + "semver", "serde", "serde_json", - "serde_with 1.14.0", + "serde_with 3.1.0", "thiserror", - "url 2.3.1", + "url", "walkdir", "windows 0.39.0", ] [[package]] name = "tauri-winrt-notification" -version = "0.1.0" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c58de036c4d2e20717024de2a3c4bf56c301f07b21bc8ef9b57189fce06f1f3b" +checksum = "4f5bff1d532fead7c43324a0fa33643b8621a47ce2944a633be4cb6c0240898f" dependencies = [ - "quick-xml", - "strum 0.22.0", + "quick-xml 0.23.1", "windows 0.39.0", ] [[package]] name = "tempfile" -version = "3.3.0" +version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" +checksum = "5486094ee78b2e5038a6382ed7645bc084dc2ec433426ca4c3cb61e2007b8998" dependencies = [ "cfg-if", "fastrand", - "libc", - "redox_syscall", - "remove_dir_all", - "winapi", + "redox_syscall 0.3.5", + "rustix", + "windows-sys 0.48.0", ] [[package]] @@ -6047,9 +6885,9 @@ dependencies = [ [[package]] name = "termcolor" -version = "1.1.3" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" +checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" dependencies = [ "winapi-util", ] @@ -6065,9 +6903,9 @@ dependencies = [ [[package]] name = "textwrap" -version = "0.15.1" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "949517c0cf1bf4ee812e2e07e08ab448e3ae0d23472aee8a06c985f0c8815b16" +checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" [[package]] name = "thin-slice" @@ -6077,49 +6915,50 @@ checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" [[package]] name = "thiserror" -version = "1.0.40" +version = "1.0.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" +checksum = "611040a08a0439f8248d1990b111c95baa9c704c805fa1f62104b39655fd7f90" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.40" +version = "1.0.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" +checksum = "090198534930841fab3a5d1bb637cde49e339654e606195f8d9c76eeb081dc96" dependencies = [ "proc-macro2", "quote", - "syn 2.0.13", + "syn 2.0.27", ] [[package]] name = "thread-id" -version = "4.0.0" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fdfe0627923f7411a43ec9ec9c39c3a9b4151be313e0922042581fb6c9b717f" +checksum = "3ee93aa2b8331c0fec9091548843f2c90019571814057da3b783f9de09349d73" dependencies = [ "libc", - "redox_syscall", + "redox_syscall 0.2.16", "winapi", ] [[package]] name = "thread_local" -version = "1.1.4" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" +checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" dependencies = [ + "cfg-if", "once_cell", ] [[package]] name = "time" -version = "0.1.44" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" +checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" dependencies = [ "libc", "wasi 0.10.0+wasi-snapshot-preview1", @@ -6128,14 +6967,29 @@ dependencies = [ [[package]] name = "time" -version = "0.3.15" +version = "0.3.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d634a985c4d4238ec39cacaed2e7ae552fbd3c476b552c1deac3021b7d7eaf0c" +checksum = "59e399c068f43a5d116fedaf73b203fa4f9c519f17e2b34f63221d3792f81446" dependencies = [ - "itoa 1.0.4", - "libc", - "num_threads", + "itoa 1.0.9", "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" + +[[package]] +name = "time-macros" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96ba15a897f3c86766b757e5ac7221554c6750054d74d5b28844fce5fb36a6c4" +dependencies = [ + "time-core", ] [[package]] @@ -6158,26 +7012,29 @@ dependencies = [ [[package]] name = "tinyvec_macros" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.27.0" +version = "1.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0de47a4eecbe11f498978a9b29d792f0d2692d1dd003650c24c76510e3bc001" +checksum = "532826ff75199d5833b9d2c5fe410f29235e25704ee5f0ef599fb51c21f4a4da" dependencies = [ "autocfg", - "bytes 1.2.1", + "backtrace", + "bytes 1.4.0", "libc", "mio", "num_cpus", + "parking_lot", "pin-project-lite", "signal-hook-registry", "socket2", "tokio-macros", - "windows-sys 0.45.0", + "tracing", + "windows-sys 0.48.0", ] [[package]] @@ -6192,57 +7049,46 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61a573bdc87985e9d6ddeed1b3d864e8a302c847e40d647746df2f1de209d1ce" +checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.13", + "syn 2.0.27", ] [[package]] name = "tokio-native-tls" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" dependencies = [ "native-tls", "tokio", ] -[[package]] -name = "tokio-rustls" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc6844de72e57df1980054b38be3a9f4702aba4858be64dd700181a8a6d0e1b6" -dependencies = [ - "rustls 0.19.1", - "tokio", - "webpki 0.21.4", -] - [[package]] name = "tokio-rustls" version = "0.23.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" dependencies = [ - "rustls 0.20.6", + "rustls", "tokio", "webpki 0.22.0", ] [[package]] name = "tokio-stream" -version = "0.1.12" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fb52b74f05dbf495a8fba459fdc331812b96aa086d9eb78101fa0d4569c3313" +checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842" dependencies = [ "futures-core", "pin-project-lite", "tokio", - "tokio-util 0.7.4", + "tokio-util 0.7.8", ] [[package]] @@ -6251,7 +7097,7 @@ version = "0.6.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507" dependencies = [ - "bytes 1.2.1", + "bytes 1.4.0", "futures-core", "futures-io", "futures-sink", @@ -6262,11 +7108,11 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.4" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740" +checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" dependencies = [ - "bytes 1.2.1", + "bytes 1.4.0", "futures-core", "futures-sink", "pin-project-lite", @@ -6285,9 +7131,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.7.3" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b403acf6f2bb0859c93c7f0d967cb4a75a7ac552100f9322faf64dc047669b21" +checksum = "c17e963a819c331dcacd7ab957d80bc2b9a9c1e71c804826d2f283dd65306542" dependencies = [ "serde", "serde_spanned", @@ -6297,20 +7143,20 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.6.1" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" dependencies = [ "serde", ] [[package]] name = "toml_edit" -version = "0.19.8" +version = "0.19.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "239410c8609e8125456927e6707163a3b1fdb40561e4b803bc041f466ccfdc13" +checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a" dependencies = [ - "indexmap", + "indexmap 2.0.0", "serde", "serde_spanned", "toml_datetime", @@ -6325,8 +7171,8 @@ checksum = "ff08f4649d10a70ffa3522ca559031285d8e421d727ac85c60825761818f5d0a" dependencies = [ "async-stream", "async-trait", - "base64 0.13.0", - "bytes 1.2.1", + "base64 0.13.1", + "bytes 1.4.0", "futures-core", "futures-util", "h2", @@ -6334,10 +7180,10 @@ dependencies = [ "http-body", "hyper", "hyper-timeout", - "percent-encoding 2.2.0", - "pin-project 1.0.12", - "prost", - "prost-derive", + "percent-encoding", + "pin-project 1.1.2", + "prost 0.9.0", + "prost-derive 0.9.0", "tokio", "tokio-stream", "tokio-util 0.6.10", @@ -6348,6 +7194,34 @@ dependencies = [ "tracing-futures", ] +[[package]] +name = "tonic" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3082666a3a6433f7f511c7192923fa1fe07c69332d3c6a2e6bb040b569199d5a" +dependencies = [ + "async-trait", + "axum", + "base64 0.21.2", + "bytes 1.4.0", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "hyper-timeout", + "percent-encoding", + "pin-project 1.1.2", + "prost 0.11.9", + "tokio", + "tokio-stream", + "tower", + "tower-layer", + "tower-service", + "tracing", +] + [[package]] name = "tonic-build" version = "0.6.2" @@ -6357,7 +7231,7 @@ dependencies = [ "proc-macro2", "prost-build", "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] @@ -6382,13 +7256,13 @@ dependencies = [ "futures-core", "futures-util", "hdrhistogram", - "indexmap", - "pin-project 1.0.12", + "indexmap 1.9.3", + "pin-project 1.1.2", "pin-project-lite", "rand 0.8.5", "slab", "tokio", - "tokio-util 0.7.4", + "tokio-util 0.7.8", "tower-layer", "tower-service", "tracing", @@ -6421,20 +7295,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.23" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" +checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn 2.0.27", ] [[package]] name = "tracing-core" -version = "0.1.30" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" +checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" dependencies = [ "once_cell", "valuable", @@ -6446,7 +7320,7 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" dependencies = [ - "pin-project 1.0.12", + "pin-project 1.1.2", "tracing", ] @@ -6463,9 +7337,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.16" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6176eae26dd70d0c919749377897b54a9276bd7061339665dd68777926b5a70" +checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77" dependencies = [ "matchers", "nu-ansi-term", @@ -6481,9 +7355,9 @@ dependencies = [ [[package]] name = "treediff" -version = "3.0.2" +version = "4.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "761e8d5ad7ce14bb82b7e61ccc0ca961005a275a060b9644a2431aa11553c2ff" +checksum = "52984d277bdf2a751072b5df30ec0377febdb02f7696d64c2d7d54630bac4303" dependencies = [ "serde_json", ] @@ -6503,9 +7377,9 @@ dependencies = [ "radix_trie", "rand 0.8.5", "ring", - "rustls 0.20.6", + "rustls", "thiserror", - "time 0.3.15", + "time 0.3.23", "tokio", "trust-dns-proto", "webpki 0.22.0", @@ -6530,22 +7404,22 @@ dependencies = [ "log", "rand 0.8.5", "ring", - "rustls 0.20.6", - "rustls-pemfile", + "rustls", + "rustls-pemfile 0.3.0", "smallvec", "thiserror", "tinyvec", "tokio", - "tokio-rustls 0.23.4", - "url 2.3.1", + "tokio-rustls", + "url", "webpki 0.22.0", ] [[package]] name = "try-lock" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" +checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" [[package]] name = "tui" @@ -6560,6 +7434,27 @@ dependencies = [ "unicode-width", ] +[[package]] +name = "tui-textarea" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "437ad97a57d66f7231dab16f51ede1ff5a3aac68c83eb10fa3a178e454b63cae" +dependencies = [ + "crossterm 0.25.0", + "tui", +] + +[[package]] +name = "twofish" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728f6b7e784825d272fe9d2a77e44063f4197a570cbedc6fdcc90a6ddac91296" +dependencies = [ + "byteorder", + "cipher 0.3.0", + "opaque-debug", +] + [[package]] name = "typemap-ors" version = "1.0.0" @@ -6571,21 +7466,21 @@ dependencies = [ [[package]] name = "typenum" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" +checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" [[package]] name = "ucd-trie" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81" +checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" [[package]] name = "uint" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a45526d29728d135c2900b0d30573fe3ee79fceb12ef534c7bb30e810a91b601" +checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" dependencies = [ "byteorder", "crunchy", @@ -6593,17 +7488,26 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "unicase" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" +dependencies = [ + "version_check 0.9.4", +] + [[package]] name = "unicode-bidi" -version = "0.3.8" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" +checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-ident" -version = "1.0.5" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3" +checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" [[package]] name = "unicode-normalization" @@ -6616,9 +7520,9 @@ dependencies = [ [[package]] name = "unicode-segmentation" -version = "1.10.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fdbf052a0783de01e944a6ce7a8cb939e295b1e7be835a1112c3b9a7f047a5a" +checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" [[package]] name = "unicode-width" @@ -6633,18 +7537,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" [[package]] -name = "unicode_categories" -version = "0.1.1" +name = "universal-hash" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e" +checksum = "8326b2c654932e3e4f9196e69d08fdf7cfd718e1dc6f66b347e6024a0c961402" +dependencies = [ + "generic-array", + "subtle", +] [[package]] name = "universal-hash" -version = "0.4.1" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" +checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" dependencies = [ - "generic-array", + "crypto-common", "subtle", ] @@ -6657,6 +7565,12 @@ dependencies = [ "destructure_traitobject", ] +[[package]] +name = "unsafe-libyaml" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28467d3e1d3c6586d8f25fa243f544f5800fec42d97032474e17222c2b75cfa" + [[package]] name = "unsigned-varint" version = "0.7.1" @@ -6671,24 +7585,13 @@ checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] name = "url" -version = "1.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" -dependencies = [ - "idna 0.1.5", - "matches", - "percent-encoding 1.0.1", -] - -[[package]] -name = "url" -version = "2.3.1" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" +checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb" dependencies = [ "form_urlencoded", - "idna 0.3.0", - "percent-encoding 2.2.0", + "idna 0.4.0", + "percent-encoding", "serde", ] @@ -6705,18 +7608,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5190c9442dcdaf0ddd50f37420417d219ae5261bbf5db120d0f9bab996c9cba1" [[package]] -name = "uuid" -version = "0.8.2" +name = "utf8parse" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" [[package]] name = "uuid" -version = "1.2.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "feb41e78f93363bb2df8b0e86a2ca30eed7806ea16ea0c790d757cf93f79be83" +checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d" dependencies = [ - "getrandom 0.2.7", + "getrandom 0.2.10", ] [[package]] @@ -6745,9 +7648,15 @@ checksum = "1c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b" [[package]] name = "version-compare" -version = "0.1.0" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29" + +[[package]] +name = "version_check" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe88247b92c1df6b6de80ddc290f3976dbdf2f5f5d3fd049a9fb598c6dd5ca73" +checksum = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" [[package]] name = "version_check" @@ -6757,25 +7666,52 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "walkdir" -version = "2.3.2" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" dependencies = [ "same-file", - "winapi", "winapi-util", ] [[package]] name = "want" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" dependencies = [ - "log", "try-lock", ] +[[package]] +name = "warp" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba431ef570df1287f7f8b07e376491ad54f84d26ac473489427231e1718e1f69" +dependencies = [ + "bytes 1.4.0", + "futures-channel", + "futures-util", + "headers", + "http", + "hyper", + "log", + "mime", + "mime_guess", + "percent-encoding", + "pin-project 1.1.2", + "rustls-pemfile 1.0.3", + "scoped-tls", + "serde", + "serde_json", + "serde_urlencoded", + "tokio", + "tokio-stream", + "tokio-util 0.7.8", + "tower-service", + "tracing", +] + [[package]] name = "wasi" version = "0.9.0+wasi-snapshot-preview1" @@ -6796,9 +7732,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.83" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" +checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -6806,24 +7742,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.83" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" +checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 1.0.107", + "syn 2.0.27", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.33" +version = "0.4.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23639446165ca5a5de86ae1d8896b737ae80319560fbaa4c2887b7da6e7ebd7d" +checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03" dependencies = [ "cfg-if", "js-sys", @@ -6833,9 +7769,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.83" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" +checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -6843,28 +7779,28 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.83" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" +checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn 2.0.27", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.83" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" +checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" [[package]] name = "web-sys" -version = "0.3.60" +version = "0.3.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f" +checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b" dependencies = [ "js-sys", "wasm-bindgen", @@ -6914,7 +7850,7 @@ dependencies = [ "pango-sys", "pkg-config", "soup2-sys", - "system-deps 6.0.2", + "system-deps 6.1.1", ] [[package]] @@ -6937,15 +7873,6 @@ dependencies = [ "untrusted", ] -[[package]] -name = "webpki-roots" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aabe153544e473b775453675851ecc86863d2a81d786d741f6b76778f2a48940" -dependencies = [ - "webpki 0.21.4", -] - [[package]] name = "webview2-com" version = "0.19.1" @@ -6966,7 +7893,7 @@ checksum = "eaebe196c01691db62e9e4ca52c5ef1e4fd837dcae27dae3ada599b5a8fd05ac" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn 1.0.109", ] [[package]] @@ -6986,26 +7913,15 @@ dependencies = [ [[package]] name = "which" -version = "4.3.0" +version = "4.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c831fbbee9e129a8cf93e7747a82da9d95ba8e16621cae60ec2cdc849bacb7b" +checksum = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269" dependencies = [ "either", "libc", "once_cell", ] -[[package]] -name = "whoami" -version = "1.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6631b6a2fd59b1841b622e8f1a7ad241ef0a46f2d580464ce8140ac94cbd571" -dependencies = [ - "bumpalo", - "wasm-bindgen", - "web-sys", -] - [[package]] name = "winapi" version = "0.3.9" @@ -7037,19 +7953,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "windows" -version = "0.32.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbedf6db9096bc2364adce0ae0aa636dcd89f3c3f2cd67947062aaf0ca2a10ec" -dependencies = [ - "windows_aarch64_msvc 0.32.0", - "windows_i686_gnu 0.32.0", - "windows_i686_msvc 0.32.0", - "windows_x86_64_gnu 0.32.0", - "windows_x86_64_msvc 0.32.0", -] - [[package]] name = "windows" version = "0.37.0" @@ -7077,6 +7980,15 @@ dependencies = [ "windows_x86_64_msvc 0.39.0", ] +[[package]] +name = "windows" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +dependencies = [ + "windows-targets", +] + [[package]] name = "windows-bindgen" version = "0.39.0" @@ -7093,7 +8005,7 @@ version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba01f98f509cb5dc05f4e5fc95e535f78260f15fea8fe1a8abdd08f774f1cee7" dependencies = [ - "syn 1.0.107", + "syn 1.0.109", "windows-tokens", ] @@ -7103,56 +8015,43 @@ version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ee5e275231f07c6e240d14f34e1b635bf1faa1c76c57cfd59a5cdb9848e4278" -[[package]] -name = "windows-sys" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" -dependencies = [ - "windows_aarch64_msvc 0.36.1", - "windows_i686_gnu 0.36.1", - "windows_i686_msvc 0.36.1", - "windows_x86_64_gnu 0.36.1", - "windows_x86_64_msvc 0.36.1", -] - [[package]] name = "windows-sys" version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.1", - "windows_i686_gnu 0.42.1", - "windows_i686_msvc 0.42.1", - "windows_x86_64_gnu 0.42.1", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.1", + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", ] [[package]] name = "windows-sys" -version = "0.45.0" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ "windows-targets", ] [[package]] name = "windows-targets" -version = "0.42.1" +version = "0.48.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7" +checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.1", - "windows_i686_gnu 0.42.1", - "windows_i686_msvc 0.42.1", - "windows_x86_64_gnu 0.42.1", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.1", + "windows_aarch64_gnullvm 0.48.0", + "windows_aarch64_msvc 0.48.0", + "windows_i686_gnu 0.48.0", + "windows_i686_msvc 0.48.0", + "windows_x86_64_gnu 0.48.0", + "windows_x86_64_gnullvm 0.48.0", + "windows_x86_64_msvc 0.48.0", ] [[package]] @@ -7163,21 +8062,15 @@ checksum = "f838de2fe15fe6bac988e74b798f26499a8b21a9d97edec321e79b28d1d7f597" [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.32.0" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8e92753b1c443191654ec532f14c199742964a061be25d77d7a96f09db20bf5" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" [[package]] -name = "windows_aarch64_msvc" -version = "0.36.1" +name = "windows_aarch64_gnullvm" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" +checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" [[package]] name = "windows_aarch64_msvc" @@ -7193,21 +8086,15 @@ checksum = "ec7711666096bd4096ffa835238905bb33fb87267910e154b18b44eaabb340f2" [[package]] name = "windows_aarch64_msvc" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7" - -[[package]] -name = "windows_i686_gnu" -version = "0.32.0" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a711c68811799e017b6038e0922cb27a5e2f43a2ddb609fe0b6f3eeda9de615" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" [[package]] -name = "windows_i686_gnu" -version = "0.36.1" +name = "windows_aarch64_msvc" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" +checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" [[package]] name = "windows_i686_gnu" @@ -7223,21 +8110,15 @@ checksum = "763fc57100a5f7042e3057e7e8d9bdd7860d330070251a73d003563a3bb49e1b" [[package]] name = "windows_i686_gnu" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640" - -[[package]] -name = "windows_i686_msvc" -version = "0.32.0" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "146c11bb1a02615db74680b32a68e2d61f553cc24c4eb5b4ca10311740e44172" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" [[package]] -name = "windows_i686_msvc" -version = "0.36.1" +name = "windows_i686_gnu" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" +checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" [[package]] name = "windows_i686_msvc" @@ -7253,21 +8134,15 @@ checksum = "7bc7cbfe58828921e10a9f446fcaaf649204dcfe6c1ddd712c5eebae6bda1106" [[package]] name = "windows_i686_msvc" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.32.0" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c912b12f7454c6620635bbff3450962753834be2a594819bd5e945af18ec64bc" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" [[package]] -name = "windows_x86_64_gnu" -version = "0.36.1" +name = "windows_i686_msvc" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" +checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" [[package]] name = "windows_x86_64_gnu" @@ -7283,27 +8158,27 @@ checksum = "6868c165637d653ae1e8dc4d82c25d4f97dd6605eaa8d784b5c6e0ab2a252b65" [[package]] name = "windows_x86_64_gnu" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" [[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.1" +name = "windows_x86_64_gnu" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463" +checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" [[package]] -name = "windows_x86_64_msvc" -version = "0.32.0" +name = "windows_x86_64_gnullvm" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "504a2476202769977a040c6364301a3f65d0cc9e3fb08600b2bda150a0488316" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" [[package]] -name = "windows_x86_64_msvc" -version = "0.36.1" +name = "windows_x86_64_gnullvm" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" +checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" [[package]] name = "windows_x86_64_msvc" @@ -7319,15 +8194,21 @@ checksum = "5e4d40883ae9cae962787ca76ba76390ffa29214667a111db9e0a1ad8377e809" [[package]] name = "windows_x86_64_msvc" -version = "0.42.1" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" +checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" [[package]] name = "winnow" -version = "0.4.1" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae8970b36c66498d8ff1d66685dc86b91b29db0c7739899012f63a63814b4b28" +checksum = "25b5872fa2e10bd067ae946f927e726d7d603eaeb6e02fa6a350e0722d2b8c11" dependencies = [ "memchr", ] @@ -7341,22 +8222,13 @@ dependencies = [ "winapi", ] -[[package]] -name = "winres" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b68db261ef59e9e52806f688020631e987592bd83619edccda9c47d42cde4f6c" -dependencies = [ - "toml 0.5.11", -] - [[package]] name = "wry" version = "0.23.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c1ad8e2424f554cc5bdebe8aa374ef5b433feff817aebabca0389961fc7ef98" dependencies = [ - "base64 0.13.0", + "base64 0.13.1", "block", "cocoa", "core-graphics", @@ -7376,11 +8248,11 @@ dependencies = [ "once_cell", "serde", "serde_json", - "sha2 0.10.6", + "sha2 0.10.7", "soup2", "tao", "thiserror", - "url 2.3.1", + "url", "webkit2gtk", "webkit2gtk-sys", "webview2-com", @@ -7388,11 +8260,20 @@ dependencies = [ "windows-implement", ] +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + [[package]] name = "x11" -version = "2.20.0" +version = "2.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7ae97874a928d821b061fce3d1fc52f08071dd53c89a6102bc06efcac3b2908" +checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e" dependencies = [ "libc", "pkg-config", @@ -7400,15 +8281,26 @@ dependencies = [ [[package]] name = "x11-dl" -version = "2.20.0" +version = "2.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c83627bc137605acc00bb399c7b908ef460b621fc37c953db2b09f88c449ea6" +checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" dependencies = [ - "lazy_static", "libc", + "once_cell", "pkg-config", ] +[[package]] +name = "x25519-dalek" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a0c105152107e3b96f6a00a65e86ce82d9b125230e1c4302940eca58ff71f4f" +dependencies = [ + "curve25519-dalek 3.2.0", + "rand_core 0.5.1", + "zeroize", +] + [[package]] name = "xattr" version = "0.2.3" @@ -7418,12 +8310,6 @@ dependencies = [ "libc", ] -[[package]] -name = "xml-rs" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3" - [[package]] name = "yaml-rust" version = "0.4.5" @@ -7439,36 +8325,30 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5d9ba232399af1783a58d8eb26f6b5006fbefe2dc9ef36bd283324792d03ea5" dependencies = [ - "futures", + "futures 0.3.28", "log", "nohash-hasher", - "parking_lot 0.12.1", + "parking_lot", "rand 0.8.5", "static_assertions", ] [[package]] name = "zeroize" -version = "1.3.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4756f7db3f7b5574938c3eb1c117038b8e07f95ee6718c0efad4ac21508f1efd" +checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" dependencies = [ "zeroize_derive", ] [[package]] name = "zeroize_derive" -version = "1.3.2" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f8f187641dad4f680d25c4bfc4225b418165984179f26ca76ec4fb6441d3a17" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", - "synstructure", + "syn 2.0.27", ] - -[[patch.unused]] -name = "pgp" -version = "0.7.2" -source = "git+https://github.com/tari-project/rpgp.git?rev=32939dbe86565d5ede769a7907ec42dfdf353849#32939dbe86565d5ede769a7907ec42dfdf353849" diff --git a/Cargo.toml b/Cargo.toml index 7933e6bf..a1875765 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,12 +2,13 @@ members = [ "libs/*", - "backend", + # "backend", "cli", ] +resolver = "2" # default-members = [ "backend" ] -[patch.crates-io] +#[patch.crates-io] # Temporarily lock pgp to commit (master branch at time of writing) because the currently release crate locks zeroize to =1.3 -liblmdb-sys = { git = "https://github.com/tari-project/lmdb-rs", tag = "0.7.6-tari.1" } -pgp = { git = "https://github.com/tari-project/rpgp.git", rev = "32939dbe86565d5ede769a7907ec42dfdf353849" } +#liblmdb-sys = { git = "https://github.com/tari-project/lmdb-rs", tag = "0.7.6-tari.1" } +#pgp = { git = "https://github.com/tari-project/rpgp.git", rev = "32939dbe86565d5ede769a7907ec42dfdf353849" } diff --git a/cli/Cargo.toml b/cli/Cargo.toml index abd0ade1..450480ea 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -1,28 +1,27 @@ [package] -name = "tari_cli_launchpad" +name = "tari-lp-cli" version = "0.1.0" -description = "Tari Launchpad (command-line)" -authors = ["The Tari Development Community"] -license = "BSD-3-Clause" -repository = "https://github.com/tari-project/tari-launchpad" edition = "2021" [dependencies] -tari_sdm = { path = "../libs/sdm" } -tari_sdm_launchpad = { path = "../libs/sdm-launchpad" } -tari_sim_launchpad = { path = "../libs/sim-launchpad", optional = true } -tari_sdm_assets = { path = "../libs/sdm-assets" } -tari_launchpad_protocol = { path = "../libs/protocol" } - -anyhow = "1.0.70" +anyhow = "1.0.71" +async-trait = "0.1.68" crossterm = "0.26.1" -env_logger = "0.10.0" +derive_more = "0.99.17" log = "0.4.17" log4rs = "1.2.0" -tokio = { version = "1.27.0", features = ["signal"] } +rust_decimal = "1.29.1" +strum = { version = "0.24.1", features = ["derive"] } +tact = { path = "../libs/tact" } +thiserror = "1.0.40" +tokio = "1.28.1" tui = "0.19.0" -rand = "0.8.5" -strum = "0.24.1" +tui-textarea = "0.2.0" + +tari_launchpad_protocol = { path = "../libs/protocol" } +tari_sdm_assets = { path = "../libs/sdm-assets" } +tari_sdm_launchpad = { path = "../libs/sdm-launchpad" } +tari_sim_launchpad = { path = "../libs/sim-launchpad", optional = true } [features] default = [] diff --git a/cli/src/app.rs b/cli/src/app.rs deleted file mode 100644 index 3600a56b..00000000 --- a/cli/src/app.rs +++ /dev/null @@ -1,79 +0,0 @@ -use anyhow::Error; -use crossterm::event::{Event, KeyCode}; -use tari_launchpad_protocol::launchpad::{Action, LaunchpadAction}; -#[cfg(not(feature = "sim"))] -use tari_sdm_launchpad::LaunchpadBus; -#[cfg(feature = "sim")] -use tari_sim_launchpad::LaunchpadBus; -use tokio::{ - select, - time::{sleep, Duration, Instant}, -}; - -use crate::Dashboard; - -pub struct App { - bus: LaunchpadBus, - dashboard: Dashboard, - last_render: Instant, -} - -impl App { - pub fn init() -> Result { - let bus = LaunchpadBus::start()?; - let dashboard = Dashboard::init()?; - Ok(Self { - bus, - dashboard, - last_render: Instant::now(), - }) - } - - /// Connect to a bus. - pub fn connect(&mut self) -> Result<(), Error> { - let action = Action::Action(LaunchpadAction::Connect); - self.bus.incoming.send(action)?; - Ok(()) - } - - pub async fn routine(&mut self) -> Result<(), Error> { - self.connect()?; - self.dashboard.render()?; - // TODO: Check that state is inactive - while self.dashboard.is_alive() { - self.step().await?; - } - self.dashboard.uninit()?; - Ok(()) - } - - pub async fn step(&mut self) -> Result<(), Error> { - select! { - _ = sleep(Duration::from_millis(800)) => { - } - event = self.bus.outgoing.recv() => { - if let Some(event) = event { - self.dashboard.process_delta(event); - } - } - event = self.dashboard.next_event() => { - if let Some(Event::Key(key)) = event { - if let KeyCode::Char('q') = key.code { - self.dashboard.terminate(); - } - if let Some(new_session) = self.dashboard.process_key(key.code) { - let event = LaunchpadAction::ChangeSession(new_session); - let action = Action::Action(event); - self.bus.incoming.send(action)?; - } - self.dashboard.render()?; - } - } - } - if self.last_render.elapsed() >= Duration::from_millis(300) { - self.dashboard.render()?; - self.last_render = Instant::now(); - } - Ok(()) - } -} diff --git a/cli/src/component/elements.rs b/cli/src/component/elements.rs new file mode 100644 index 00000000..d933ee3a --- /dev/null +++ b/cli/src/component/elements.rs @@ -0,0 +1,25 @@ +use tui::{ + style::{Color, Modifier, Style}, + text::Span, + widgets::{Block, Borders, Paragraph}, +}; + +pub fn block_with_title(title: Option<&str>, focus: bool) -> Block<'_> { + let color = if focus { Color::Magenta } else { Color::White }; + let block = Block::default() + .border_style(Style::default().fg(color)) + .borders(Borders::ALL); + if let Some(title) = title { + let title = format!(" {title} "); + let style = Style::default().fg(Color::White).add_modifier(Modifier::BOLD); + let title_span = Span::styled(title, style); + block.title(title_span) + } else { + block + } +} + +pub fn logo(logo: &str) -> Paragraph<'_> { + let text = logo.trim_start_matches(char::is_whitespace); + Paragraph::new(text) +} diff --git a/cli/src/component/expert/mod.rs b/cli/src/component/expert/mod.rs new file mode 100644 index 00000000..5c83af48 --- /dev/null +++ b/cli/src/component/expert/mod.rs @@ -0,0 +1,60 @@ +use strum::{Display, EnumCount, EnumIter, FromRepr}; +use tui::{ + backend::Backend, + layout::{Constraint, Direction, Layout, Rect}, +}; + +use crate::{ + component::{ + tabs::{AppTabs, TabGetter}, + Component, + ComponentEvent, + Frame, + Input, + }, + state::{focus, AppState, Focus}, +}; + +#[derive(Debug, EnumCount, EnumIter, FromRepr, Clone, Copy, Display)] +pub enum ExpertTabs { + Performance, + Containers, + Logs, +} + +impl TabGetter for ExpertTabs { + fn focus_to(&self, _: &AppState) -> Focus { + focus::ROOT + } +} + +pub struct ExpertScene { + expert_tabs: AppTabs, +} + +impl ExpertScene { + pub fn new() -> Self { + Self { + expert_tabs: AppTabs::new(), + } + } +} + +impl Input for ExpertScene { + fn on_event(&mut self, event: ComponentEvent, state: &mut AppState) { + self.expert_tabs.on_event(event, state); + } +} + +impl Component for ExpertScene { + type State = AppState; + + fn draw(&self, f: &mut Frame, rect: Rect, state: &Self::State) { + let constraints = [Constraint::Length(3), Constraint::Min(0)]; + let chunks = Layout::default() + .direction(Direction::Vertical) + .constraints(constraints) + .split(rect); + self.expert_tabs.draw(f, chunks[0], state); + } +} diff --git a/cli/src/component/header/logo.rs b/cli/src/component/header/logo.rs new file mode 100644 index 00000000..1f9934a6 --- /dev/null +++ b/cli/src/component/header/logo.rs @@ -0,0 +1,38 @@ +use tui::{ + backend::Backend, + layout::{Alignment, Rect}, + style::{Color, Modifier, Style}, + text::{Span, Spans}, + widgets::Paragraph, +}; + +use crate::{ + component::{Component, Frame}, + state::AppState, +}; + +pub struct Logo {} + +impl Logo { + pub fn new() -> Self { + Self {} + } +} + +impl Component for Logo { + type State = AppState; + + fn draw(&self, f: &mut Frame, rect: Rect, _state: &Self::State) { + let bold = Style::default().fg(Color::White).add_modifier(Modifier::BOLD); + let spans = Spans(vec![ + Span::styled("Tari", bold), + Span::raw(" "), + Span::styled("Launchpad", bold), + Span::raw(" "), + Span::styled("App", bold), + ]); + let text = vec![spans]; + let paragraph = Paragraph::new(text).alignment(Alignment::Left); + f.render_widget(paragraph, rect); + } +} diff --git a/cli/src/component/header/mod.rs b/cli/src/component/header/mod.rs new file mode 100644 index 00000000..c60034a1 --- /dev/null +++ b/cli/src/component/header/mod.rs @@ -0,0 +1,50 @@ +pub mod logo; +pub mod mode; + +use logo::Logo; +use mode::ModeSelector; +use tui::{ + backend::Backend, + layout::{Constraint, Direction, Layout, Rect}, +}; + +use crate::{ + component::{Component, ComponentEvent, Frame, Input}, + state::{focus, AppState}, +}; + +pub struct Header { + pub logo: Logo, + pub mode_selector: ModeSelector, +} + +impl Header { + pub fn new() -> Self { + Self { + logo: Logo::new(), + mode_selector: ModeSelector::new(), + } + } +} + +impl Input for Header { + fn on_event(&mut self, event: ComponentEvent, state: &mut AppState) { + self.mode_selector.on_event(event, state); + } +} + +impl Component for Header { + type State = AppState; + + fn draw(&self, f: &mut Frame, rect: Rect, state: &Self::State) { + let constraints = [Constraint::Percentage(40), Constraint::Percentage(60)]; + let chunks = Layout::default() + .direction(Direction::Horizontal) + .constraints(constraints) + .split(rect); + self.logo.draw(f, chunks[0], state); + if state.focus_on != focus::ONBOARDING { + self.mode_selector.draw(f, chunks[1], state); + } + } +} diff --git a/cli/src/component/header/mode.rs b/cli/src/component/header/mode.rs new file mode 100644 index 00000000..602c61b4 --- /dev/null +++ b/cli/src/component/header/mode.rs @@ -0,0 +1,103 @@ +use crossterm::event::{KeyCode, KeyModifiers}; +use tui::{ + backend::Backend, + layout::{Alignment, Rect}, + style::{Color, Modifier, Style}, + text::{Span, Spans}, + widgets::Paragraph, +}; + +use crate::{ + component::{Component, ComponentEvent, Frame, Input}, + state::{focus, AppState}, +}; + +#[derive(Debug, PartialEq, Eq)] +pub enum Mode { + Normal, + Expert, + Settings, +} + +/// A selector to switch between `Normal`, `Expert`, and `Settings`. +pub struct ModeSelector { + expert: bool, + settings: bool, +} + +impl ModeSelector { + pub fn new() -> Self { + Self { + expert: false, + settings: false, + } + } + + pub fn selected(&self) -> Mode { + match (self.expert, self.settings) { + (_, true) => Mode::Settings, + (true, false) => Mode::Expert, + (false, false) => Mode::Normal, + } + } +} + +impl Input for ModeSelector { + fn on_event(&mut self, event: ComponentEvent, state: &mut AppState) { + let mut changed = false; + if let ComponentEvent::KeyEvent(key) = event { + if key.modifiers.contains(KeyModifiers::CONTROL) { + match key.code { + KeyCode::Char('n') => { + self.expert = false; + self.settings = false; + changed = true; + }, + KeyCode::Char('e') => { + self.expert = !self.expert; + self.settings = false; + changed = true; + }, + KeyCode::Char('s') => { + self.settings = !self.settings; + changed = true; + }, + _ => {}, + } + } + } + if changed { + state.focus_on(focus::ROOT); + } + } +} + +impl Component for ModeSelector { + type State = AppState; + + fn draw(&self, f: &mut Frame, rect: Rect, _state: &Self::State) { + let not_selected = Style::default().fg(Color::White); + let selected = Style::default().fg(Color::Magenta); + let bold = Style::default().fg(Color::White).add_modifier(Modifier::BOLD); + let style_for = |mode: Mode| -> Style { + if mode == self.selected() { + selected + } else { + not_selected + } + }; + let selector = if self.expert { " o" } else { "o " }; + let spans = Spans(vec![ + Span::styled("Normal", style_for(Mode::Normal)), + Span::raw(" ("), + Span::styled(selector, bold), + Span::raw(") "), + Span::styled("Expert", style_for(Mode::Expert)), + Span::raw(" | "), + Span::styled("Settings", style_for(Mode::Settings)), + ]); + let text = vec![spans]; + let paragraph = Paragraph::new(text).alignment(Alignment::Right); + f.render_widget(paragraph, rect); + } +} diff --git a/cli/src/component/main_view.rs b/cli/src/component/main_view.rs new file mode 100644 index 00000000..decd51ca --- /dev/null +++ b/cli/src/component/main_view.rs @@ -0,0 +1,88 @@ +use tui::{ + backend::Backend, + layout::{Constraint, Direction, Layout, Rect}, + Frame, +}; + +use crate::{ + component::{ + expert::ExpertScene, + header::{mode::Mode, Header}, + normal::NormalScene, + onboarding::OnboardingScene, + settings::SettingsScene, + Component, + ComponentEvent, + Input, + }, + state::{focus, AppState}, +}; + +pub struct MainView { + header: Header, + normal_scene: NormalScene, + expert_scene: ExpertScene, + settings_scene: SettingsScene, + onboarding_scene: OnboardingScene, +} + +impl MainView { + pub fn new() -> Self { + Self { + header: Header::new(), + normal_scene: NormalScene::new(), + expert_scene: ExpertScene::new(), + settings_scene: SettingsScene::new(), + onboarding_scene: OnboardingScene::new(), + } + } +} + +impl Input for MainView { + fn on_event(&mut self, event: ComponentEvent, state: &mut AppState) { + self.header.on_event(event, state); + if state.focus_on == focus::ONBOARDING { + self.onboarding_scene.on_event(event, state); + } else { + match self.header.mode_selector.selected() { + Mode::Normal => { + self.normal_scene.on_event(event, state); + }, + Mode::Expert => { + self.expert_scene.on_event(event, state); + }, + Mode::Settings => { + self.settings_scene.on_event(event, state); + }, + } + } + } +} + +impl Component for MainView { + type State = AppState; + + fn draw(&self, f: &mut Frame, rect: Rect, state: &Self::State) { + let constraints = [Constraint::Length(1), Constraint::Min(0)]; + let chunks = Layout::default() + .direction(Direction::Vertical) + .constraints(constraints) + .split(rect); + self.header.draw(f, chunks[0], state); + if state.focus_on == focus::ONBOARDING { + self.onboarding_scene.draw(f, chunks[1], state); + } else { + match self.header.mode_selector.selected() { + Mode::Normal => { + self.normal_scene.draw(f, chunks[1], state); + }, + Mode::Expert => { + self.expert_scene.draw(f, chunks[1], state); + }, + Mode::Settings => { + self.settings_scene.draw(f, chunks[1], state); + }, + } + } + } +} diff --git a/cli/src/component/mod.rs b/cli/src/component/mod.rs new file mode 100644 index 00000000..616a9f5e --- /dev/null +++ b/cli/src/component/mod.rs @@ -0,0 +1,80 @@ +mod elements; +mod expert; +mod header; +mod main_view; +mod motion; +mod normal; +mod onboarding; +mod settings; +mod tabs; +mod widgets; + +use crossterm::event::{KeyCode, KeyEvent}; +use derive_more::From; +pub use main_view::MainView; +use tui::{backend::Backend, layout::Rect, Frame}; + +use crate::state::AppState; + +pub trait Component { + type State; + + /// A context reference a mutable to modify the frame. + fn draw(&self, f: &mut Frame, rect: Rect, state: &Self::State); +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub enum Pass { + Up, + Down, + Left, + Right, + // Esc + Leave, + Enter, + Space, + // Tab + Next, + Other, + Tick, +} + +// impl Pass { +// fn any(&self, arr: &[Pass]) -> bool { +// for item in arr { +// if item == self { +// return true; +// } +// } +// false +// } +// } + +#[derive(Debug, Clone, Copy, From)] +pub enum ComponentEvent { + KeyEvent(KeyEvent), + Tick, +} + +impl ComponentEvent { + pub fn pass(&self) -> Pass { + match self { + Self::KeyEvent(event) => match event.code { + KeyCode::Up | KeyCode::Char('k') => Pass::Up, + KeyCode::Down | KeyCode::Char('j') => Pass::Down, + KeyCode::Left | KeyCode::Char('h') => Pass::Left, + KeyCode::Right | KeyCode::Char('l') => Pass::Right, + KeyCode::Esc => Pass::Leave, + KeyCode::Enter => Pass::Enter, + KeyCode::Char(' ') => Pass::Space, + KeyCode::Tab => Pass::Next, + _ => Pass::Other, + }, + Self::Tick => Pass::Tick, + } + } +} + +pub trait Input { + fn on_event(&mut self, event: ComponentEvent, state: &mut AppState); +} diff --git a/cli/src/component/motion.rs b/cli/src/component/motion.rs new file mode 100644 index 00000000..72bb37a1 --- /dev/null +++ b/cli/src/component/motion.rs @@ -0,0 +1,42 @@ +use std::collections::HashMap; + +use tui::{backend::Backend, layout::Rect, terminal::Frame}; + +use crate::{ + component::{Component, ComponentEvent, Input, Pass}, + state::{AppState, Focus}, +}; + +pub trait Focusable { + fn focus(&mut self, focus: bool); +} + +pub struct Motion { + focus: Focus, + inner: T, + directions: HashMap, +} + +impl Input for Motion +where T: Focusable + Input +{ + fn on_event(&mut self, event: ComponentEvent, state: &mut AppState) { + let pass = event.pass(); + if let Some(focus) = self.directions.get(&pass) { + state.focus_on(*focus); + } else { + self.inner.on_event(event, state); + } + self.inner.focus(self.focus == state.focus_on); + } +} + +impl Component for Motion +where T: Component +{ + type State = AppState; + + fn draw(&self, f: &mut Frame, rect: Rect, state: &Self::State) { + self.inner.draw(f, rect, state); + } +} diff --git a/cli/src/component/normal/base_node/mod.rs b/cli/src/component/normal/base_node/mod.rs new file mode 100644 index 00000000..260ae757 --- /dev/null +++ b/cli/src/component/normal/base_node/mod.rs @@ -0,0 +1,67 @@ +mod widget; + +use tui::{ + backend::Backend, + layout::{Constraint, Direction, Layout, Rect}, +}; +use widget::BaseNodeWidget; + +use crate::{ + component::{ + normal::hint::{HintGetter, HintLine}, + Component, + ComponentEvent, + Frame, + Input, + }, + state::AppState, +}; + +struct BaseNodeHint; + +impl HintGetter for BaseNodeHint { + fn get_hint(&self, _state: &AppState) -> String { + "Base Node is already running!".into() + } +} + +pub struct BaseNodeScene { + hint: HintLine, + base_node: BaseNodeWidget, +} + +impl BaseNodeScene { + pub fn new() -> Self { + Self { + hint: HintLine::new(BaseNodeHint), + base_node: BaseNodeWidget::new(), + } + } +} + +impl Input for BaseNodeScene { + fn on_event(&mut self, event: ComponentEvent, state: &mut AppState) { + self.base_node.on_event(event, state); + } +} + +impl Component for BaseNodeScene { + type State = AppState; + + fn draw(&self, f: &mut Frame, rect: Rect, state: &Self::State) { + let constraints = [Constraint::Length(1), Constraint::Percentage(50), Constraint::Min(0)]; + let v_chunks = Layout::default() + .direction(Direction::Vertical) + .constraints(constraints) + .split(rect); + self.hint.draw(f, v_chunks[0], state); + + let constraints = [Constraint::Percentage(50), Constraint::Percentage(50)]; + let h_chunks = Layout::default() + .direction(Direction::Horizontal) + .constraints(constraints) + .split(v_chunks[1]); + self.base_node.draw(f, h_chunks[0], state); + // self.merged_mining.draw(f, h_chunks[1], state); + } +} diff --git a/cli/src/component/normal/base_node/widget.rs b/cli/src/component/normal/base_node/widget.rs new file mode 100644 index 00000000..a53c60f6 --- /dev/null +++ b/cli/src/component/normal/base_node/widget.rs @@ -0,0 +1,102 @@ +use std::time::Duration; + +use tui::{ + backend::Backend, + layout::{Constraint, Direction, Layout, Rect}, +}; + +use crate::{ + component::{ + elements::{block_with_title, logo}, + normal::chrono_button::{ChronoButton, ChronoGetter}, + Component, + ComponentEvent, + Frame, + Input, + Pass, + }, + state::{focus, AppState}, +}; + +const LOGO: &str = r#" +ā•”ā•— ā”Œā”€ā”ā”Œā”€ā”ā”Œā”€ā” ā•”ā•—ā•”ā”Œā”€ā”ā”Œā”¬ā”ā”Œā”€ā” +ā• ā•©ā•—ā”œā”€ā”¤ā””ā”€ā”ā”œā”¤ ā•‘ā•‘ā•‘ā”‚ ā”‚ ā”‚ā”‚ā”œā”¤ +ā•šā•ā•ā”“ ā”“ā””ā”€ā”˜ā””ā”€ā”˜ ā•ā•šā•ā””ā”€ā”˜ā”€ā”“ā”˜ā””ā”€ā”˜ +"#; + +struct BaseNodeGetter; + +impl ChronoGetter for BaseNodeGetter { + fn get_duration(&self, _state: &AppState) -> Option { + None + } + + fn get_label(&self, state: &AppState) -> &str { + if state.state.config.session.is_base_node_active() { + "Pause" + } else { + "Start node" + } + } +} + +pub struct BaseNodeWidget { + button: ChronoButton, +} + +impl BaseNodeWidget { + pub fn new() -> Self { + Self { + button: ChronoButton::new(BaseNodeGetter), + } + } +} + +impl Input for BaseNodeWidget { + fn on_event(&mut self, event: ComponentEvent, state: &mut AppState) { + if state.focus_on == focus::BASE_NODE { + match event.pass() { + Pass::Up | Pass::Leave => { + state.focus_on(focus::ROOT); + }, + Pass::Enter | Pass::Space => { + let session = &mut state.state.config.session; + session.base_layer_active = !session.base_layer_active; + state.update_state(); + }, + _ => {}, + } + } + } +} + +impl Component for BaseNodeWidget { + type State = AppState; + + fn draw(&self, f: &mut Frame, rect: Rect, state: &Self::State) { + let block = block_with_title(Some("Base Node"), state.focus_on == focus::BASE_NODE); + let inner_rect = block.inner(rect); + f.render_widget(block, rect); + + let constraints = [ + Constraint::Length(1), + Constraint::Length(3), + // Constraint::Percentage(50), + Constraint::Length(1), + Constraint::Min(0), + Constraint::Length(1), + ]; + let v_chunks = Layout::default() + .direction(Direction::Vertical) + .constraints(constraints) + .split(inner_rect); + // self.status_badge.draw(f, v_chunks[0], state); + + let logo = logo(LOGO); + f.render_widget(logo, v_chunks[1]); + + // self.tari_amount.draw(f, v_chunks[2], state); + + self.button.draw(f, v_chunks[4], state); + } +} diff --git a/cli/src/component/normal/chrono_button.rs b/cli/src/component/normal/chrono_button.rs new file mode 100644 index 00000000..3366238a --- /dev/null +++ b/cli/src/component/normal/chrono_button.rs @@ -0,0 +1,75 @@ +use std::time::Duration; + +use tui::{ + backend::Backend, + layout::{Constraint, Direction, Layout, Rect}, + style::{Color, Style}, + text::{Span, Spans}, + widgets::{Block, Paragraph}, +}; + +use crate::{ + component::{Component, ComponentEvent, Frame, Input}, + state::AppState, +}; + +pub trait ChronoGetter { + /// How long the mining is active. + fn get_duration(&self, state: &AppState) -> Option; + fn get_label(&self, state: &AppState) -> &str; +} + +/// A button with a clock. +pub struct ChronoButton { + getter: G, +} + +impl ChronoButton { + pub fn new(getter: G) -> Self { + Self { getter } + } +} + +impl Input for ChronoButton { + fn on_event(&mut self, _event: ComponentEvent, _state: &mut AppState) {} +} + +impl Component for ChronoButton +where G: ChronoGetter +{ + type State = AppState; + + fn draw(&self, f: &mut Frame, rect: Rect, state: &Self::State) { + let constraints = [Constraint::Length(1), Constraint::Min(0)]; + let v_chunks = Layout::default() + .direction(Direction::Vertical) + .constraints(constraints) + .split(rect); + let block = Block::default(); + let inner_rect = block.inner(v_chunks[0]); + f.render_widget(block, v_chunks[0]); + + let caption; + let label = self.getter.get_label(state); + if let Some(dur) = self.getter.get_duration(state) { + let total = dur.as_secs(); + let seconds = total % 60; + let total = total / 60; + let minutes = total % 60; + let hours = total / 60; + caption = format!(" {:02}:{:02}:{:02} | {} ", hours, minutes, seconds, label); + } else { + caption = format!(" {} ", label); + } + + let spans = Spans(vec![Span::styled( + // " Set up & start mining ", + // " Start mining ", + caption, + Style::default().bg(Color::Magenta), + )]); + let text = vec![spans]; + let p = Paragraph::new(text); + f.render_widget(p, inner_rect); + } +} diff --git a/cli/src/component/normal/hint.rs b/cli/src/component/normal/hint.rs new file mode 100644 index 00000000..f0715c0a --- /dev/null +++ b/cli/src/component/normal/hint.rs @@ -0,0 +1,43 @@ +use tui::{ + backend::Backend, + layout::{Alignment, Rect}, + text::{Span, Spans}, + widgets::Paragraph, +}; + +use crate::{ + component::{Component, ComponentEvent, Frame, Input}, + state::AppState, +}; + +pub struct HintLine { + getter: T, +} + +pub trait HintGetter { + fn get_hint(&self, state: &AppState) -> String; +} + +impl HintLine { + pub fn new(getter: T) -> Self { + Self { getter } + } +} + +impl Input for HintLine { + fn on_event(&mut self, _event: ComponentEvent, _state: &mut AppState) {} +} + +impl Component for HintLine +where T: HintGetter +{ + type State = AppState; + + fn draw(&self, f: &mut Frame, rect: Rect, state: &Self::State) { + let text = self.getter.get_hint(state); + let spans = Spans(vec![Span::raw(text)]); + let text = vec![spans]; + let paragraph = Paragraph::new(text).alignment(Alignment::Left); + f.render_widget(paragraph, rect); + } +} diff --git a/cli/src/component/normal/mining/amount.rs b/cli/src/component/normal/mining/amount.rs new file mode 100644 index 00000000..bf8195ce --- /dev/null +++ b/cli/src/component/normal/mining/amount.rs @@ -0,0 +1,51 @@ +use rust_decimal::Decimal; +use tui::{ + backend::Backend, + layout::{Alignment, Rect}, + style::{Modifier, Style}, + text::{Span, Spans}, + widgets::Paragraph, +}; + +use crate::{ + component::{Component, ComponentEvent, Frame, Input}, + state::AppState, +}; + +pub trait AmountGetter { + fn get_amount(&self, state: &AppState) -> (Decimal, &str); +} + +pub struct AmountIndicator { + getter: G, +} + +impl AmountIndicator { + pub fn new(getter: G) -> Self { + Self { getter } + } +} + +impl Input for AmountIndicator { + fn on_event(&mut self, _event: ComponentEvent, _state: &mut AppState) {} +} + +impl Component for AmountIndicator +where G: AmountGetter +{ + type State = AppState; + + fn draw(&self, f: &mut Frame, rect: Rect, state: &Self::State) { + let (amount, curr) = self.getter.get_amount(state); + let s = amount.to_string(); + + let spans = Spans(vec![ + Span::raw(s), + Span::raw(" "), + Span::styled(curr, Style::default().add_modifier(Modifier::BOLD)), + ]); + let text = vec![spans]; + let paragraph = Paragraph::new(text).alignment(Alignment::Left); + f.render_widget(paragraph, rect); + } +} diff --git a/cli/src/component/normal/mining/merged_mining.rs b/cli/src/component/normal/mining/merged_mining.rs new file mode 100644 index 00000000..ff031e3f --- /dev/null +++ b/cli/src/component/normal/mining/merged_mining.rs @@ -0,0 +1,154 @@ +use std::time::Duration; + +use rust_decimal::Decimal; +use tui::{ + backend::Backend, + layout::{Constraint, Direction, Layout, Rect}, + style::Color, +}; + +use crate::{ + component::{ + elements::{block_with_title, logo}, + normal::{ + chrono_button::{ChronoButton, ChronoGetter}, + mining::{ + amount::{AmountGetter, AmountIndicator}, + status_badge::{StatusBadge, StatusGetter}, + }, + }, + Component, + ComponentEvent, + Frame, + Input, + Pass, + }, + state::{focus, AppState}, +}; + +const LOGO: &str = r#" +ā•”ā•¦ā•—ā”Œā”€ā”ā”¬ā”€ā”ā”Œā”€ā”ā”Œā”€ā”ā”Œā”¬ā” ā•”ā•¦ā•—ā”¬ā”Œā”ā”Œā”¬ā”Œā”ā”Œā”Œā”€ā” +ā•‘ā•‘ā•‘ā”œā”¤ ā”œā”¬ā”˜ā”‚ ā”¬ā”œā”¤ ā”‚ā”‚ ā•‘ā•‘ā•‘ā”‚ā”‚ā”‚ā”‚ā”‚ā”‚ā”‚ā”‚ā”‚ ā”¬ +ā•© ā•©ā””ā”€ā”˜ā”“ā””ā”€ā””ā”€ā”˜ā””ā”€ā”˜ā”€ā”“ā”˜ ā•© ā•©ā”“ā”˜ā””ā”˜ā”“ā”˜ā””ā”˜ā””ā”€ā”˜ +"#; + +struct MergedMiningGetter; + +impl StatusGetter for MergedMiningGetter { + fn get_status(&self, state: &AppState) -> (&str, Color) { + if state.state.config.session.is_mmproxy_active() { + ("(Running)", Color::Green) + } else { + ("(Ready to set)", Color::Cyan) + } + } +} + +impl ChronoGetter for MergedMiningGetter { + fn get_duration(&self, _state: &AppState) -> Option { + None + } + + fn get_label(&self, state: &AppState) -> &str { + if state.state.config.session.is_mmproxy_active() { + "Pause" + } else { + "Start mining" + } + } +} + +struct XtrGetter; + +impl AmountGetter for XtrGetter { + fn get_amount(&self, _state: &AppState) -> (Decimal, &str) { + let amount = 0.into(); + (amount, "XTR") + } +} + +struct XmrGetter; + +impl AmountGetter for XmrGetter { + fn get_amount(&self, _state: &AppState) -> (Decimal, &str) { + let amount = 0.into(); + (amount, "XMR") + } +} + +pub struct MergedMiningWidget { + status_badge: StatusBadge, + tari_amount: AmountIndicator, + monero_amount: AmountIndicator, + button: ChronoButton, +} + +impl MergedMiningWidget { + pub fn new() -> Self { + Self { + status_badge: StatusBadge::new(MergedMiningGetter), + tari_amount: AmountIndicator::new(XtrGetter), + monero_amount: AmountIndicator::new(XmrGetter), + button: ChronoButton::new(MergedMiningGetter), + } + } +} + +impl Input for MergedMiningWidget { + fn on_event(&mut self, event: ComponentEvent, state: &mut AppState) { + if state.focus_on == focus::MERGED_MINING { + match event.pass() { + Pass::Left | Pass::Next => { + state.focus_on(focus::TARI_MINING); + }, + Pass::Up | Pass::Leave => { + state.focus_on(focus::ROOT); + }, + Pass::Enter | Pass::Space => { + let session = &mut state.state.config.session; + session.merge_layer_active = !session.merge_layer_active; + state.update_state(); + }, + Pass::Tick => { + if state.state.config.session.is_mmproxy_active() { + state.redraw(); + } + }, + _ => {}, + } + } + } +} + +impl Component for MergedMiningWidget { + type State = AppState; + + fn draw(&self, f: &mut Frame, rect: Rect, state: &Self::State) { + let block = block_with_title(Some("Merged Mining"), state.focus_on == focus::MERGED_MINING); + let inner_rect = block.inner(rect); + f.render_widget(block, rect); + + let constraints = [ + Constraint::Length(1), + Constraint::Length(3), + // Constraint::Percentage(50), + Constraint::Length(1), + Constraint::Length(1), + Constraint::Min(0), + Constraint::Length(1), + ]; + let v_chunks = Layout::default() + .direction(Direction::Vertical) + .constraints(constraints) + .split(inner_rect); + self.status_badge.draw(f, v_chunks[0], state); + + let logo = logo(LOGO); + f.render_widget(logo, v_chunks[1]); + + self.tari_amount.draw(f, v_chunks[2], state); + self.monero_amount.draw(f, v_chunks[3], state); + + self.button.draw(f, v_chunks[5], state); + } +} diff --git a/cli/src/component/normal/mining/mod.rs b/cli/src/component/normal/mining/mod.rs new file mode 100644 index 00000000..bfd2420e --- /dev/null +++ b/cli/src/component/normal/mining/mod.rs @@ -0,0 +1,82 @@ +mod amount; +mod merged_mining; +mod status_badge; +mod tari_mining; + +use merged_mining::MergedMiningWidget; +use tari_mining::TariMiningWidget; +use tui::{ + backend::Backend, + layout::{Constraint, Direction, Layout, Rect}, +}; + +use crate::{ + component::{ + normal::hint::{HintGetter, HintLine}, + Component, + ComponentEvent, + Frame, + Input, + }, + state::AppState, +}; + +struct MiningHint; + +impl HintGetter for MiningHint { + fn get_hint(&self, _state: &AppState) -> String { + let mining = false; + let text = if mining { + "Awesome! Tari Mining is on." + } else { + "You are one step away from staring mining." + }; + text.into() + } +} + +pub struct MiningScene { + hint: HintLine, + tari_mining: TariMiningWidget, + merged_mining: MergedMiningWidget, +} + +impl MiningScene { + pub fn new() -> Self { + Self { + hint: HintLine::new(MiningHint), + tari_mining: TariMiningWidget::new(), + merged_mining: MergedMiningWidget::new(), + } + } +} + +impl Input for MiningScene { + fn on_event(&mut self, event: ComponentEvent, state: &mut AppState) { + self.tari_mining.on_event(event, state); + self.merged_mining.on_event(event, state); + } +} + +impl Component for MiningScene { + type State = AppState; + + fn draw(&self, f: &mut Frame, rect: Rect, state: &Self::State) { + let constraints = [Constraint::Length(1), Constraint::Percentage(50), Constraint::Min(0)]; + let v_chunks = Layout::default() + .direction(Direction::Vertical) + .constraints(constraints) + .split(rect); + self.hint.draw(f, v_chunks[0], state); + + let constraints = [Constraint::Percentage(50), Constraint::Percentage(50)]; + let h_chunks = Layout::default() + .direction(Direction::Horizontal) + .constraints(constraints) + .split(v_chunks[1]); + self.tari_mining.draw(f, h_chunks[0], state); + self.merged_mining.draw(f, h_chunks[1], state); + // let block = block_with_title(None); + // f.render_widget(block, rect); + } +} diff --git a/cli/src/component/normal/mining/status_badge.rs b/cli/src/component/normal/mining/status_badge.rs new file mode 100644 index 00000000..238214ce --- /dev/null +++ b/cli/src/component/normal/mining/status_badge.rs @@ -0,0 +1,45 @@ +use tui::{ + backend::Backend, + layout::{Alignment, Rect}, + style::{Color, Style}, + text::{Span, Spans}, + widgets::Paragraph, +}; + +use crate::{ + component::{Component, ComponentEvent, Frame, Input}, + state::AppState, +}; + +pub trait StatusGetter { + fn get_status(&self, state: &AppState) -> (&str, Color); +} + +pub struct StatusBadge { + getter: G, +} + +impl StatusBadge { + pub fn new(getter: G) -> Self { + Self { getter } + } +} + +impl Input for StatusBadge { + fn on_event(&mut self, _event: ComponentEvent, _state: &mut AppState) {} +} + +impl Component for StatusBadge +where G: StatusGetter +{ + type State = AppState; + + fn draw(&self, f: &mut Frame, rect: Rect, state: &Self::State) { + let (text, color) = self.getter.get_status(state); + let style = Style::default().fg(color); + let spans = Spans(vec![Span::styled(text, style)]); + let text = vec![spans]; + let paragraph = Paragraph::new(text).alignment(Alignment::Left); + f.render_widget(paragraph, rect); + } +} diff --git a/cli/src/component/normal/mining/tari_mining.rs b/cli/src/component/normal/mining/tari_mining.rs new file mode 100644 index 00000000..8f148459 --- /dev/null +++ b/cli/src/component/normal/mining/tari_mining.rs @@ -0,0 +1,141 @@ +use std::time::Duration; + +use rust_decimal::Decimal; +use tui::{ + backend::Backend, + layout::{Constraint, Direction, Layout, Rect}, + style::Color, +}; + +use crate::{ + component::{ + elements::{block_with_title, logo}, + normal::{ + chrono_button::{ChronoButton, ChronoGetter}, + mining::{ + amount::{AmountGetter, AmountIndicator}, + status_badge::{StatusBadge, StatusGetter}, + }, + }, + Component, + ComponentEvent, + Frame, + Input, + Pass, + }, + state::{focus, AppState}, +}; + +const LOGO: &str = r#" +ā•”ā•¦ā•—ā”Œā”€ā”ā”¬ā”€ā”ā”¬ ā•”ā•¦ā•—ā”¬ā”Œā”ā”Œā”¬ā”Œā”ā”Œā”Œā”€ā” + ā•‘ ā”œā”€ā”¤ā”œā”¬ā”˜ā”‚ ā•‘ā•‘ā•‘ā”‚ā”‚ā”‚ā”‚ā”‚ā”‚ā”‚ā”‚ā”‚ ā”¬ + ā•© ā”“ ā”“ā”“ā””ā”€ā”“ ā•© ā•©ā”“ā”˜ā””ā”˜ā”“ā”˜ā””ā”˜ā””ā”€ā”˜ +"#; + +struct TariMiningGetter; + +impl StatusGetter for TariMiningGetter { + fn get_status(&self, state: &AppState) -> (&str, Color) { + if state.state.config.session.is_miner_active() { + ("(Running)", Color::Green) + } else { + ("(Ready to set)", Color::Cyan) + } + } +} + +impl ChronoGetter for TariMiningGetter { + fn get_duration(&self, _state: &AppState) -> Option { + None + } + + fn get_label(&self, state: &AppState) -> &str { + if state.state.config.session.is_miner_active() { + "Pause" + } else { + "Start mining" + } + } +} + +struct XtrGetter; + +impl AmountGetter for XtrGetter { + fn get_amount(&self, _state: &AppState) -> (Decimal, &str) { + let amount = 0.into(); + (amount, "XTR") + } +} + +pub struct TariMiningWidget { + status_badge: StatusBadge, + tari_amount: AmountIndicator, + button: ChronoButton, +} + +impl TariMiningWidget { + pub fn new() -> Self { + Self { + status_badge: StatusBadge::new(TariMiningGetter), + tari_amount: AmountIndicator::new(XtrGetter), + button: ChronoButton::new(TariMiningGetter), + } + } +} + +impl Input for TariMiningWidget { + fn on_event(&mut self, event: ComponentEvent, state: &mut AppState) { + if state.focus_on == focus::TARI_MINING { + match event.pass() { + Pass::Right | Pass::Next => { + state.focus_on(focus::MERGED_MINING); + }, + Pass::Up | Pass::Leave => { + state.focus_on(focus::ROOT); + }, + Pass::Enter | Pass::Space => { + let session = &mut state.state.config.session; + session.miner_active = !session.miner_active; + state.update_state(); + }, + Pass::Tick => { + if state.state.config.session.is_miner_active() { + state.redraw(); + } + }, + _ => {}, + } + } + } +} + +impl Component for TariMiningWidget { + type State = AppState; + + fn draw(&self, f: &mut Frame, rect: Rect, state: &Self::State) { + let block = block_with_title(Some("Tari Mining"), state.focus_on == focus::TARI_MINING); + let inner_rect = block.inner(rect); + f.render_widget(block, rect); + + let constraints = [ + Constraint::Length(1), + Constraint::Length(3), + // Constraint::Percentage(50), + Constraint::Length(1), + Constraint::Min(0), + Constraint::Length(1), + ]; + let v_chunks = Layout::default() + .direction(Direction::Vertical) + .constraints(constraints) + .split(inner_rect); + self.status_badge.draw(f, v_chunks[0], state); + + let logo = logo(LOGO); + f.render_widget(logo, v_chunks[1]); + + self.tari_amount.draw(f, v_chunks[2], state); + + self.button.draw(f, v_chunks[4], state); + } +} diff --git a/cli/src/component/normal/mod.rs b/cli/src/component/normal/mod.rs new file mode 100644 index 00000000..c6836947 --- /dev/null +++ b/cli/src/component/normal/mod.rs @@ -0,0 +1,112 @@ +mod base_node; +mod chrono_button; +mod hint; +mod mining; +mod wallet; + +use base_node::BaseNodeScene; +use mining::MiningScene; +use strum::{Display, EnumCount, EnumIter, FromRepr}; +use tui::{ + backend::Backend, + layout::{Constraint, Direction, Layout, Rect}, + style::Color, +}; +use wallet::WalletScene; + +use crate::{ + component::{ + tabs::{AppTabs, TabGetter}, + Component, + ComponentEvent, + Frame, + Input, + }, + state::{focus, AppState, Focus}, +}; + +#[derive(Debug, EnumCount, EnumIter, FromRepr, Clone, Copy, Display)] +pub enum NormalTabs { + Mining, + #[strum(serialize = "Base Node")] + BaseNode, + Wallet, +} + +impl TabGetter for NormalTabs { + fn get_badge(&self, state: &AppState) -> Option<(&str, Color)> { + if let Self::Mining = self { + if state.state.config.session.is_mmproxy_active() { + return Some(("(running)", Color::Green)); + } + } + None + } + + fn focus_to(&self, _: &AppState) -> Focus { + match self { + Self::Mining => focus::TARI_MINING, + Self::BaseNode => focus::BASE_NODE, + Self::Wallet => focus::PASSWORD, + } + } +} + +pub struct NormalScene { + normal_tabs: AppTabs, + mining_scene: MiningScene, + base_node_scene: BaseNodeScene, + wallet_scene: WalletScene, +} + +impl NormalScene { + pub fn new() -> Self { + Self { + normal_tabs: AppTabs::new(), + mining_scene: MiningScene::new(), + base_node_scene: BaseNodeScene::new(), + wallet_scene: WalletScene::new(), + } + } +} + +impl Input for NormalScene { + fn on_event(&mut self, event: ComponentEvent, state: &mut AppState) { + self.normal_tabs.on_event(event, state); + match self.normal_tabs.selected() { + NormalTabs::Mining => { + self.mining_scene.on_event(event, state); + }, + NormalTabs::BaseNode => { + self.base_node_scene.on_event(event, state); + }, + NormalTabs::Wallet => { + self.wallet_scene.on_event(event, state); + }, + } + } +} + +impl Component for NormalScene { + type State = AppState; + + fn draw(&self, f: &mut Frame, rect: Rect, state: &Self::State) { + let constraints = [Constraint::Length(3), Constraint::Min(0)]; + let chunks = Layout::default() + .direction(Direction::Vertical) + .constraints(constraints) + .split(rect); + self.normal_tabs.draw(f, chunks[0], state); + match self.normal_tabs.selected() { + NormalTabs::Mining => { + self.mining_scene.draw(f, chunks[1], state); + }, + NormalTabs::BaseNode => { + self.base_node_scene.draw(f, chunks[1], state); + }, + NormalTabs::Wallet => { + self.wallet_scene.draw(f, chunks[1], state); + }, + } + } +} diff --git a/cli/src/component/normal/wallet/mod.rs b/cli/src/component/normal/wallet/mod.rs new file mode 100644 index 00000000..83fdb63a --- /dev/null +++ b/cli/src/component/normal/wallet/mod.rs @@ -0,0 +1,52 @@ +mod password; + +use password::PasswordWidget; +use tui::{ + backend::Backend, + layout::{Constraint, Direction, Layout, Rect}, +}; + +use crate::{ + component::{Component, ComponentEvent, Frame, Input}, + state::AppState, +}; + +pub struct WalletScene { + password: PasswordWidget, +} + +impl WalletScene { + pub fn new() -> Self { + Self { + password: PasswordWidget::new(), + } + } +} + +impl Input for WalletScene { + fn on_event(&mut self, event: ComponentEvent, state: &mut AppState) { + self.password.on_event(event, state); + } +} + +impl Component for WalletScene { + type State = AppState; + + fn draw(&self, f: &mut Frame, rect: Rect, state: &Self::State) { + let constraints = [Constraint::Length(1), Constraint::Percentage(50), Constraint::Min(0)]; + let v_chunks = Layout::default() + .direction(Direction::Vertical) + .constraints(constraints) + .split(rect); + // self.hint.draw(f, v_chunks[0], state); + + let constraints = [Constraint::Percentage(50), Constraint::Percentage(50)]; + let h_chunks = Layout::default() + .direction(Direction::Horizontal) + .constraints(constraints) + .split(v_chunks[1]); + self.password.draw(f, h_chunks[0], state); + // self.tari_mining.draw(f, h_chunks[0], state); + // self.merged_mining.draw(f, h_chunks[1], state); + } +} diff --git a/cli/src/component/normal/wallet/password.rs b/cli/src/component/normal/wallet/password.rs new file mode 100644 index 00000000..c6e8db01 --- /dev/null +++ b/cli/src/component/normal/wallet/password.rs @@ -0,0 +1,100 @@ +use std::time::Duration; + +use tui::{ + backend::Backend, + layout::{Constraint, Direction, Layout, Rect}, +}; + +use crate::{ + component::{ + elements::{block_with_title, logo}, + normal::chrono_button::{ChronoButton, ChronoGetter}, + Component, + ComponentEvent, + Frame, + Input, + Pass, + }, + state::{focus, AppState}, +}; + +const LOGO: &str = r#" +ā•”ā•ā•—ā”Œā”ā”Œā”Œā”¬ā”ā”Œā”€ā”ā”¬ā”€ā” ā•”ā•ā•—ā”Œā”€ā”ā”Œā”€ā”ā”Œā”€ā”ā”¬ ā”¬ā”Œā”€ā”ā”¬ā”€ā”ā”Œā”¬ā” +ā•‘ā•£ ā”‚ā”‚ā”‚ ā”‚ ā”œā”¤ ā”œā”¬ā”˜ ā• ā•ā•ā”œā”€ā”¤ā””ā”€ā”ā””ā”€ā”ā”‚ā”‚ā”‚ā”‚ ā”‚ā”œā”¬ā”˜ ā”‚ā”‚ +ā•šā•ā•ā”˜ā””ā”˜ ā”“ ā””ā”€ā”˜ā”“ā””ā”€ ā•© ā”“ ā”“ā””ā”€ā”˜ā””ā”€ā”˜ā””ā”“ā”˜ā””ā”€ā”˜ā”“ā””ā”€ā”€ā”“ā”˜ +"#; + +struct PasswordWidgetGetter; + +impl ChronoGetter for PasswordWidgetGetter { + fn get_duration(&self, _state: &AppState) -> Option { + None + } + + fn get_label(&self, _state: &AppState) -> &str { + if false { + "Pause" + } else { + "Start node" + } + } +} + +pub struct PasswordWidget { + button: ChronoButton, +} + +impl PasswordWidget { + pub fn new() -> Self { + Self { + button: ChronoButton::new(PasswordWidgetGetter), + } + } +} + +impl Input for PasswordWidget { + fn on_event(&mut self, event: ComponentEvent, state: &mut AppState) { + if state.focus_on == focus::PASSWORD { + match event.pass() { + Pass::Up | Pass::Leave => { + state.focus_on(focus::ROOT); + }, + Pass::Enter | Pass::Space => { + // TODO: Toggle the base node state + }, + _ => {}, + } + } + } +} + +impl Component for PasswordWidget { + type State = AppState; + + fn draw(&self, f: &mut Frame, rect: Rect, state: &Self::State) { + let block = block_with_title(Some("Wallet"), state.focus_on == focus::PASSWORD); + let inner_rect = block.inner(rect); + f.render_widget(block, rect); + + let constraints = [ + Constraint::Length(1), + Constraint::Length(3), + // Constraint::Percentage(50), + Constraint::Length(1), + Constraint::Min(0), + Constraint::Length(1), + ]; + let v_chunks = Layout::default() + .direction(Direction::Vertical) + .constraints(constraints) + .split(inner_rect); + // self.status_badge.draw(f, v_chunks[0], state); + + let logo = logo(LOGO); + f.render_widget(logo, v_chunks[1]); + + // self.tari_amount.draw(f, v_chunks[2], state); + + self.button.draw(f, v_chunks[4], state); + } +} diff --git a/cli/src/component/onboarding/message.rs b/cli/src/component/onboarding/message.rs new file mode 100644 index 00000000..dc48fc7d --- /dev/null +++ b/cli/src/component/onboarding/message.rs @@ -0,0 +1,43 @@ +use tui::{ + backend::Backend, + layout::{Constraint, Layout, Rect}, + widgets::{Paragraph, Wrap}, +}; + +use crate::{ + component::{elements::block_with_title, Component, ComponentEvent, Frame, Input}, + state::{onboarding::Message, AppState}, +}; + +pub struct MessageWidget { + msg: Option, +} + +impl MessageWidget { + pub fn new(msg: Option) -> Self { + Self { msg } + } +} + +impl Input for MessageWidget { + fn on_event(&mut self, _event: ComponentEvent, _state: &mut AppState) {} +} + +impl Component for MessageWidget { + type State = AppState; + + fn draw(&self, f: &mut Frame, rect: Rect, _state: &Self::State) { + let block = block_with_title(None, false); + let inner_rect = block.inner(rect); + f.render_widget(block, rect); + + let chunks = Layout::default() + .constraints(vec![Constraint::Percentage(100)]) + .horizontal_margin(3) + .vertical_margin(1) + .split(inner_rect); + let text = self.msg.as_ref().map(|msg| msg.text.as_ref()).unwrap_or("..."); + let paragraph = Paragraph::new(text).wrap(Wrap { trim: false }); + f.render_widget(paragraph, chunks[0]); + } +} diff --git a/cli/src/component/onboarding/mod.rs b/cli/src/component/onboarding/mod.rs new file mode 100644 index 00000000..73fca633 --- /dev/null +++ b/cli/src/component/onboarding/mod.rs @@ -0,0 +1,115 @@ +mod message; + +use std::time::{Duration, Instant}; + +use message::MessageWidget; +use tui::{ + backend::Backend, + layout::{Constraint, Direction, Layout, Rect}, + style::{Color, Style}, + text::{Span, Spans}, + widgets::{Gauge, Paragraph}, +}; + +use crate::{ + component::{Component, ComponentEvent, Frame, Input, Pass}, + state::{focus, onboarding::OnboardingAction, AppState}, +}; + +pub struct OnboardingScene { + wink: Option, +} + +impl OnboardingScene { + pub fn new() -> Self { + Self { + wink: Some(Instant::now()), + } + } +} + +impl Input for OnboardingScene { + fn on_event(&mut self, event: ComponentEvent, state: &mut AppState) { + if let Some(wink) = self.wink { + if wink.elapsed() >= Duration::from_secs(5) { + self.wink.take(); + state.redraw(); + } + } else { + self.wink = Some(Instant::now()); + state.redraw(); + } + + if state.bus.state().is_done() { + state.focus_on(focus::ROOT); + } + + match event.pass() { + Pass::Enter => { + state.bus.send(OnboardingAction::Next); + }, + Pass::Leave => { + state.focus_on(focus::ROOT); + }, + _ => {}, + } + } +} + +impl OnboardingScene { + fn get_progress(&self, state: &AppState) -> u16 { + u16::from(state.bus.state().total_progress.pct) + } +} + +impl Component for OnboardingScene { + type State = AppState; + + fn draw(&self, f: &mut Frame, rect: Rect, state: &Self::State) { + let constraints = [ + Constraint::Percentage(20), + Constraint::Percentage(60), + Constraint::Percentage(20), + ]; + let h_chunks = Layout::default() + .direction(Direction::Horizontal) + .constraints(constraints) + .split(rect); + let constraints = [ + Constraint::Percentage(30), + Constraint::Percentage(40), + Constraint::Percentage(30), + ]; + let v_chunks = Layout::default() + .direction(Direction::Vertical) + .constraints(constraints) + .split(h_chunks[1]); + + let constraints = [Constraint::Min(0), Constraint::Length(1)]; + let view_chunks = Layout::default() + .direction(Direction::Vertical) + .constraints(constraints) + .split(v_chunks[1]); + + let msg = state.bus.state().message.clone(); + let message = MessageWidget::new(msg); + message.draw(f, view_chunks[0], state); + + let constraints = [Constraint::Min(0), Constraint::Length(5), Constraint::Length(5)]; + let line_chinks = Layout::default() + .direction(Direction::Horizontal) + .constraints(constraints) + .split(view_chunks[1]); + + let gauge = Gauge::default() + .label("") + .gauge_style(Style::default().fg(Color::Magenta).bg(Color::Reset)) + .percent(self.get_progress(state)); + f.render_widget(gauge, line_chinks[0]); + let style = Style::default().fg(Color::White); + let bot_state = if self.wink.is_some() { "[o o]" } else { "[- -]" }; + let text = vec![Spans::from(Span::styled(bot_state, style))]; + let bot = Paragraph::new(text); + f.render_widget(bot, line_chinks[2]); + } +} diff --git a/cli/src/component/settings/base_node.rs b/cli/src/component/settings/base_node.rs new file mode 100644 index 00000000..41cb78b6 --- /dev/null +++ b/cli/src/component/settings/base_node.rs @@ -0,0 +1,53 @@ +use tui::{ + backend::Backend, + layout::{Constraint, Direction, Layout, Rect}, +}; + +use crate::{ + component::{ + elements::block_with_title, + widgets::{LabeledInput, Separator}, + Component, + ComponentEvent, + Frame, + Input, + }, + state::AppState, +}; + +pub struct BaseNodeSettings { + expert_sep: Separator, + root_folder: LabeledInput, +} + +impl BaseNodeSettings { + pub fn new() -> Self { + Self { + expert_sep: Separator::new("Expert", []), + root_folder: LabeledInput::new("Root folder"), + } + } +} + +impl Input for BaseNodeSettings { + fn on_event(&mut self, _event: ComponentEvent, _state: &mut AppState) {} +} + +impl Component for BaseNodeSettings { + type State = AppState; + + fn draw(&self, f: &mut Frame, rect: Rect, state: &Self::State) { + let block = block_with_title(Some("BaseNode Settings"), false); + let inner_rect = block.inner(rect); + f.render_widget(block, rect); + let constraints = [Constraint::Length(1), Constraint::Length(3), Constraint::Min(0)]; + let chunks = Layout::default() + .vertical_margin(1) + .horizontal_margin(3) + .direction(Direction::Vertical) + .constraints(constraints) + .split(inner_rect); + self.expert_sep.draw(f, chunks[0], state); + self.root_folder.draw(f, chunks[1], state); + } +} diff --git a/cli/src/component/settings/docker.rs b/cli/src/component/settings/docker.rs new file mode 100644 index 00000000..e75572a4 --- /dev/null +++ b/cli/src/component/settings/docker.rs @@ -0,0 +1,68 @@ +use tui::{ + backend::Backend, + layout::{Constraint, Direction, Layout, Rect}, +}; + +use crate::{ + component::{ + elements::block_with_title, + widgets::{LabeledInput, Separator}, + Component, + ComponentEvent, + Frame, + Input, + }, + state::AppState, +}; + +pub struct DockerSettings { + expert_sep: Separator, + docker_tag: LabeledInput, + docker_registry: LabeledInput, + statuses_sep: Separator, +} + +impl DockerSettings { + pub fn new() -> Self { + Self { + expert_sep: Separator::new("Expert", []), + docker_tag: LabeledInput::new("Docker Tag"), + docker_registry: LabeledInput::new("Docker Registry"), + statuses_sep: Separator::new("Image Statuses", []), + } + } +} + +impl Input for DockerSettings { + fn on_event(&mut self, _event: ComponentEvent, _state: &mut AppState) {} +} + +impl Component for DockerSettings { + type State = AppState; + + fn draw(&self, f: &mut Frame, rect: Rect, state: &Self::State) { + let block = block_with_title(Some("Docker Settings"), false); + let inner_rect = block.inner(rect); + f.render_widget(block, rect); + let constraints = [ + // Expert + Constraint::Length(1), + Constraint::Length(3), + Constraint::Length(3), + // Image Statuses + Constraint::Length(1), + Constraint::Min(0), + ]; + let chunks = Layout::default() + .vertical_margin(1) + .horizontal_margin(3) + .direction(Direction::Vertical) + .constraints(constraints) + .split(inner_rect); + self.expert_sep.draw(f, chunks[0], state); + self.docker_tag.draw(f, chunks[1], state); + self.docker_registry.draw(f, chunks[2], state); + + self.statuses_sep.draw(f, chunks[3], state); + } +} diff --git a/cli/src/component/settings/logs.rs b/cli/src/component/settings/logs.rs new file mode 100644 index 00000000..2901b8e9 --- /dev/null +++ b/cli/src/component/settings/logs.rs @@ -0,0 +1,59 @@ +use tui::{ + backend::Backend, + layout::{Constraint, Direction, Layout, Rect}, +}; + +use crate::{ + component::{ + elements::block_with_title, + widgets::{LabeledInput, Separator}, + Component, + ComponentEvent, + Frame, + Input, + }, + state::AppState, +}; + +pub struct LogsSettings { + expert_sep: Separator, + max_size: LabeledInput, +} + +impl LogsSettings { + pub fn new() -> Self { + Self { + expert_sep: Separator::new("Expert", []), + max_size: LabeledInput::new("Max logs file size"), + } + } +} + +impl Input for LogsSettings { + fn on_event(&mut self, _event: ComponentEvent, _state: &mut AppState) {} +} + +impl Component for LogsSettings { + type State = AppState; + + fn draw(&self, f: &mut Frame, rect: Rect, state: &Self::State) { + let block = block_with_title(Some("Logs Settings"), false); + let inner_rect = block.inner(rect); + f.render_widget(block, rect); + let constraints = [ + // Expert + Constraint::Length(1), + Constraint::Length(3), + Constraint::Length(3), + Constraint::Min(0), + ]; + let chunks = Layout::default() + .vertical_margin(1) + .horizontal_margin(3) + .direction(Direction::Vertical) + .constraints(constraints) + .split(inner_rect); + self.expert_sep.draw(f, chunks[0], state); + self.max_size.draw(f, chunks[2], state); + } +} diff --git a/cli/src/component/settings/mining.rs b/cli/src/component/settings/mining.rs new file mode 100644 index 00000000..043ee8f6 --- /dev/null +++ b/cli/src/component/settings/mining.rs @@ -0,0 +1,65 @@ +use tui::{ + backend::Backend, + layout::{Constraint, Direction, Layout, Rect}, +}; + +use crate::{ + component::{ + elements::block_with_title, + widgets::{LabeledInput, Separator}, + Component, + ComponentEvent, + Frame, + Input, + }, + state::AppState, +}; + +pub struct MiningSettings { + expert_sep: Separator, + monero_address: LabeledInput, + sha_threads: LabeledInput, + monero_url: LabeledInput, +} + +impl MiningSettings { + pub fn new() -> Self { + Self { + expert_sep: Separator::new("Expert", []), + monero_address: LabeledInput::new("Monero mining address"), + sha_threads: LabeledInput::new("SHA3 threads"), + monero_url: LabeledInput::new("Monero node URL"), + } + } +} + +impl Input for MiningSettings { + fn on_event(&mut self, _event: ComponentEvent, _state: &mut AppState) {} +} + +impl Component for MiningSettings { + type State = AppState; + + fn draw(&self, f: &mut Frame, rect: Rect, state: &Self::State) { + let block = block_with_title(Some("Mining Settings"), false); + let inner_rect = block.inner(rect); + f.render_widget(block, rect); + let constraints = [ + Constraint::Length(1), + Constraint::Length(3), + Constraint::Length(3), + Constraint::Length(3), + Constraint::Min(0), + ]; + let chunks = Layout::default() + .vertical_margin(1) + .horizontal_margin(3) + .direction(Direction::Vertical) + .constraints(constraints) + .split(inner_rect); + self.expert_sep.draw(f, chunks[0], state); + self.monero_address.draw(f, chunks[1], state); + self.sha_threads.draw(f, chunks[2], state); + self.monero_url.draw(f, chunks[3], state); + } +} diff --git a/cli/src/component/settings/mod.rs b/cli/src/component/settings/mod.rs new file mode 100644 index 00000000..be86b77f --- /dev/null +++ b/cli/src/component/settings/mod.rs @@ -0,0 +1,128 @@ +mod base_node; +mod docker; +mod logs; +mod mining; +mod security; +mod wallet; + +use base_node::BaseNodeSettings; +use docker::DockerSettings; +use logs::LogsSettings; +use mining::MiningSettings; +use security::SecuritySettings; +use strum::{Display, EnumCount, EnumIter, FromRepr}; +use tui::{ + backend::Backend, + layout::{Constraint, Direction, Layout, Rect}, +}; +use wallet::WalletSettings; + +use crate::{ + component::{ + tabs::{AppTabs, TabGetter}, + Component, + ComponentEvent, + Frame, + Input, + }, + state::{focus, AppState, Focus}, +}; + +#[derive(Debug, EnumCount, EnumIter, FromRepr, Clone, Copy, Display)] +pub enum SettingsTabs { + Mining, + Wallet, + BaseNode, + Docker, + Logs, + Security, +} + +impl TabGetter for SettingsTabs { + fn focus_to(&self, _: &AppState) -> Focus { + focus::ROOT + } +} + +pub struct SettingsScene { + settings_tabs: AppTabs, + mining_settings: MiningSettings, + wallet_settings: WalletSettings, + base_node_settings: BaseNodeSettings, + docker_settings: DockerSettings, + logs_settings: LogsSettings, + security_settings: SecuritySettings, +} + +impl SettingsScene { + pub fn new() -> Self { + Self { + settings_tabs: AppTabs::new(), + mining_settings: MiningSettings::new(), + wallet_settings: WalletSettings::new(), + base_node_settings: BaseNodeSettings::new(), + docker_settings: DockerSettings::new(), + logs_settings: LogsSettings::new(), + security_settings: SecuritySettings::new(), + } + } +} + +impl Input for SettingsScene { + fn on_event(&mut self, event: ComponentEvent, state: &mut AppState) { + self.settings_tabs.on_event(event, state); + match self.settings_tabs.selected() { + SettingsTabs::Mining => { + self.mining_settings.on_event(event, state); + }, + SettingsTabs::Wallet => { + self.wallet_settings.on_event(event, state); + }, + SettingsTabs::BaseNode => { + self.base_node_settings.on_event(event, state); + }, + SettingsTabs::Docker => { + self.docker_settings.on_event(event, state); + }, + SettingsTabs::Logs => { + self.logs_settings.on_event(event, state); + }, + SettingsTabs::Security => { + self.security_settings.on_event(event, state); + }, + } + } +} + +impl Component for SettingsScene { + type State = AppState; + + fn draw(&self, f: &mut Frame, rect: Rect, state: &Self::State) { + let constraints = [Constraint::Length(3), Constraint::Min(0)]; + let chunks = Layout::default() + .direction(Direction::Vertical) + .constraints(constraints) + .split(rect); + self.settings_tabs.draw(f, chunks[0], state); + match self.settings_tabs.selected() { + SettingsTabs::Mining => { + self.mining_settings.draw(f, chunks[1], state); + }, + SettingsTabs::Wallet => { + self.wallet_settings.draw(f, chunks[1], state); + }, + SettingsTabs::BaseNode => { + self.base_node_settings.draw(f, chunks[1], state); + }, + SettingsTabs::Docker => { + self.docker_settings.draw(f, chunks[1], state); + }, + SettingsTabs::Logs => { + self.logs_settings.draw(f, chunks[1], state); + }, + SettingsTabs::Security => { + self.security_settings.draw(f, chunks[1], state); + }, + } + } +} diff --git a/cli/src/component/settings/security.rs b/cli/src/component/settings/security.rs new file mode 100644 index 00000000..ededa780 --- /dev/null +++ b/cli/src/component/settings/security.rs @@ -0,0 +1,27 @@ +use tui::{backend::Backend, layout::Rect}; + +use crate::{ + component::{elements::block_with_title, Component, ComponentEvent, Frame, Input}, + state::AppState, +}; + +pub struct SecuritySettings {} + +impl SecuritySettings { + pub fn new() -> Self { + Self {} + } +} + +impl Input for SecuritySettings { + fn on_event(&mut self, _event: ComponentEvent, _state: &mut AppState) {} +} + +impl Component for SecuritySettings { + type State = AppState; + + fn draw(&self, f: &mut Frame, rect: Rect, _state: &Self::State) { + let block = block_with_title(Some("Security Settings"), false); + f.render_widget(block, rect); + } +} diff --git a/cli/src/component/settings/wallet.rs b/cli/src/component/settings/wallet.rs new file mode 100644 index 00000000..5a21061e --- /dev/null +++ b/cli/src/component/settings/wallet.rs @@ -0,0 +1,43 @@ +use tui::{ + backend::Backend, + layout::{Constraint, Direction, Layout, Rect}, +}; + +use crate::{ + component::{elements::block_with_title, widgets::LabeledInput, Component, ComponentEvent, Frame, Input}, + state::AppState, +}; + +pub struct WalletSettings { + wallet_id: LabeledInput, +} + +impl WalletSettings { + pub fn new() -> Self { + Self { + wallet_id: LabeledInput::new("Tari Wallet ID (address)"), + } + } +} + +impl Input for WalletSettings { + fn on_event(&mut self, _event: ComponentEvent, _state: &mut AppState) {} +} + +impl Component for WalletSettings { + type State = AppState; + + fn draw(&self, f: &mut Frame, rect: Rect, state: &Self::State) { + let block = block_with_title(Some("Wallet Settings"), false); + let inner_rect = block.inner(rect); + f.render_widget(block, rect); + let constraints = [Constraint::Length(3), Constraint::Min(0)]; + let chunks = Layout::default() + .vertical_margin(1) + .horizontal_margin(3) + .direction(Direction::Vertical) + .constraints(constraints) + .split(inner_rect); + self.wallet_id.draw(f, chunks[0], state); + } +} diff --git a/cli/src/component/tabs.rs b/cli/src/component/tabs.rs new file mode 100644 index 00000000..e306f19b --- /dev/null +++ b/cli/src/component/tabs.rs @@ -0,0 +1,121 @@ +use strum::IntoEnumIterator; +use tui::{ + backend::Backend, + layout::Rect, + style::{Color, Style}, + text::{Span, Spans}, + widgets::Tabs, + Frame, +}; + +use crate::{ + component::{elements::block_with_title, Component, ComponentEvent, Input, Pass}, + state::{focus, AppState, Focus}, +}; + +pub trait TabGetter: IntoEnumIterator + Copy + ToString { + fn get_badge(&self, _: &AppState) -> Option<(&str, Color)> { + None + } + + fn focus_to(&self, _: &AppState) -> Focus; +} + +pub struct AppTabs { + focus_on: Focus, + selected: usize, + items: Vec, +} + +impl AppTabs +where T: IntoEnumIterator +{ + pub fn new() -> Self { + Self { + focus_on: focus::ROOT, + selected: 0, + items: T::iter().collect(), + } + } +} + +impl AppTabs { + pub fn selected(&self) -> &T { + self.items + .get(self.selected) + .expect("the selected tab is out of the range (empty tabs list)") + } + + fn next(&mut self) { + let index = self.selected + 1; + if self.items.get(index).is_some() { + self.selected = index; + } else { + self.selected = 0; + } + } + + fn prev(&mut self) { + if self.selected > 0 { + let index = self.selected - 1; + self.selected = index; + } else { + self.selected = self.items.len() - 1; + } + } +} + +impl Input for AppTabs +where T: TabGetter +{ + fn on_event(&mut self, event: ComponentEvent, state: &mut AppState) { + if state.focus_on == self.focus_on { + match event.pass() { + Pass::Next | Pass::Right => { + self.next(); + }, + Pass::Left => { + self.prev(); + }, + Pass::Down | Pass::Enter | Pass::Space => { + let focus_to = self.selected().focus_to(state); + state.focus_on(focus_to); + }, + _ => {}, + } + } + } +} + +impl Component for AppTabs +where + B: Backend, + T: TabGetter, +{ + type State = AppState; + + fn draw(&self, f: &mut Frame, rect: Rect, state: &Self::State) { + let titles = self + .items + .iter() + .map(|item| { + //.fg(Color::Rgb(4, 209, 144)); + let mut spans = vec![Span::raw(item.to_string())]; + if let Some((tag, color)) = item.get_badge(state) { + let tag_style = Style::default().fg(color); + let text = format!(" {tag}"); + let span = Span::styled(text, tag_style); + spans.push(span); + } + Spans::from(spans) + }) + .collect(); + let block = block_with_title(None, state.focus_on == self.focus_on); + let tabs = Tabs::new(titles) + .block(block) + .select(self.selected) + .style(Style::default().fg(Color::White)) + .highlight_style(Style::default().fg(Color::Magenta)); + f.render_widget(tabs, rect); + } +} diff --git a/cli/src/component/widgets/label.rs b/cli/src/component/widgets/label.rs new file mode 100644 index 00000000..35e1c60b --- /dev/null +++ b/cli/src/component/widgets/label.rs @@ -0,0 +1,28 @@ +use tui::{ + buffer::Buffer, + layout::Rect, + style::{Modifier, Style}, + text::Span, + widgets::Widget, +}; + +pub struct Label<'a> { + text: &'a str, +} + +impl<'a> Label<'a> { + pub fn new(text: &'a str) -> Self { + Self { text } + } +} + +impl<'a> Widget for Label<'a> { + fn render(self, area: Rect, buf: &mut Buffer) { + let style = Style::default().add_modifier(Modifier::BOLD); + let span = Span::styled(self.text, style); + let top = area.top() + area.height / 2; + let left = area.left(); + let width = area.width; + buf.set_span(left, top, &span, width); + } +} diff --git a/cli/src/component/widgets/labeled_input.rs b/cli/src/component/widgets/labeled_input.rs new file mode 100644 index 00000000..9218497e --- /dev/null +++ b/cli/src/component/widgets/labeled_input.rs @@ -0,0 +1,60 @@ +use tui::{ + backend::Backend, + layout::{Constraint, Direction, Layout, Rect}, + style::{Color, Style}, + widgets::{Block, Borders}, +}; +use tui_textarea::TextArea; + +use crate::{ + component::{widgets::Label, Component, Frame}, + state::AppState, +}; + +pub struct LabeledInput { + label: String, + input: TextArea<'static>, +} + +impl LabeledInput { + pub fn new(label: impl ToString) -> Self { + let input = TextArea::default(); + let mut this = Self { + label: label.to_string(), + input, + }; + this.set_focus(false); + this + } + + fn set_focus(&mut self, focus: bool) { + let (block_color, cursor_color) = { + if focus { + (Color::Magenta, Color::White) + } else { + (Color::White, Color::Reset) + } + }; + let block = Block::default() + .border_style(Style::default().fg(block_color)) + .borders(Borders::ALL); + self.input.set_block(block); + self.input.set_cursor_style(Style::default().bg(cursor_color)); + } +} + +impl Component for LabeledInput { + type State = AppState; + + fn draw(&self, f: &mut Frame, rect: Rect, _state: &Self::State) { + let constraints = [Constraint::Percentage(40), Constraint::Percentage(60)]; + let h_chunks = Layout::default() + .direction(Direction::Horizontal) + .constraints(constraints) + .split(rect); + let label = Label::new(&self.label); + f.render_widget(label, h_chunks[0]); + let input = self.input.widget(); + f.render_widget(input, h_chunks[1]); + } +} diff --git a/cli/src/component/widgets/mod.rs b/cli/src/component/widgets/mod.rs new file mode 100644 index 00000000..fed73501 --- /dev/null +++ b/cli/src/component/widgets/mod.rs @@ -0,0 +1,7 @@ +mod label; +mod labeled_input; +mod separator; + +pub use label::Label; +pub use labeled_input::LabeledInput; +pub use separator::Separator; diff --git a/cli/src/component/widgets/separator.rs b/cli/src/component/widgets/separator.rs new file mode 100644 index 00000000..18193c77 --- /dev/null +++ b/cli/src/component/widgets/separator.rs @@ -0,0 +1,66 @@ +use std::collections::HashSet; + +use tui::{ + backend::Backend, + buffer::Buffer, + layout::Rect, + style::{Color, Modifier, Style}, + symbols::line, + text::Span, + widgets::Widget, + Frame, +}; + +use crate::{ + component::{AppState, Component}, + state::Focus, +}; + +pub struct Separator { + focus_on: HashSet, + title: String, +} + +impl Separator { + pub fn new(title: &str, focus: impl IntoIterator) -> Self { + Self { + focus_on: focus.into_iter().collect(), + title: title.into(), + } + } +} + +impl Component for Separator { + type State = AppState; + + fn draw(&self, f: &mut Frame, rect: Rect, state: &Self::State) { + let render = Render { + focus: self.focus_on.contains(&state.focus_on), + title: &self.title, + line_set: line::NORMAL, + }; + f.render_widget(render, rect); + } +} + +struct Render<'a> { + focus: bool, + title: &'a str, + line_set: line::Set, +} + +impl<'a> Widget for Render<'a> { + fn render(self, area: Rect, buf: &mut Buffer) { + let color = if self.focus { Color::Magenta } else { Color::White }; + let modifier = if self.focus { Modifier::BOLD } else { Modifier::empty() }; + let style = Style::default().fg(color).add_modifier(modifier); + let span = Span::styled(self.title, style); + let (col, row) = buf.set_span(area.left(), area.top(), &span, area.width); + let start = col + 1; + + let y = row; + for x in start..area.right() { + buf.get_mut(x, y).set_symbol(self.line_set.horizontal); //"_" + } + } +} diff --git a/cli/src/dashboard.rs b/cli/src/dashboard.rs index 634ccbfb..908dac79 100644 --- a/cli/src/dashboard.rs +++ b/cli/src/dashboard.rs @@ -1,318 +1,227 @@ -use std::io::Stdout; +use std::{io::Stdout, time::Duration}; use anyhow::Error; +use async_trait::async_trait; use crossterm::{ - event::{self, DisableMouseCapture, EnableMouseCapture, Event, KeyCode}, + event::{DisableMouseCapture, EnableMouseCapture, Event, KeyCode}, execute, terminal::{disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen}, }; -use strum::{Display, EnumCount, EnumIter, FromRepr, IntoEnumIterator}; -use tari_launchpad_protocol::{ - launchpad::{LaunchpadState, Reaction}, - session::LaunchpadSession, - wallet::WalletState, -}; -use tokio::sync::mpsc; -use tui::{ - backend::CrosstermBackend, - layout::{Alignment, Constraint, Direction, Layout, Rect}, - style::{Color, Modifier, Style}, - text::{Span, Spans}, - widgets::{Block, Borders, Paragraph, Tabs}, - Frame, - Terminal, +use tact::{Actor, ActorContext, Do, Interval, Recipient, Task}; +use tari_launchpad_protocol::launchpad::{Action, LaunchpadAction, Reaction}; +use tari_sdm_launchpad::bus::{BusTx, LaunchpadBus}; +use thiserror::Error; +use tui::{backend::CrosstermBackend, Terminal}; + +use crate::{ + component::{Component, ComponentEvent, Input, MainView}, + events::{EventHandle, TermEvent}, + state::{bus::Bus, AppState}, }; -use crate::scenes::{ - containers_scene::{Container, ContainersScene}, - wallet_scene::WalletScene, -}; +type Term = Terminal>; -#[derive(Debug, EnumCount, EnumIter, FromRepr, Clone, Copy, Display)] -pub enum Tab { - Containers, - Wallet, +#[derive(Debug, Error)] +pub enum DashboardError { + #[error("Terminal is not connected")] + Terminal, + #[error("Events thread is not started")] + Events, + #[error("The state is not set")] + State, } -impl Tab { - fn first() -> Self { - Self::Containers - } - - fn last() -> Self { - Self::Wallet - } - - fn next(&mut self) { - let repr = *self as usize; - *self = Self::from_repr(repr + 1).unwrap_or_else(Self::last); - } - - fn prev(&mut self) { - let repr = *self as usize; - if repr > 0 { - *self = Self::from_repr(repr - 1).unwrap_or_else(Self::first); - } else { - *self = Self::first(); - } - } +pub enum DashboardEvent { + Terminated, } -pub struct DashboardState { - pub state: Option, - pub selected_container: Container, - pub selected_tab: Tab, - pub show_help: bool, +pub struct Dashboard { + terminal: Option, + event_handle: Option, + main_view: MainView, + // TODO: Get the state from a bus + state: Option, + interval: Option, + supervisor: Recipient, + bus: Bus, + bus_tx: Option, + bus_deltas: Option, + changes: Option, } -impl DashboardState { - pub fn state(&self) -> Option<&LaunchpadState> { - self.state.as_ref() - } - - pub fn wallet_state(&self) -> Option<&WalletState> { - self.state().map(|state| &state.wallet) +impl Dashboard { + pub fn new(bus: Bus, supervisor: Recipient) -> Self { + Self { + terminal: None, + event_handle: None, + main_view: MainView::new(), + state: None, + interval: None, + supervisor, + bus, + bus_tx: None, + bus_deltas: None, + changes: None, + } } } -pub struct Dashboard { - terminal: Terminal>, - events: mpsc::Receiver, - dashboard_state: DashboardState, - terminating: bool, -} +#[async_trait] +impl Actor for Dashboard { + async fn initialize(&mut self, ctx: &mut ActorContext) -> Result<(), Error> { + self.init_bus(ctx)?; -impl Dashboard { - pub fn init() -> Result { - let (tx, rx) = mpsc::channel(12); - std::thread::spawn(move || -> Result<(), Error> { - loop { - let event = event::read()?; - tx.blocking_send(event)?; - } - }); + let notifier = ctx.notifier(Redraw); + let task = self.bus.changes(notifier); + self.changes = Some(task); + + let notifier = ctx.notifier(Tick); + let interval = Interval::spawn(Duration::from_millis(250), notifier); + self.interval = Some(interval); enable_raw_mode()?; let mut stdout = std::io::stdout(); execute!(stdout, EnterAlternateScreen, EnableMouseCapture)?; let backend = CrosstermBackend::new(stdout); let terminal = Terminal::new(backend)?; - let dashboard_state = DashboardState { - state: None, - selected_container: Container::BaseNode, - selected_tab: Tab::Containers, - show_help: false, - }; - Ok(Self { - terminal, - events: rx, - dashboard_state, - terminating: false, - }) + self.terminal = Some(terminal); + let addr = ctx.address().clone(); + let handle = EventHandle::new(addr); + self.event_handle = Some(handle); + + self.connect_to_bus()?; + + ctx.do_next(Redraw)?; + Ok(()) } - pub fn is_alive(&self) -> bool { - let has_active_task = self - .dashboard_state - .state - .as_ref() - .map(|state| { - state - .containers - .values() - .filter(|state| !state.permanent) - .any(|state| state.status.is_started()) - }) - .unwrap_or_default(); + async fn finalize(&mut self, _ctx: &mut ActorContext) -> Result<(), Error> { + disable_raw_mode()?; + let mut terminal = self.terminal.take().ok_or_else(|| DashboardError::Terminal)?; + execute!(terminal.backend_mut(), LeaveAlternateScreen, DisableMouseCapture)?; + terminal.show_cursor()?; + self.supervisor.send(DashboardEvent::Terminated)?; + Ok(()) + } +} + +impl Dashboard { + fn init_bus(&mut self, ctx: &ActorContext) -> Result<(), Error> { + let mut lp_bus = LaunchpadBus::start()?; + self.bus_tx = Some(lp_bus.incoming); + let recipient = ctx.recipient(); + let task = Task::spawn(async move { + while let Some(action) = lp_bus.outgoing.recv().await { + if let Err(err) = recipient.send(action) { + log::error!("Can't send an action from the bus to the dashboard: {err}"); + break; + } + } + }); + self.bus_deltas = Some(task); - !self.terminating || has_active_task + Ok(()) } - pub fn terminate(&mut self) { - self.terminating = true; + fn connect_to_bus(&mut self) -> Result<(), Error> { + log::info!("Connecting to the bus"); + let tx = self + .bus_tx + .as_mut() + .ok_or_else(|| Error::msg("Bus is not initialized"))?; + let action = Action::Action(LaunchpadAction::Connect); + tx.send(action)?; + Ok(()) } +} - pub fn process_delta(&mut self, reaction: Reaction) { - match reaction { +#[async_trait] +impl Do for Dashboard { + type Error = Error; + + async fn handle(&mut self, event: Reaction, ctx: &mut ActorContext) -> Result<(), Self::Error> { + log::trace!("Processing the event: {event:?}"); + match event { Reaction::State(state) => { - self.dashboard_state.state = Some(state); + let bus = self.bus.clone(); + let bus_tx = self + .bus_tx + .clone() + .ok_or_else(|| Error::msg("No bus sender available"))?; + self.state = Some(AppState::new(bus, bus_tx, state)); }, Reaction::Delta(delta) => { - if let Some(state) = self.dashboard_state.state.as_mut() { - state.apply(delta); + if let Some(state) = self.state.as_mut() { + state.state.apply(delta); } }, } + ctx.do_next(Redraw)?; + Ok(()) } +} - pub async fn next_event(&mut self) -> Option { - self.events.recv().await - } - - pub fn process_key(&mut self, key: KeyCode) -> Option { - match key { - KeyCode::Up | KeyCode::Char('k') => { - self.dashboard_state.selected_container.prev(); - }, - KeyCode::Down | KeyCode::Char('j') => { - self.dashboard_state.selected_container.next(); - }, - KeyCode::Left | KeyCode::Char('h') => { - self.dashboard_state.selected_tab.prev(); - }, - KeyCode::Right | KeyCode::Char('l') => { - self.dashboard_state.selected_tab.next(); - }, - KeyCode::Esc | KeyCode::Tab => { - self.dashboard_state.show_help = !self.dashboard_state.show_help; - }, - KeyCode::Char('s') => { - if let Some(state) = self.dashboard_state.state() { - let mut session = state.config.session.clone(); - session.all_active = !session.all_active; - return Some(session); +#[async_trait] +impl Do for Dashboard { + type Error = Error; + + async fn handle(&mut self, event: TermEvent, ctx: &mut ActorContext) -> Result<(), Self::Error> { + match event { + TermEvent::Event(event) => { + if let Event::Key(key) = event { + if let KeyCode::Char('q') = key.code { + self.event_handle + .as_mut() + .ok_or_else(|| DashboardError::Events)? + .interrupt(); + } + let state = self.state.as_mut().ok_or_else(|| DashboardError::State)?; + self.main_view.on_event(key.into(), state); + let changed = state.process_events(); + if changed { + ctx.do_next(Redraw)?; + } } + ctx.do_next(Redraw)?; }, - KeyCode::Char('q') => { - if let Some(state) = self.dashboard_state.state() { - let mut session = state.config.session.clone(); - session.stop_all(); - return Some(session); - } + TermEvent::End => { + ctx.shutdown(); }, - KeyCode::Char(' ') => { - if let Some(state) = self.dashboard_state.state() { - let session = &state.config.session; - let container = self.dashboard_state.selected_container; - return Some(toggle_flag(session, container)); - } - }, - _ => {}, } - None - } - - pub fn uninit(&mut self) -> Result<(), Error> { - disable_raw_mode()?; - execute!(self.terminal.backend_mut(), LeaveAlternateScreen, DisableMouseCapture)?; - self.terminal.show_cursor()?; - Ok(()) - } - - pub fn render(&mut self) -> Result<(), Error> { - self.terminal.draw(|f| { - let mut render = Render { - f, - dashboard_state: &self.dashboard_state, - }; - render.render(); - })?; Ok(()) } } -struct Render<'a, 'b> { - f: &'a mut Frame<'b, CrosstermBackend>, - dashboard_state: &'a DashboardState, -} - -impl<'a, 'b> Render<'a, 'b> { - fn render(&mut self) { - let rect = self.render_tabs(); - if self.dashboard_state.show_help { - self.render_help(rect); - } else { - match self.dashboard_state.selected_tab { - Tab::Containers => { - let mut scene = ContainersScene { - f: self.f, - dashboard_state: self.dashboard_state, - }; - scene.render(rect); - }, - Tab::Wallet => { - let mut scene = WalletScene { - f: self.f, - dashboard_state: self.dashboard_state, - }; - scene.render(rect); - }, - } - } - } - - fn render_help(&mut self, rect: Rect) { - let chunks = Layout::default() - .direction(Direction::Vertical) - .margin(5) - .constraints([Constraint::Percentage(100)].as_ref()) - .split(rect); +#[derive(Debug, Clone)] +struct Tick; - let text = vec![Spans::from("S - Start/Stop containers")]; +#[async_trait] +impl Do for Dashboard { + type Error = Error; - let block = Block::default() - .borders(Borders::ALL) - .style(Style::default().bg(Color::White).fg(Color::Black)) - .title(Span::styled("Help", Style::default().add_modifier(Modifier::BOLD))); - let paragraph = Paragraph::new(text.clone()) - .style(Style::default().bg(Color::White).fg(Color::Black)) - .block(block) - .alignment(Alignment::Left); - self.f.render_widget(paragraph, chunks[0]); + async fn handle(&mut self, _event: Tick, ctx: &mut ActorContext) -> Result<(), Self::Error> { + let state = self.state.as_mut().ok_or_else(|| DashboardError::State)?; + self.main_view.on_event(ComponentEvent::Tick, state); + let changed = state.process_events(); + if changed { + ctx.do_next(Redraw)?; + } + Ok(()) } +} - fn render_tabs(&mut self) -> Rect { - let main_chunks = Layout::default() - .direction(Direction::Vertical) - .constraints([Constraint::Length(3), Constraint::Min(0)].as_ref()) - .split(self.f.size()); +#[derive(Debug, Clone)] +struct Redraw; - let titles = Tab::iter() - .map(|s| Spans::from(vec![Span::raw(s.to_string())])) - .collect(); - let tabs = Tabs::new(titles) - .block(Block::default().borders(Borders::ALL).title("Tabs")) - .select(self.dashboard_state.selected_tab as usize) - .style(Style::default().fg(Color::Cyan)) - .highlight_style(Style::default().add_modifier(Modifier::BOLD).bg(Color::Black)); - self.f.render_widget(tabs, main_chunks[0]); - main_chunks[1] - } -} +#[async_trait] +impl Do for Dashboard { + type Error = Error; -fn toggle_flag(session: &LaunchpadSession, id: Container) -> LaunchpadSession { - let mut session = session.clone(); - use Container::*; - match id { - Tor => { - session.tor_active = !session.tor_active; - }, - BaseNode => { - session.base_node_active = !session.base_node_active; - }, - Wallet => { - session.wallet_active = !session.wallet_active; - }, - Miner => { - session.miner_active = !session.miner_active; - }, - MmProxy => { - session.mmproxy_active = !session.mmproxy_active; - }, - Monerod => { - session.monerod_active = !session.monerod_active; - }, - XMRig => { - session.xmrig_active = !session.xmrig_active; - }, - Grafana => { - session.grafana_active = !session.grafana_active; - }, - Loki => { - session.loki_active = !session.loki_active; - }, - Promtail => { - session.promtail_active = !session.promtail_active; - }, + async fn handle(&mut self, _event: Redraw, _ctx: &mut ActorContext) -> Result<(), Self::Error> { + let state = self.state.as_ref().ok_or_else(|| DashboardError::State)?; + let terminal = self.terminal.as_mut().ok_or_else(|| DashboardError::Terminal)?; + terminal.draw(|f| { + self.main_view.draw(f, f.size(), state); + })?; + Ok(()) } - session } diff --git a/cli/src/events.rs b/cli/src/events.rs new file mode 100644 index 00000000..75236d1c --- /dev/null +++ b/cli/src/events.rs @@ -0,0 +1,53 @@ +use std::{ + sync::{ + atomic::{AtomicBool, Ordering}, + Arc, + }, + thread::JoinHandle, + time::Duration, +}; + +use anyhow::Error; +use crossterm::event::{poll, read, Event}; +use tact::Address; + +use crate::dashboard::Dashboard; + +pub enum TermEvent { + Event(Event), + End, +} + +pub struct EventHandle { + _handle: JoinHandle>, + interrupted: Arc, +} + +impl EventHandle { + pub fn new(addr: Address) -> Self { + let interrupted = Arc::new(AtomicBool::new(false)); + let handle = std::thread::spawn({ + let interrupted = interrupted.clone(); + move || -> Result<(), Error> { + while !interrupted.load(Ordering::Relaxed) { + let duration = Duration::from_millis(200); + let has_event = poll(duration)?; + if has_event { + let event = read()?; + addr.send(TermEvent::Event(event))?; + } + } + addr.send(TermEvent::End)?; + Ok(()) + } + }); + Self { + _handle: handle, + interrupted, + } + } + + pub fn interrupt(&mut self) { + self.interrupted.store(true, Ordering::Relaxed); + } +} diff --git a/cli/src/lib.rs b/cli/src/lib.rs new file mode 100644 index 00000000..be79f8cd --- /dev/null +++ b/cli/src/lib.rs @@ -0,0 +1,7 @@ +mod dashboard; +mod events; +mod onboarding; +mod state; +pub mod supervisor; + +mod component; diff --git a/cli/src/main.rs b/cli/src/main.rs index c9925cb6..3fc97dad 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -1,12 +1,8 @@ -mod app; -mod dashboard; -mod scenes; - use std::env; use anyhow::{Context, Error}; -use app::App; -use dashboard::Dashboard; +use tact::Actor; +use tari_lp_cli::supervisor::Supervisor; use tari_sdm_assets::configurator::Configurator; #[tokio::main] @@ -20,7 +16,8 @@ async fn main() -> Result<(), Error> { log4rs::init_file("config/log4rs-cli.yml", Default::default()).context("Can't read a logs configuration file")?; - let mut app = App::init()?; - app.routine().await?; + let supervisor = Supervisor::default(); + let mut addr = supervisor.start(); + addr.join().await?; Ok(()) } diff --git a/cli/src/onboarding.rs b/cli/src/onboarding.rs new file mode 100644 index 00000000..33d8d68b --- /dev/null +++ b/cli/src/onboarding.rs @@ -0,0 +1,114 @@ +use anyhow::Error; +use async_trait::async_trait; +use tact::{Actor, ActorContext, Do, Task}; + +use crate::state::{ + bus::Bus, + onboarding::{Message, OnboardingAction, OnboardingDelta}, +}; + +enum State { + Empty, + Welcome, + Description, + LetStart, + Done, +} + +impl State { + fn text(&self) -> &str { + match self { + Self::Empty => "", + Self::Welcome => MSG_1, + Self::Description => MSG_2, + Self::LetStart => MSG_3, + Self::Done => "", + } + } + + fn progress(&self) -> u8 { + match self { + Self::Empty => 0, + Self::Welcome => 10, + Self::Description => 20, + Self::LetStart => 30, + Self::Done => 100, + } + } +} + +pub struct OnboardingWorker { + bus: Bus, + actions: Option, + state: State, +} + +impl OnboardingWorker { + pub fn new(bus: Bus) -> Self { + Self { + bus, + actions: None, + state: State::Empty, + } + } +} + +#[async_trait] +impl Actor for OnboardingWorker { + async fn initialize(&mut self, ctx: &mut ActorContext) -> Result<(), Error> { + let task = self.bus.actions(ctx.recipient()); + self.actions = Some(task); + Ok(()) + } +} + +#[async_trait] +impl Do for OnboardingWorker { + type Error = Error; + + async fn handle(&mut self, event: OnboardingAction, _ctx: &mut ActorContext) -> Result<(), Self::Error> { + match event { + OnboardingAction::Next => { + self.next_step(); + }, + } + Ok(()) + } +} + +impl OnboardingWorker { + fn next_step(&mut self) { + let next = match self.state { + State::Empty => State::Welcome, + State::Welcome => State::Description, + State::Description => State::LetStart, + State::LetStart => State::Done, + State::Done => State::Done, + }; + self.state = next; + let text = self.state.text(); + let msg = Message { text: text.into() }; + let delta = OnboardingDelta::Add(msg); + self.bus.update(delta); + let progress = self.state.progress(); + let delta = OnboardingDelta::SetProgress(progress); + self.bus.update(delta); + } +} + +const MSG_1: &str = " +Hi! My name is T-Bot. It is a great pleasure and an honor to meet you! +I have no memory of human faces, so if our paths have already crossed in the Aurora app, Iā€™m glad to see you again! +"; + +const MSG_2: &str = " +I'm kind of like Gandalf, Dumbledore or Obi-Wan Kenobi. You know, the guy who makes sure the novice gets to a certain \ + destination. Spoiler alert: in this saga the guide will survive. Regardless of whether this is \ + your first contact with cryptocurrencies or you are advanced in it, I will stay with you until \ + the Tari Launchpad setup process is successfully completed. +"; + +const MSG_3: &str = " +So let's get started! šŸš€ The setup process usually takes 5 to 10 minutes. A duo like you and me should be able to deal \ + with it quickly, right? +"; diff --git a/cli/src/scenes/containers_scene.rs b/cli/src/scenes/containers_scene.rs deleted file mode 100644 index 7f70883d..00000000 --- a/cli/src/scenes/containers_scene.rs +++ /dev/null @@ -1,198 +0,0 @@ -use std::io::Stdout; - -use strum::{Display, EnumCount, EnumIter, FromRepr, IntoEnumIterator}; -use tari_launchpad_protocol::{container::TaskState, session::LaunchpadSession}; -use tari_sdm::ids::{ManagedTask, TaskId}; -use tari_sdm_launchpad::resources::images; -use tui::{ - backend::CrosstermBackend, - layout::{Constraint, Direction, Layout, Rect}, - widgets::{Block, Borders, List, ListItem, Paragraph, Row, Table, Wrap}, - Frame, -}; - -use crate::dashboard::DashboardState; - -pub struct ContainersScene<'a, 'b> { - pub f: &'a mut Frame<'b, CrosstermBackend>, - pub dashboard_state: &'a DashboardState, -} - -impl<'a, 'b> ContainersScene<'a, 'b> { - pub fn render(&mut self, size: Rect) { - let mut rows = Vec::new(); - let mut logs = Vec::new(); - let mut selected_container = None; - if let Some(app_state) = self.dashboard_state.state.as_ref() { - for container in Container::iter() { - let id = container.id(); - let selected = container == self.dashboard_state.selected_container; - let prefix = if selected { "> " } else { "" }; - let name = format!("{}{}", prefix, container); - - if let Some(state) = app_state.containers.get(&id) { - let status = format!("{:?}", state.status); - let is_active = get_flag(&app_state.config.session, container); - let value = (if is_active { "+" } else { "-" }).to_string(); - let row = Row::new(vec![name, status, value]); - rows.push(row); - if selected { - for line in state.tail.iter().rev() { - let item = ListItem::new(line.to_string()); - logs.push(item); - } - selected_container = Some(state); - } - } else { - let row = Row::new(vec![name, "...".to_string(), "-".to_string()]); - rows.push(row); - } - } - } - - let vchunks = Layout::default() - .direction(Direction::Vertical) - .constraints([Constraint::Percentage(60), Constraint::Percentage(40)].as_ref()) - .split(size); - - let top_row = Layout::default() - .direction(Direction::Horizontal) - .constraints([Constraint::Percentage(60), Constraint::Percentage(40)].as_ref()) - .split(vchunks[0]); - - self.render_containers(top_row[0], rows); - self.render_stats(top_row[1], selected_container); - self.render_logs(vchunks[1], logs); - } - - fn render_stats(&mut self, size: Rect, state: Option<&TaskState>) { - let vertical = Layout::default() - .direction(Direction::Vertical) - .constraints([Constraint::Percentage(50), Constraint::Percentage(50)].as_ref()) - .split(size); - - let block = Block::default().title("Stats").borders(Borders::ALL); - if let Some(state) = state { - let mut rows = Vec::new(); - if let Some(stat_data) = state.stats.last() { - rows.push(Row::new(vec!["Timestamp".to_string(), stat_data.timestamp.to_string()])); - let cpu_usage = state.stats.last_cpu().unwrap_or_default(); - rows.push(Row::new(vec!["CPU usage".to_string(), format!("{:.2} %", cpu_usage)])); - rows.push(Row::new(vec![ - "Mem limit".to_string(), - stat_data.mem_limit.get_appropriate_unit(false).to_string(), - ])); - rows.push(Row::new(vec![ - "Mem usage".to_string(), - stat_data.mem_usage.get_appropriate_unit(false).to_string(), - ])); - rows.push(Row::new(vec![ - "Mem usage, %".to_string(), - format!("{:.2} %", stat_data.get_mem_pct()), - ])); - } - let table = Table::new(rows) - .block(block) - .header(Row::new(vec!["Metric", "Value"])) - .widths(&[Constraint::Percentage(40), Constraint::Percentage(60)]); - self.f.render_widget(table, vertical[0]); - } else { - self.f.render_widget(block, vertical[0]); - } - let block = Block::default().title("Fails").borders(Borders::ALL); - let mut text = String::new(); - if let Some(err) = state.as_ref().and_then(|state| state.fails.last()) { - text.push_str(err); - } - let paragraph = Paragraph::new(text).wrap(Wrap { trim: true }).block(block); - self.f.render_widget(paragraph, vertical[1]); - } - - fn render_logs(&mut self, size: Rect, logs: Vec>) { - let block = Block::default().title("Logs").borders(Borders::ALL); - let list = List::new(logs).block(block); - self.f.render_widget(list, size); - } - - fn render_containers(&mut self, size: Rect, rows: Vec>) { - let block = Block::default().title("Containers").borders(Borders::ALL); - let table = Table::new(rows) - .block(block) - .header(Row::new(vec!["Container", "State", "Active"])) - .widths(&[ - Constraint::Percentage(30), - Constraint::Percentage(50), - Constraint::Percentage(20), - ]); - self.f.render_widget(table, size); - } -} - -fn get_flag(session: &LaunchpadSession, id: Container) -> bool { - use Container::*; - match id { - Tor => session.is_tor_active(), - BaseNode => session.is_base_node_active(), - Wallet => session.is_wallet_active(), - Miner => session.is_miner_active(), - MmProxy => session.is_mmproxy_active(), - Monerod => session.is_monerod_active(), - XMRig => session.is_xmrig_active(), - Grafana => session.is_grafana_active(), - Loki => session.is_loki_active(), - Promtail => session.is_promtail_active(), - } -} - -#[derive(Debug, EnumCount, EnumIter, FromRepr, Clone, Copy, Display, PartialEq, Eq)] -pub enum Container { - Tor, - BaseNode, - Wallet, - Miner, - MmProxy, - Monerod, - XMRig, - Grafana, - Loki, - Promtail, -} - -impl Container { - fn id(self) -> TaskId { - match self { - Self::Tor => images::Tor::id(), - Self::BaseNode => images::TariBaseNode::id(), - Self::Wallet => images::TariWallet::id(), - Self::Miner => images::TariSha3Miner::id(), - Self::MmProxy => images::MmProxy::id(), - Self::Monerod => images::Monerod::id(), - Self::XMRig => images::XMRig::id(), - Self::Grafana => images::Grafana::id(), - Self::Loki => images::Loki::id(), - Self::Promtail => images::Promtail::id(), - } - } - - fn first() -> Self { - Self::Tor - } - - fn last() -> Self { - Self::Promtail - } - - pub fn next(&mut self) { - let repr = *self as usize; - *self = Self::from_repr(repr + 1).unwrap_or_else(Self::last); - } - - pub fn prev(&mut self) { - let repr = *self as usize; - if repr > 0 { - *self = Self::from_repr(repr - 1).unwrap_or_else(Self::first); - } else { - *self = Self::first(); - } - } -} diff --git a/cli/src/scenes/mod.rs b/cli/src/scenes/mod.rs deleted file mode 100644 index 0eb3ca35..00000000 --- a/cli/src/scenes/mod.rs +++ /dev/null @@ -1,2 +0,0 @@ -pub mod containers_scene; -pub mod wallet_scene; diff --git a/cli/src/scenes/wallet_scene.rs b/cli/src/scenes/wallet_scene.rs deleted file mode 100644 index d3f81988..00000000 --- a/cli/src/scenes/wallet_scene.rs +++ /dev/null @@ -1,73 +0,0 @@ -use std::io::Stdout; - -use tui::{ - backend::CrosstermBackend, - layout::{Constraint, Direction, Layout, Rect}, - widgets::{Block, Borders, List, ListItem, Paragraph, Row, Table}, - Frame, -}; - -use crate::dashboard::DashboardState; - -pub struct WalletScene<'a, 'b> { - pub f: &'a mut Frame<'b, CrosstermBackend>, - pub dashboard_state: &'a DashboardState, -} - -impl<'a, 'b> WalletScene<'a, 'b> { - pub fn render(&mut self, size: Rect) { - let wallet_active = self - .dashboard_state - .wallet_state() - .map(|w| w.active) - .unwrap_or_default(); - - // TODO: Allow controls to transfer funds - - let vchunks = Layout::default() - .direction(Direction::Vertical) - .constraints([Constraint::Percentage(60), Constraint::Percentage(40)].as_ref()) - .split(size); - let block = Block::default().title("Stats").borders(Borders::ALL); - let list = List::new(vec![]).block(block); - self.f.render_widget(list, vchunks[0]); - - let mut rows = Vec::new(); - let mut logs = Vec::new(); - if let Some(app_state) = self.dashboard_state.state.as_ref() { - if let Some(balance) = app_state.wallet.balance.as_ref() { - let available = Row::new(vec!["Available".to_string(), balance.available.to_string()]); - rows.push(available); - let incoming = Row::new(vec!["Incoming".to_string(), balance.pending_incoming.to_string()]); - rows.push(incoming); - let outgoing = Row::new(vec!["Outgoing".to_string(), balance.pending_outgoing.to_string()]); - rows.push(outgoing); - } - for wt in &app_state.wallet.transactions { - let data = format!("{:?}", wt); - let item = ListItem::new(data); - logs.push(item); - } - } - - let block = Block::default().title("Wallet").borders(Borders::ALL); - if wallet_active { - if rows.is_empty() { - let pg = Paragraph::new("Balance is not loaded.").block(block); - self.f.render_widget(pg, vchunks[0]); - } else { - let table = Table::new(rows) - .block(block) - .widths(&[Constraint::Percentage(50), Constraint::Percentage(50)]); - self.f.render_widget(table, vchunks[0]); - } - } else { - let pg = Paragraph::new("Wallet is not connected yet.").block(block); - self.f.render_widget(pg, vchunks[0]); - } - - let block = Block::default().title("Transactions").borders(Borders::ALL); - let list = List::new(logs).block(block); - self.f.render_widget(list, vchunks[1]); - } -} diff --git a/cli/src/state/bus.rs b/cli/src/state/bus.rs new file mode 100644 index 00000000..44feeb13 --- /dev/null +++ b/cli/src/state/bus.rs @@ -0,0 +1,68 @@ +use std::sync::Arc; + +use tact::{Notifier, Recipient, Task}; +use tokio::sync::{broadcast, watch, watch::Ref}; + +use super::onboarding::{Onboarding, OnboardingAction, OnboardingDelta}; + +#[derive(Debug, Clone)] +pub struct Bus { + state: Arc>, + actions: broadcast::Sender, +} + +impl Bus { + pub fn new() -> Self { + let state = Onboarding::default(); + let (state_tx, _state_rx) = watch::channel(state); + let (actions_tx, _actions_rx) = broadcast::channel(64); + Self { + state: Arc::new(state_tx), + actions: actions_tx, + } + } + + pub fn state(&self) -> Ref<'_, Onboarding> { + self.state.borrow() + } + + pub fn send(&mut self, action: M) + where OnboardingAction: From { + self.actions.send(action.into()).ok(); + } + + pub fn update(&mut self, delta: M) + where OnboardingDelta: From { + self.state.send_modify(move |state| state.update(delta.into())); + } + + pub fn changes(&mut self, notifier: Notifier) -> Task + where M: Clone + Send + 'static { + let mut rx = self.state.subscribe(); + Task::spawn(async move { + while rx.changed().await.is_ok() { + if let Err(_err) = notifier.notify() { + break; + } + } + }) + } + + pub fn actions(&mut self, recipient: Recipient) -> Task + where + Option: From, + M: 'static, + { + let mut rx = self.actions.subscribe(); + Task::spawn(async move { + while let Ok(msg) = rx.recv().await { + if let Some(event) = msg.into() { + if let Err(_err) = recipient.send(event) { + // TODO: log error + break; + } + } + } + }) + } +} diff --git a/cli/src/state/focus.rs b/cli/src/state/focus.rs new file mode 100644 index 00000000..40062f6d --- /dev/null +++ b/cli/src/state/focus.rs @@ -0,0 +1,15 @@ +#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct Focus(&'static str); + +macro_rules! focus { + () => {{ + Focus(concat!(file!(), line!())) + }}; +} + +pub static ONBOARDING: Focus = focus!(); +pub static ROOT: Focus = focus!(); +pub static TARI_MINING: Focus = focus!(); +pub static MERGED_MINING: Focus = focus!(); +pub static BASE_NODE: Focus = focus!(); +pub static PASSWORD: Focus = focus!(); diff --git a/cli/src/state/mod.rs b/cli/src/state/mod.rs new file mode 100644 index 00000000..995efbd9 --- /dev/null +++ b/cli/src/state/mod.rs @@ -0,0 +1,76 @@ +pub mod bus; +pub mod focus; +pub mod onboarding; + +use std::collections::VecDeque; + +pub use focus::Focus; +use tari_launchpad_protocol::launchpad::{Action, LaunchpadAction, LaunchpadState}; +use tari_sdm_launchpad::bus::BusTx; + +use crate::state::bus::Bus; + +pub enum AppEvent { + SetFocus(Focus), + UpdateState, + Redraw, +} + +pub struct AppState { + pub focus_on: Focus, + pub events_queue: VecDeque, + pub bus: Bus, + pub bus_tx: BusTx, + pub state: LaunchpadState, +} + +impl AppState { + pub fn new(bus: Bus, bus_tx: BusTx, state: LaunchpadState) -> Self { + Self { + focus_on: focus::ROOT, + events_queue: VecDeque::new(), + bus, + bus_tx, + state, + } + } + + pub fn focus_on(&mut self, value: Focus) { + let event = AppEvent::SetFocus(value); + self.events_queue.push_front(event); + } + + pub fn redraw(&mut self) { + let event = AppEvent::Redraw; + self.events_queue.push_front(event); + } + + pub fn update_state(&mut self) { + let event = AppEvent::UpdateState; + self.events_queue.push_front(event); + } + + pub fn process_events(&mut self) -> bool { + if self.events_queue.is_empty() { + false + } else { + for event in self.events_queue.drain(..) { + match event { + AppEvent::SetFocus(value) => { + self.focus_on = value; + }, + AppEvent::UpdateState => { + let new_session = self.state.config.session.clone(); + let event = LaunchpadAction::ChangeSession(new_session); + let action = Action::Action(event); + if let Err(err) = self.bus_tx.send(action) { + log::error!("Can't update the state: {err}"); + } + }, + AppEvent::Redraw => {}, + } + } + true + } + } +} diff --git a/cli/src/state/onboarding.rs b/cli/src/state/onboarding.rs new file mode 100644 index 00000000..a459e5d6 --- /dev/null +++ b/cli/src/state/onboarding.rs @@ -0,0 +1,66 @@ +#[derive(Debug, Clone)] +pub struct Progress { + pub activity: Option, + pub pct: u8, +} + +impl Progress { + pub fn new() -> Self { + Self { activity: None, pct: 0 } + } +} + +#[derive(Debug, Clone)] +pub struct Message { + pub text: String, +} + +#[derive(Debug, Clone)] +pub struct Onboarding { + pub history: Vec, + pub message: Option, + pub total_progress: Progress, + pub local_progress: Option, +} + +impl Onboarding { + pub fn update(&mut self, delta: OnboardingDelta) { + match delta { + OnboardingDelta::Add(msg) => { + if let Some(message) = self.message.take() { + self.history.push(message); + } + self.message = Some(msg); + }, + OnboardingDelta::SetProgress(pct) => { + self.total_progress.pct = pct; + }, + } + } + + pub fn is_done(&self) -> bool { + self.total_progress.pct == 100 + } +} + +impl Default for Onboarding { + fn default() -> Self { + Self { + history: Vec::new(), + message: None, + total_progress: Progress::new(), + local_progress: None, + } + } +} + +#[derive(Debug, Clone)] +pub enum OnboardingAction { + Next, +} + +#[derive(Debug, Clone)] +pub enum OnboardingDelta { + Add(Message), + SetProgress(u8), +} diff --git a/cli/src/supervisor.rs b/cli/src/supervisor.rs new file mode 100644 index 00000000..8cc7eb76 --- /dev/null +++ b/cli/src/supervisor.rs @@ -0,0 +1,46 @@ +use anyhow::Error; +use async_trait::async_trait; +use tact::{Actor, ActorContext, Address, Do}; + +use crate::{ + dashboard::{Dashboard, DashboardEvent}, + onboarding::OnboardingWorker, + state::bus::Bus, +}; + +#[derive(Default)] +pub struct Supervisor { + dashboard: Option>, + onboarding: Option>, + bus: Option, +} + +#[async_trait] +impl Actor for Supervisor { + async fn initialize(&mut self, ctx: &mut ActorContext) -> Result<(), Error> { + let bus = Bus::new(); + let dashboard = Dashboard::new(bus.clone(), ctx.recipient()); + let addr = dashboard.start(); + self.dashboard = Some(addr); + let onboarding = OnboardingWorker::new(bus.clone()); + let addr = onboarding.start(); + self.onboarding = Some(addr); + self.bus = Some(bus); + Ok(()) + } +} + +#[async_trait] +impl Do for Supervisor { + type Error = Error; + + async fn handle(&mut self, event: DashboardEvent, ctx: &mut ActorContext) -> Result<(), Self::Error> { + match event { + DashboardEvent::Terminated => { + self.dashboard.take(); + ctx.shutdown(); + }, + } + Ok(()) + } +} diff --git a/libs/protocol/Cargo.toml b/libs/protocol/Cargo.toml index b4da52f8..c2ce3291 100644 --- a/libs/protocol/Cargo.toml +++ b/libs/protocol/Cargo.toml @@ -7,12 +7,12 @@ repository = "https://github.com/tari-project/tari-launchpad" edition = "2021" [dependencies] -tari_utilities = { git = "https://github.com/tari-project/tari_utilities.git", tag = "v0.4.7" } +tari_utilities = { git = "https://github.com/tari-project/tari_utilities.git", tag = "v0.4.10" } -anyhow = "1.0.70" +anyhow = "1.0.72" byte-unit = { version = "4.0.19", features = ["serde"] } derive_more = "0.99.17" -serde = "1.0.159" -strum = { version = "0.24.1", features = ["derive"] } -thiserror = "1.0.40" -chrono = "0.4.24" +serde = "1" +strum = { version = "0.25.0", features = ["derive"] } +thiserror = "1.0.44" +chrono = { version = "0.4.26", features = ["serde"] } diff --git a/libs/protocol/src/settings.rs b/libs/protocol/src/settings.rs index 90714bb9..9a659f4b 100644 --- a/libs/protocol/src/settings.rs +++ b/libs/protocol/src/settings.rs @@ -24,7 +24,6 @@ use std::path::PathBuf; use serde::{Deserialize, Serialize}; -use tari_utilities::Hidden; use thiserror::Error; pub const DEFAULT_MONEROD_URL: &str = "http://stagenet.xmr-tw.org:38081,\ @@ -39,7 +38,7 @@ pub struct BaseNodeConfig {} #[derive(Debug, Serialize, Deserialize, Clone)] pub struct WalletConfig { /// The password to de/en-crypt the wallet database - pub password: Hidden, + pub password: String, } #[derive(Default, Debug, Serialize, Deserialize, Clone)] @@ -62,7 +61,7 @@ pub struct MmProxyConfig { pub monero_username: String, /// If required, the password needed to access the monero deamon // #[serde(skip_serializing)] - pub monero_password: Hidden, + pub monero_password: String, /// If true, provide the monero username and password to the daemon. Otherwise those strings are ignored. pub monero_use_auth: bool, } @@ -72,7 +71,7 @@ impl Default for MmProxyConfig { MmProxyConfig { monerod_url: DEFAULT_MONEROD_URL.to_string(), monero_username: String::new(), - monero_password: Hidden::from(String::new()), + monero_password: String::new(), monero_use_auth: false, } } @@ -99,7 +98,7 @@ pub struct LaunchpadSettings { /// The Tari network to use. Default = esmeralda pub tari_network: TariNetwork, /// The tor control password to share among containers. - pub tor_control_password: Hidden, + pub tor_control_password: String, /// Whether to spin up a base node or not, with /// the given configuration. Usually you want this. pub base_node: Option, @@ -135,7 +134,7 @@ impl Default for LaunchpadSettings { Self { data_directory: PathBuf::default(), tari_network: TariNetwork::Esmeralda, - tor_control_password: Hidden::from(String::new()), + tor_control_password: String::new(), base_node: None, wallet: None, sha3_miner: None, diff --git a/libs/protocol/src/wallet.rs b/libs/protocol/src/wallet.rs index 2929a45d..a5c7db73 100644 --- a/libs/protocol/src/wallet.rs +++ b/libs/protocol/src/wallet.rs @@ -85,8 +85,8 @@ pub enum WalletDelta { pub struct WalletTransaction { pub event: String, pub tx_id: String, - pub source_pk: Vec, - pub dest_pk: Vec, + // pub source_pk: Vec, + // pub dest_pk: Vec, pub status: String, pub direction: String, pub amount: u64, diff --git a/libs/sdm-assets/Cargo.toml b/libs/sdm-assets/Cargo.toml index df3e6b2b..8b2ff8c8 100644 --- a/libs/sdm-assets/Cargo.toml +++ b/libs/sdm-assets/Cargo.toml @@ -7,6 +7,6 @@ license = "BSD-3-Clause" repository = "https://github.com/tari-project/tari-launchpad" [dependencies] -anyhow = "1.0.70" +anyhow = "1.0.72" dirs-next = "2.0.0" -tokio = { version = "1.27.0", features = ["fs"] } +tokio = { version = "1.29.1", features = ["fs"] } diff --git a/libs/sdm-launchpad/Cargo.toml b/libs/sdm-launchpad/Cargo.toml index b4d7105c..861bad4d 100644 --- a/libs/sdm-launchpad/Cargo.toml +++ b/libs/sdm-launchpad/Cargo.toml @@ -7,27 +7,28 @@ repository = "https://github.com/tari-project/tari-launchpad" edition = "2021" [dependencies] -tari_app_grpc = { git = "https://github.com/tari-project/tari", tag = "v0.38.7" } -tari_base_node_grpc_client = { git = "https://github.com/tari-project/tari", tag = "v0.38.7" } -tari_common_types = { git = "https://github.com/tari-project/tari", tag = "v0.38.7" } +tari_base_node = { git = "https://github.com/tari-project/tari", tag = "v0.51.0-pre.4" } +tari_app_grpc = { git = "https://github.com/tari-project/tari", tag = "v0.51.0-pre.4" } +tari_base_node_grpc_client = { git = "https://github.com/tari-project/tari", tag = "v0.51.0-pre.4" } +tari_common_types = { git = "https://github.com/tari-project/tari", tag = "v0.51.0-pre.4" } tari_launchpad_protocol = { path = "../protocol" } tari_sdm_assets = { path = "../sdm-assets" } tari_sdm = { path = "../sdm" } -tari_wallet_grpc_client = { git = "https://github.com/tari-project/tari", tag = "v0.38.7" } -tari_utilities = { git = "https://github.com/tari-project/tari_utilities.git", tag = "v0.4.7" } -openssl = { version = "0.10", features = ["vendored"] } +tari_wallet_grpc_client = { git = "https://github.com/tari-project/tari", tag = "v0.51.0-pre.4" } +tari_utilities = "0.4.10" +openssl = { version = "0.10.55", features = ["vendored"] } -anyhow = "1.0.70" -async-trait = "0.1.68" +anyhow = "1.0.72" +async-trait = "0.1.72" futures = "0.3.28" -log = "0.4.17" +log = "0.4.19" rand = "0.8.5" -regex = "1.7.3" -serde = "1.0.159" -serde_json = "1.0.95" -tauri = { version = "1.2.4", features = ["api-all"], optional = true } -thiserror = "1.0.40" +regex = "1.9.1" +serde = "=1.0.167" +serde_json = "1.0.103" +tauri = { version = "=1.2.5", features = ["api-all", "cli", "macos-private-api"], optional = true } +thiserror = "1.0.44" tor-hash-passwd = "1.0.1" -tokio = "1.27.0" -toml = "0.7.3" -tonic = "0.6.2" +tokio = "1.29.1" +toml = "0.7.6" +tonic = "0.9.2" diff --git a/libs/sdm-launchpad/src/bus.rs b/libs/sdm-launchpad/src/bus.rs index 0f1e8eb2..d7224ea8 100644 --- a/libs/sdm-launchpad/src/bus.rs +++ b/libs/sdm-launchpad/src/bus.rs @@ -41,6 +41,9 @@ use crate::{ wallet_grpc::WalletGrpc, }; +pub type BusTx = mpsc::UnboundedSender; +pub type BusRx = mpsc::UnboundedReceiver; + pub struct LaunchpadBus { // pub handle: JoinHandle<()>, pub incoming: mpsc::UnboundedSender, @@ -70,6 +73,7 @@ pub struct LaunchpadWorker { } impl LaunchpadWorker { + // TODO: Convert it to an actor #[tokio::main] async fn create_and_run( in_rx: mpsc::UnboundedReceiver, @@ -124,12 +128,12 @@ impl LaunchpadWorker { let data_directory = configurator.base_path().clone(); configurator.init_configuration().await?; let wallet_config = WalletConfig { - password: "123".to_string().into(), + password: "123".to_string(), }; let config = LaunchpadSettings { data_directory, with_monitoring: true, - tor_control_password: "tari".to_string().into(), // create_password(16).into(), + tor_control_password: "tari".to_string(), // create_password(16).into(), wallet: Some(wallet_config), ..Default::default() }; diff --git a/libs/sdm-launchpad/src/resources/config.rs b/libs/sdm-launchpad/src/resources/config.rs index 10c8a6c7..3d409d9a 100644 --- a/libs/sdm-launchpad/src/resources/config.rs +++ b/libs/sdm-launchpad/src/resources/config.rs @@ -33,7 +33,7 @@ pub use tari_launchpad_protocol::{ settings::{LaunchpadSettings, TariNetwork, WalletConfig}, }; use tari_sdm::{config::ManagedProtocol, image::Envs}; -use tari_utilities::{ByteArray, Hidden}; +use tari_utilities::ByteArray; use tari_wallet_grpc_client::grpc::GetIdentityResponse; #[derive(Debug)] @@ -55,7 +55,7 @@ pub enum LaunchpadInnerEvent { #[serde(rename_all = "camelCase")] pub struct BaseNodeIdentity { pub public_key: Vec, - pub public_address: String, + pub public_addresses: Vec, node_id: Vec, emoji_id: String, } @@ -69,7 +69,7 @@ impl TryFrom for BaseNodeIdentity { let emoji_id = EmojiId::from_public_key(&public_key).to_string(); Ok(BaseNodeIdentity { public_key: value.public_key, - public_address: value.public_address, + public_addresses: value.public_addresses, node_id: value.node_id, emoji_id, }) @@ -104,7 +104,7 @@ impl TryFrom for WalletIdentity { #[derive(Debug)] pub struct ConnectionSettings { pub session: LaunchpadSession, - pub tor_password: Hidden, + pub tor_password: String, pub tari_network: TariNetwork, pub data_directory: PathBuf, } diff --git a/libs/sdm-launchpad/src/resources/images/l2_wallet.rs b/libs/sdm-launchpad/src/resources/images/l2_wallet.rs index 95e756c4..c77a7b05 100644 --- a/libs/sdm-launchpad/src/resources/images/l2_wallet.rs +++ b/libs/sdm-launchpad/src/resources/images/l2_wallet.rs @@ -118,12 +118,14 @@ impl ManagedContainer for TariWallet { // TODO: Add `Result` fn args(&self, args: &mut Args) { if let Some(identity) = self.identity.as_ref() { - let value = format!( - "wallet.custom_base_node={}::{}", - identity.public_key.to_hex(), - identity.public_address, - ); - args.set_pair("-p", value); + if let Some(public_address) = identity.public_addresses.get(0) { + let value = format!( + "wallet.custom_base_node={}::{}", + identity.public_key.to_hex(), + public_address, + ); + args.set_pair("-p", value); + } } else { panic!("BASE NODE NOT SET"); } diff --git a/libs/sdm-launchpad/src/tauri.rs b/libs/sdm-launchpad/src/tauri.rs index 2b731b69..fb918c96 100644 --- a/libs/sdm-launchpad/src/tauri.rs +++ b/libs/sdm-launchpad/src/tauri.rs @@ -27,7 +27,7 @@ use tauri::{App, Manager, Wry}; use crate::bus::LaunchpadBus; -pub fn bus_setup(app: &mut App) -> Result<(), Box> { +pub fn bus_setup(app: &App) -> Result<(), Box> { let handle = app.handle(); let bus = LaunchpadBus::start()?; diff --git a/libs/sdm-launchpad/src/wallet_grpc.rs b/libs/sdm-launchpad/src/wallet_grpc.rs index 9cb73668..a2fd70d2 100644 --- a/libs/sdm-launchpad/src/wallet_grpc.rs +++ b/libs/sdm-launchpad/src/wallet_grpc.rs @@ -133,8 +133,8 @@ impl WalletGrpcWorker { let wt = WalletTransaction { event: value.event, tx_id: value.tx_id, - source_pk: value.source_pk, - dest_pk: value.dest_pk, + // source_pk: value.source_pk, + // dest_pk: value.dest_pk, status: value.status, direction: value.direction, amount: value.amount, diff --git a/libs/sdm/Cargo.toml b/libs/sdm/Cargo.toml index fb957acd..c45a036c 100644 --- a/libs/sdm/Cargo.toml +++ b/libs/sdm/Cargo.toml @@ -10,13 +10,13 @@ edition = "2021" [dependencies] tari_launchpad_protocol = { path = "../protocol" } -anyhow = "1.0.70" -async-trait = "0.1.68" +anyhow = "1.0.72" +async-trait = "0.1.72" bollard = "0.14.0" derive_more = "0.99.17" futures = "0.3.28" -log = "0.4.17" -thiserror = "1.0.40" -tokio = { version = "1.27.0", features = ["macros"] } -tokio-stream = { version = "0.1.12", features = ["sync"] } -chrono = "0.4.24" +log = "0.4.19" +thiserror = "1.0.44" +tokio = { version = "1.29.1", features = ["macros"] } +tokio-stream = { version = "0.1.14", features = ["sync"] } +chrono = "0.4.26" diff --git a/libs/sdm/src/image/mod.rs b/libs/sdm/src/image/mod.rs index 329f7dcb..6af5a53f 100644 --- a/libs/sdm/src/image/mod.rs +++ b/libs/sdm/src/image/mod.rs @@ -36,7 +36,7 @@ pub trait ManagedContainer: fmt::Debug + Send + 'static { type Protocol: ManagedProtocol; fn checker(&mut self) -> Box> { - Box::new(ReadyIfStarted::default()) + Box::::default() } /// Reconfigures the task and return a flag should the container be active? diff --git a/libs/tact/Cargo.toml b/libs/tact/Cargo.toml new file mode 100644 index 00000000..0ff0cf19 --- /dev/null +++ b/libs/tact/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "tact" +description = "The tiny actors library" +version = "0.1.0" +edition = "2021" + +[dependencies] +anyhow = "1.0.71" +async-trait = "0.1.68" +derive_more = "0.99.17" +futures = "0.3.28" +log = "0.4.17" +thiserror = "1.0.40" +tokio = { version = "1.28.1", features = ["full"] } diff --git a/libs/tact/src/action.rs b/libs/tact/src/action.rs new file mode 100644 index 00000000..3e411ba1 --- /dev/null +++ b/libs/tact/src/action.rs @@ -0,0 +1,17 @@ +use anyhow::Error; +use async_trait::async_trait; + +use crate::{actor::Actor, context::ActorContext}; + +#[async_trait] +pub trait Do: Actor { + type Error: Send + Into + 'static; + + async fn handle(&mut self, action: E, ctx: &mut ActorContext) -> Result<(), Self::Error>; + + async fn fallback(&mut self, err: Self::Error, _ctx: &mut ActorContext) -> Result<(), Error> { + Err(err.into()) + } +} + +pub struct Interrupt; diff --git a/libs/tact/src/actor.rs b/libs/tact/src/actor.rs new file mode 100644 index 00000000..4202202e --- /dev/null +++ b/libs/tact/src/actor.rs @@ -0,0 +1,22 @@ +use anyhow::Error; +use async_trait::async_trait; + +use crate::{address::Address, context::ActorContext, runtime::ActorRuntime}; + +#[async_trait] +pub trait Actor: Send + Sized + 'static { + async fn initialize(&mut self, _ctx: &mut ActorContext) -> Result<(), Error> { + Ok(()) + } + + async fn finalize(&mut self, _ctx: &mut ActorContext) -> Result<(), Error> { + Ok(()) + } + + fn start(self) -> Address { + let runtime = ActorRuntime::new(self); + let address = runtime.context().address().clone(); + tokio::spawn(runtime.entyrpoint()); + address + } +} diff --git a/libs/tact/src/address.rs b/libs/tact/src/address.rs new file mode 100644 index 00000000..e7fd161b --- /dev/null +++ b/libs/tact/src/address.rs @@ -0,0 +1,58 @@ +use thiserror::Error; +use tokio::sync::{mpsc, watch}; + +use crate::{ + action::{Do, Interrupt}, + actor::Actor, + handler::Envelope, + joint::ActorState, +}; + +#[derive(Debug, Error)] +#[error("Can't send an event to an actor")] +pub struct SendError; + +pub struct Address { + tx_event: mpsc::UnboundedSender>, + rx_state: watch::Receiver, +} + +impl Clone for Address { + fn clone(&self) -> Self { + Self { + tx_event: self.tx_event.clone(), + rx_state: self.rx_state.clone(), + } + } +} + +impl Address { + pub(super) fn new(tx_event: mpsc::UnboundedSender>, rx_state: watch::Receiver) -> Self { + Self { tx_event, rx_state } + } + + pub fn send(&self, event: E) -> Result<(), SendError> + where + A: Do, + E: Send + 'static, + { + let envelope = Envelope::from_event(event); + self.tx_event.send(envelope).map_err(|_| SendError) + } + + pub fn interrupt(&mut self) -> Result<(), SendError> + where A: Do { + self.send(Interrupt) + } + + pub async fn join(&mut self) -> Result<(), SendError> { + loop { + let state = self.rx_state.borrow_and_update().clone(); + if state == ActorState::Finished { + break; + } + self.rx_state.changed().await.map_err(|_| SendError)?; + } + Ok(()) + } +} diff --git a/libs/tact/src/context.rs b/libs/tact/src/context.rs new file mode 100644 index 00000000..b89da66d --- /dev/null +++ b/libs/tact/src/context.rs @@ -0,0 +1,60 @@ +use tokio::sync::{mpsc, watch}; + +use crate::{ + action::Do, + actor::Actor, + address::{Address, SendError}, + joint::{ActorState, AddressJoint}, + recipient::{Notifier, Recipient}, +}; + +pub struct ActorContext { + address: Address, + joint: AddressJoint, +} + +impl ActorContext { + pub(super) fn new() -> Self { + let (tx_event, rx_event) = mpsc::unbounded_channel(); + let (tx_state, rx_state) = watch::channel(ActorState::Active); + let joint = AddressJoint::new(rx_event, tx_state); + let address = Address::new(tx_event, rx_state); + Self { address, joint } + } + + pub fn address(&self) -> &Address { + &self.address + } + + pub fn recipient(&self) -> Recipient + where + A: Do, + M: Send + 'static, + { + self.address.clone().into() + } + + pub fn notifier(&self, msg: M) -> Notifier + where + A: Do, + M: Send + 'static, + { + (self.address.clone(), msg).into() + } + + pub(crate) fn joint(&mut self) -> &mut AddressJoint { + &mut self.joint + } + + pub fn do_next(&self, action: E) -> Result<(), SendError> + where + A: Do, + E: Send + 'static, + { + self.address.send(action) + } + + pub fn shutdown(&mut self) { + self.joint.close(); + } +} diff --git a/libs/tact/src/handler.rs b/libs/tact/src/handler.rs new file mode 100644 index 00000000..d460f91b --- /dev/null +++ b/libs/tact/src/handler.rs @@ -0,0 +1,45 @@ +use anyhow::Error; +use async_trait::async_trait; + +use crate::{action::Do, actor::Actor, context::ActorContext}; + +pub struct Envelope { + handler: Box>, +} + +impl Envelope { + pub(crate) fn into_handler(self) -> Box> { + self.handler + } + + pub fn from_event(event: E) -> Self + where + A: Do, + E: Send + 'static, + { + let handler = HandlerImpl { event }; + Self { + handler: Box::new(handler), + } + } +} + +#[async_trait] +pub(crate) trait Handler: Send { + async fn handle(self: Box, actor: &mut A, ctx: &mut ActorContext) -> Result<(), Error>; +} + +struct HandlerImpl { + event: E, +} + +#[async_trait] +impl, E: Send> Handler for HandlerImpl { + async fn handle(self: Box, actor: &mut A, ctx: &mut ActorContext) -> Result<(), Error> { + if let Err(err) = actor.handle(self.event, ctx).await { + actor.fallback(err, ctx).await + } else { + Ok(()) + } + } +} diff --git a/libs/tact/src/joint.rs b/libs/tact/src/joint.rs new file mode 100644 index 00000000..ece8883e --- /dev/null +++ b/libs/tact/src/joint.rs @@ -0,0 +1,32 @@ +use tokio::sync::{mpsc, watch}; + +use crate::{actor::Actor, address::SendError, handler::Envelope}; + +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum ActorState { + Active, + Finished, +} + +pub(crate) struct AddressJoint { + rx_event: mpsc::UnboundedReceiver>, + tx_state: watch::Sender, +} + +impl AddressJoint { + pub fn new(rx_event: mpsc::UnboundedReceiver>, tx_state: watch::Sender) -> Self { + Self { rx_event, tx_state } + } + + pub async fn recv(&mut self) -> Option> { + self.rx_event.recv().await + } + + pub fn update_state(&mut self, state: ActorState) -> Result<(), SendError> { + self.tx_state.send(state).map_err(|_| SendError) + } + + pub fn close(&mut self) { + self.rx_event.close(); + } +} diff --git a/libs/tact/src/lib.rs b/libs/tact/src/lib.rs new file mode 100644 index 00000000..f0a3117b --- /dev/null +++ b/libs/tact/src/lib.rs @@ -0,0 +1,20 @@ +mod action; +mod actor; +mod address; +mod context; +mod handler; +mod joint; +mod receiver; +mod recipient; +mod runtime; +mod task; +mod timer; + +pub use action::{Do, Interrupt}; +pub use actor::Actor; +pub use address::Address; +pub use context::ActorContext; +pub use receiver::Receiver; +pub use recipient::{Notifier, Recipient}; +pub use task::Task; +pub use timer::{Interval, Timeout}; diff --git a/libs/tact/src/receiver.rs b/libs/tact/src/receiver.rs new file mode 100644 index 00000000..20de96e0 --- /dev/null +++ b/libs/tact/src/receiver.rs @@ -0,0 +1,26 @@ +use futures::{Stream, StreamExt}; + +use crate::{recipient::Recipient, task::Task}; + +#[derive(Debug)] +pub struct Receiver { + _task: Task, +} + +impl Receiver { + pub fn connect(stream: S, recipient: Recipient) -> Self + where + M: Send + 'static, + S: Stream + Send + 'static, + { + let task = Task::spawn(async move { + tokio::pin!(stream); + while let Some(event) = stream.next().await { + if let Err(err) = recipient.send(event) { + log::error!("Can't forward an item from the stream: {err}"); + } + } + }); + Self { _task: task } + } +} diff --git a/libs/tact/src/recipient.rs b/libs/tact/src/recipient.rs new file mode 100644 index 00000000..498d9a65 --- /dev/null +++ b/libs/tact/src/recipient.rs @@ -0,0 +1,65 @@ +use crate::{ + action::Do, + address::{Address, SendError}, +}; + +pub trait Sender: Send { + fn send(&self, msg: M) -> Result<(), SendError>; +} + +impl Sender for Address +where + A: Do, + M: Send + 'static, +{ + fn send(&self, msg: M) -> Result<(), SendError> { + Address::send(self, msg) + } +} + +pub struct Recipient { + sender: Box>, +} + +impl From> for Recipient +where + A: Do, + M: Send + 'static, +{ + fn from(address: Address) -> Self { + Self { + sender: Box::new(address), + } + } +} + +impl Recipient { + pub fn send(&self, msg: M) -> Result<(), SendError> { + self.sender.send(msg) + } +} + +pub struct Notifier { + message: M, + sender: Box>, +} + +impl From<(Address, M)> for Notifier +where + A: Do, + M: Send + 'static, +{ + fn from((address, message): (Address, M)) -> Self { + Self { + message, + sender: Box::new(address), + } + } +} + +impl Notifier { + pub fn notify(&self) -> Result<(), SendError> { + let msg = self.message.clone(); + self.sender.send(msg) + } +} diff --git a/libs/tact/src/runtime.rs b/libs/tact/src/runtime.rs new file mode 100644 index 00000000..4ed26bd7 --- /dev/null +++ b/libs/tact/src/runtime.rs @@ -0,0 +1,42 @@ +use std::any::type_name; + +use crate::{actor::Actor, context::ActorContext, joint::ActorState}; + +pub(super) struct ActorRuntime { + actor: A, + context: ActorContext, +} + +impl ActorRuntime { + pub fn new(actor: A) -> Self { + let context = ActorContext::new(); + Self { actor, context } + } + + pub async fn entyrpoint(mut self) { + let name = type_name::(); + let res = self.actor.initialize(&mut self.context).await; + if let Err(err) = res { + log::error!("Actor {name} can't be initialized: {err}"); + } + while let Some(envelope) = self.context.joint().recv().await { + let handler = envelope.into_handler(); + let res = handler.handle(&mut self.actor, &mut self.context).await; + if let Err(err) = res { + log::error!("Actor {name} handler failed: {err}"); + } + } + let res = self.actor.finalize(&mut self.context).await; + if let Err(err) = res { + log::error!("Actor {name} can't be finalized: {err}",); + } + let res = self.context.joint().update_state(ActorState::Finished); + if let Err(err) = res { + log::error!("Actor {name} can't update the state: {err}"); + } + } + + pub fn context(&self) -> &ActorContext { + &self.context + } +} diff --git a/libs/tact/src/task.rs b/libs/tact/src/task.rs new file mode 100644 index 00000000..fe75724b --- /dev/null +++ b/libs/tact/src/task.rs @@ -0,0 +1,21 @@ +use futures::Future; +use tokio::task::JoinHandle; + +#[derive(Debug)] +pub struct Task { + handle: JoinHandle<()>, +} + +impl Drop for Task { + fn drop(&mut self) { + self.handle.abort(); + } +} + +impl Task { + pub fn spawn(fut: T) -> Self + where T: Future + Send + 'static { + let handle = tokio::spawn(fut); + Self { handle } + } +} diff --git a/libs/tact/src/timer.rs b/libs/tact/src/timer.rs new file mode 100644 index 00000000..89852168 --- /dev/null +++ b/libs/tact/src/timer.rs @@ -0,0 +1,43 @@ +use std::time::Duration; + +use tokio::time; + +use crate::{recipient::Notifier, task::Task}; + +#[derive(Debug)] +pub struct Timeout { + _task: Task, +} + +impl Timeout { + pub fn spawn(duration: Duration, notifier: Notifier) -> Self + where M: Clone + Send + 'static { + let task = Task::spawn(async move { + time::sleep(duration).await; + if let Err(err) = notifier.notify() { + log::error!("Can't notify a recipient about: {err}"); + } + }); + Self { _task: task } + } +} + +#[derive(Debug)] +pub struct Interval { + _task: Task, +} + +impl Interval { + pub fn spawn(duration: Duration, notifier: Notifier) -> Self + where M: Clone + Send + 'static { + let task = Task::spawn(async move { + loop { + time::sleep(duration).await; + if let Err(err) = notifier.notify() { + log::error!("Can't notify a recipient: {err}"); + } + } + }); + Self { _task: task } + } +} diff --git a/lints.toml b/lints.toml index e17cf9f2..60c63583 100644 --- a/lints.toml +++ b/lints.toml @@ -26,7 +26,7 @@ deny = [ 'clippy::else_if_without_else', 'clippy::enum_glob_use', 'clippy::inline_always', - 'clippy::let_underscore_drop', + 'let_underscore_drop', 'clippy::let_unit_value', 'clippy::match_on_vec_items', 'clippy::match_wild_err_arm', diff --git a/rust-toolchain.toml b/rust-toolchain.toml index e53cb682..fcbd8ffb 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -13,4 +13,4 @@ # - the CI files in .github folder # - the Makefile in base_layer/key_manager/Makefile [toolchain] -channel = "nightly-2022-05-01" +channel = "nightly-2023-06-03" diff --git a/rustfmt.toml b/rustfmt.toml index 1c8c79aa..3bc22cf4 100644 --- a/rustfmt.toml +++ b/rustfmt.toml @@ -16,8 +16,6 @@ overflow_delimited_expr = true reorder_imports = true reorder_modules = true reorder_impl_items = true -report_todo = "Never" -report_fixme = "Never" space_after_colon = true space_before_colon = false struct_lit_single_line = true