Move serialization library into its own submodule.

This commit is contained in:
Luther Blissett
2022-09-24 13:59:46 +02:00
parent 2b8912b71a
commit 0e5502f5d5
18 changed files with 799 additions and 851 deletions

261
Cargo.lock generated
View File

@@ -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",
]

View File

@@ -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 = [

View File

@@ -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 {

View File

@@ -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;

View File

@@ -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))
}
};
}
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()))
}
}

View File

@@ -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"]}

View File

@@ -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)
}
}

View File

@@ -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]

View File

@@ -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)
}
}

View File

@@ -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 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)
}
#[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 slice_to_i64_le(slice: &[u8]) -> i64 {
slice_to_u64_le(slice) as i64
}
#[inline]
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)]

File diff suppressed because it is too large Load Diff

View File

@@ -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

View File

@@ -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

View File

@@ -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"]}

View File

@@ -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;
/// Filesystem path utilities
pub mod path;
pub mod serial;
/// Time utilities (TODO: Util should **not** depend on `net` feature, so remove ntp from here)
pub mod time;
#[cfg(feature = "async-runtime")]
pub use async_util::sleep;
pub use net_name::NetworkName;
pub use parse::{decode_base10, encode_base10};
pub use path::{expand_path, join_config_path, load_keypair_to_str};
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()
}
// ======================

View File

@@ -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)),
}
}
}

View File

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