Explorar o código

Move serialization library into its own submodule.

Luther Blissett %!s(int64=3) %!d(string=hai) anos
pai
achega
0e5502f5d5

+ 126 - 135
Cargo.lock

@@ -67,9 +67,9 @@ dependencies = [
 
 [[package]]
 name = "anyhow"
-version = "1.0.64"
+version = "1.0.65"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b9a8f622bcf6ff3df478e9deba3e03e4e04b300f8e6a139e192c05fa3490afc7"
+checksum = "98161a4e3e2184da77bb14f02184cdd111e83bbbcc9979dfee3c44b9a85f5602"
 
 [[package]]
 name = "arrayref"
@@ -412,7 +412,7 @@ dependencies = [
  "cc",
  "cfg-if 1.0.0",
  "constant_time_eq",
- "digest 0.10.3",
+ "digest 0.10.5",
 ]
 
 [[package]]
@@ -584,7 +584,7 @@ checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa"
 dependencies = [
  "camino",
  "cargo-platform",
- "semver 1.0.13",
+ "semver 1.0.14",
  "serde",
  "serde_json",
 ]
@@ -680,9 +680,9 @@ dependencies = [
 
 [[package]]
 name = "clap"
-version = "3.2.20"
+version = "3.2.22"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "23b71c3ce99b7611011217b366d923f1d0a7e07a92bb2dbf1e84508c673ca3bd"
+checksum = "86447ad904c7fb335a790c9d7fe3d0d971dc523b8ccd1561a520de9a85302750"
 dependencies = [
  "atty",
  "bitflags",
@@ -692,7 +692,7 @@ dependencies = [
  "once_cell",
  "strsim 0.10.0",
  "termcolor",
- "textwrap 0.15.0",
+ "textwrap 0.15.1",
 ]
 
 [[package]]
@@ -1029,7 +1029,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
 dependencies = [
  "generic-array",
- "rand_core 0.6.3",
+ "rand_core 0.6.4",
  "typenum",
 ]
 
@@ -1132,7 +1132,7 @@ dependencies = [
  "async-executor",
  "async-std",
  "async-trait",
- "clap 3.2.20",
+ "clap 3.2.22",
  "darkfi",
  "futures",
  "log",
@@ -1189,7 +1189,7 @@ dependencies = [
  "bs58",
  "bytes",
  "chrono",
- "clap 3.2.20",
+ "clap 3.2.22",
  "crypto_api_chachapoly",
  "darkfi-derive",
  "darkfi-derive-internal",
@@ -1298,7 +1298,7 @@ version = "0.3.0"
 dependencies = [
  "async-std",
  "bs58",
- "clap 3.2.20",
+ "clap 3.2.22",
  "darkfi",
  "halo2_gadgets",
  "halo2_proofs",
@@ -1483,9 +1483,9 @@ dependencies = [
 
 [[package]]
 name = "digest"
-version = "0.10.3"
+version = "0.10.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506"
+checksum = "adfbc57365a37acbd2ebf2b64d7e69bb766e2fea813521ed536f5d0520dcf86c"
 dependencies = [
  "block-buffer",
  "crypto-common",
@@ -1548,7 +1548,7 @@ version = "0.3.0"
 dependencies = [
  "async-channel",
  "async-std",
- "clap 3.2.20",
+ "clap 3.2.22",
  "darkfi",
  "easy-parallel",
  "fxhash",
@@ -1567,9 +1567,9 @@ dependencies = [
 
 [[package]]
 name = "dotenvy"
-version = "0.15.3"
+version = "0.15.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "da3db6fcad7c1fc4abdd99bf5276a4db30d6a819127903a709ed41e5ff016e84"
+checksum = "ed9155c8f4dc55c7470ae9da3f63c6785245093b3f6aeb0f5bf2e968efbba314"
 dependencies = [
  "dirs",
 ]
@@ -1579,7 +1579,7 @@ name = "drk"
 version = "0.3.0"
 dependencies = [
  "async-std",
- "clap 3.2.20",
+ "clap 3.2.22",
  "darkfi",
  "log",
  "prettytable-rs",
@@ -1643,9 +1643,9 @@ checksum = "6907e25393cdcc1f4f3f513d9aac1e840eb1cc341a0fccb01171f7d14d10b946"
 
 [[package]]
 name = "ed25519-compact"
-version = "1.0.11"
+version = "1.0.15"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "24e1f30f0312ac83726c1197abeacd91c9557f8a623e904a009ae6bc529ae8d8"
+checksum = "bee9df587982575886a8682edcee11877894349a805f25629c27f63abe3e9ae8"
 dependencies = [
  "ct-codecs",
  "getrandom",
@@ -1789,7 +1789,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "df689201f395c6b90dfe87127685f8dbfc083a5e779e613575d8bd7314300c3e"
 dependencies = [
  "bitvec",
- "rand_core 0.6.3",
+ "rand_core 0.6.4",
  "subtle",
 ]
 
@@ -1869,11 +1869,10 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
 
 [[package]]
 name = "form_urlencoded"
-version = "1.0.1"
+version = "1.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191"
+checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
 dependencies = [
- "matches",
  "percent-encoding",
 ]
 
@@ -2117,7 +2116,7 @@ checksum = "7391856def869c1c81063a03457c676fbcd419709c3dfb33d8d319de484b154d"
 dependencies = [
  "byteorder",
  "ff",
- "rand_core 0.6.3",
+ "rand_core 0.6.4",
  "subtle",
 ]
 
@@ -2153,7 +2152,7 @@ dependencies = [
  "group",
  "pasta_curves",
  "plotters",
- "rand_core 0.6.3",
+ "rand_core 0.6.4",
  "rayon",
  "tabbycat",
  "tracing",
@@ -2179,9 +2178,9 @@ dependencies = [
 
 [[package]]
 name = "hashlink"
-version = "0.8.0"
+version = "0.8.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d452c155cb93fecdfb02a73dd57b5d8e442c2063bd7aac72f1bc5e4263a43086"
+checksum = "69fe1fcf8b4278d860ad0548329f892a3631fb63f82574df68275f34cdbe0ffa"
 dependencies = [
  "hashbrown 0.12.3",
 ]
@@ -2238,14 +2237,13 @@ checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
 
 [[package]]
 name = "iana-time-zone"
-version = "0.1.47"
+version = "0.1.50"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4c495f162af0bf17656d0014a0eded5f3cd2f365fdd204548c2869db89359dc7"
+checksum = "fd911b35d940d2bd0bea0f9100068e5b97b51a1cbe13d13382f132e0365257a0"
 dependencies = [
  "android_system_properties",
  "core-foundation-sys",
  "js-sys",
- "once_cell",
  "wasm-bindgen",
  "winapi",
 ]
@@ -2258,11 +2256,10 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
 
 [[package]]
 name = "idna"
-version = "0.2.3"
+version = "0.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8"
+checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
 dependencies = [
- "matches",
  "unicode-bidi",
  "unicode-normalization",
 ]
@@ -2304,9 +2301,9 @@ dependencies = [
 
 [[package]]
 name = "indicatif"
-version = "0.17.0"
+version = "0.17.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fcc42b206e70d86ec03285b123e65a5458c92027d1fb2ae3555878b8113b3ddf"
+checksum = "bfddc9561e8baf264e0e45e197fd7696320026eb10a8180340debc27b18f535b"
 dependencies = [
  "console",
  "number_prefix",
@@ -2342,7 +2339,7 @@ dependencies = [
  "async-trait",
  "bs58",
  "chrono",
- "clap 3.2.20",
+ "clap 3.2.22",
  "crypto_box",
  "ctrlc",
  "darkfi",
@@ -2367,9 +2364,9 @@ dependencies = [
 
 [[package]]
 name = "itertools"
-version = "0.10.3"
+version = "0.10.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
 dependencies = [
  "either",
 ]
@@ -2394,9 +2391,9 @@ checksum = "9478aa10f73e7528198d75109c8be5cd7d15fb530238040148d5f9a22d4c5b3b"
 
 [[package]]
 name = "js-sys"
-version = "0.3.59"
+version = "0.3.60"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "258451ab10b34f8af53416d1fdab72c22e805f0c92a1136d59470ec0b11138b2"
+checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47"
 dependencies = [
  "wasm-bindgen",
 ]
@@ -2430,9 +2427,9 @@ checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67"
 
 [[package]]
 name = "libc"
-version = "0.2.132"
+version = "0.2.133"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8371e4e5341c3a96db127eb2465ac681ced4c433e01dd0e938adbef26ba93ba5"
+checksum = "c0f80d65747a3e43d1596c7c5492d95d5edddaabd45a7fcdb02b95f644164966"
 
 [[package]]
 name = "libloading"
@@ -2481,9 +2478,9 @@ dependencies = [
 
 [[package]]
 name = "lock_api"
-version = "0.4.8"
+version = "0.4.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9f80bf5aacaf25cbfc8210d1cfb718f2bf3b11c4c54e5afe36c236853a8ec390"
+checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df"
 dependencies = [
  "autocfg",
  "scopeguard",
@@ -2529,12 +2526,6 @@ dependencies = [
  "libc",
 ]
 
-[[package]]
-name = "matches"
-version = "0.1.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f"
-
 [[package]]
 name = "memchr"
 version = "2.5.0"
@@ -2733,9 +2724,9 @@ dependencies = [
 
 [[package]]
 name = "once_cell"
-version = "1.14.0"
+version = "1.15.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2f7254b99e31cad77da24b08ebf628882739a608578bb1bcdfc1f9c21260d7c0"
+checksum = "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1"
 
 [[package]]
 name = "opaque-debug"
@@ -2899,15 +2890,15 @@ dependencies = [
 
 [[package]]
 name = "percent-encoding"
-version = "2.1.0"
+version = "2.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
+checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
 
 [[package]]
 name = "pest"
-version = "2.3.0"
+version = "2.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4b0560d531d1febc25a3c9398a62a71256c0178f2e3443baedd9ad4bb8c9deb4"
+checksum = "cb779fcf4bb850fbbb0edc96ff6cf34fd90c4b1a112ce042653280d9a7364048"
 dependencies = [
  "thiserror",
  "ucd-trie",
@@ -2953,9 +2944,9 @@ checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae"
 
 [[package]]
 name = "plotters"
-version = "0.3.3"
+version = "0.3.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "716b4eeb6c4a1d3ecc956f75b43ec2e8e8ba80026413e70a3f41fd3313d3492b"
+checksum = "2538b639e642295546c50fcd545198c9d64ee2a38620a628724a3b266d5fbf97"
 dependencies = [
  "chrono",
  "font-kit",
@@ -3193,7 +3184,7 @@ checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
 dependencies = [
  "libc",
  "rand_chacha",
- "rand_core 0.6.3",
+ "rand_core 0.6.4",
 ]
 
 [[package]]
@@ -3203,7 +3194,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
 dependencies = [
  "ppv-lite86",
- "rand_core 0.6.3",
+ "rand_core 0.6.4",
 ]
 
 [[package]]
@@ -3214,9 +3205,9 @@ checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
 
 [[package]]
 name = "rand_core"
-version = "0.6.3"
+version = "0.6.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
 dependencies = [
  "getrandom",
 ]
@@ -3227,7 +3218,7 @@ version = "0.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f"
 dependencies = [
- "rand_core 0.6.3",
+ "rand_core 0.6.4",
 ]
 
 [[package]]
@@ -3376,11 +3367,11 @@ dependencies = [
 
 [[package]]
 name = "ripemd"
-version = "0.1.1"
+version = "0.1.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1facec54cb5e0dc08553501fa740091086d0259ad0067e0d4103448e4cb22ed3"
+checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f"
 dependencies = [
- "digest 0.10.3",
+ "digest 0.10.5",
 ]
 
 [[package]]
@@ -3558,9 +3549,9 @@ dependencies = [
 
 [[package]]
 name = "semver"
-version = "1.0.13"
+version = "1.0.14"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "93f6841e709003d68bb2deee8c343572bf446003ec20a583e76f7b15cebf3711"
+checksum = "e25dfac463d778e353db5be2449d1cce89bd6fd23c9f1ea21310ce6e5a1b29c4"
 dependencies = [
  "serde",
 ]
@@ -3576,9 +3567,9 @@ dependencies = [
 
 [[package]]
 name = "serde"
-version = "1.0.144"
+version = "1.0.145"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0f747710de3dcd43b88c9168773254e809d8ddbdf9653b84e2554ab219f17860"
+checksum = "728eb6351430bccb993660dfffc5a72f91ccc1295abaa8ce19b27ebe4f75568b"
 dependencies = [
  "serde_derive",
 ]
@@ -3594,9 +3585,9 @@ dependencies = [
 
 [[package]]
 name = "serde_derive"
-version = "1.0.144"
+version = "1.0.145"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "94ed3a816fb1d101812f83e789f888322c34e291f894f19590dc310963e87a00"
+checksum = "81fa1584d3d1bcacd84c277a0dfe21f5b0f6accf4a23d04d4c6d61f1af522b4c"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -3622,18 +3613,18 @@ checksum = "028f48d513f9678cda28f6e4064755b3fbb2af6acd672f2c209b62323f7aea0f"
 dependencies = [
  "cfg-if 1.0.0",
  "cpufeatures",
- "digest 0.10.3",
+ "digest 0.10.5",
 ]
 
 [[package]]
 name = "sha2"
-version = "0.10.5"
+version = "0.10.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cf9db03534dff993187064c4e0c05a5708d2a9728ace9a8959b77bedf415dac5"
+checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0"
 dependencies = [
  "cfg-if 1.0.0",
  "cpufeatures",
- "digest 0.10.3",
+ "digest 0.10.5",
 ]
 
 [[package]]
@@ -3774,9 +3765,9 @@ dependencies = [
 
 [[package]]
 name = "sqlformat"
-version = "0.1.8"
+version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b4b7922be017ee70900be125523f38bdd644f4f06a1b16e8fa5a8ee8c34bffd4"
+checksum = "f87e292b4291f154971a43c3774364e2cbcaec599d3f5bf6fa9d122885dbc38a"
 dependencies = [
  "itertools",
  "nom",
@@ -3785,9 +3776,9 @@ dependencies = [
 
 [[package]]
 name = "sqlx"
-version = "0.6.1"
+version = "0.6.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "788841def501aabde58d3666fcea11351ec3962e6ea75dbcd05c84a71d68bcd1"
+checksum = "9249290c05928352f71c077cc44a464d880c63f26f7534728cca008e135c0428"
 dependencies = [
  "sqlx-core",
  "sqlx-macros",
@@ -3795,9 +3786,9 @@ dependencies = [
 
 [[package]]
 name = "sqlx-core"
-version = "0.6.1"
+version = "0.6.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8c21d3b5e7cadfe9ba7cdc1295f72cc556c750b4419c27c219c0693198901f8e"
+checksum = "dcbc16ddba161afc99e14d1713a453747a2b07fc097d2009f4c300ec99286105"
 dependencies = [
  "ahash",
  "atoi",
@@ -3837,9 +3828,9 @@ dependencies = [
 
 [[package]]
 name = "sqlx-macros"
-version = "0.6.1"
+version = "0.6.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4adfd2df3557bddd3b91377fc7893e8fa899e9b4061737cbade4e1bb85f1b45c"
+checksum = "b850fa514dc11f2ee85be9d055c512aa866746adfacd1cb42d867d68e6a5b0d9"
 dependencies = [
  "dotenvy",
  "either",
@@ -3856,9 +3847,9 @@ dependencies = [
 
 [[package]]
 name = "sqlx-rt"
-version = "0.6.1"
+version = "0.6.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7be52fc7c96c136cedea840ed54f7d446ff31ad670c9dea95ebcb998530971a3"
+checksum = "24c5b2d25fa654cc5f841750b8e1cdedbe21189bf9a9382ee90bfa9dd3562396"
 dependencies = [
  "async-native-tls",
  "async-std",
@@ -3965,9 +3956,9 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
 
 [[package]]
 name = "syn"
-version = "1.0.99"
+version = "1.0.100"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13"
+checksum = "52205623b1b0f064a4e71182c3b18ae902267282930c6d5462c91b859668426e"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -4015,7 +4006,7 @@ version = "0.4.0"
 dependencies = [
  "async-std",
  "chrono",
- "clap 3.2.20",
+ "clap 3.2.22",
  "colored",
  "darkfi",
  "fxhash",
@@ -4025,7 +4016,7 @@ dependencies = [
  "serde_json",
  "simplelog",
  "term_grid",
- "textwrap 0.15.0",
+ "textwrap 0.15.1",
  "url",
 ]
 
@@ -4135,9 +4126,9 @@ dependencies = [
 
 [[package]]
 name = "textwrap"
-version = "0.15.0"
+version = "0.15.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb"
+checksum = "949517c0cf1bf4ee812e2e07e08ab448e3ae0d23472aee8a06c985f0c8815b16"
 dependencies = [
  "smawk",
  "unicode-linebreak",
@@ -4146,18 +4137,18 @@ dependencies = [
 
 [[package]]
 name = "thiserror"
-version = "1.0.34"
+version = "1.0.35"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8c1b05ca9d106ba7d2e31a9dab4a64e7be2cce415321966ea3132c49a656e252"
+checksum = "c53f98874615aea268107765aa1ed8f6116782501d18e53d08b471733bea6c85"
 dependencies = [
  "thiserror-impl",
 ]
 
 [[package]]
 name = "thiserror-impl"
-version = "1.0.34"
+version = "1.0.35"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e8f2591983642de85c921015f3f070c665a197ed69e417af436115e3a1407487"
+checksum = "f8b463991b4eab2d801e724172285ec4195c650e8ec79b149e6c2a8e6dd3f783"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -4303,9 +4294,9 @@ checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81"
 
 [[package]]
 name = "uint"
-version = "0.9.3"
+version = "0.9.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "12f03af7ccf01dd611cc450a0d10dbc9b745770d096473e2faf0ca6e2d66d1e0"
+checksum = "a45526d29728d135c2900b0d30573fe3ee79fceb12ef534c7bb30e810a91b601"
 dependencies = [
  "byteorder",
  "crunchy",
@@ -4330,45 +4321,46 @@ checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992"
 
 [[package]]
 name = "unicode-ident"
-version = "1.0.3"
+version = "1.0.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf"
+checksum = "dcc811dc4066ac62f84f11307873c4850cb653bfa9b1719cee2bd2204a4bc5dd"
 
 [[package]]
 name = "unicode-linebreak"
-version = "0.1.2"
+version = "0.1.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3a52dcaab0c48d931f7cc8ef826fa51690a08e1ea55117ef26f89864f532383f"
+checksum = "ba853b89cad55680dd3cf06f2798cb1ad8d483f0e2dfa14138d7e789ecee5c4e"
 dependencies = [
+ "hashbrown 0.12.3",
  "regex",
 ]
 
 [[package]]
 name = "unicode-normalization"
-version = "0.1.21"
+version = "0.1.22"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "854cbdc4f7bc6ae19c820d44abdc3277ac3e1b2b93db20a636825d9322fb60e6"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
 dependencies = [
  "tinyvec",
 ]
 
 [[package]]
 name = "unicode-segmentation"
-version = "1.9.0"
+version = "1.10.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99"
+checksum = "0fdbf052a0783de01e944a6ce7a8cb939e295b1e7be835a1112c3b9a7f047a5a"
 
 [[package]]
 name = "unicode-width"
-version = "0.1.9"
+version = "0.1.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
 
 [[package]]
 name = "unicode-xid"
-version = "0.2.3"
+version = "0.2.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04"
+checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
 
 [[package]]
 name = "unicode_categories"
@@ -4394,13 +4386,12 @@ checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
 
 [[package]]
 name = "url"
-version = "2.2.2"
+version = "2.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c"
+checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
 dependencies = [
  "form_urlencoded",
  "idna",
- "matches",
  "percent-encoding",
  "serde",
 ]
@@ -4426,7 +4417,7 @@ name = "vanityaddr"
 version = "0.3.0"
 dependencies = [
  "bs58",
- "clap 3.2.20",
+ "clap 3.2.22",
  "ctrlc",
  "darkfi",
  "indicatif",
@@ -4499,9 +4490,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
 
 [[package]]
 name = "wasm-bindgen"
-version = "0.2.82"
+version = "0.2.83"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fc7652e3f6c4706c8d9cd54832c4a4ccb9b5336e2c3bd154d5cccfbf1c1f5f7d"
+checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268"
 dependencies = [
  "cfg-if 1.0.0",
  "wasm-bindgen-macro",
@@ -4509,9 +4500,9 @@ dependencies = [
 
 [[package]]
 name = "wasm-bindgen-backend"
-version = "0.2.82"
+version = "0.2.83"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "662cd44805586bd52971b9586b1df85cdbbd9112e4ef4d8f41559c334dc6ac3f"
+checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142"
 dependencies = [
  "bumpalo",
  "log",
@@ -4524,9 +4515,9 @@ dependencies = [
 
 [[package]]
 name = "wasm-bindgen-futures"
-version = "0.4.32"
+version = "0.4.33"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fa76fb221a1f8acddf5b54ace85912606980ad661ac7a503b4570ffd3a624dad"
+checksum = "23639446165ca5a5de86ae1d8896b737ae80319560fbaa4c2887b7da6e7ebd7d"
 dependencies = [
  "cfg-if 1.0.0",
  "js-sys",
@@ -4536,9 +4527,9 @@ dependencies = [
 
 [[package]]
 name = "wasm-bindgen-macro"
-version = "0.2.82"
+version = "0.2.83"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b260f13d3012071dfb1512849c033b1925038373aea48ced3012c09df952c602"
+checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810"
 dependencies = [
  "quote",
  "wasm-bindgen-macro-support",
@@ -4546,9 +4537,9 @@ dependencies = [
 
 [[package]]
 name = "wasm-bindgen-macro-support"
-version = "0.2.82"
+version = "0.2.83"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5be8e654bdd9b79216c2929ab90721aa82faf65c48cdf08bdc4e7f51357b80da"
+checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -4559,15 +4550,15 @@ dependencies = [
 
 [[package]]
 name = "wasm-bindgen-shared"
-version = "0.2.82"
+version = "0.2.83"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6598dd0bd3c7d51095ff6531a5b23e02acdc81804e30d8f07afb77b7215a140a"
+checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f"
 
 [[package]]
 name = "wasm-encoder"
-version = "0.16.0"
+version = "0.17.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d443c5a7daae71697d97ec12ad70b4fe8766d3a0f4db16158ac8b781365892f7"
+checksum = "7e7ca71c70a6de5b10968ae4d298e548366d9cd9588176e6ff8866f3c49c96ee"
 dependencies = [
  "leb128",
 ]
@@ -4842,9 +4833,9 @@ checksum = "718ed7c55c2add6548cca3ddd6383d738cd73b892df400e96b9aa876f0141d7a"
 
 [[package]]
 name = "wast"
-version = "46.0.0"
+version = "47.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ea0ab19660e3ea6891bba69167b9be40fad00fb1fe3dd39c5eebcee15607131b"
+checksum = "117ccfc4262e62a28a13f0548a147f19ffe71e8a08be802af23ae4ea0bedad73"
 dependencies = [
  "leb128",
  "memchr",
@@ -4854,18 +4845,18 @@ dependencies = [
 
 [[package]]
 name = "wat"
-version = "1.0.48"
+version = "1.0.49"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f775282def4d5bffd94d60d6ecd57bfe6faa46171cdbf8d32bd5458842b1e3e"
+checksum = "7aab4e20c60429fbba9670a6cae0fff9520046ba0aa3e6d0b1cd2653bea14898"
 dependencies = [
  "wast",
 ]
 
 [[package]]
 name = "web-sys"
-version = "0.3.59"
+version = "0.3.60"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ed055ab27f941423197eb86b2035720b1a3ce40504df082cac2ecc6ed73335a1"
+checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f"
 dependencies = [
  "js-sys",
  "wasm-bindgen",
@@ -5124,6 +5115,6 @@ dependencies = [
 name = "zkas"
 version = "0.3.0"
 dependencies = [
- "clap 3.2.20",
+ "clap 3.2.22",
  "darkfi",
 ]

+ 21 - 8
Cargo.toml

@@ -36,8 +36,8 @@ members = [
 	"bin/vanityaddr",
 	"bin/lilith",
 	"src/sdk",
-	"src/util/derive",
-	"src/util/derive-internal",
+	"src/serial/derive",
+	"src/serial/derive-internal",
 
     "example/dchat",
 ]
@@ -89,8 +89,8 @@ lazy-init = {version = "0.5.1", optional = true}
 fxhash = {version = "0.2.1", optional = true}
 indexmap = {version = "1.9.1", optional = true}
 itertools = {version = "0.10.3", optional = true}
-darkfi-derive = {path = "src/util/derive", optional = true}
-darkfi-derive-internal = {path = "src/util/derive-internal", optional = true}
+darkfi-derive = {path = "src/serial/derive", optional = true}
+darkfi-derive-internal = {path = "src/serial/derive-internal", optional = true}
 chrono = {version = "0.4.22", optional = true}
 
 # Misc
@@ -178,9 +178,19 @@ util = [
 
     "async-net",
     "async-runtime",
-	"darkfi-derive",
-	"darkfi-derive-internal",
 	"rpc",
+    "serial",
+]
+
+async-serial = [
+    "futures",
+
+    "serial",
+]
+
+serial = [
+    "darkfi-derive",
+    "darkfi-derive-internal",
 ]
 
 rpc = [
@@ -225,8 +235,10 @@ net = [
 	"structopt",
 	"structopt-toml",
 
-	"util",
+	"async-serial",
+	"serial",
 	"system",
+	"util",
 ]
 
 crypto = [
@@ -249,6 +261,7 @@ crypto = [
 	"bs58",
 
 	"util",
+	"serial",
 	"zkas",
 ]
 
@@ -286,7 +299,7 @@ zkas = [
 	"indexmap",
 	"itertools",
 
-	"util",
+	"serial",
 ]
 
 raft = [

+ 9 - 0
src/error.rs

@@ -369,6 +369,9 @@ pub enum VerifyFailed {
 /// Client module errors
 #[derive(Debug, Clone, thiserror::Error)]
 pub enum ClientFailed {
+    #[error("IO error: {0}")]
+    Io(std::io::ErrorKind),
+
     #[error("Not enough value: {0}")]
     NotEnoughValue(u64),
 
@@ -403,6 +406,12 @@ impl From<VerifyFailed> for ClientFailed {
     }
 }
 
+impl From<std::io::Error> for ClientFailed {
+    fn from(err: std::io::Error) -> Self {
+        Self::Io(err.kind())
+    }
+}
+
 #[cfg(feature = "async-std")]
 impl From<async_std::future::TimeoutError> for Error {
     fn from(_err: async_std::future::TimeoutError) -> Self {

+ 3 - 0
src/lib.rs

@@ -31,6 +31,9 @@ pub mod raft;
 #[cfg(feature = "rpc")]
 pub mod rpc;
 
+#[cfg(feature = "serial")]
+pub mod serial;
+
 #[cfg(feature = "system")]
 pub mod system;
 

+ 74 - 59
src/util/async_serial.rs → src/serial/async_serial.rs

@@ -1,25 +1,85 @@
 use futures::prelude::*;
+use std::io::{Error, ErrorKind};
 
-use super::{endian, serial::VarInt};
-use crate::{Error, Result};
+use super::{endian, VarInt};
+
+pub struct AsyncReadExt;
+pub struct AsyncWriteExt;
+
+macro_rules! async_decoder_fn {
+    ($name:ident, $val_type:ty, $readfn:ident, $byte_len:expr) => {
+        #[inline]
+        pub async fn $name<R: AsyncRead + Unpin>(stream: &mut R) -> Result<$val_type, Error> {
+            assert_eq!(core::mem::size_of::<$val_type>(), $byte_len);
+            let mut val = [0; $byte_len];
+            stream.read_exact(&mut val[..]).await?;
+            Ok(endian::$readfn(&val))
+        }
+    };
+}
+
+macro_rules! async_encoder_fn {
+    ($name:ident, $val_type:ty, $writefn:ident) => {
+        #[inline]
+        pub async fn $name<W: AsyncWrite + Unpin>(
+            stream: &mut W,
+            v: $val_type,
+        ) -> Result<(), Error> {
+            stream.write_all(&endian::$writefn(v)).await
+        }
+    };
+}
+
+#[allow(dead_code)]
+impl AsyncReadExt {
+    async_decoder_fn!(read_u128, u128, slice_to_u128_le, 16);
+    async_decoder_fn!(read_u64, u64, slice_to_u64_le, 8);
+    async_decoder_fn!(read_u32, u32, slice_to_u32_le, 4);
+    async_decoder_fn!(read_u16, u16, slice_to_u16_le, 2);
+
+    pub async fn read_u8<R: AsyncRead + Unpin>(stream: &mut R) -> Result<u8, Error> {
+        let mut slice = [0u8; 1];
+        stream.read_exact(&mut slice).await?;
+        Ok(slice[0])
+    }
+}
+
+#[allow(dead_code)]
+impl AsyncWriteExt {
+    async_encoder_fn!(write_u128, u128, u128_to_array_le);
+    async_encoder_fn!(write_u64, u64, u64_to_array_le);
+    async_encoder_fn!(write_u32, u32, u32_to_array_le);
+    async_encoder_fn!(write_u16, u16, u16_to_array_le);
+
+    pub async fn write_u8<W: AsyncWrite + Unpin>(stream: &mut W, v: u8) -> Result<(), Error> {
+        stream.write_all(&[v]).await
+    }
+}
 
 impl VarInt {
-    pub async fn encode_async<W: AsyncWrite + Unpin>(&self, stream: &mut W) -> Result<usize> {
+    #[inline]
+    pub async fn encode_async<W: AsyncWrite + Unpin>(
+        &self,
+        stream: &mut W,
+    ) -> Result<usize, Error> {
         match self.0 {
             0..=0xFC => {
                 AsyncWriteExt::write_u8(stream, self.0 as u8).await?;
                 Ok(1)
             }
+
             0xFD..=0xFFFF => {
                 AsyncWriteExt::write_u8(stream, 0xFD).await?;
                 AsyncWriteExt::write_u16(stream, self.0 as u16).await?;
                 Ok(3)
             }
+
             0x10000..=0xFFFFFFFF => {
                 AsyncWriteExt::write_u8(stream, 0xFE).await?;
                 AsyncWriteExt::write_u32(stream, self.0 as u32).await?;
                 Ok(5)
             }
+
             _ => {
                 AsyncWriteExt::write_u8(stream, 0xFF).await?;
                 AsyncWriteExt::write_u64(stream, self.0 as u64).await?;
@@ -28,80 +88,35 @@ impl VarInt {
         }
     }
 
-    pub async fn decode_async<R: AsyncRead + Unpin>(stream: &mut R) -> Result<Self> {
+    #[inline]
+    pub async fn decode_async<R: AsyncRead + Unpin>(stream: &mut R) -> Result<Self, Error> {
         let n = AsyncReadExt::read_u8(stream).await?;
         match n {
             0xFF => {
                 let x = AsyncReadExt::read_u64(stream).await?;
                 if x < 0x100000000 {
-                    Err(Error::NonMinimalVarInt)
-                } else {
-                    Ok(VarInt(x))
+                    return Err(Error::new(ErrorKind::Other, "Non-minimal VarInt"))
                 }
+                Ok(VarInt(x))
             }
+
             0xFE => {
                 let x = AsyncReadExt::read_u32(stream).await?;
                 if x < 0x10000 {
-                    Err(Error::NonMinimalVarInt)
-                } else {
-                    Ok(VarInt(x as u64))
+                    return Err(Error::new(ErrorKind::Other, "Non-minimal VarInt"))
                 }
+                Ok(VarInt(x as u64))
             }
+
             0xFD => {
                 let x = AsyncReadExt::read_u16(stream).await?;
                 if x < 0xFD {
-                    Err(Error::NonMinimalVarInt)
-                } else {
-                    Ok(VarInt(x as u64))
+                    return Err(Error::new(ErrorKind::Other, "Non-minimal VarInt"))
                 }
+                Ok(VarInt(x as u64))
             }
-            n => Ok(VarInt(n as u64)),
-        }
-    }
-}
 
-macro_rules! async_encoder_fn {
-    ($name:ident, $val_type:ty, $writefn:ident) => {
-        #[inline]
-        pub async fn $name<W: AsyncWrite + Unpin>(stream: &mut W, v: $val_type) -> Result<()> {
-            stream.write_all(&endian::$writefn(v)).await.map_err(|e| Error::Io(e.kind()))
-        }
-    };
-}
-
-macro_rules! async_decoder_fn {
-    ($name:ident, $val_type:ty, $readfn:ident, $byte_len: expr) => {
-        pub async fn $name<R: AsyncRead + Unpin>(stream: &mut R) -> Result<$val_type> {
-            assert_eq!(::std::mem::size_of::<$val_type>(), $byte_len); // size_of isn't a constfn in 1.22
-            let mut val = [0; $byte_len];
-            stream.read_exact(&mut val[..]).await.map_err(|e| Error::Io(e.kind()))?;
-            Ok(endian::$readfn(&val))
+            n => Ok(VarInt(n as u64)),
         }
-    };
-}
-
-pub struct AsyncReadExt {}
-
-impl AsyncReadExt {
-    async_decoder_fn!(read_u64, u64, slice_to_u64_le, 8);
-    async_decoder_fn!(read_u32, u32, slice_to_u32_le, 4);
-    async_decoder_fn!(read_u16, u16, slice_to_u16_le, 2);
-
-    pub async fn read_u8<R: AsyncRead + Unpin>(stream: &mut R) -> Result<u8> {
-        let mut slice = [0u8; 1];
-        stream.read_exact(&mut slice).await?;
-        Ok(slice[0])
-    }
-}
-
-pub struct AsyncWriteExt {}
-
-impl AsyncWriteExt {
-    async_encoder_fn!(write_u64, u64, u64_to_array_le);
-    async_encoder_fn!(write_u32, u32, u32_to_array_le);
-    async_encoder_fn!(write_u16, u16, u16_to_array_le);
-
-    pub async fn write_u8<W: AsyncWrite + Unpin>(stream: &mut W, v: u8) -> Result<()> {
-        stream.write_all(&[v]).await.map_err(|e| Error::Io(e.kind()))
     }
 }

+ 14 - 0
src/serial/derive-internal/Cargo.toml

@@ -0,0 +1,14 @@
+[package]
+name = "darkfi-derive-internal"
+version = "0.3.0"
+homepage = "https://dark.fi"
+description = "Internal crate for serialization derive macros"
+authors = ["darkfi <dev@dark.fi>"]
+repository = "https://github.com/darkrenaissance/darkfi"
+license = "AGPL-3.0-only"
+edition = "2021"
+
+[dependencies]
+proc-macro2 = "1.0.43"
+quote = "1.0.21"
+syn = {version = "1.0.99", features = ["full", "fold"]}

+ 11 - 11
src/util/derive-internal/src/lib.rs → src/serial/derive-internal/src/lib.rs

@@ -1,4 +1,4 @@
-//! Derive (de)serialization for structs, see src/util/derive
+//! Derive (de)serialization for structs, see src/serial/derive
 use proc_macro2::{Span, TokenStream as TokenStream2};
 use quote::quote;
 use syn::{Fields, Ident, Index, ItemEnum, ItemStruct, WhereClause};
@@ -33,8 +33,8 @@ pub fn enum_ser(input: &ItemEnum, cratename: Ident) -> syn::Result<TokenStream2>
     body.extend(ret);
 
     Ok(quote! {
-        impl #cratename::util::serial::Encodable for #name #where_clause {
-            fn encode<S: std::io::Write>(&self, mut s: S) -> #cratename::Result<usize> {
+        impl #cratename::serial::Encodable for #name #where_clause {
+            fn encode<S: std::io::Write>(&self, mut s: S) -> ::core::result::Result<usize, std::io::Error> {
                 #body
             }
         }
@@ -74,7 +74,7 @@ pub fn struct_ser(input: &ItemStruct, cratename: Ident) -> syn::Result<TokenStre
                 let field_type = &field.ty;
                 where_clause.predicates.push(
                     syn::parse2(quote! {
-                        #field_type: #cratename::util::serial::Encodable
+                        #field_type: #cratename::serial::Encodable
                     })
                     .unwrap(),
                 );
@@ -111,8 +111,8 @@ pub fn struct_ser(input: &ItemStruct, cratename: Ident) -> syn::Result<TokenStre
     }
 
     Ok(quote! {
-        impl #cratename::util::serial::Encodable for #name #where_clause {
-            fn encode<S: std::io::Write>(&self, mut s: S) -> #cratename::Result<usize> {
+        impl #cratename::serial::Encodable for #name #where_clause {
+            fn encode<S: std::io::Write>(&self, mut s: S) -> ::core::result::Result<usize, std::io::Error> {
                 #body
             }
         }
@@ -155,13 +155,13 @@ pub fn struct_de(input: &ItemStruct, cratename: Ident) -> syn::Result<TokenStrea
                             let field_type = &field.ty;
                             where_clause.predicates.push(
                                 syn::parse2(quote! {
-                                    #field_type: #cratename::util::serial::Decodable
+                                    #field_type: #cratename::serial::Decodable
                                 })
                                 .unwrap(),
                             );
 
                             quote! {
-                                #field_name: #cratename::util::serial::Decodable::decode(&mut d)?,
+                                #field_name: #cratename::serial::Decodable::decode(&mut d)?,
                             }
                         }
                     };
@@ -177,7 +177,7 @@ pub fn struct_de(input: &ItemStruct, cratename: Ident) -> syn::Result<TokenStrea
             let mut body = TokenStream2::new();
             for _ in 0..fields.unnamed.len() {
                 let delta = quote! {
-                    #cratename::util::serial::Decodable::decode(&mut d)?,
+                    #cratename::serial::Decodable::decode(&mut d)?,
                 };
                 body.extend(delta);
             }
@@ -194,8 +194,8 @@ pub fn struct_de(input: &ItemStruct, cratename: Ident) -> syn::Result<TokenStrea
     };
 
     Ok(quote! {
-        impl #cratename::util::serial::Decodable for #name #where_clause {
-            fn decode<D: std::io::Read>(mut d: D) -> #cratename::Result<Self> {
+        impl #cratename::serial::Decodable for #name #where_clause {
+            fn decode<D: std::io::Read>(mut d: D) -> ::core::result::Result<Self, std::io::Error> {
                 Ok(#return_value)
             }
         }

+ 5 - 0
src/util/derive/Cargo.toml → src/serial/derive/Cargo.toml

@@ -1,6 +1,11 @@
 [package]
 name = "darkfi-derive"
 version = "0.3.0"
+homepage = "https://dark.fi"
+description = "Crate for serialization derive macros"
+authors = ["darkfi <dev@dark.fi>"]
+repository = "https://github.com/darkrenaissance/darkfi"
+license = "AGPL-3.0-only"
 edition = "2021"
 
 [lib]

+ 0 - 0
src/util/derive/src/lib.rs → src/serial/derive/src/lib.rs


+ 102 - 0
src/serial/encoding_types.rs

@@ -0,0 +1,102 @@
+//! Encodings for external crates
+use std::{
+    collections::{BTreeMap, HashSet},
+    io::{Error, Read, Write},
+};
+
+#[allow(unused_imports)]
+use super::{Decodable, Encodable, ReadExt, VarInt, WriteExt};
+
+impl<T: Encodable> Encodable for HashSet<T> {
+    fn encode<S: Write>(&self, mut s: S) -> Result<usize, Error> {
+        let mut len = 0;
+        len += VarInt(self.len() as u64).encode(&mut s)?;
+        for c in self.iter() {
+            len += c.encode(&mut s)?;
+        }
+        Ok(len)
+    }
+}
+
+impl<T: Decodable + std::cmp::Eq + std::hash::Hash> Decodable for HashSet<T> {
+    fn decode<D: Read>(mut d: D) -> Result<Self, Error> {
+        let len = VarInt::decode(&mut d)?.0;
+        let mut ret = HashSet::new();
+        for _ in 0..len {
+            let entry: T = Decodable::decode(&mut d)?;
+            ret.insert(entry);
+        }
+        Ok(ret)
+    }
+}
+
+impl<T: Encodable, U: Encodable> Encodable for BTreeMap<T, U> {
+    fn encode<S: Write>(&self, mut s: S) -> Result<usize, Error> {
+        let mut len = 0;
+        len += VarInt(self.len() as u64).encode(&mut s)?;
+        for c in self.iter() {
+            len += c.0.encode(&mut s)?;
+            len += c.1.encode(&mut s)?;
+        }
+        Ok(len)
+    }
+}
+
+impl<T: Decodable + std::cmp::Ord, U: Decodable> Decodable for BTreeMap<T, U> {
+    fn decode<D: Read>(mut d: D) -> Result<Self, Error> {
+        let len = VarInt::decode(&mut d)?.0;
+        let mut ret = BTreeMap::new();
+        for _ in 0..len {
+            let key: T = Decodable::decode(&mut d)?;
+            let entry: U = Decodable::decode(&mut d)?;
+            ret.insert(key, entry);
+        }
+        Ok(ret)
+    }
+}
+
+#[cfg(feature = "blake3")]
+impl Encodable for blake3::Hash {
+    fn encode<S: Write>(&self, mut s: S) -> Result<usize, Error> {
+        s.write_slice(self.as_bytes())?;
+        Ok(32)
+    }
+}
+
+#[cfg(feature = "blake3")]
+impl Decodable for blake3::Hash {
+    fn decode<D: Read>(mut d: D) -> Result<Self, Error> {
+        let mut bytes = [0u8; 32];
+        d.read_slice(&mut bytes)?;
+        Ok(bytes.into())
+    }
+}
+
+#[cfg(feature = "fxhash")]
+impl<T: Encodable, U: Encodable> Encodable for fxhash::FxHashMap<T, U> {
+    fn encode<S: Write>(&self, mut s: S) -> Result<usize, Error> {
+        let mut len = 0;
+        len += VarInt(self.len() as u64).encode(&mut s)?;
+        for c in self.iter() {
+            len += c.0.encode(&mut s)?;
+            len += c.1.encode(&mut s)?;
+        }
+        Ok(len)
+    }
+}
+
+#[cfg(feature = "fxhash")]
+impl<T: Decodable + std::cmp::Eq + std::hash::Hash, U: Decodable> Decodable
+    for fxhash::FxHashMap<T, U>
+{
+    fn decode<D: Read>(mut d: D) -> Result<Self, Error> {
+        let len = VarInt::decode(&mut d)?.0;
+        let mut ret = fxhash::FxHashMap::default();
+        for _ in 0..len {
+            let key: T = Decodable::decode(&mut d)?;
+            let entry: U = Decodable::decode(&mut d)?;
+            ret.insert(key, entry);
+        }
+        Ok(ret)
+    }
+}

+ 48 - 19
src/util/endian.rs → src/serial/endian.rs

@@ -1,34 +1,38 @@
 macro_rules! define_slice_to_be {
     ($name: ident, $type: ty) => {
         #[inline]
+        #[allow(dead_code)]
         pub fn $name(slice: &[u8]) -> $type {
-            assert_eq!(slice.len(), ::std::mem::size_of::<$type>());
+            assert_eq!(slice.len(), ::core::mem::size_of::<$type>());
             let mut res = 0;
-            for i in 0..::std::mem::size_of::<$type>() {
-                res |= (slice[i] as $type) << (::std::mem::size_of::<$type>() - i - 1) * 8;
+            for i in 0..::core::mem::size_of::<$type>() {
+                res |= (slice[i] as $type) << (::core::mem::size_of::<$type>() - i - 1) * 8;
             }
             res
         }
     };
 }
+
 macro_rules! define_slice_to_le {
     ($name: ident, $type: ty) => {
         #[inline]
         pub fn $name(slice: &[u8]) -> $type {
-            assert_eq!(slice.len(), ::std::mem::size_of::<$type>());
+            assert_eq!(slice.len(), ::core::mem::size_of::<$type>());
             let mut res = 0;
-            for i in 0..::std::mem::size_of::<$type>() {
+            for i in 0..::core::mem::size_of::<$type>() {
                 res |= (slice[i] as $type) << i * 8;
             }
             res
         }
     };
 }
+
 macro_rules! define_be_to_array {
     ($name: ident, $type: ty, $byte_len: expr) => {
         #[inline]
+        #[allow(dead_code)]
         pub fn $name(val: $type) -> [u8; $byte_len] {
-            assert_eq!(::std::mem::size_of::<$type>(), $byte_len); // size_of isn't a constfn in 1.22
+            assert_eq!(::core::mem::size_of::<$type>(), $byte_len);
             let mut res = [0; $byte_len];
             for i in 0..$byte_len {
                 res[i] = ((val >> ($byte_len - i - 1) * 8) & 0xff) as u8;
@@ -37,11 +41,12 @@ macro_rules! define_be_to_array {
         }
     };
 }
+
 macro_rules! define_le_to_array {
     ($name: ident, $type: ty, $byte_len: expr) => {
         #[inline]
         pub fn $name(val: $type) -> [u8; $byte_len] {
-            assert_eq!(::std::mem::size_of::<$type>(), $byte_len); // size_of isn't a constfn in 1.22
+            assert_eq!(::core::mem::size_of::<$type>(), $byte_len);
             let mut res = [0; $byte_len];
             for i in 0..$byte_len {
                 res[i] = ((val >> i * 8) & 0xff) as u8;
@@ -53,73 +58,97 @@ macro_rules! define_le_to_array {
 
 define_slice_to_be!(slice_to_u32_be, u32);
 define_be_to_array!(u32_to_array_be, u32, 4);
+
 define_slice_to_le!(slice_to_u16_le, u16);
 define_slice_to_le!(slice_to_u32_le, u32);
 define_slice_to_le!(slice_to_u64_le, u64);
+define_slice_to_le!(slice_to_u128_le, u128);
 define_slice_to_le!(slice_to_usize_le, usize);
+define_slice_to_le!(slice_to_isize_le, isize);
+
 define_le_to_array!(u16_to_array_le, u16, 2);
 define_le_to_array!(u32_to_array_le, u32, 4);
 define_le_to_array!(u64_to_array_le, u64, 8);
+define_le_to_array!(u128_to_array_le, u128, 16);
 define_le_to_array!(usize_to_array_le, usize, usize::BITS as usize / 8);
+define_le_to_array!(isize_to_array_le, isize, isize::BITS as usize / 8);
 
 #[inline]
 pub fn i16_to_array_le(val: i16) -> [u8; 2] {
     u16_to_array_le(val as u16)
 }
+
+#[inline]
+pub fn i32_to_array_le(val: i32) -> [u8; 4] {
+    u32_to_array_le(val as u32)
+}
+
+#[inline]
+pub fn i64_to_array_le(val: i64) -> [u8; 8] {
+    u64_to_array_le(val as u64)
+}
+
+#[inline]
+pub fn i128_to_array_le(val: i128) -> [u8; 16] {
+    u128_to_array_le(val as u128)
+}
+
 #[inline]
 pub fn slice_to_i16_le(slice: &[u8]) -> i16 {
     slice_to_u16_le(slice) as i16
 }
+
 #[inline]
 pub fn slice_to_i32_le(slice: &[u8]) -> i32 {
     slice_to_u32_le(slice) as i32
 }
-#[inline]
-pub fn i32_to_array_le(val: i32) -> [u8; 4] {
-    u32_to_array_le(val as u32)
-}
+
 #[inline]
 pub fn slice_to_i64_le(slice: &[u8]) -> i64 {
     slice_to_u64_le(slice) as i64
 }
+
 #[inline]
-pub fn i64_to_array_le(val: i64) -> [u8; 8] {
-    u64_to_array_le(val as u64)
+pub fn slice_to_i128_le(slice: &[u8]) -> i128 {
+    slice_to_u128_le(slice) as i128
 }
+
 #[inline]
 pub fn f64_to_array_le(val: f64) -> [u8; 8] {
-    assert_eq!(::std::mem::size_of::<f64>(), 8);
+    assert_eq!(::core::mem::size_of::<f64>(), 8);
     val.to_le_bytes()
 }
 #[inline]
 pub fn slice_to_f64_le(slice: &[u8; 8]) -> f64 {
-    assert_eq!(slice.len(), ::std::mem::size_of::<f64>());
+    assert_eq!(slice.len(), ::core::mem::size_of::<f64>());
     f64::from_le_bytes(*slice)
 }
 #[inline]
 pub fn f32_to_array_le(val: f32) -> [u8; 4] {
-    assert_eq!(::std::mem::size_of::<f32>(), 4);
+    assert_eq!(::core::mem::size_of::<f32>(), 4);
     val.to_le_bytes()
 }
 #[inline]
 pub fn slice_to_f32_le(slice: &[u8; 4]) -> f32 {
-    assert_eq!(slice.len(), ::std::mem::size_of::<f32>());
+    assert_eq!(slice.len(), ::core::mem::size_of::<f32>());
     f32::from_le_bytes(*slice)
 }
 
 macro_rules! define_chunk_slice_to_int {
     ($name: ident, $type: ty, $converter: ident) => {
         #[inline]
+        #[allow(dead_code)]
         pub fn $name(inp: &[u8], outp: &mut [$type]) {
-            assert_eq!(inp.len(), outp.len() * ::std::mem::size_of::<$type>());
+            assert_eq!(inp.len(), outp.len() * ::core::mem::size_of::<$type>());
             for (outp_val, data_bytes) in
-                outp.iter_mut().zip(inp.chunks(::std::mem::size_of::<$type>()))
+                outp.iter_mut().zip(inp.chunks(::core::mem::size_of::<$type>()))
             {
                 *outp_val = $converter(data_bytes);
             }
         }
     };
 }
+
 define_chunk_slice_to_int!(bytes_to_u64_slice_le, u64, slice_to_u64_le);
 
 #[cfg(test)]

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 281 - 501
src/serial/mod.rs


+ 0 - 12
src/util/cli.rs

@@ -82,18 +82,6 @@ pub fn get_log_config() -> simplelog::Config {
     }
 }
 
-pub const ANSI_LOGO: &str = include_str!("../../contrib/darkfi.ansi");
-
-#[macro_export]
-macro_rules! cli_desc {
-    () => {{
-        let mut desc = env!("CARGO_PKG_DESCRIPTION").to_string();
-        desc.push_str("\n");
-        desc.push_str(darkfi::util::cli::ANSI_LOGO);
-        Box::leak(desc.into_boxed_str()) as &'static str
-    }};
-}
-
 /// This macro is used for a standard way of daemonizing darkfi binaries
 /// with TOML config file configuration, and argument parsing. It also
 /// spawns a multithreaded async executor and passes it into the given

+ 4 - 2
src/util/clock.rs

@@ -1,8 +1,10 @@
-use crate::{util::Timestamp, Result};
-use log::debug;
 use std::{thread, time::Duration};
+
+use log::debug;
 use url::Url;
 
+use crate::{util::time::Timestamp, Result};
+
 pub enum Ticks {
     GENESIS { e: u64, sl: u64 },  //genesis epoch
     NEWSLOT { e: u64, sl: u64 },  // new slot

+ 0 - 9
src/util/derive-internal/Cargo.toml

@@ -1,9 +0,0 @@
-[package]
-name = "darkfi-derive-internal"
-version = "0.3.0"
-edition = "2021"
-
-[dependencies]
-proc-macro2 = "1.0.43"
-quote = "1.0.21"
-syn = {version = "1.0.99", features = ["full", "fold"]}

+ 19 - 13
src/util/mod.rs

@@ -1,28 +1,34 @@
 #[cfg(feature = "async-runtime")]
-pub mod async_serial;
-#[cfg(feature = "async-runtime")]
+/// async utility functions
 pub mod async_util;
 
+/// Command-line interface utilities
 pub mod cli;
+
+/// Lamport clock (TODO: maybe shouldn't be in util module)
 pub mod clock;
-pub mod endian;
+pub use clock::{Clock, Ticks};
+
+/// Filesystem utilities
 pub mod file;
+
+/// Network differentiations (TODO: shouldn't be here in util module))
 pub mod net_name;
+
+/// Parsing helpers
 pub mod parse;
-pub mod path;
-pub mod serial;
-pub mod time;
 
-#[cfg(feature = "async-runtime")]
-pub use async_util::sleep;
+/// Filesystem path utilities
+pub mod path;
 
-pub use net_name::NetworkName;
-pub use parse::{decode_base10, encode_base10};
-pub use path::{expand_path, join_config_path, load_keypair_to_str};
+/// Time utilities (TODO: Util should **not** depend on `net` feature, so remove ntp from here)
+pub mod time;
 
-pub use clock::{Clock, Ticks};
+// =======================
+// TODO: Why is this here?
+// =======================
 use rand::{distributions::Alphanumeric, thread_rng, Rng};
-pub use time::{check_clock, ntp_request, unix_timestamp, NanoTimestamp, Timestamp};
 pub fn gen_id(len: usize) -> String {
     thread_rng().sample_iter(&Alphanumeric).take(len).map(char::from).collect()
 }
+// ======================

+ 11 - 12
src/util/net_name.rs

@@ -1,11 +1,8 @@
-use std::str::FromStr;
+use std::{io, str::FromStr};
 
 use serde::{Deserialize, Serialize};
 
-use crate::{
-    util::serial::{Decodable, Encodable},
-    Result,
-};
+use crate::serial::{Decodable, Encodable};
 
 #[derive(Debug, PartialEq, Eq, Hash, Clone, Serialize, Deserialize)]
 pub enum NetworkName {
@@ -15,8 +12,8 @@ pub enum NetworkName {
     Ethereum,
 }
 
-impl std::fmt::Display for NetworkName {
-    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+impl core::fmt::Display for NetworkName {
+    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
         match self {
             Self::DarkFi => {
                 write!(f, "DarkFi")
@@ -37,7 +34,7 @@ impl std::fmt::Display for NetworkName {
 impl FromStr for NetworkName {
     type Err = crate::Error;
 
-    fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
+    fn from_str(s: &str) -> core::result::Result<Self, Self::Err> {
         match s.to_lowercase().as_str() {
             "drk" | "darkfi" => Ok(NetworkName::DarkFi),
             "sol" | "solana" => Ok(NetworkName::Solana),
@@ -49,7 +46,7 @@ impl FromStr for NetworkName {
 }
 
 impl Encodable for NetworkName {
-    fn encode<S: std::io::Write>(&self, s: S) -> Result<usize> {
+    fn encode<S: io::Write>(&self, s: S) -> core::result::Result<usize, io::Error> {
         let name = self.to_string();
         let len = name.encode(s)?;
         Ok(len)
@@ -57,9 +54,11 @@ impl Encodable for NetworkName {
 }
 
 impl Decodable for NetworkName {
-    fn decode<D: std::io::Read>(mut d: D) -> Result<Self> {
+    fn decode<D: io::Read>(mut d: D) -> core::result::Result<Self, io::Error> {
         let name: String = Decodable::decode(&mut d)?;
-        let name = NetworkName::from_str(&name)?;
-        Ok(name)
+        match NetworkName::from_str(&name) {
+            Ok(v) => Ok(v),
+            Err(e) => Err(io::Error::new(io::ErrorKind::Other, e)),
+        }
     }
 }

+ 1 - 1
src/util/time.rs

@@ -13,7 +13,7 @@ use url::Url;
 
 use crate::{
     rpc::{client::RpcClient, jsonrpc::JsonRequest},
-    util::serial::{SerialDecodable, SerialEncodable},
+    serial::{SerialDecodable, SerialEncodable},
     Error, Result,
 };
 

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio