diff --git a/Cargo.lock b/Cargo.lock index 9bb7953a873..b9c936548e8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,7 +1,5 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 - [[package]] name = "abort_on_panic" version = "2.0.0" @@ -10,9 +8,9 @@ checksum = "955f37ac58af2416bac687c8ab66a4ccba282229bd7422a28d2281a5e66a6116" [[package]] name = "addr2line" -version = "0.14.1" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a55f82cfe485775d02112886f4169bde0c5894d75e79ead7eafe7e40a25e45f7" +checksum = "7c0929d69e78dd9bf5408269919fcbcaeb2e35e5d43e5815517cdc6a8e11a423" dependencies = [ "gimli 0.23.0", ] @@ -25,9 +23,9 @@ checksum = "ee2a4ec343196209d6594e19543ae87a39f96d5534d7174822a3ad825dd6ed7e" [[package]] name = "ahash" -version = "0.4.7" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "739f4a8db6605981345c5654f3a85b056ce52f37a39d34da03f25bf2151ea16e" +checksum = "f6789e291be47ace86a60303502173d84af8327e3627ecf334356ee0f87a164c" [[package]] name = "aho-corasick" @@ -49,9 +47,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.38" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afddf7f520a80dbf76e6f50a35bca42a2331ef227a28b3b6dc5c2e2338d114b1" +checksum = "2c0df63cb2955042487fad3aefd2c6e3ae7389ac5dc1beb28921de0b69f779d4" [[package]] name = "arrayref" @@ -67,11 +65,10 @@ checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" [[package]] name = "assert_cmd" -version = "1.0.3" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2475b58cd94eb4f70159f4fd8844ba3b807532fe3131b3373fae060bbe30396" +checksum = "3dc1679af9a1ab4bea16f228b05d18f8363f8327b1fa8db00d2760cfafc6b61e" dependencies = [ - "bstr", "doc-comment", "predicates", "predicates-core", @@ -98,15 +95,15 @@ checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" [[package]] name = "backtrace" -version = "0.3.56" +version = "0.3.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d117600f438b1707d4e4ae15d3595657288f8235a0eb593e80ecc98ab34e1bc" +checksum = "ef5140344c85b01f9bbb4d4b7288a8aa4b3287ccef913a14bcc78a1063623598" dependencies = [ "addr2line", "cfg-if 1.0.0", "libc", "miniz_oxide", - "object", + "object 0.22.0", "rustc-demangle", ] @@ -126,29 +123,6 @@ dependencies = [ "serde", ] -[[package]] -name = "bindgen" -version = "0.56.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2da379dbebc0b76ef63ca68d8fc6e71c0f13e59432e0987e508c1820e6ab5239" -dependencies = [ - "bitflags", - "cexpr", - "clang-sys", - "clap", - "env_logger", - "lazy_static", - "lazycell", - "log", - "peeking_take_while", - "proc-macro2", - "quote", - "regex", - "rustc-hash", - "shlex", - "which 3.1.1", -] - [[package]] name = "bitflags" version = "1.2.1" @@ -181,11 +155,52 @@ dependencies = [ "digest", ] +[[package]] +name = "borsh" +version = "0.8.1" +source = "git+https://github.com/near/borsh-rs?rev=c62cdfbd10d4a17fc877809eba4ccb65e866d5f8#c62cdfbd10d4a17fc877809eba4ccb65e866d5f8" +dependencies = [ + "borsh-derive", + "hashbrown", +] + +[[package]] +name = "borsh-derive" +version = "0.8.1" +source = "git+https://github.com/near/borsh-rs?rev=c62cdfbd10d4a17fc877809eba4ccb65e866d5f8#c62cdfbd10d4a17fc877809eba4ccb65e866d5f8" +dependencies = [ + "borsh-derive-internal", + "borsh-schema-derive-internal", + "proc-macro-crate", + "proc-macro2", + "syn", +] + +[[package]] +name = "borsh-derive-internal" +version = "0.8.1" +source = "git+https://github.com/near/borsh-rs?rev=c62cdfbd10d4a17fc877809eba4ccb65e866d5f8#c62cdfbd10d4a17fc877809eba4ccb65e866d5f8" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "borsh-schema-derive-internal" +version = "0.8.1" +source = "git+https://github.com/near/borsh-rs?rev=c62cdfbd10d4a17fc877809eba4ccb65e866d5f8#c62cdfbd10d4a17fc877809eba4ccb65e866d5f8" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "bstr" -version = "0.2.15" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a40b47ad93e1a5404e6c18dec46b628214fee441c70f4ab5d6942142cc268a3d" +checksum = "473fc6b38233f9af7baa94fb5852dca389e3d95b8e21c8e3719301462c5d9faf" dependencies = [ "lazy_static", "memchr", @@ -204,15 +219,15 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.6.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "099e596ef14349721d9016f6b80dd3419ea1bf289ab9b44df8e4dfd3a005d5d9" +checksum = "2e8c087f005730276d1096a652e92a8bacee2e2472bcc9715a74d2bec38b5820" [[package]] name = "byteorder" -version = "1.4.2" +version = "1.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae44d1a3d5a19df61dd0c8beb138458ac2a53a7ac09eba97d55592540004306b" +checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" [[package]] name = "bytesize" @@ -254,15 +269,6 @@ version = "1.0.66" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c0496836a84f8d0495758516b8621a622beb77c0fed418570e50764093ced48" -[[package]] -name = "cexpr" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4aedb84272dbe89af497cf81375129abda4fc0a9e7c5d317498c15cc30c0d27" -dependencies = [ - "nom 5.1.2", -] - [[package]] name = "cfg-if" version = "0.1.10" @@ -275,17 +281,6 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" -[[package]] -name = "clang-sys" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cb92721cb37482245ed88428f72253ce422b3b4ee169c70a0642521bb5db4cc" -dependencies = [ - "glob", - "libc", - "libloading", -] - [[package]] name = "clap" version = "2.33.3" @@ -355,9 +350,9 @@ dependencies = [ [[package]] name = "const_fn" -version = "0.4.5" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28b9d6de7f49e22cf97ad17fc4036ece69300032f45f78f30b4a4482cdc3f4a6" +checksum = "c478836e029dcef17fb47c89023448c64f781a046e0300e257ad8225ae59afab" [[package]] name = "constant_time_eq" @@ -444,16 +439,16 @@ dependencies = [ [[package]] name = "criterion" -version = "0.3.4" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab327ed7354547cc2ef43cbe20ef68b988e70b4b593cbd66a2a61733123a3d23" +checksum = "70daa7ceec6cf143990669a04c7df13391d55fb27bd4079d252fca774ba244d8" dependencies = [ "atty", "cast", "clap", "criterion-plot", "csv", - "itertools 0.10.0", + "itertools", "lazy_static", "num-traits", "oorandom", @@ -475,7 +470,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e022feadec601fba1649cfa83586381a4ad31c6bf3a9ab7d408118b05dd9889d" dependencies = [ "cast", - "itertools 0.9.0", + "itertools", ] [[package]] @@ -558,9 +553,9 @@ dependencies = [ [[package]] name = "ctor" -version = "0.1.19" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8f45d9ad417bcef4817d614a501ab55cdd96a6fdb24f49aab89a54acfd66b19" +checksum = "7fbaabec2c953050352311293be5c6aba8e141ba19d6811862b232d6fd020484" dependencies = [ "quote", "syn", @@ -663,9 +658,9 @@ checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" [[package]] name = "dynasm" -version = "1.0.1" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d7d1242462849390bb2ad38aeed769499f1afc7383affa2ab0c1baa894c0200" +checksum = "62a59fbab09460c1569eeea9b5e4cf62f13f5198b1c2ba0e5196dd7fdd17cd42" dependencies = [ "bitflags", "byteorder", @@ -678,13 +673,13 @@ dependencies = [ [[package]] name = "dynasmrt" -version = "1.0.1" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1dd4d1d5ca12258cef339a57a7643e8b233a42dea9bb849630ddd9dd7726aa9" +checksum = "85bec3edae2841d37b1c3dc7f3fd403c9061f26e9ffeeee97a3ea909b1bb2ef1" dependencies = [ "byteorder", "dynasm", - "memmap2", + "memmap", ] [[package]] @@ -695,27 +690,27 @@ checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" [[package]] name = "encoding_rs" -version = "0.8.28" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80df024fbc5ac80f87dfef0d9f5209a252f2a497f7f42944cff24d8253cac065" +checksum = "801bbab217d7f79c0062f4f7205b5d4427c6d1a7bd7aafdd1475f7c59d62b283" dependencies = [ "cfg-if 1.0.0", ] [[package]] name = "enumset" -version = "1.0.4" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf6167d1be7a76696cadccfbdb89e5cb519244a42bab7da5577994579217dcff" +checksum = "3365a51d694a57eb4ee05fb3a7f11353708b1f3f1e9a3da4d003d7fcd1dd5135" dependencies = [ "enumset_derive", ] [[package]] name = "enumset_derive" -version = "0.5.3" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d8a79bce471eb6165aa8ac86ebc8d788543b741eaa15e8b8486591696207d6c" +checksum = "67c0ab0a4d1e54dfbfef7aca606f4501af48235308449c7d985b0bbd2f8393ff" dependencies = [ "darling", "proc-macro2", @@ -723,24 +718,11 @@ dependencies = [ "syn", ] -[[package]] -name = "env_logger" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17392a012ea30ef05a610aa97dfb49496e71c9f676b27879922ea5bdf60d9d3f" -dependencies = [ - "atty", - "humantime", - "log", - "regex", - "termcolor", -] - [[package]] name = "erased-serde" -version = "0.3.13" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0465971a8cc1fa2455c8465aaa377131e1f1cf4983280f474a13e68793aa770c" +checksum = "6ca8b296792113e1500fd935ae487be6e00ce318952a6880555554824d6ebf38" dependencies = [ "serde", ] @@ -763,21 +745,21 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.14" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d34cfa13a63ae058bfa601fe9e313bbdb3746427c1459185464ce0fcf62e1e8" +checksum = "0c122a393ea57648015bf06fbd3d372378992e86b9ff5a7a497b076a28c79efe" dependencies = [ "cfg-if 1.0.0", "libc", - "redox_syscall 0.2.5", + "redox_syscall 0.1.57", "winapi", ] [[package]] name = "flate2" -version = "1.0.20" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd3aec53de10fe96d7d8c565eb17f2c687bb5518a2ec453b5b1252964526abe0" +checksum = "7411863d55df97a419aa64cb4d2f167103ea9d767e2c54a1868b7ac3f6b47129" dependencies = [ "cfg-if 1.0.0", "crc32fast", @@ -800,6 +782,12 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "fuchsia-cprng" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" + [[package]] name = "generational-arena" version = "0.2.8" @@ -831,24 +819,24 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.1.16" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +checksum = "fc587bc0ec293155d5bfa6b9891ec18a1e330c234f896ea47fbada4cadbe47e6" dependencies = [ - "cfg-if 1.0.0", + "cfg-if 0.1.10", "libc", "wasi 0.9.0+wasi-snapshot-preview1", ] [[package]] name = "getrandom" -version = "0.2.2" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9495705279e7140bf035dde1f6e750c162df8b625267cd52cc44e0b156732c8" +checksum = "ee8025cf36f917e6a52cce185b7c7177689b838b7ec138364e50cc2277a56cf4" dependencies = [ - "cfg-if 1.0.0", + "cfg-if 0.1.10", "libc", - "wasi 0.10.2+wasi-snapshot-preview1", + "wasi 0.9.0+wasi-snapshot-preview1", ] [[package]] @@ -898,9 +886,9 @@ dependencies = [ [[package]] name = "half" -version = "1.7.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62aca2aba2d62b4a7f5b33f3712cb1b0692779a56fb510499d5c0aa594daeaf3" +checksum = "d36fab90f82edc3c747f9d438e06cf0a491055896f2a279638bb5beed6c40177" [[package]] name = "hashbrown" @@ -913,18 +901,18 @@ dependencies = [ [[package]] name = "heck" -version = "0.3.2" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cbf45460356b7deeb5e3415b5563308c0a9b057c85e12b06ad551f98d0a6ac" +checksum = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205" dependencies = [ "unicode-segmentation", ] [[package]] name = "hermit-abi" -version = "0.1.18" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "322f4de77956e22ed0e5032c359a0f1273f1f7f0d79bfa3b8ffbc730d7fbcc5c" +checksum = "5aca5565f760fb5b220e499d72710ed156fdb74e631659e99377d9ebfbd13ae8" dependencies = [ "libc", ] @@ -935,12 +923,6 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "644f9158b2f133fd50f5fb3242878846d9eb792e445c893805ff0e3824006e35" -[[package]] -name = "humantime" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" - [[package]] name = "ident_case" version = "1.0.1" @@ -949,9 +931,9 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "indexmap" -version = "1.6.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb1fa934250de4de8aef298d81c729a7d33d8c239daa3a7575e6b92bfc7313b" +checksum = "55e2e4c765aa53a0424761bf9f41aa7a6ac1efa87238f59560640e27fca028f2" dependencies = [ "autocfg", "hashbrown", @@ -996,20 +978,19 @@ dependencies = [ "lazy_static", "predicates", "regex", - "rustc_version 0.3.3", + "rustc_version 0.3.0", "target-lexicon", "tempfile", ] [[package]] name = "inline-c-macro" -version = "0.1.5" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17f5621ec7adacda881d7c2826c064f5c29c72fd44333f97df61b458a583ae15" +checksum = "18417ebfdcd2ffc446b55558a66ce4e1d3a7127af7889a1014288aabc8dcbf2d" dependencies = [ "proc-macro2", "quote", - "rustc_version 0.3.3", ] [[package]] @@ -1023,9 +1004,9 @@ dependencies = [ [[package]] name = "inventory" -version = "0.1.10" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f0f7efb804ec95e33db9ad49e4252f049e37e8b0a4652e3cd61f7999f2eff7f" +checksum = "fedd49de24d8c263613701406611410687148ae8c37cd6452650b250f753a0dd" dependencies = [ "ctor", "ghost", @@ -1034,9 +1015,9 @@ dependencies = [ [[package]] name = "inventory-impl" -version = "0.1.10" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75c094e94816723ab936484666968f5b58060492e880f3c8d00489a1e244fa51" +checksum = "ddead8880bc50f57fcd3b5869a7f6ff92570bb4e8f6870c22e2483272f2256da" dependencies = [ "proc-macro2", "quote", @@ -1052,26 +1033,17 @@ dependencies = [ "either", ] -[[package]] -name = "itertools" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37d572918e350e82412fe766d24b15e6682fb2ed2bbe018280caa810397cb319" -dependencies = [ - "either", -] - [[package]] name = "itoa" -version = "0.4.7" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736" +checksum = "dc6f3ad7b9d11a0c00842ff8de1b60ee58661048eb8049ed33c73594f359d7e6" [[package]] name = "js-sys" -version = "0.3.47" +version = "0.3.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cfb73131c35423a367daf8cbd24100af0d077668c8c2943f0e7dd775fef0f65" +checksum = "cf3d7383929f7c9c7c2d0fa596f325832df98c3704f2c60553080f7127a58175" dependencies = [ "wasm-bindgen", ] @@ -1082,12 +1054,6 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" -[[package]] -name = "lazycell" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" - [[package]] name = "leb128" version = "0.2.4" @@ -1096,9 +1062,9 @@ checksum = "3576a87f2ba00f6f106fdfcd16db1d698d648a26ad8e0573cad8537c3c362d2a" [[package]] name = "libc" -version = "0.2.86" +version = "0.2.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7282d924be3275cec7f6756ff4121987bc6481325397dde6ba3e7802b1a8b1c" +checksum = "1482821306169ec4d07f6aca392a4681f66c75c9918aa49641a2595db64053cb" [[package]] name = "libffi" @@ -1123,9 +1089,9 @@ dependencies = [ [[package]] name = "libloading" -version = "0.6.7" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "351a32417a12d5f7e82c368a66781e307834dae04c6ce0cd4456d52989229883" +checksum = "e9367bdfa836b7e3cf895867f7a570283444da90562980ec2263d6e1569b16bc" dependencies = [ "cfg-if 1.0.0", "winapi", @@ -1155,11 +1121,11 @@ dependencies = [ [[package]] name = "log" -version = "0.4.14" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" +checksum = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b" dependencies = [ - "cfg-if 1.0.0", + "cfg-if 0.1.10", ] [[package]] @@ -1189,11 +1155,21 @@ version = "2.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525" +[[package]] +name = "memmap" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6585fd95e7bb50d6cc31e20d4cf9afb4e2ba16c5846fc76793f11218da9c475b" +dependencies = [ + "libc", + "winapi", +] + [[package]] name = "memmap2" -version = "0.2.1" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04e3e85b970d650e2ae6d70592474087051c11c54da7f7b4949725c5735fbcc6" +checksum = "e73be3b7d04a0123e933fea1d50d126cc7196bbc0362c0ce426694f777194eee" dependencies = [ "libc", ] @@ -1209,9 +1185,9 @@ dependencies = [ [[package]] name = "minifb" -version = "0.19.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87b4b6a6da61c3003a41e84ee1f6b56e079f835f4d4fce424fc84092b57ad804" +checksum = "2eb411a297b8f714800f085846cbda55fbd2ae17ecd381f1b4652af0e5bebe63" dependencies = [ "cc", "orbclient", @@ -1267,19 +1243,9 @@ dependencies = [ [[package]] name = "nom" -version = "5.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffb4262d26ed83a1c0a33a38fe2bb15797329c85770da05e6b828ddb782627af" -dependencies = [ - "memchr", - "version_check", -] - -[[package]] -name = "nom" -version = "6.1.2" +version = "6.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7413f999671bd4745a7b624bd370a569fb6bc574b23c83a3c5ed2e453f3d5e2" +checksum = "88034cfd6b4a0d54dd14f4a507eceee36c0b70e5a02236c4e4df571102be17f0" dependencies = [ "memchr", "version_check", @@ -1310,6 +1276,12 @@ dependencies = [ "libc", ] +[[package]] +name = "object" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d3b63360ec3cb337817c2dbd47ab4a0f170d285d8e5a2064600f3def1402397" + [[package]] name = "object" version = "0.23.0" @@ -1340,7 +1312,7 @@ checksum = "ee68c3c79e81d82127e0870f94479675774d34c7ad5b55eecb9c320ef9701187" dependencies = [ "libc", "raw-window-handle", - "redox_syscall 0.2.5", + "redox_syscall 0.2.4", "sdl2", "sdl2-sys", ] @@ -1358,14 +1330,14 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.8.3" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa7a782938e745763fe6907fc6ba86946d72f49fe7e21de074e08128a99fb018" +checksum = "d7c6d9b8427445284a09c55be860a15855ab580a417ccad9da88f5a06787ced0" dependencies = [ "cfg-if 1.0.0", "instant", "libc", - "redox_syscall 0.2.5", + "redox_syscall 0.1.57", "smallvec", "winapi", ] @@ -1376,12 +1348,6 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c5d65c4d95931acda4498f675e332fcbdc9a06705cd07086c510e9b6009cd1c1" -[[package]] -name = "peeking_take_while" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" - [[package]] name = "pest" version = "2.1.3" @@ -1393,9 +1359,9 @@ dependencies = [ [[package]] name = "pin-project-lite" -version = "0.2.4" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439697af366c49a6d0a010c56a0d97685bc140ce0d377b13a2ea2aa42d64a827" +checksum = "6b063f57ec186e6140e2b8b6921e5f1bd89c7356dda5b33acc5401203ca6131c" [[package]] name = "pkg-config" @@ -1411,32 +1377,16 @@ checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" [[package]] name = "plotters" -version = "0.3.0" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45ca0ae5f169d0917a7c7f5a9c1a3d3d9598f18f529dd2b8373ed988efea307a" +checksum = "0d1685fbe7beba33de0330629da9d955ac75bd54f33d7b79f9a895590124f6bb" dependencies = [ + "js-sys", "num-traits", - "plotters-backend", - "plotters-svg", "wasm-bindgen", "web-sys", ] -[[package]] -name = "plotters-backend" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b07fffcddc1cb3a1de753caa4e4df03b79922ba43cf882acc1bdd7e8df9f4590" - -[[package]] -name = "plotters-svg" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b38a02e23bd9604b842a812063aec4ef702b57989c37b655254bb61c471ad211" -dependencies = [ - "plotters-backend", -] - [[package]] name = "ppv-lite86" version = "0.2.10" @@ -1445,9 +1395,9 @@ checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" [[package]] name = "predicates" -version = "1.0.7" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eeb433456c1a57cc93554dea3ce40b4c19c4057e41c55d4a0f3d84ea71c325aa" +checksum = "96bfead12e90dccead362d62bb2c90a5f6fc4584963645bc7f71a735e0b0735a" dependencies = [ "difference", "float-cmp", @@ -1458,20 +1408,29 @@ dependencies = [ [[package]] name = "predicates-core" -version = "1.0.2" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57e35a3326b75e49aa85f5dc6ec15b41108cf5aee58eabb1f274dd18b73c2451" +checksum = "06075c3a3e92559ff8929e7a280684489ea27fe44805174c3ebd9328dcb37178" [[package]] name = "predicates-tree" -version = "1.0.2" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15f553275e5721409451eb85e15fd9a860a6e5ab4496eb215987502b5f5391f2" +checksum = "8e63c4859013b38a76eca2414c64911fba30def9e3202ac461a2d22831220124" dependencies = [ "predicates-core", "treeline", ] +[[package]] +name = "proc-macro-crate" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" +dependencies = [ + "toml", +] + [[package]] name = "proc-macro-error" version = "1.0.4" @@ -1507,13 +1466,39 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.9" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7" +checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37" dependencies = [ "proc-macro2", ] +[[package]] +name = "rand" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" +dependencies = [ + "fuchsia-cprng", + "libc", + "rand_core 0.3.1", + "rdrand", + "winapi", +] + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.15", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc 0.2.0", +] + [[package]] name = "rand" version = "0.8.3" @@ -1521,9 +1506,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ef9e7e66b4468674bfcb0c81af8b7fa0bb154fa9f28eb840da5c447baeb8d7e" dependencies = [ "libc", - "rand_chacha", - "rand_core", - "rand_hc", + "rand_chacha 0.3.0", + "rand_core 0.6.2", + "rand_hc 0.3.0", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", ] [[package]] @@ -1533,7 +1528,31 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e12735cf05c9e10bf21534da50a147b924d555dc7a547c42e6bb2d5b6017ae0d" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.6.2", +] + +[[package]] +name = "rand_core" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" +dependencies = [ + "rand_core 0.4.2", +] + +[[package]] +name = "rand_core" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.15", ] [[package]] @@ -1542,7 +1561,16 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34cf66eb183df1c5876e2dcf6b13d57340741e8dc255b48e40a26de954d06ae7" dependencies = [ - "getrandom 0.2.2", + "getrandom 0.2.0", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", ] [[package]] @@ -1551,7 +1579,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3190ef7066a446f2e7f42e239d161e905420ccab01eb967c9eb27d21b2322a73" dependencies = [ - "rand_core", + "rand_core 0.6.2", ] [[package]] @@ -1588,6 +1616,15 @@ dependencies = [ "num_cpus", ] +[[package]] +name = "rdrand" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" +dependencies = [ + "rand_core 0.3.1", +] + [[package]] name = "redox_syscall" version = "0.1.57" @@ -1596,9 +1633,9 @@ checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" [[package]] name = "redox_syscall" -version = "0.2.5" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94341e4e44e24f6b591b59e47a8a027df12e008d73fd5672dbea9cc22f4507d9" +checksum = "05ec8ca9416c5ea37062b502703cd7fcb207736bc294f6e0cf367ac6fc234570" dependencies = [ "bitflags", ] @@ -1609,7 +1646,7 @@ version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "de0737333e7a9502c789a36d7c7fa6092a49895d4faa31ca5df163857ded2e9d" dependencies = [ - "getrandom 0.1.16", + "getrandom 0.1.15", "redox_syscall 0.1.57", "rust-argon2", ] @@ -1633,9 +1670,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.4.3" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9251239e129e16308e70d853559389de218ac275b515068abc96829d05b948a" +checksum = "38cf2c13ed4745de91a5eb834e11c00bcc3709e773173b2ce4c56c9fbde04b9c" dependencies = [ "aho-corasick", "memchr", @@ -1654,9 +1691,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.22" +version = "0.6.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5eb417147ba9860a96cfe72a0b93bf88fee1744b5636ec99ab20c1aa9376581" +checksum = "3b181ba2dcf07aaccad5448e8ead58db5b742cf85dfe035e2227f137a539a189" [[package]] name = "region" @@ -1714,9 +1751,9 @@ dependencies = [ [[package]] name = "rustc_version" -version = "0.3.3" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" +checksum = "65c94201b44764d6d1f7e37c15a8289ed55e546c1762c7f1d57f616966e0c181" dependencies = [ "semver 0.11.0", ] @@ -1765,9 +1802,9 @@ dependencies = [ [[package]] name = "scroll_derive" -version = "0.10.5" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aaaae8f38bb311444cfb7f1979af0bc9240d95795f75f9ceddf6a59b79ceffa0" +checksum = "b12bd20b94c7cdfda8c7ba9b92ad0d9a56e3fa018c25fca83b51aa664c9b4c0d" dependencies = [ "proc-macro2", "quote", @@ -1817,7 +1854,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" dependencies = [ - "semver-parser 0.10.2", + "semver-parser 0.10.1", ] [[package]] @@ -1828,18 +1865,18 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "semver-parser" -version = "0.10.2" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" +checksum = "42ef146c2ad5e5f4b037cd6ce2ebb775401729b19a82040c1beac9d36c7d1428" dependencies = [ "pest", ] [[package]] name = "serde" -version = "1.0.123" +version = "1.0.118" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92d5161132722baa40d802cc70b15262b98258453e85e5d1d365c757c73869ae" +checksum = "06c64263859d87aa2eb554587e2d23183398d617427327cf2b3d0ed8c69e4800" dependencies = [ "serde_derive", ] @@ -1865,9 +1902,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.123" +version = "1.0.118" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9391c295d64fc0abb2c556bad848f33cb8296276b1ad2677d1ae1ace4f258f31" +checksum = "c84d3526699cd55261af4b941e4e725444df67aa4f9e6a3564f18030d12672df" dependencies = [ "proc-macro2", "quote", @@ -1876,21 +1913,15 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.62" +version = "1.0.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea1c6153794552ea7cf7cf63b1231a25de00ec90db326ba6264440fa08e31486" +checksum = "1500e84d27fe482ed1dc791a56eddc2f230046a040fa908c08bda1d9fb615779" dependencies = [ "itoa", "ryu", "serde", ] -[[package]] -name = "shlex" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2" - [[package]] name = "smallvec" version = "1.6.1" @@ -1899,12 +1930,13 @@ checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" [[package]] name = "socket2" -version = "0.3.19" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e" +checksum = "2c29947abdee2a218277abeca306f25789c938e500ea5a9d4b12a5a504466902" dependencies = [ "cfg-if 1.0.0", "libc", + "redox_syscall 0.1.57", "winapi", ] @@ -1952,15 +1984,15 @@ dependencies = [ [[package]] name = "subtle" -version = "2.4.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e81da0851ada1f3e9d4312c704aa4f8806f0f9d69faaf8df2f3464b4a9437c2" +checksum = "343f3f510c2915908f155e94f17220b19ccfacf2a64a2a5d8004f2c3e311e7fd" [[package]] name = "syn" -version = "1.0.60" +version = "1.0.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c700597eca8a5a762beb35753ef6b94df201c81cca676604f547495a0d7f0081" +checksum = "9a2af957a63d6bd42255c359c93d9bfdb97076bd3b820897ce55ffbfbf107f44" dependencies = [ "proc-macro2", "quote", @@ -1984,16 +2016,26 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ee5a98e506fb7231a304c3a1bd7c132a55016cf65001e0282480665870dfcb9" +[[package]] +name = "tempdir" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8" +dependencies = [ + "rand 0.4.6", + "remove_dir_all", +] + [[package]] name = "tempfile" -version = "3.2.0" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22" +checksum = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9" dependencies = [ - "cfg-if 1.0.0", + "cfg-if 0.1.10", "libc", - "rand", - "redox_syscall 0.2.5", + "rand 0.7.3", + "redox_syscall 0.1.57", "remove_dir_all", "winapi", ] @@ -2008,15 +2050,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "termcolor" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4" -dependencies = [ - "winapi-util", -] - [[package]] name = "test-generator" version = "0.1.0" @@ -2047,18 +2080,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.23" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76cc616c6abf8c8928e2fdcc0dbfab37175edd8fb49a4641066ad1364fdab146" +checksum = "0e9ae34b84616eedaaf1e9dd6026dbe00dcafa92aa0c8077cb69df1fcfe5e53e" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.23" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9be73a2caec27583d0046ef3796c3794f868a5bc813db689eed00c7631275cd1" +checksum = "9ba20f23e85b10754cd195504aebf6a27e2e6cbe28c17778a0c930724628dd56" dependencies = [ "proc-macro2", "quote", @@ -2067,28 +2100,29 @@ dependencies = [ [[package]] name = "thread_local" -version = "1.1.3" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8018d24e04c95ac8790716a5987d0fec4f8b27249ffa0f7d33f1369bdfb88cbd" +checksum = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14" dependencies = [ - "once_cell", + "lazy_static", ] [[package]] name = "time" -version = "0.1.43" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438" +checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" dependencies = [ "libc", + "wasi 0.10.0+wasi-snapshot-preview1", "winapi", ] [[package]] name = "tinytemplate" -version = "1.2.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2ada8616fad06a2d0c455adc530de4ef57605a8120cc65da9653e0e9623ca74" +checksum = "6d3dc76004a03cec1c5932bca4cdc2e39aaa798e3f82363dd94f9adf6098c12f" dependencies = [ "serde", "serde_json", @@ -2096,18 +2130,18 @@ dependencies = [ [[package]] name = "toml" -version = "0.5.8" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" +checksum = "75cf45bb0bef80604d001caaec0d09da99611b3c0fd39d3080468875cdb65645" dependencies = [ "serde", ] [[package]] name = "tracing" -version = "0.1.23" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d40a22fd029e33300d8d89a5cc8ffce18bb7c587662f54629e94c9de5487f3" +checksum = "9f47026cdc4080c07e49b37087de021820269d996f581aac150ef9e5583eefe3" dependencies = [ "cfg-if 1.0.0", "log", @@ -2118,9 +2152,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.12" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43f080ea7e4107844ef4766459426fa2d5c1ada2e47edba05dc7fa99d9629f47" +checksum = "80e0ccfc3378da0cce270c946b676a376943f5cd16aeba64568e7939806f4ada" dependencies = [ "proc-macro2", "quote", @@ -2150,9 +2184,9 @@ checksum = "373c8a200f9e67a0c95e62a4f52fbf80c23b4381c05a17845531982fa99e6b33" [[package]] name = "typetag" -version = "0.1.7" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "422619e1a7299befb977a1f6d8932c499f6151dbcafae715193570860cae8f07" +checksum = "83b97b107d25d29de6879ac4f676ac5bfea92bdd01f206e995794493f1fc2e32" dependencies = [ "erased-serde", "inventory", @@ -2163,9 +2197,9 @@ dependencies = [ [[package]] name = "typetag-impl" -version = "0.1.7" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "504f9626fe6cc1c376227864781996668e15c1ff251d222f63ef17f310bf1fec" +checksum = "3f2466fc87b07b800a5060f89ba579d6882f7a03ac21363e4737764aaf9f99f9" dependencies = [ "proc-macro2", "quote", @@ -2259,15 +2293,15 @@ checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" [[package]] name = "wasi" -version = "0.10.2+wasi-snapshot-preview1" +version = "0.10.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" +checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" [[package]] name = "wasm-bindgen" -version = "0.2.70" +version = "0.2.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55c0f7123de74f0dab9b7d00fd614e7b19349cd1e2f5252bbe9b1754b59433be" +checksum = "3cd364751395ca0f68cafb17666eee36b63077fb5ecd972bbcd74c90c4bf736e" dependencies = [ "cfg-if 1.0.0", "wasm-bindgen-macro", @@ -2275,9 +2309,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.70" +version = "0.2.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bc45447f0d4573f3d65720f636bbcc3dd6ce920ed704670118650bcd47764c7" +checksum = "1114f89ab1f4106e5b55e688b828c0ab0ea593a1ea7c094b141b14cbaaec2d62" dependencies = [ "bumpalo", "lazy_static", @@ -2290,9 +2324,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.70" +version = "0.2.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b8853882eef39593ad4174dd26fc9865a64e84026d223f63bb2c42affcbba2c" +checksum = "7a6ac8995ead1f084a8dea1e65f194d0973800c7f571f6edd70adf06ecf77084" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2300,9 +2334,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.70" +version = "0.2.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4133b5e7f2a531fa413b3a1695e925038a05a71cf67e87dafa295cb645a01385" +checksum = "b5a48c72f299d80557c7c62e37e7225369ecc0c963964059509fbafe917c7549" dependencies = [ "proc-macro2", "quote", @@ -2313,9 +2347,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.70" +version = "0.2.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd4945e4943ae02d15c13962b38a5b1e81eadd4b71214eee75af64a4d6a4fd64" +checksum = "7e7811dd7f9398f14cc76efd356f98f03aa30419dea46aa810d71e819fc97158" [[package]] name = "wasmer" @@ -2377,9 +2411,14 @@ name = "wasmer-cache" version = "1.0.2" dependencies = [ "blake3", + "criterion", "hex", + "rand 0.8.3", + "tempdir", "thiserror", "wasmer", + "wasmer-compiler-singlepass", + "wasmer-engine-jit", ] [[package]] @@ -2418,6 +2457,7 @@ dependencies = [ name = "wasmer-compiler" version = "1.0.2" dependencies = [ + "borsh", "enumset", "hashbrown", "serde", @@ -2458,7 +2498,7 @@ dependencies = [ "cc", "goblin", "inkwell", - "itertools 0.9.0", + "itertools", "lazy_static", "libc", "rayon", @@ -2508,7 +2548,7 @@ name = "wasmer-emscripten" version = "1.0.2" dependencies = [ "byteorder", - "getrandom 0.2.2", + "getrandom 0.2.0", "lazy_static", "libc", "log", @@ -2522,6 +2562,7 @@ version = "1.0.2" dependencies = [ "backtrace", "bincode", + "borsh", "lazy_static", "memmap2", "more-asserts", @@ -2553,6 +2594,7 @@ name = "wasmer-engine-jit" version = "1.0.2" dependencies = [ "bincode", + "borsh", "cfg-if 0.1.10", "region", "serde", @@ -2580,7 +2622,7 @@ dependencies = [ "wasmer-object", "wasmer-types", "wasmer-vm", - "which 4.0.2", + "which", ] [[package]] @@ -2622,7 +2664,7 @@ dependencies = [ name = "wasmer-object" version = "1.0.2" dependencies = [ - "object", + "object 0.23.0", "thiserror", "wasmer-compiler", "wasmer-types", @@ -2632,6 +2674,7 @@ dependencies = [ name = "wasmer-types" version = "1.0.2" dependencies = [ + "borsh", "cranelift-entity", "serde", "thiserror", @@ -2642,6 +2685,7 @@ name = "wasmer-vm" version = "1.0.2" dependencies = [ "backtrace", + "borsh", "cc", "cfg-if 0.1.10", "indexmap", @@ -2662,7 +2706,7 @@ dependencies = [ "bincode", "byteorder", "generational-arena", - "getrandom 0.2.2", + "getrandom 0.2.0", "libc", "serde", "thiserror", @@ -2710,7 +2754,7 @@ dependencies = [ "criterion", "glob", "lazy_static", - "rustc_version 0.3.3", + "rustc_version 0.3.0", "tempfile", "test-generator", "wasmer", @@ -2748,20 +2792,20 @@ dependencies = [ [[package]] name = "wast" -version = "33.0.0" +version = "28.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d04fe175c7f78214971293e7d8875673804e736092206a3a4544dbc12811c1b" +checksum = "9c0586061bfacc035034672c8d760802b428ab4c80a92e2a392425c516df9be1" dependencies = [ "leb128", ] [[package]] name = "wat" -version = "1.0.34" +version = "1.0.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ec9c6ee01ae07a26adadcdfed22c7a97e0b8cbee9c06e0e96076ece5aeb5cfe" +checksum = "c06d55b5ec4f9d9396fa99abaafa0688597395e57827dffd89731412ae90c9bf" dependencies = [ - "wast 33.0.0", + "wast 28.0.0", ] [[package]] @@ -2836,23 +2880,14 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.47" +version = "0.3.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c40dc691fc48003eba817c38da7113c15698142da971298003cac3ef175680b3" +checksum = "222b1ef9334f92a21d3fb53dc3fd80f30836959a90f9274a626d7e06315ba3c3" dependencies = [ "js-sys", "wasm-bindgen", ] -[[package]] -name = "which" -version = "3.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d011071ae14a2f6671d0b74080ae0cd8ebf3a6f8c9589a2cd45f23126fe29724" -dependencies = [ - "libc", -] - [[package]] name = "which" version = "4.0.2" @@ -2921,7 +2956,7 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3a9a231574ae78801646617cefd13bfe94be907c0e4fa979cfd8b770aa3c5d08" dependencies = [ - "nom 6.1.2", + "nom", ] [[package]] @@ -2937,11 +2972,10 @@ dependencies = [ [[package]] name = "xkbcommon-sys" -version = "0.7.5" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59a001b79d45b0b4541c228a501177f2b35db976bf7ee3f7fce8fa2381554ab5" +checksum = "fa434980dca02ebf28795d71e570dbb78316d095a228707efd6117bf8246d78b" dependencies = [ - "bindgen", "libc", "pkg-config", ] diff --git a/lib/cache/Cargo.toml b/lib/cache/Cargo.toml index 932fbb71459..dea167f40db 100644 --- a/lib/cache/Cargo.toml +++ b/lib/cache/Cargo.toml @@ -15,3 +15,14 @@ wasmer = { path = "../api", version = "1.0.2", default-features = false } hex = "0.4" thiserror = "1" blake3 = "0.3" + +[dev-dependencies] +criterion = "0.3" +tempdir = "0.3.7" +rand = "0.8.3" +wasmer-compiler-singlepass = { path = "../compiler-singlepass", version = "1.0.2" } +wasmer-engine-jit = { path = "../engine-jit", version = "1.0.2" } + +[[bench]] +name = "bench_filesystem_cache" +harness = false \ No newline at end of file diff --git a/lib/cache/benches/bench_filesystem_cache.rs b/lib/cache/benches/bench_filesystem_cache.rs new file mode 100644 index 00000000000..90187e4c2f9 --- /dev/null +++ b/lib/cache/benches/bench_filesystem_cache.rs @@ -0,0 +1,51 @@ +use criterion::{black_box, criterion_group, criterion_main, Criterion}; +use tempdir::TempDir; +use wasmer_cache::{FileSystemCache, Hash}; +use rand::{thread_rng, Rng}; +use rand::distributions::Alphanumeric; +use wasmer_compiler_singlepass::Singlepass; +use wasmer::{Module, Store}; +use wasmer_cache::Cache; +use wasmer_engine_jit::JIT; + +fn random_key() -> Hash { + Hash::new(rand::thread_rng().gen::<[u8; 32]>()) +} + +pub fn store_cache(c: &mut Criterion) { + let tmp_dir = TempDir::new("wasmer-cache-bench").unwrap(); + let mut fs_cache = FileSystemCache::new(tmp_dir.path()).unwrap(); + let compiler = Singlepass::default(); + let store = Store::new(&JIT::new(compiler).engine()); + let module = Module::new(&store, std::fs::read("../../lib/c-api/tests/assets/qjs.wasm").unwrap()).unwrap(); + + c.bench_function("store module in filesystem cache", |b| { + b.iter(|| { + let key = random_key(); + fs_cache.store(key, &module).unwrap() + }) + }); +} + +pub fn load_cache(c: &mut Criterion) { + let tmp_dir = TempDir::new("wasmer-cache-bench").unwrap(); + let mut fs_cache = FileSystemCache::new(tmp_dir.path()).unwrap(); + let compiler = Singlepass::default(); + let store = Store::new(&JIT::new(compiler).engine()); + let module = Module::new(&store, std::fs::read("../../lib/c-api/tests/assets/qjs.wasm").unwrap()).unwrap(); + let key = Hash::new([0u8; 32]); + fs_cache.store(key, &module).unwrap(); + + c.bench_function("load module in filesystem cache", |b| { + b.iter(|| { + unsafe { fs_cache.load(&store, key.clone()).unwrap() } + }) + }); +} + +criterion_group! { + name = benches; + config = Criterion::default().sample_size(300); + targets = store_cache, load_cache +} +criterion_main!(benches); \ No newline at end of file diff --git a/lib/compiler/Cargo.toml b/lib/compiler/Cargo.toml index 92625b684b6..83dbe2b0a3c 100644 --- a/lib/compiler/Cargo.toml +++ b/lib/compiler/Cargo.toml @@ -20,10 +20,11 @@ hashbrown = { version = "0.9", optional = true } serde = { version = "1.0", features = ["derive"], optional = true } thiserror = "1.0" serde_bytes = { version = "0.11", optional = true } -smallvec = "1.6" +smallvec = "1.6" +borsh = { git = "https://github.com/near/borsh-rs", rev = "c62cdfbd10d4a17fc877809eba4ccb65e866d5f8", optional = true } [features] -default = ["std", "enable-serde"] +default = ["std", "enable-serde", "enable-borsh"] # This feature is for compiler implementors, it enables using `Compiler` and # `CompilerConfig`, as well as the included wasmparser. # Disable this feature if you just want a headless engine. @@ -31,6 +32,7 @@ translator = ["wasmparser"] std = ["wasmer-types/std"] core = ["hashbrown", "wasmer-types/core"] enable-serde = ["serde", "serde_bytes", "wasmer-types/enable-serde"] +enable-borsh = ["borsh"] [badges] maintenance = { status = "experimental" } diff --git a/lib/compiler/src/address_map.rs b/lib/compiler/src/address_map.rs index 40d37a073f6..07b959e3e74 100644 --- a/lib/compiler/src/address_map.rs +++ b/lib/compiler/src/address_map.rs @@ -3,11 +3,14 @@ use crate::lib::std::vec::Vec; use crate::sourceloc::SourceLoc; +#[cfg(feature = "enable-borsh")] +use borsh::{BorshDeserialize, BorshSerialize}; #[cfg(feature = "enable-serde")] use serde::{Deserialize, Serialize}; /// Single source location to generated address mapping. #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] +#[cfg_attr(feature = "enable-borsh", derive(BorshSerialize, BorshDeserialize))] #[derive(Debug, Clone, PartialEq, Eq)] pub struct InstructionAddressMap { /// Original source location. @@ -22,6 +25,7 @@ pub struct InstructionAddressMap { /// Function and its instructions addresses mappings. #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] +#[cfg_attr(feature = "enable-borsh", derive(BorshSerialize, BorshDeserialize))] #[derive(Debug, Clone, PartialEq, Eq, Default)] pub struct FunctionAddressMap { /// Instructions maps. diff --git a/lib/compiler/src/function.rs b/lib/compiler/src/function.rs index 6be0ae9ac52..1b3ac3a30a9 100644 --- a/lib/compiler/src/function.rs +++ b/lib/compiler/src/function.rs @@ -12,6 +12,8 @@ use crate::lib::std::vec::Vec; use crate::section::{CustomSection, SectionIndex}; use crate::trap::TrapInformation; use crate::{CompiledFunctionUnwindInfo, FunctionAddressMap, JumpTableOffsets, Relocation}; +#[cfg(feature = "enable-borsh")] +use borsh::{BorshDeserialize, BorshSerialize}; #[cfg(feature = "enable-serde")] use serde::{Deserialize, Serialize}; use wasmer_types::entity::PrimaryMap; @@ -22,6 +24,7 @@ use wasmer_types::{FunctionIndex, LocalFunctionIndex, SignatureIndex}; /// This structure is only used for reconstructing /// the frame information after a `Trap`. #[cfg_attr(feature = "enable-serde", derive(Deserialize, Serialize))] +#[cfg_attr(feature = "enable-borsh", derive(BorshSerialize, BorshDeserialize))] #[derive(Debug, Clone, PartialEq, Eq, Default)] pub struct CompiledFunctionFrameInfo { /// The traps (in the function body). @@ -35,6 +38,7 @@ pub struct CompiledFunctionFrameInfo { /// The function body. #[cfg_attr(feature = "enable-serde", derive(Deserialize, Serialize))] +#[cfg_attr(feature = "enable-borsh", derive(BorshSerialize, BorshDeserialize))] #[derive(Debug, Clone, PartialEq, Eq)] pub struct FunctionBody { /// The function body bytes. @@ -79,6 +83,7 @@ pub type CustomSections = PrimaryMap; /// In the future this structure may also hold other information useful /// for debugging. #[cfg_attr(feature = "enable-serde", derive(Deserialize, Serialize))] +#[cfg_attr(feature = "enable-borsh", derive(BorshSerialize, BorshDeserialize))] #[derive(Debug, PartialEq, Eq, Clone)] pub struct Dwarf { /// The section index in the [`Compilation`] that corresponds to the exception frames. diff --git a/lib/compiler/src/jump_table.rs b/lib/compiler/src/jump_table.rs index 19da678c77a..9a848cff96b 100644 --- a/lib/compiler/src/jump_table.rs +++ b/lib/compiler/src/jump_table.rs @@ -5,6 +5,8 @@ //! [Learn more](https://en.wikipedia.org/wiki/Branch_table). use super::CodeOffset; +#[cfg(feature = "enable-borsh")] +use borsh::{BorshDeserialize, BorshSerialize}; #[cfg(feature = "enable-serde")] use serde::{Deserialize, Serialize}; use wasmer_types::entity::{entity_impl, SecondaryMap}; @@ -14,6 +16,7 @@ use wasmer_types::entity::{entity_impl, SecondaryMap}; /// `JumpTable`s are used for indirect branching and are specialized for dense, /// 0-based jump offsets. #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] +#[cfg_attr(feature = "enable-borsh", derive(BorshSerialize, BorshDeserialize))] #[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)] pub struct JumpTable(u32); diff --git a/lib/compiler/src/module.rs b/lib/compiler/src/module.rs index dacbdf3560a..ab1d511cdad 100644 --- a/lib/compiler/src/module.rs +++ b/lib/compiler/src/module.rs @@ -1,6 +1,10 @@ use crate::lib::std::sync::Arc; +#[cfg(feature = "enable-borsh")] +use borsh::{BorshDeserialize, BorshSerialize}; #[cfg(feature = "enable-serde")] use serde::{Deserialize, Serialize}; +use std::iter::FromIterator; + use wasmer_types::entity::PrimaryMap; use wasmer_types::{Features, MemoryIndex, TableIndex}; use wasmer_vm::{MemoryStyle, ModuleInfo, TableStyle}; @@ -25,3 +29,33 @@ pub struct CompileModuleInfo { /// The table plans used for compiling. pub table_styles: PrimaryMap, } + +#[cfg(feature = "enable-borsh")] +impl BorshSerialize for CompileModuleInfo { + fn serialize(&self, writer: &mut W) -> std::io::Result<()> { + BorshSerialize::serialize(&self.features, writer)?; + BorshSerialize::serialize(&self.module.as_ref(), writer)?; + BorshSerialize::serialize(&self.memory_styles.values().collect::>(), writer)?; + BorshSerialize::serialize(&self.table_styles.values().collect::>(), writer) + } +} + +#[cfg(feature = "enable-borsh")] +impl BorshDeserialize for CompileModuleInfo { + fn deserialize(buf: &mut &[u8]) -> std::io::Result { + let features: Features = BorshDeserialize::deserialize(buf)?; + let module: ModuleInfo = BorshDeserialize::deserialize(buf)?; + let module = Arc::new(module); + let memory_styles: Vec = BorshDeserialize::deserialize(buf)?; + let memory_styles: PrimaryMap = + PrimaryMap::from_iter(memory_styles); + let table_styles: Vec = BorshDeserialize::deserialize(buf)?; + let table_styles: PrimaryMap = PrimaryMap::from_iter(table_styles); + Ok(Self { + features, + module, + memory_styles, + table_styles, + }) + } +} diff --git a/lib/compiler/src/relocation.rs b/lib/compiler/src/relocation.rs index c0e6306ed6e..6116eafc7f4 100644 --- a/lib/compiler/src/relocation.rs +++ b/lib/compiler/src/relocation.rs @@ -13,6 +13,8 @@ use crate::lib::std::fmt; use crate::lib::std::vec::Vec; use crate::section::SectionIndex; use crate::{Addend, CodeOffset, JumpTable}; +#[cfg(feature = "enable-borsh")] +use borsh::{BorshDeserialize, BorshSerialize}; #[cfg(feature = "enable-serde")] use serde::{Deserialize, Serialize}; use wasmer_types::entity::PrimaryMap; @@ -21,6 +23,7 @@ use wasmer_vm::libcalls::LibCall; /// Relocation kinds for every ISA. #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] +#[cfg_attr(feature = "enable-borsh", derive(BorshSerialize, BorshDeserialize))] #[derive(Copy, Clone, Debug, PartialEq, Eq)] pub enum RelocationKind { /// absolute 4-byte @@ -79,6 +82,7 @@ impl fmt::Display for RelocationKind { /// A record of a relocation to perform. #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] +#[cfg_attr(feature = "enable-borsh", derive(BorshSerialize, BorshDeserialize))] #[derive(Debug, Clone, PartialEq, Eq)] pub struct Relocation { /// The relocation kind. @@ -93,6 +97,7 @@ pub struct Relocation { /// Destination function. Can be either user function or some special one, like `memory.grow`. #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] +#[cfg_attr(feature = "enable-borsh", derive(BorshSerialize, BorshDeserialize))] #[derive(Debug, Copy, Clone, PartialEq, Eq)] pub enum RelocationTarget { /// A relocation to a function defined locally in the wasm (not an imported one). diff --git a/lib/compiler/src/section.rs b/lib/compiler/src/section.rs index 096cbcc8cf7..d9187a399d5 100644 --- a/lib/compiler/src/section.rs +++ b/lib/compiler/src/section.rs @@ -7,12 +7,15 @@ use crate::lib::std::vec::Vec; use crate::Relocation; +#[cfg(feature = "enable-borsh")] +use borsh::{BorshDeserialize, BorshSerialize}; #[cfg(feature = "enable-serde")] use serde::{Deserialize, Serialize}; use wasmer_types::entity::entity_impl; /// Index type of a Section defined inside a WebAssembly `Compilation`. #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] +#[cfg_attr(feature = "enable-borsh", derive(BorshSerialize, BorshDeserialize))] #[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Debug)] pub struct SectionIndex(u32); @@ -22,6 +25,7 @@ entity_impl!(SectionIndex); /// /// Determines how a custom section may be used. #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] +#[cfg_attr(feature = "enable-borsh", derive(BorshSerialize, BorshDeserialize))] #[derive(Debug, Clone, PartialEq, Eq)] pub enum CustomSectionProtection { /// A custom section with read permission. @@ -36,6 +40,7 @@ pub enum CustomSectionProtection { /// This is used so compilers can store arbitrary information /// in the emitted module. #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] +#[cfg_attr(feature = "enable-borsh", derive(BorshSerialize, BorshDeserialize))] #[derive(Debug, Clone, PartialEq, Eq)] pub struct CustomSection { /// Memory protection that applies to this section. @@ -55,6 +60,7 @@ pub struct CustomSection { /// The bytes in the section. #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] +#[cfg_attr(feature = "enable-borsh", derive(BorshSerialize, BorshDeserialize))] #[derive(Debug, Clone, PartialEq, Eq, Default)] pub struct SectionBody(#[cfg_attr(feature = "enable-serde", serde(with = "serde_bytes"))] Vec); diff --git a/lib/compiler/src/sourceloc.rs b/lib/compiler/src/sourceloc.rs index 2964e144d47..ecd99f98fb7 100644 --- a/lib/compiler/src/sourceloc.rs +++ b/lib/compiler/src/sourceloc.rs @@ -9,6 +9,8 @@ use crate::lib::std::fmt; +#[cfg(feature = "enable-borsh")] +use borsh::{BorshDeserialize, BorshSerialize}; #[cfg(feature = "enable-serde")] use serde::{Deserialize, Serialize}; @@ -21,6 +23,7 @@ use serde::{Deserialize, Serialize}; derive(Serialize, Deserialize), serde(transparent) )] +#[cfg_attr(feature = "enable-borsh", derive(BorshSerialize, BorshDeserialize))] #[repr(transparent)] #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub struct SourceLoc(u32); diff --git a/lib/compiler/src/trap.rs b/lib/compiler/src/trap.rs index 058f7e21c2e..6dc742226df 100644 --- a/lib/compiler/src/trap.rs +++ b/lib/compiler/src/trap.rs @@ -1,10 +1,12 @@ use crate::CodeOffset; +use borsh::{BorshDeserialize, BorshSerialize}; #[cfg(feature = "enable-serde")] use serde::{Deserialize, Serialize}; use wasmer_vm::TrapCode; /// Information about trap. #[cfg_attr(feature = "enable-serde", derive(Deserialize, Serialize))] +#[cfg_attr(feature = "enable-borsh", derive(BorshSerialize, BorshDeserialize))] #[derive(Clone, Debug, PartialEq, Eq)] pub struct TrapInformation { /// The offset of the trapping instruction in native code. It is relative to the beginning of the function. diff --git a/lib/compiler/src/unwind.rs b/lib/compiler/src/unwind.rs index 30949281477..deddded35cd 100644 --- a/lib/compiler/src/unwind.rs +++ b/lib/compiler/src/unwind.rs @@ -6,6 +6,8 @@ //! //! [Learn more](https://en.wikipedia.org/wiki/Call_stack). use crate::lib::std::vec::Vec; +#[cfg(feature = "enable-borsh")] +use borsh::{BorshDeserialize, BorshSerialize}; #[cfg(feature = "enable-serde")] use serde::{Deserialize, Serialize}; @@ -17,6 +19,7 @@ use serde::{Deserialize, Serialize}; /// /// [unwind info]: https://docs.microsoft.com/en-us/cpp/build/exception-handling-x64?view=vs-2019 #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] +#[cfg_attr(feature = "enable-borsh", derive(BorshSerialize, BorshDeserialize))] #[derive(Debug, Clone, PartialEq, Eq)] pub enum CompiledFunctionUnwindInfo { /// Windows UNWIND_INFO. diff --git a/lib/engine-jit/Cargo.toml b/lib/engine-jit/Cargo.toml index a4d1c6f90d0..482f177d236 100644 --- a/lib/engine-jit/Cargo.toml +++ b/lib/engine-jit/Cargo.toml @@ -21,6 +21,7 @@ serde = { version = "1.0", features = ["derive", "rc"] } serde_bytes = { version = "0.11" } bincode = "1.3" cfg-if = "0.1" +borsh = { git = "https://github.com/near/borsh-rs", rev = "c62cdfbd10d4a17fc877809eba4ccb65e866d5f8" } [target.'cfg(target_os = "windows")'.dependencies] winapi = { version = "0.3", features = ["winnt", "impl-default"] } diff --git a/lib/engine-jit/src/artifact.rs b/lib/engine-jit/src/artifact.rs index e9d91e10bdc..8433b800efb 100644 --- a/lib/engine-jit/src/artifact.rs +++ b/lib/engine-jit/src/artifact.rs @@ -6,6 +6,7 @@ use crate::link::link_module; #[cfg(feature = "compiler")] use crate::serialize::SerializableCompilation; use crate::serialize::SerializableModule; +use borsh::{BorshDeserialize, BorshSerialize}; use std::sync::{Arc, Mutex}; use wasmer_compiler::{CompileError, Features, Triple}; #[cfg(feature = "compiler")] @@ -140,12 +141,10 @@ impl JITArtifact { )); } - let inner_bytes = &bytes[Self::MAGIC_HEADER.len()..]; - + let mut inner_bytes = &bytes[Self::MAGIC_HEADER.len()..]; // let r = flexbuffers::Reader::get_root(bytes).map_err(|e| DeserializeError::CorruptedBinary(format!("{:?}", e)))?; // let serializable = SerializableModule::deserialize(r).map_err(|e| DeserializeError::CorruptedBinary(format!("{:?}", e)))?; - - let serializable: SerializableModule = bincode::deserialize(inner_bytes) + let serializable: SerializableModule = BorshDeserialize::deserialize(&mut inner_bytes) .map_err(|e| DeserializeError::CorruptedBinary(format!("{:?}", e)))?; Self::from_parts(&mut jit.inner_mut(), serializable).map_err(DeserializeError::Compiler) @@ -315,9 +314,8 @@ impl Artifact for JITArtifact { // let mut s = flexbuffers::FlexbufferSerializer::new(); // self.serializable.serialize(&mut s).map_err(|e| SerializeError::Generic(format!("{:?}", e))); // Ok(s.take_buffer()) - let bytes = bincode::serialize(&self.serializable) + let bytes = BorshSerialize::try_to_vec(&self.serializable) .map_err(|e| SerializeError::Generic(format!("{:?}", e)))?; - // Prepend the header. let mut serialized = Self::MAGIC_HEADER.to_vec(); serialized.extend(bytes); diff --git a/lib/engine-jit/src/serialize.rs b/lib/engine-jit/src/serialize.rs index 92596ff3362..23cd3cd6307 100644 --- a/lib/engine-jit/src/serialize.rs +++ b/lib/engine-jit/src/serialize.rs @@ -1,4 +1,6 @@ +use borsh::{BorshDeserialize, BorshSerialize}; use serde::{Deserialize, Serialize}; +use std::iter::FromIterator; use wasmer_compiler::{ CompileModuleInfo, CustomSection, Dwarf, FunctionBody, JumpTableOffsets, Relocation, SectionIndex, @@ -37,9 +39,87 @@ pub struct SerializableCompilation { /// Serializable struct that is able to serialize from and to /// a `JITArtifactInfo`. -#[derive(Serialize, Deserialize)] +#[derive(Serialize, Deserialize, BorshSerialize, BorshDeserialize)] pub struct SerializableModule { pub compilation: SerializableCompilation, pub compile_info: CompileModuleInfo, pub data_initializers: Box<[OwnedDataInitializer]>, } + +impl BorshSerialize for SerializableCompilation { + fn serialize(&self, writer: &mut W) -> std::io::Result<()> { + BorshSerialize::serialize(&self.function_bodies.values().collect::>(), writer)?; + BorshSerialize::serialize( + &self.function_relocations.values().collect::>(), + writer, + )?; + // JumpTableOffsets is a SecondaryMap, non trivial to impl borsh + let v = bincode::serialize(&self.function_jt_offsets).map_err(|_| { + std::io::Error::new( + std::io::ErrorKind::InvalidData, + "invalid function_jt_offsets", + ) + })?; + BorshSerialize::serialize(&v, writer)?; + BorshSerialize::serialize( + &self.function_frame_info.values().collect::>(), + writer, + )?; + BorshSerialize::serialize( + &self.function_call_trampolines.values().collect::>(), + writer, + )?; + BorshSerialize::serialize( + &self + .dynamic_function_trampolines + .values() + .collect::>(), + writer, + )?; + BorshSerialize::serialize(&self.custom_sections.values().collect::>(), writer)?; + BorshSerialize::serialize( + &self.custom_section_relocations.values().collect::>(), + writer, + )?; + BorshSerialize::serialize(&self.debug, writer) + } +} + +impl BorshDeserialize for SerializableCompilation { + fn deserialize(buf: &mut &[u8]) -> std::io::Result { + let function_bodies: Vec = BorshDeserialize::deserialize(buf)?; + let function_bodies = PrimaryMap::from_iter(function_bodies); + let function_relocations: Vec> = BorshDeserialize::deserialize(buf)?; + let function_relocations = PrimaryMap::from_iter(function_relocations); + let v: Vec = BorshDeserialize::deserialize(buf)?; + let function_jt_offsets = bincode::deserialize(&v).map_err(|_| { + std::io::Error::new( + std::io::ErrorKind::InvalidData, + "invalid function_jt_offsets", + ) + })?; + let function_frame_info: Vec = + BorshDeserialize::deserialize(buf)?; + let function_frame_info = PrimaryMap::from_iter(function_frame_info); + let function_call_trampolines: Vec = BorshDeserialize::deserialize(buf)?; + let function_call_trampolines = PrimaryMap::from_iter(function_call_trampolines); + let dynamic_function_trampolines: Vec = BorshDeserialize::deserialize(buf)?; + let dynamic_function_trampolines = PrimaryMap::from_iter(dynamic_function_trampolines); + let custom_sections: Vec = BorshDeserialize::deserialize(buf)?; + let custom_sections = PrimaryMap::from_iter(custom_sections); + let custom_section_relocations: Vec> = BorshDeserialize::deserialize(buf)?; + let custom_section_relocations = PrimaryMap::from_iter(custom_section_relocations); + let debug = BorshDeserialize::deserialize(buf)?; + Ok(Self { + function_bodies, + function_relocations, + function_jt_offsets, + function_frame_info, + function_call_trampolines, + dynamic_function_trampolines, + custom_sections, + custom_section_relocations, + debug, + }) + } +} diff --git a/lib/engine/Cargo.toml b/lib/engine/Cargo.toml index eab531b0f6b..9b85572b682 100644 --- a/lib/engine/Cargo.toml +++ b/lib/engine/Cargo.toml @@ -25,6 +25,7 @@ serde = { version = "1.0", features = ["derive", "rc"] } serde_bytes = { version = "0.11" } bincode = "1.3" lazy_static = "1.4" +borsh = { git = "https://github.com/near/borsh-rs", rev = "c62cdfbd10d4a17fc877809eba4ccb65e866d5f8" } [badges] maintenance = { status = "actively-developed" } diff --git a/lib/engine/src/serialize.rs b/lib/engine/src/serialize.rs index d501332c931..0fb719b479b 100644 --- a/lib/engine/src/serialize.rs +++ b/lib/engine/src/serialize.rs @@ -1,3 +1,4 @@ +use borsh::{BorshDeserialize, BorshSerialize}; use serde::de::{Deserializer, Visitor}; use serde::ser::Serializer; use serde::{Deserialize, Serialize}; @@ -5,7 +6,7 @@ use std::fmt; use wasmer_compiler::CompiledFunctionFrameInfo; /// This is the unserialized verison of `CompiledFunctionFrameInfo`. -#[derive(Clone, Serialize, Deserialize)] +#[derive(Clone, Serialize, Deserialize, BorshSerialize, BorshDeserialize)] #[serde(transparent)] #[repr(transparent)] pub struct UnprocessedFunctionFrameInfo { @@ -18,7 +19,7 @@ impl UnprocessedFunctionFrameInfo { pub fn deserialize(&self) -> CompiledFunctionFrameInfo { // let r = flexbuffers::Reader::get_root(&self.bytes).expect("Can't deserialize the info"); // CompiledFunctionFrameInfo::deserialize(r).expect("Can't deserialize the info") - bincode::deserialize(&self.bytes).expect("Can't deserialize the info") + BorshDeserialize::deserialize(&mut self.bytes.as_ref()).expect("Can't deserialize the info") } /// Converts the `CompiledFunctionFrameInfo` to a `UnprocessedFunctionFrameInfo` @@ -28,7 +29,7 @@ impl UnprocessedFunctionFrameInfo { // .serialize(&mut s) // .expect("Can't serialize the info"); // let bytes = s.take_buffer(); - let bytes = bincode::serialize(&processed).expect("Can't serialize the info"); + let bytes = BorshSerialize::try_to_vec(&processed).expect("Can't serialize the info"); Self { bytes } } } @@ -76,6 +77,16 @@ impl Serialize for SerializableFunctionFrameInfo { } } +impl BorshSerialize for SerializableFunctionFrameInfo { + fn serialize(&self, writer: &mut W) -> std::io::Result<()> { + let unprocessed = match self { + Self::Processed(processed) => UnprocessedFunctionFrameInfo::serialize(processed), + Self::Unprocessed(unprocessed) => unprocessed.clone(), + }; + BorshSerialize::serialize(&unprocessed.bytes, writer) + } +} + struct FunctionFrameInfoVisitor; impl<'de> Visitor<'de> for FunctionFrameInfoVisitor { @@ -102,3 +113,9 @@ impl<'de> Deserialize<'de> for SerializableFunctionFrameInfo { )) } } + +impl BorshDeserialize for SerializableFunctionFrameInfo { + fn deserialize(buf: &mut &[u8]) -> std::io::Result { + Ok(Self::Unprocessed(BorshDeserialize::deserialize(buf)?)) + } +} diff --git a/lib/vm/Cargo.toml b/lib/vm/Cargo.toml index 5f1c88d104c..a0c6f4ec090 100644 --- a/lib/vm/Cargo.toml +++ b/lib/vm/Cargo.toml @@ -21,6 +21,7 @@ more-asserts = "0.2" cfg-if = "0.1" backtrace = "0.3" serde = { version = "1.0", features = ["derive", "rc"] } +borsh = { git = "https://github.com/near/borsh-rs", rev = "c62cdfbd10d4a17fc877809eba4ccb65e866d5f8" } [target.'cfg(target_os = "windows")'.dependencies] winapi = { version = "0.3", features = ["winbase", "memoryapi", "errhandlingapi"] } diff --git a/lib/vm/src/libcalls.rs b/lib/vm/src/libcalls.rs index 5267d35a6e5..200cfe34d9d 100644 --- a/lib/vm/src/libcalls.rs +++ b/lib/vm/src/libcalls.rs @@ -38,6 +38,7 @@ use crate::probestack::PROBESTACK; use crate::trap::{raise_lib_trap, Trap, TrapCode}; use crate::vmcontext::VMContext; +use borsh::{BorshDeserialize, BorshSerialize}; use serde::{Deserialize, Serialize}; use std::fmt; use wasmer_types::{DataIndex, ElemIndex, LocalMemoryIndex, MemoryIndex, TableIndex}; @@ -405,7 +406,18 @@ pub static wasmer_probestack: unsafe extern "C" fn() = PROBESTACK; /// The name of a runtime library routine. /// /// This list is likely to grow over time. -#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] +#[derive( + Copy, + Clone, + Debug, + PartialEq, + Eq, + Hash, + Serialize, + Deserialize, + BorshSerialize, + BorshDeserialize, +)] pub enum LibCall { /// ceil.f32 CeilF32, diff --git a/lib/vm/src/memory.rs b/lib/vm/src/memory.rs index 8ab78560584..0e57b4263fd 100644 --- a/lib/vm/src/memory.rs +++ b/lib/vm/src/memory.rs @@ -7,6 +7,7 @@ use crate::mmap::Mmap; use crate::vmcontext::VMMemoryDefinition; +use borsh::{BorshDeserialize, BorshSerialize}; use more_asserts::assert_ge; use serde::{Deserialize, Serialize}; use std::borrow::BorrowMut; @@ -61,7 +62,9 @@ pub enum MemoryError { } /// Implementation styles for WebAssembly linear memory. -#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] +#[derive( + Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, BorshSerialize, BorshDeserialize, +)] pub enum MemoryStyle { /// The actual memory can be resized and moved. Dynamic { diff --git a/lib/vm/src/module.rs b/lib/vm/src/module.rs index 79bb1b41829..806b01f7665 100644 --- a/lib/vm/src/module.rs +++ b/lib/vm/src/module.rs @@ -4,11 +4,13 @@ //! Data structure for representing WebAssembly modules in a //! `wasmer::Module`. +use borsh::{BorshDeserialize, BorshSerialize}; use indexmap::IndexMap; use serde::{Deserialize, Serialize}; use std::collections::HashMap; use std::fmt; use std::iter::ExactSizeIterator; +use std::iter::FromIterator; use std::sync::atomic::{AtomicUsize, Ordering::SeqCst}; use std::sync::Arc; use wasmer_types::entity::{EntityRef, PrimaryMap}; @@ -115,6 +117,117 @@ pub struct ModuleInfo { pub num_imported_globals: usize, } +fn borsh_serialize_index_map< + K: BorshSerialize + core::hash::Hash, + V: BorshSerialize, + W: std::io::Write, +>( + index_map: &IndexMap, + writer: &mut W, +) -> std::io::Result<()> { + BorshSerialize::serialize(&index_map.len(), writer)?; + for (k, v) in index_map { + BorshSerialize::serialize(&k, writer)?; + BorshSerialize::serialize(&v, writer)?; + } + Ok(()) +} + +impl BorshSerialize for ModuleInfo { + fn serialize(&self, writer: &mut W) -> std::io::Result<()> { + BorshSerialize::serialize(&self.name, writer)?; + borsh_serialize_index_map(&self.imports, writer)?; + borsh_serialize_index_map(&self.exports, writer)?; + BorshSerialize::serialize(&self.start_function, writer)?; + BorshSerialize::serialize(&self.table_initializers, writer)?; + BorshSerialize::serialize(&self.passive_elements, writer)?; + let passive_data: Vec<_> = self.passive_data.iter().collect(); + BorshSerialize::serialize(&self.passive_data.len(), writer)?; + for (k, v) in passive_data { + BorshSerialize::serialize(&k, writer)?; + BorshSerialize::serialize(&v.as_ref(), writer)?; + } + BorshSerialize::serialize( + &self.global_initializers.values().collect::>(), + writer, + )?; + BorshSerialize::serialize(&self.function_names, writer)?; + BorshSerialize::serialize(&self.signatures.values().collect::>(), writer)?; + BorshSerialize::serialize(&self.functions.values().collect::>(), writer)?; + BorshSerialize::serialize(&self.tables.values().collect::>(), writer)?; + BorshSerialize::serialize(&self.memories.values().collect::>(), writer)?; + BorshSerialize::serialize(&self.globals.values().collect::>(), writer)?; + borsh_serialize_index_map(&self.custom_sections, writer)?; + let custom_sections_data: Vec<_> = self.custom_sections_data.values().collect(); + BorshSerialize::serialize(&self.custom_sections_data.len(), writer)?; + for v in &custom_sections_data { + BorshSerialize::serialize(&v.as_ref(), writer)?; + } + BorshSerialize::serialize(&self.num_imported_functions, writer)?; + BorshSerialize::serialize(&self.num_imported_tables, writer)?; + BorshSerialize::serialize(&self.num_imported_memories, writer)?; + BorshSerialize::serialize(&self.num_imported_globals, writer) + } +} + +fn borsh_deserialize_index_map( + buf: &mut &[u8], +) -> std::io::Result> { + let len: usize = BorshDeserialize::deserialize(buf)?; + let mut ret = IndexMap::with_capacity(len); + for _ in 0..len { + ret.insert( + BorshDeserialize::deserialize(buf)?, + BorshDeserialize::deserialize(buf)?, + ); + } + Ok(ret) +} + +impl BorshDeserialize for ModuleInfo { + fn deserialize(buf: &mut &[u8]) -> std::io::Result { + let mut ret = Self::new(); + ret.name = BorshDeserialize::deserialize(buf)?; + ret.imports = borsh_deserialize_index_map(buf)?; + ret.exports = borsh_deserialize_index_map(buf)?; + ret.start_function = BorshDeserialize::deserialize(buf)?; + ret.table_initializers = BorshDeserialize::deserialize(buf)?; + ret.passive_elements = BorshDeserialize::deserialize(buf)?; + let len: usize = BorshDeserialize::deserialize(buf)?; + ret.passive_data = HashMap::with_capacity(len); + for _ in 0..len { + let kv: (DataIndex, Vec) = BorshDeserialize::deserialize(buf)?; + ret.passive_data.insert(kv.0, Arc::from(kv.1.as_ref())); + } + let global_initializers: Vec = BorshDeserialize::deserialize(buf)?; + ret.global_initializers = PrimaryMap::from_iter(global_initializers); + ret.function_names = BorshDeserialize::deserialize(buf)?; + let signatures: Vec = BorshDeserialize::deserialize(buf)?; + ret.signatures = PrimaryMap::from_iter(signatures); + let functions: Vec = BorshDeserialize::deserialize(buf)?; + ret.functions = PrimaryMap::from_iter(functions); + let tables: Vec = BorshDeserialize::deserialize(buf)?; + ret.tables = PrimaryMap::from_iter(tables); + let memories: Vec = BorshDeserialize::deserialize(buf)?; + ret.memories = PrimaryMap::from_iter(memories); + let globals: Vec = BorshDeserialize::deserialize(buf)?; + ret.globals = PrimaryMap::from_iter(globals); + ret.custom_sections = borsh_deserialize_index_map(buf)?; + let len: usize = BorshDeserialize::deserialize(buf)?; + let mut custom_sections_data = Vec::with_capacity(len); + for _ in 0..len { + let v: Vec = BorshDeserialize::deserialize(buf)?; + custom_sections_data.push(Arc::from(v.as_ref())); + } + ret.custom_sections_data = PrimaryMap::from_iter(custom_sections_data); + ret.num_imported_functions = BorshDeserialize::deserialize(buf)?; + ret.num_imported_tables = BorshDeserialize::deserialize(buf)?; + ret.num_imported_memories = BorshDeserialize::deserialize(buf)?; + ret.num_imported_globals = BorshDeserialize::deserialize(buf)?; + Ok(ret) + } +} + impl ModuleInfo { /// Allocates the module data structures. pub fn new() -> Self { diff --git a/lib/vm/src/table.rs b/lib/vm/src/table.rs index 66fb0e8a128..032b332e03c 100644 --- a/lib/vm/src/table.rs +++ b/lib/vm/src/table.rs @@ -7,6 +7,7 @@ use crate::trap::{Trap, TrapCode}; use crate::vmcontext::{VMCallerCheckedAnyfunc, VMTableDefinition}; +use borsh::{BorshDeserialize, BorshSerialize}; use serde::{Deserialize, Serialize}; use std::borrow::{Borrow, BorrowMut}; use std::cell::UnsafeCell; @@ -17,7 +18,7 @@ use std::sync::Mutex; use wasmer_types::{TableType, Type as ValType}; /// Implementation styles for WebAssembly tables. -#[derive(Debug, Clone, Hash, Serialize, Deserialize)] +#[derive(Debug, Clone, Hash, Serialize, Deserialize, BorshDeserialize, BorshSerialize)] pub enum TableStyle { /// Signatures are stored in the table and checked in the caller. CallerChecksSignature, diff --git a/lib/vm/src/trap/trapcode.rs b/lib/vm/src/trap/trapcode.rs index 32121fbd08e..36b36a75814 100644 --- a/lib/vm/src/trap/trapcode.rs +++ b/lib/vm/src/trap/trapcode.rs @@ -3,6 +3,7 @@ //! Trap codes describing the reason for a trap. +use borsh::{BorshDeserialize, BorshSerialize}; use core::fmt::{self, Display, Formatter}; use core::str::FromStr; use serde::{Deserialize, Serialize}; @@ -11,7 +12,19 @@ use thiserror::Error; /// A trap code describing the reason for a trap. /// /// All trap instructions have an explicit trap code. -#[derive(Clone, Copy, PartialEq, Eq, Debug, Hash, Serialize, Deserialize, Error)] +#[derive( + Clone, + Copy, + PartialEq, + Eq, + Debug, + Hash, + Serialize, + Deserialize, + Error, + BorshSerialize, + BorshDeserialize, +)] #[repr(u32)] pub enum TrapCode { /// The current stack space was exhausted. diff --git a/lib/wasmer-types/Cargo.toml b/lib/wasmer-types/Cargo.toml index b211d2db48e..7aa750b83e1 100644 --- a/lib/wasmer-types/Cargo.toml +++ b/lib/wasmer-types/Cargo.toml @@ -16,9 +16,11 @@ edition = "2018" cranelift-entity = "0.68" serde = { version = "1.0", features = ["derive"], optional = true, default-features = false } thiserror = "1.0" +borsh = { git = "https://github.com/near/borsh-rs", rev = "c62cdfbd10d4a17fc877809eba4ccb65e866d5f8", optional = true } [features] -default = ["std", "enable-serde"] +default = ["std", "enable-serde", "enable-borsh"] std = ["serde/std"] core = [] enable-serde = ["serde", "cranelift-entity/enable-serde"] +enable-borsh = ["borsh"] \ No newline at end of file diff --git a/lib/wasmer-types/src/features.rs b/lib/wasmer-types/src/features.rs index 557c4e6323d..13ddb4d8bf0 100644 --- a/lib/wasmer-types/src/features.rs +++ b/lib/wasmer-types/src/features.rs @@ -1,3 +1,5 @@ +#[cfg(feature = "enable-borsh")] +use borsh::{BorshDeserialize, BorshSerialize}; #[cfg(feature = "enable-serde")] use serde::{Deserialize, Serialize}; @@ -7,6 +9,7 @@ use serde::{Deserialize, Serialize}; /// [WebAssembly proposal]: https://github.com/WebAssembly/proposals #[derive(Clone, Debug, Eq, PartialEq)] #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] +#[cfg_attr(feature = "enable-borsh", derive(BorshSerialize, BorshDeserialize))] pub struct Features { /// Threads proposal should be enabled pub threads: bool, diff --git a/lib/wasmer-types/src/indexes.rs b/lib/wasmer-types/src/indexes.rs index 7c2247f8eb6..9626a39491f 100644 --- a/lib/wasmer-types/src/indexes.rs +++ b/lib/wasmer-types/src/indexes.rs @@ -1,5 +1,7 @@ //! Helper functions and structures for the translation. use crate::entity::entity_impl; +#[cfg(feature = "enable-borsh")] +use borsh::{BorshDeserialize, BorshSerialize}; use core::u32; #[cfg(feature = "enable-serde")] use serde::{Deserialize, Serialize}; @@ -7,6 +9,7 @@ use serde::{Deserialize, Serialize}; /// Index type of a function defined locally inside the WebAssembly module. #[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Debug)] #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] +#[cfg_attr(feature = "enable-borsh", derive(BorshSerialize, BorshDeserialize))] pub struct LocalFunctionIndex(u32); entity_impl!(LocalFunctionIndex); @@ -25,60 +28,70 @@ entity_impl!(LocalMemoryIndex); /// Index type of a global defined locally inside the WebAssembly module. #[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Debug)] #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] +#[cfg_attr(feature = "enable-borsh", derive(BorshSerialize, BorshDeserialize))] pub struct LocalGlobalIndex(u32); entity_impl!(LocalGlobalIndex); /// Index type of a function (imported or local) inside the WebAssembly module. #[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Debug)] #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] +#[cfg_attr(feature = "enable-borsh", derive(BorshSerialize, BorshDeserialize))] pub struct FunctionIndex(u32); entity_impl!(FunctionIndex); /// Index type of a table (imported or local) inside the WebAssembly module. #[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Debug)] #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] +#[cfg_attr(feature = "enable-borsh", derive(BorshSerialize, BorshDeserialize))] pub struct TableIndex(u32); entity_impl!(TableIndex); /// Index type of a global variable (imported or local) inside the WebAssembly module. #[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Debug)] #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] +#[cfg_attr(feature = "enable-borsh", derive(BorshSerialize, BorshDeserialize))] pub struct GlobalIndex(u32); entity_impl!(GlobalIndex); /// Index type of a linear memory (imported or local) inside the WebAssembly module. #[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Debug)] #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] +#[cfg_attr(feature = "enable-borsh", derive(BorshSerialize, BorshDeserialize))] pub struct MemoryIndex(u32); entity_impl!(MemoryIndex); /// Index type of a signature (imported or local) inside the WebAssembly module. #[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Debug)] #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] +#[cfg_attr(feature = "enable-borsh", derive(BorshSerialize, BorshDeserialize))] pub struct SignatureIndex(u32); entity_impl!(SignatureIndex); /// Index type of a passive data segment inside the WebAssembly module. #[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Debug)] #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] +#[cfg_attr(feature = "enable-borsh", derive(BorshSerialize, BorshDeserialize))] pub struct DataIndex(u32); entity_impl!(DataIndex); /// Index type of a passive element segment inside the WebAssembly module. #[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Debug)] #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] +#[cfg_attr(feature = "enable-borsh", derive(BorshSerialize, BorshDeserialize))] pub struct ElemIndex(u32); entity_impl!(ElemIndex); /// Index type of a custom section inside a WebAssembly module. #[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Debug)] #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] +#[cfg_attr(feature = "enable-borsh", derive(BorshSerialize, BorshDeserialize))] pub struct CustomSectionIndex(u32); entity_impl!(CustomSectionIndex); /// An entity to export. #[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)] #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] +#[cfg_attr(feature = "enable-borsh", derive(BorshSerialize, BorshDeserialize))] pub enum ExportIndex { /// Function export. Function(FunctionIndex), @@ -93,6 +106,7 @@ pub enum ExportIndex { /// An entity to import. #[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)] #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] +#[cfg_attr(feature = "enable-borsh", derive(BorshSerialize, BorshDeserialize))] pub enum ImportIndex { /// Function import. Function(FunctionIndex), diff --git a/lib/wasmer-types/src/initializers.rs b/lib/wasmer-types/src/initializers.rs index 0d47554c502..e49b6ec10af 100644 --- a/lib/wasmer-types/src/initializers.rs +++ b/lib/wasmer-types/src/initializers.rs @@ -1,11 +1,13 @@ use crate::indexes::{FunctionIndex, GlobalIndex, MemoryIndex, TableIndex}; use crate::lib::std::boxed::Box; +#[cfg(feature = "enable-borsh")] +use borsh::{BorshDeserialize, BorshSerialize}; #[cfg(feature = "enable-serde")] use serde::{Deserialize, Serialize}; /// A WebAssembly table initializer. -#[derive(Clone, Debug, Hash, Serialize, Deserialize)] +#[derive(Clone, Debug, Hash, Serialize, Deserialize, BorshSerialize, BorshDeserialize)] pub struct TableInitializer { /// The index of a table to initialize. pub table_index: TableIndex, @@ -21,6 +23,7 @@ pub struct TableInitializer { /// should be performed. #[derive(Clone, Debug)] #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] +#[cfg_attr(feature = "enable-borsh", derive(BorshSerialize, BorshDeserialize))] pub struct DataInitializerLocation { /// The index of the memory to initialize. pub memory_index: MemoryIndex, @@ -47,6 +50,7 @@ pub struct DataInitializer<'data> { /// holding a reference to it #[derive(Debug, Clone)] #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] +#[cfg_attr(feature = "enable-borsh", derive(BorshSerialize, BorshDeserialize))] pub struct OwnedDataInitializer { /// The location where the initialization is to be performed. pub location: DataInitializerLocation, diff --git a/lib/wasmer-types/src/types.rs b/lib/wasmer-types/src/types.rs index 6ed80e73ce5..c6c3c416f32 100644 --- a/lib/wasmer-types/src/types.rs +++ b/lib/wasmer-types/src/types.rs @@ -7,6 +7,8 @@ use crate::lib::std::vec::Vec; use crate::units::Pages; use crate::values::Value; +#[cfg(feature = "enable-borsh")] +use borsh::{BorshDeserialize, BorshSerialize}; #[cfg(feature = "enable-serde")] use serde::{Deserialize, Serialize}; @@ -17,6 +19,7 @@ use serde::{Deserialize, Serialize}; /// A list of all possible value types in WebAssembly. #[derive(Copy, Debug, Clone, Eq, PartialEq, Hash)] #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] +#[cfg_attr(feature = "enable-borsh", derive(BorshSerialize, BorshDeserialize))] pub enum Type { /// Signed 32 bit integer. I32, @@ -58,6 +61,7 @@ impl fmt::Display for Type { #[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)] #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] +#[cfg_attr(feature = "enable-borsh", derive(BorshSerialize, BorshDeserialize))] /// The WebAssembly V128 type pub struct V128(pub(crate) [u8; 16]); @@ -227,6 +231,7 @@ impl ExternType { /// WebAssembly functions can have 0 or more parameters and results. #[derive(Debug, Clone, PartialEq, Eq, Hash)] #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] +#[cfg_attr(feature = "enable-borsh", derive(BorshSerialize, BorshDeserialize))] pub struct FunctionType { /// The parameters of the function params: Box<[Type]>, @@ -312,6 +317,7 @@ impl From<&FunctionType> for FunctionType { /// Indicator of whether a global is mutable or not #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] +#[cfg_attr(feature = "enable-borsh", derive(BorshSerialize, BorshDeserialize))] pub enum Mutability { /// The global is constant and its value does not change Const, @@ -348,6 +354,7 @@ impl From for bool { /// WebAssembly global. #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] +#[cfg_attr(feature = "enable-borsh", derive(BorshSerialize, BorshDeserialize))] pub struct GlobalType { /// The type of the value stored in the global. pub ty: Type, @@ -391,6 +398,7 @@ impl fmt::Display for GlobalType { /// Globals are initialized via the `const` operators or by referring to another import. #[derive(Debug, Clone, Copy)] #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] +#[cfg_attr(feature = "enable-borsh", derive(BorshSerialize, BorshDeserialize))] pub enum GlobalInit { /// An `i32.const`. I32Const(i32), @@ -442,6 +450,7 @@ impl GlobalInit { /// which `call_indirect` can invoke other functions. #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] +#[cfg_attr(feature = "enable-borsh", derive(BorshSerialize, BorshDeserialize))] pub struct TableType { /// The type of data stored in elements of the table. pub ty: Type, @@ -481,6 +490,7 @@ impl fmt::Display for TableType { /// chunks of addressable memory. #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] +#[cfg_attr(feature = "enable-borsh", derive(BorshSerialize, BorshDeserialize))] pub struct MemoryType { /// The minimum number of pages in the memory. pub minimum: Pages, diff --git a/lib/wasmer-types/src/units.rs b/lib/wasmer-types/src/units.rs index 93e9f04d473..70f29072c3f 100644 --- a/lib/wasmer-types/src/units.rs +++ b/lib/wasmer-types/src/units.rs @@ -1,6 +1,8 @@ use crate::lib::std::convert::TryFrom; use crate::lib::std::fmt; use crate::lib::std::ops::{Add, Sub}; +#[cfg(feature = "enable-borsh")] +use borsh::{BorshDeserialize, BorshSerialize}; #[cfg(feature = "enable-serde")] use serde::{Deserialize, Serialize}; use std::convert::TryInto; @@ -21,6 +23,7 @@ pub const WASM_MIN_PAGES: u32 = 0x100; /// Units of WebAssembly pages (as specified to be 65,536 bytes). #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] +#[cfg_attr(feature = "enable-borsh", derive(BorshSerialize, BorshDeserialize))] pub struct Pages(pub u32); impl Pages {